// ----------------------------------
// FRONTOFFICE JS: GLOBAL
// Copyright 2008 - Hireserve Ltd
// ----------------------------------

// v1.0   25/03/2008      lb

// preloading images
var myimages=new Array()
function preloadimages(){
for (i=0;i<preloadimages.arguments.length;i++){
myimages[i]=new Image()
myimages[i].src=preloadimages.arguments[i]
}
}

// global function to add a function to a queue of function to be
// executed when the document is fully loaded
function addLoadEvent(func)
{
  var oldonload = window.onload;
  if (typeof window.onload != 'function')
  {
    window.onload = func;
  }
  else
  {
    window.onload = function()
  {
      oldonload();
      func();
    }
  }
}

// global function to add a function to a queue of function to be
// executed when the document is fully loaded
function addUnLoadEvent(func)
{
  var oldonunload = window.onunload;
  if (typeof window.onunload != 'function')
  {
    window.onunload = func;
  }
  else
  {
    window.onunload = function()
  {
      oldonunload();
      func();
    }
  }
}

// global function corollary to the insertBefore function
function insertAfter(newElement,targetElement)
{
  var parent = targetElement.parentNode;
  if (parent.lastChild == targetElement)
  {
    parent.appendChild(newElement);
  }
  else
  {
    parent.insertBefore(newElement,targetElement.nextSibling);
  }
}

// global function to add a class to an element
function addClass(element,value)
{
  if (!element.className)
  {
    element.className = value;
  }
  else
  {
    newClassName = element.className;
    newClassName+= " ";
    newClassName+= value;
    element.className = newClassName;
  }
}

// highlight page
function highlightPage(menuId,className,tag) {
  if(!document.getElementsByTagName) return false;
  if(!document.getElementById) return false;
  if(!document.getElementById(menuId)) return false;
  if(tag==null) tag = 'A';
  var nav = document.getElementById(menuId);
  var tags = nav.getElementsByTagName(tag);
  var currenturl = window.location.href;
  var enablehighlight = false;
  if(tag=='A') {
    for(var i=0; i<tags.length; i++) {
      var linkurl = tags[i].getAttribute('href');
      var linkclass = tags[i].className;
      if(!enablehighlight && currenturl.indexOf(linkurl) != -1 && currenturl.indexOf('..') == -1 && linkclass.indexOf('nohighlight') == -1) {
   addClass(tags[i],className);
   enablehighlight = true;
      }
    }
  } else {
    for(var i=0; i<tags.length; i++) {
      var links = tags[i].getElementsByTagName('A');
      for(var j=0; j<links.length; j++) {
        var linkurl = links[j].getAttribute('href');
        var linkclass = links[j].className;
        if(!enablehighlight && currenturl.indexOf(linkurl) != -1 && currenturl.indexOf('..') == -1 && linkclass.indexOf('nohighlight') == -1) {
          addClass(tags[i],className);
     enablehighlight = true;
        }
      }
    }
  }
}

// global function to parse values
function parseNameValue(s)
{
  var nv=new Array();
  var arr = s.split(";");
  for(var i=0; i<arr.length; i++)
  {
    var tmp=arr[i].split("=");
  nv[tmp[0].replace(/ /gi, "")]=tmp[1];
  }
  return nv;
}

// global browser sniffer
var exclude=1;
var agt=navigator.userAgent.toLowerCase();
var win=0;var mac=0;var lin=1;
if(agt.indexOf('win')!=-1){win=1;lin=0;}
if(agt.indexOf('mac')!=-1){mac=1;lin=0;}
var lnx=0;if(lin){lnx=1;}
var ice=0;
var ie=0;var ie4=0;var ie5=0;var ie6=0;var com=0;var dcm;
var op5=0;var op6=0;var op7=0;
var ns4=0;var ns6=0;var ns7=0;var mz7=0;var kde=0;var saf=0;
if(typeof navigator.vendor!="undefined" && navigator.vendor=="KDE"){
  var thisKDE=agt;
  var splitKDE=thisKDE.split("konqueror/");
  var aKDE=splitKDE[1].split("; ");
  var KDEn=parseFloat(aKDE[0]);
  if(KDEn>=2.2){
    kde=1;
    ns6=1;
    exclude=0;
    }
  }
else if(agt.indexOf('webtv')!=-1){exclude=1;}
else if(typeof window.opera!="undefined"){
  exclude=0;
  if(/opera[\/ ][5]/.test(agt)){op5=1;}
  if(/opera[\/ ][6]/.test(agt)){op6=1;}
  if(/opera[\/ ][7-9]/.test(agt)){op7=1;}
  }
else if(typeof document.all!="undefined"&&!kde){
  exclude=0;
  ie=1;
  if(typeof document.getElementById!="undefined"){
    ie5=1;
    if(agt.indexOf("msie 6")!=-1){
      ie6=1;
      dcm=document.compatMode;
      if(dcm!="BackCompat"){com=1;}
      }
    }
  else{ie4=1;}
  }
else if(typeof document.getElementById!="undefined"){
  exclude=0;
  if(agt.indexOf("netscape/6")!=-1||agt.indexOf("netscape6")!=-1){ns6=1;}
  else if(agt.indexOf("netscape/7")!=-1||agt.indexOf("netscape7")!=-1){ns6=1;ns7=1;}
  else if(agt.indexOf("gecko")!=-1){ns6=1;mz7=1;}
  if(agt.indexOf("safari")!=-1 || (typeof document.childNodes!="undefined" && typeof document.all=="undefined" && typeof navigator.taintEnabled=="undefined")){mz7=0;ns6=1;saf=1;}
  }
else if((agt.indexOf('mozilla')!=-1)&&(parseInt(navigator.appVersion)>=4)){
  exclude=0;
  ns4=1;
  if(typeof navigator.mimeTypes['*']=="undefined"){
    exclude=1;
    ns4=0;
    }
  }
if(agt.indexOf('escape')!=-1){exclude=1;ns4=0;}
if(typeof navigator.__ice_version!="undefined"){exclude=1;ie4=0;}

// global Hide/Show
function selectHide() {
  var o = document.getElementById("cntWrapper").getElementsByTagName("SELECT")
  for(var i=0;i<o.length;i++) {
    o[i].style.visibility="hidden";
  }
}

function getUrlParam(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function selectShow() {
  var o = document.getElementById("cntWrapper").document.getElementsByTagName("SELECT");
  for(var i=0;i<o.length;i++) {
    o[i].style.visibility="visible";
  }
}

// global auto-submit
function autosubmit(myfield,e) {
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;
  else return true;

  if (keycode == 13)
  {
    myfield.form.submit();
    return false;
  } else {
    return true;
  }
}

//CHAINED_SELECT
var loadingMsg  = '';
var errorBase   = 'Error';

function chainSelect(sel,id,site,vs){
  console.log('hier');
  var val = sel.options[sel.selectedIndex].value;
  // check for ID
  if(!document.getElementById(id)) return false;
  // check for val
  if(!val > 0) return false;
  var el = document.getElementById(id);
  // empty val set message | innerHTML is faster then removeChildren
  if(val == 0) {el.innerHTML = '';if(otherEnable) chainSelectOther(id,0);popChainSelect(msgBase,'0',id);return false;}
  // begin ajax get
  var ajaxIndex = ajax.length;
  ajax[ajaxIndex] = new sack();
  ajax[ajaxIndex].method = "POST";
  ajax[ajaxIndex].requestFile = 'wd_portal_webservices.child_list_values';
  ajax[ajaxIndex].setVar('p_web_site_id',site);
  ajax[ajaxIndex].setVar('p_vs_id',vs);
  ajax[ajaxIndex].setVar('p_parent_vs_val_id',val);
  ajax[ajaxIndex].onCompletion = function(){
    el.innerHTML = '';
    // json
    var data = eval(ajax[ajaxIndex].response);
    // remove other field if exist.
    if(otherEnable) chainSelectOther(id,0);
    for (i = 0; i < data.length; i++) {
       for(key in data[i]) {
       // populate select with options
        popChainSelect(data[i][key],key,id);
      }
    }
    if(otherEnable) popChainSelect(otherMsg,otherVal,id); 
  };
  ajax[ajaxIndex].onLoading = function() {el.innerHTML = '';popChainSelect(loadingMsg,'0',id);};
  ajax[ajaxIndex].onError = function() {el.innerHTML = '';popChainSelect(errorBase,'0',id);};
  ajax[ajaxIndex].runAJAX();
}

function popChainSelect(key,value,id){
  // populate select with options
  if(!document.getElementById(id)) return false;
  var el = document.getElementById(id);
  el.disabled=false;
  var opt = document.createElement('OPTION');
  opt.setAttribute('value',value);
  var text = document.createTextNode(key);
  opt.appendChild(text);
  el.appendChild(opt);
}


var otherEnable = false;
var otherMsg    = 'Overige';
var otherVal    = 9999;
function chainSelectOther(id,val){
  // create or remove Other inputfield 
  var el = document.getElementById(id);
  var parent = document.getElementById(id).parentNode;

  if (val != otherVal) {
    if(!document.getElementById(id+'_other')) return false;
    var otherInput = document.getElementById(id+'_other');
    parent.removeChild(otherInput);
    return false;
  }
  var otherInput = document.createElement('INPUT');
  otherInput.setAttribute('id',id+'_other');
  otherInput.setAttribute('name',el.name);
  otherInput.className = 'textfield otherform';
  otherInput.setAttribute('value',otherMsg);
  parent.appendChild(otherInput);
}

function clearChainSelect(){
  // onload find chainedselects by class, 'clean' them and set basic option/msg
  var classSel = 'chainselect';
  var node = 'select';
  var regex = new RegExp('\\b' + classSel + '\\b');
  var els = document.getElementsByTagName(node);
  for(var i=0,j=els.length; i<j; i++) {
    if(regex.test(els[i].className)) {
      els[i].disabled=true;
      //if(!otherEnable) return false;
      els[i].onchange = function(){
          var val = this.options[this.selectedIndex].value
          var id = this.id;
          var el = document.getElementById(this.getAttribute('rel'));
          chainSelectOther(id,val);
          //console.dir(this);
      }
    }
  }
}
addLoadEvent(clearChainSelect);


//AJAX
var ajax = new Array();

// global saveCollapseAreaSetting
function saveCollapseAreaSetting(websiteid,areaid,state) {
  var ajaxIndex = ajax.length;
  var dbUrl = 'ic_prefs.save_area_settings_db?p_web_site_id=' + websiteid + '&p_area_id='+ areaid + '&p_state=' + state +'&p_x=0';
  ajax[ajaxIndex] = new sack();
  ajax[ajaxIndex].requestFile = dbUrl;
  ajax[ajaxIndex].method = "GET";
  ajax[ajaxIndex].onError = function() {AjaxGetToPost(dbUrl,'noHook');};
  ajax[ajaxIndex].runAJAX();
}

// global sendAjaxGet
function sendAjaxGet(url,hook) {
  var ajaxIndex = ajax.length;
  var targetObj = document.getElementById(hook);
  var dbUrl = url + '&p_x=';
  //var dbUrl = 'ic_candidates.load_recruiters?p_web_site_id=425&p_recruiter_id=&p_x=0';
  //alert(dbUrl);
  ajax[ajaxIndex] = new sack();
  ajax[ajaxIndex].requestFile = dbUrl;
  ajax[ajaxIndex].method = "GET";
  ajax[ajaxIndex].onCompletion = function(){targetObj.innerHTML = ajax[ajaxIndex].response;};
  ajax[ajaxIndex].onLoading = function() {targetObj.innerHTML = '<img src="/icamsbase/images/tiny_red.gif" alt="loading" />';};
  ajax[ajaxIndex].onError = function() {targetObj.innerHTML = '<div class="error">Load failed</div>'; AjaxGetToPost(url,hook);};
  ajax[ajaxIndex].runAJAX();
}

// global AjaxGetToPost
function AjaxGetToPost(url,hook) {
  var requestUrl = url.substr(0,url.indexOf('?'));
  var stringUrl = url.substr(url.indexOf('?')+1,url.length-url.indexOf('?')+1);
  var splitUrl = stringUrl.split('&');
  var ajaxIndex = ajax.length;
  if(hook!='noHook') {var targetObj = document.getElementById(hook);}
  ajax[ajaxIndex] = new sack();
  ajax[ajaxIndex].method = 'POST';
  ajax[ajaxIndex].requestFile = requestUrl;
  for (var i=0; i<splitUrl.length; i++) {
    var splitElements = splitUrl[i].split('=');
    var elementName   = splitElements[0];
    var elementValue  = splitElements[1];
    if(elementName.indexOf('p_x') == -1) {
      ajax[ajaxIndex].setVar(elementName, elementValue);
    }
  }
  if(hook!='noHook'){
    ajax[ajaxIndex].onCompletion = function(){targetObj.innerHTML = ajax[ajaxIndex].response;};
    ajax[ajaxIndex].onLoading = function() {targetObj.innerHTML = '<img src="/ows-img/wd/system/v6/tiny_red.gif" alt="loading" />'};
    ajax[ajaxIndex].onError = function() {targetObj.innerHTML = '<div class="error">Load failed</div>'};
  }
  ajax[ajaxIndex].runAJAX();
}


// global sendAjaxPost
function sendAjaxPost(form,hook,ismail) {
  var docHook = document.getElementById(form);
  var targetObj = document.getElementById(hook);
  var ajaxIndex = ajax.length;
  ajax[ajaxIndex] = new sack();
  ajax[ajaxIndex].method = 'POST';
  ajax[ajaxIndex].requestFile = 'ic_candidates.email_variables_to_global';
  for (var i=0; i<docHook.elements.length; i++) {
    if (ismail == 'Y' && docHook.elements[i].className.indexOf('mail') != -1) {
      ajax[ajaxIndex].setVar(docHook.elements[i].name, docHook.elements[i].value);
    } else if (ismail == 'N') {
      ajax[ajaxIndex].setVar(docHook.elements[i].name, docHook.elements[i].value);
    }
  }
  ajax[ajaxIndex].setVar('p_x','0');
  ajax[ajaxIndex].onCompletion = function(){targetObj.innerHTML = ajax[ajaxIndex].response;};
  ajax[ajaxIndex].onLoading = function() {targetObj.innerHTML = '<img src="/ows-img/wd/system/v6/tiny_red.gif" alt="loading" />'};
  ajax[ajaxIndex].onError = function() {targetObj.innerHTML = '<div class="error">Load failed</div>'};
  ajax[ajaxIndex].runAJAX();
}

// global ajax_saveform
function ajax_saveform(form, hook) {
  var formname = form.getAttribute('name');
  var requestFile = form.getAttribute('action');
  var targetObj = document.getElementById(hook);
  var ajaxIndex = ajax.length;
  ajax[ajaxIndex] = new sack();
  ajax[ajaxIndex].method = 'POST';
  ajax[ajaxIndex].requestFile = requestFile;
  var els = form.elements;
  for(var no=0;no<els.length;no++){
    if(els[no].disabled)continue;
    var tag = els[no].tagName.toLowerCase();
    switch(tag){
      case "input":
        var type = els[no].type.toLowerCase();
        if(!type)type='text';
        switch(type){
          case "text":
          case "image":
          case "hidden":
          case "password":
            ajax[ajaxIndex].setVar(els[no].name,els[no].value);
          break;
          case "checkbox":
            var boxes = this.getFamily(els[no],this.form);
            if(boxes.length>1){
              for(var no2=0;no2<boxes.length;no2++){
                if(boxes[no2].checked){
                  ajax[ajaxIndex].setVar(els[no].name,boxes[no2].value)
                }
              }
            }else{
              if(els[no].checked){
                ajax[ajaxIndex].setVar(els[no].name,els[no].value);
              }
            }
          break;
          case "radio":
            if(els[no].checked){
              ajax[ajaxIndex].setVar(els[no].name,els[no].value);
            }
          break;
        }
      break;
      case "select":
        var string = '';
        var mult = els[no].getAttribute('multiple');
        if(mult || mult===''){
          for(var no2=0;no2<els[no].options.length;no2++){
            if(els[no].options[no2].selected){
              ajax[ajaxIndex].setVar(els[no].name,els[no].options[no2].value);
            }
          }
        }else{
          ajax[ajaxIndex].setVar(els[no].name,els[no].options[els[no].selectedIndex].value);
        }
      break;
      case "textarea":
        ajax[ajaxIndex].setVar(els[no].name,els[no].value);
      break;
    }
  }
  ajax[ajaxIndex].onCompletion = function(){targetObj.className='status_ok';targetObj.innerHTML = ajax[ajaxIndex].response;};
  ajax[ajaxIndex].onLoading = function() {targetObj.className='no_status';targetObj.innerHTML = '<img src="/ows-img/wd/system/v6/tiny_red.gif" alt="loading" />';};
  ajax[ajaxIndex].onError = function() {targetObj.className='status_error';targetObj.innerHTML = 'load failed';};
  ajax[ajaxIndex].runAJAX();
}

//Simple AJAX Code-Kit (SACK) v1.6.1
// ©2005 Gregory Wild-Smith */
// www.twilightuniverse.com */
// Software licenced under a modified X11 licence,
//   see documentation or authors website for more details

function sack(file) {
  this.xmlhttp = null;

  this.resetData = function() {
    this.method = 'POST';
      this.queryStringSeparator = '?';
    this.argumentSeparator = '&';
    this.URLString = '';
    this.encodeURIString = true;
      this.execute = false;
      this.element = null;
    this.elementObj = null;
    this.requestFile = file;
    this.vars = new Object();
    this.responseStatus = new Array(2);
    };

  this.resetFunctions = function() {
      this.onLoading = function() { };
      this.onLoaded = function() { };
      this.onInteractive = function() { };
      this.onCompletion = function() { };
      this.onError = function() { };
    this.onFail = function() { };
  };

  this.reset = function() {
    this.resetFunctions();
    this.resetData();
  };

  this.createAJAX = function() {
    try {
      this.xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
    } catch (e1) {
      try {
        this.xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
      } catch (e2) {
        this.xmlhttp = null;
      }
    }

    if (! this.xmlhttp) {
      if (typeof XMLHttpRequest != 'undefined') {
        this.xmlhttp = new XMLHttpRequest();
      } else {
        this.failed = true;
      }
    }
  };

  this.setVar = function(name, value){
    this.vars[name] = Array(value, false);
  };

  this.encVar = function(name, value, returnvars) {
    if (true == returnvars) {
      return Array(encodeURIComponent(name), encodeURIComponent(value));
    } else {
      this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
    }
  }

  this.processURLString = function(string, encode) {
    encoded = encodeURIComponent(this.argumentSeparator);
    regexp = new RegExp(this.argumentSeparator + '|' + encoded);
    varArray = string.split(regexp);
    for (i = 0; i < varArray.length; i++){
      urlVars = varArray[i].split('=');
      if (true == encode){
        this.encVar(urlVars[0], urlVars[1]);
      } else {
        this.setVar(urlVars[0], urlVars[1]);
      }
    }
  }

  this.createURLString = function(urlstring) {
    if (this.encodeURIString && this.URLString.length) {
      this.processURLString(this.URLString, true);
    }

    if (urlstring) {
      if (this.URLString.length) {
        this.URLString += this.argumentSeparator + urlstring;
      } else {
        this.URLString = urlstring;
      }
    }

    // prevents caching of URLString
    this.setVar('rndval', new Date().getTime());

    urlstringtemp = new Array();
    for (key in this.vars) {
      if (false == this.vars[key][1] && true == this.encodeURIString) {
        encoded = this.encVar(key, this.vars[key][0], true);
        delete this.vars[key];
        this.vars[encoded[0]] = Array(encoded[1], true);
        key = encoded[0];
      }

      urlstringtemp[urlstringtemp.length] = key + '=' + this.vars[key][0];
    }
    if (urlstring){
      this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
    } else {
      this.URLString += urlstringtemp.join(this.argumentSeparator);
    }
  }

  this.runResponse = function() {
    eval(this.response);
  }

  this.runAJAX = function(urlstring) {
    if (this.failed) {
      this.onFail();
    } else {
      this.createURLString(urlstring);
      if (this.element) {
        this.elementObj = document.getElementById(this.element);
      }
      if (this.xmlhttp) {
        var self = this;
        if (this.method == 'GET') {
          totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
          this.xmlhttp.open(this.method, totalurlstring, true);
        } else {
          this.xmlhttp.open(this.method, this.requestFile, true);
          try {
            this.xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
          } catch (e) { }
        }

        this.xmlhttp.onreadystatechange = function() {
          switch (self.xmlhttp.readyState) {
            case 1:
              self.onLoading();
              break;
            case 2:
              self.onLoaded();
              break;


            case 3:
              self.onInteractive();
              break;
            case 4:
              self.response = self.xmlhttp.responseText;
              self.responseXML = self.xmlhttp.responseXML;
              self.responseStatus[0] = self.xmlhttp.status;
              self.responseStatus[1] = self.xmlhttp.statusText;

              if (self.execute) {
                self.runResponse();
              }

              if (self.elementObj) {
                elemNodeName = self.elementObj.nodeName;
                elemNodeName.toLowerCase();
                if (elemNodeName == 'input'
                || elemNodeName == 'select'
                || elemNodeName == 'option'
                || elemNodeName == 'textarea') {
                  self.elementObj.value = self.response;
                } else {
                  self.elementObj.innerHTML = self.response;
                }
              }
              if (self.responseStatus[0] == '200') {
                self.onCompletion();
              } else {
                self.onError();
              }

              self.URLString = '';
              break;
          }
        };

        this.xmlhttp.send(this.URLString);
      }
    }
  };

  this.reset();
  this.createAJAX();
}