function getCompanyId(keyword, url)
{
// Funkce vrátí companyId ze souboru ids.xml
// Parametry: keyword - klíčové slovo mezi elementy <companyId>, relativní cesta(z HTML) k souboru ids.xml
/*
	if (document.implementation && document.implementation.createDocument)
	{
		var xmlDoc = document.implementation.createDocument("", 'doc', null);
	}
	else if (window.ActiveXObject)
	{
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
 	}
	else
	{
		return;
	}
  xmlDoc.async = false;
  xmlDoc.load(url);
*/
  if (window.ActiveXObject)
	{
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
    xmlDoc.load(url);
 	}
 	else
	{
		var xmlhttp = new window.XMLHttpRequest();
    xmlhttp.open("GET", url, false);
    xmlhttp.send(null);
    var xmlDoc = xmlhttp.responseXML.documentElement;
	}

  var companyId = "";
  var companyIds = xmlDoc.getElementsByTagName('companyId');

  for (var i = 0; i < companyIds.length; i++)
  {
	  if (companyIds[i].firstChild.data == keyword)
    {
			companyId = companyIds[i].getAttribute('id');
    }
	}
  return companyId;
}

function getExportId(keyword, url)
{
// Funkce vrátí exportId ze souboru ids.xml
// Parametry: keyword - klíčové slovo mezi elementy <exportId>, relativní cesta(z HTML) k souboru ids.xml
/*
	if (document.implementation && document.implementation.createDocument)
	{
		var xmlDoc = document.implementation.createDocument("", 'doc', null);
	}
	else if (window.ActiveXObject)
	{
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
 	}
	else
	{
		return;
	}
  xmlDoc.async = false;
  xmlDoc.load(url);
*/
  if (window.ActiveXObject)
	{
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
    xmlDoc.load(url);
 	}
 	else
	{
		var xmlhttp = new window.XMLHttpRequest();
    xmlhttp.open("GET", url, false);
    xmlhttp.send(null);
    var xmlDoc = xmlhttp.responseXML.documentElement;
	}

  var exportId = "";
  var exportIds = xmlDoc.getElementsByTagName('exportId');

  for (var i = 0; i < exportIds.length; i++)
  {
	  if (exportIds[i].firstChild.data == keyword)
    {
			exportId = exportIds[i].getAttribute('id');
    }
	}
  return exportId;
}

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

function getSearchLink(localities)
{
/*
  Funkce vrátí searchový link s idecky ze souboru ids.xml
  Základní parametry si vezme ze souboru config/search_params.xml
  <domain value="http://www.jobs.cz/pd_search/search?"/>
	<param value="action=jd"/>
	<param value="design=kb_cs"/>
	<param value="brand=21200101&amp;brand=21200101"/>
	...
	<export value="karierni_sekce"/> or <cmpID value="CZ.designtemplates"/>
	Hodnoty export/@value a hodnoty cmpID/@value slouží jako vstupní proměnné (keyword) pro funkce getCompanyId a getExportId
*/
	if (document.implementation && document.implementation.createDocument)
	{
		var xmlDoc = document.implementation.createDocument("", 'doc', null);
	}
	else if (window.ActiveXObject)
	{
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
 	}
	else
	{
		return;
	}
  xmlDoc.async = false;
  xmlDoc.load("config/search_params.xml");
  
  var searchLink = "";
  var domain = xmlDoc.getElementsByTagName("domain");
  var exports = xmlDoc.getElementsByTagName("export");
  var cmpanys = xmlDoc.getElementsByTagName("cmpID");
  var elements = xmlDoc.getElementsByTagName("param");

  for (var i = 0; i < domain.length; i++)
  {
		searchLink += domain[i].getAttribute("value");
	}
	for (var i = 0; i < exports.length; i++)
  {
		searchLink += "exports="+getExportId(exports[i].getAttribute("value"), "ids.xml")+"&";
	}
	for (var i = 0; i < cmpanys.length; i++)
  {
		searchLink += "cmpID="+getCompanyId(cmpanys[i].getAttribute("value"), "ids.xml")+"&";
	}
  for (var i = 0; i < elements.length; i++)
  {
		searchLink += elements[i].getAttribute("value")+"&";
	}
	if(localities)
	{
    searchLink += "local="+localities;
  }
  window.location.href=searchLink;
}

function modifyLinks(domainName, ks) {
/*
Funkce pro modifikaci parametrů href tagu a u Karierních sekcí
Vstupní parametr domainName = název domény zákaznického řešení
Vstupní parametr ks = 0 / 1 (ne / ano) - karierní sekce
Funkci je nutno zavolat v headu window.onload = function(){modifyLinks('název domény, např. lmc.jobs.cz', 0 nebo 1)};
Funkce obalí odkazy směřující na domainName, searchové linky a asmt definicí javascript:link('vlastní odkaz');
*/
  if(ks == 1){
    var links = document.getElementsByTagName("a");
    for(i = 0; i < links.length; i++){
      var link = links[i].href;
      if(link.indexOf(domainName) > -1 || link.indexOf("/pd_search/") > -1 || link.indexOf("/asmt/") > -1 || link.indexOf("/g2.lmc.cz/") > -1){
        if(link.indexOf("javascript:") == -1 && link.indexOf("mailto:") == -1 && link.indexOf(".gif") == -1 && link.indexOf(".jpg") == -1 && link.indexOf(".jpeg") == -1 && link.indexOf(".pdf") == -1 && link.indexOf("acl0=") == -1) {
          links[i].href = "javascript:link('" + link + "');";
        }
      }
    }
  }
}

function cleanUrlFromBrandsAndMakeUrlWithOneBrand(address){
  var isBrand = address.indexOf('&brand=');
  var isOtherBrand = address.lastIndexOf('&brand=');

  if(isBrand == isOtherBrand){
    return address;
  }
  else
  {
    var r = new RegExp('&brand=(g2|jobs.cz|prace.cz|topjobs.sk)');
    var newAddress = address.replace(r, '');
    return cleanUrlFromBrandsAndMakeUrlWithOneBrand(newAddress);
  }
}

function cleanUrlFromEntryPoint(address){
  var isEP = address.indexOf('&ep=');
  if(isEP > -1){
    var r = new RegExp('&ep=.*');
    var newAddress = address.replace(r, '');
    return newAddress;
  }
  else
  {
    return address;
  }
}

function cleanUrlFromSources(address){
  var isSource = address.indexOf('source=');
  var newAddress = address;
  if(isSource > -1){
    var r = new RegExp('(source=(1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|jobs|prace|topjobs)(&))', "g");
    newAddress = address.replace(r, '');
  }
  return newAddress;
}

function cleanUrlFromBrands(address){
  var isBrand = address.indexOf('brand=');
  var newAddress = address;
  if(isBrand > -1){
    var r = new RegExp('((sourcebrand|brand)=(g2|jobs.cz|prace.cz|topjobs.sk)(&))', "g");
    var newAddress = newAddress.replace(r, '');
  }
  return newAddress;
}

function cleanUrlFromExportID(address){
  var isExportID = address.indexOf('exportID=');
  var newAddress = address;
  if(isExportID > -1){
    var r = new RegExp('exportID=', "g");
    var newAddress = newAddress.replace(r, 'oldEID=');
  }
  return newAddress;
}

function getSource(newSource) {
  if(!newSource && document.referrer || newSource !== "topjobs" && newSource !== "prace" && newSource !== "jobs" && +newSource != newSource && document.referrer)  {
  	if(document.referrer.indexOf(".topjobs.sk") != -1 || document.referrer.indexOf("/topjobs.sk") != -1) {
      newSource = 'topjobs';
    }
  	else if(document.referrer.indexOf(".prace.cz") != -1 || document.referrer.indexOf("/prace.cz") != -1) {
      newSource = 'prace';
    }
  	else if(document.referrer.indexOf(".jobs.cz") != -1 || document.referrer.indexOf("/jobs.cz") != -1 || document.referrer.indexOf(".hotjobs.cz") != -1 || document.referrer.indexOf("/hotjobs.cz") != -1) {
      newSource = 'jobs';
    }
    else if(document.referrer.indexOf(".sprace.cz") != -1 || document.referrer.indexOf("/sprace.cz") != -1) {
      newSource = '12';
    }
    else if(!isNaN(+newSource) && +newSource > 0) {
      newSource = +newSource;
    }
    else {
      newSource = '3';
    }
  }
  else if(!newSource || newSource == "") {
    newSource = '3';
  }

  return newSource;
/*
1-HN 
2-TT 
3-EXPORT_PUBLISHER - KS 
4-RESENT_PDJD 
5-CO 
6-POLAND 
7-HUNGARY 
8-BULGARIA 
9-ROMANIA 
10-PROFESIA_SK 
11-VLP 
12-SPRACE -- ? někdy 3
13-CVMARKET_LV 
14-CVMARKET_IT 
15-CVKESKUS_EE 
16-JOBMARKET 
17-ROBOTA 
18-RESPONSE_REACTION 
19-24H 
20-SUPERJOB_RU 
*/
}

function getBrand(newBrand) {
  if(!newBrand && document.referrer || newBrand !== "topjobs.sk" && newBrand !== "prace.cz" && newBrand !== "jobs.cz" && newBrand !== "g2" && document.referrer) {
  	if(document.referrer.indexOf(".topjobs.sk") != -1 || document.referrer.indexOf("/topjobs.sk") != -1) {
      newBrand = 'topjobs.sk';
    }
  	else if(document.referrer.indexOf(".prace.cz") != -1 || document.referrer.indexOf("/prace.cz") != -1) {
      newBrand = 'prace.cz';
    }
    else if(document.referrer.indexOf(".jobs.cz") != -1 || document.referrer.indexOf("/jobs.cz") != -1 || document.referrer.indexOf(".hotjobs.cz") != -1 || document.referrer.indexOf("/hotjobs.cz") != -1) {
      newBrand = 'jobs.cz';
    }
    else {
      newBrand = 'g2';
    }
  }
  else if(!newBrand || newBrand == "") {
    newBrand = 'g2';
  }
  return newBrand;
}

function getKotva(link) {
  var kotva = "";
  kotva = link.href.hash;
  return kotva;
}

function clearUrlFromKotva(link) {
  var newLink = "";
  var regular = new RegExp('#.*');
  newLink = link.replace(regular, '');
  return newLink;
}

function setSourcesToLinks(domainName, ks, exportId) {
/*
Funkce pro modifikaci parametrů href tagu a u Karierních sekcí
Vstupní parametr domainName = název domény zákaznického řešení
Vstupní parametr ks = 0 / 1 (ne / ano) - karierní sekce
Funkci je nutno zavolat v headu window.onload = function(){modifyLinks('název domény, např. lmc.jobs.cz', 0 nebo 1, exportId)}; nebo před tagem </body> modifyLinks('název domény, např. lmc.jobs.cz', 0 nebo 1, exportId);
Funkce obalí odkazy směřující na domainName, searchové linky a asmt definicí javascript:window.location('vlastní odkaz')+ přidání parametrů souurcesouurce / souurce, souurcebrand / brand a zdrojUrl / zdrojUrl;;
*/

  if(ks == 1) {

    if(!exportId) {
      exportId = getExportId(domainName, "karierni_sekce");
    }

    var url = cleanUrlFromEntryPoint(window.location.href.toString());
    url = cleanUrlFromBrandsAndMakeUrlWithOneBrand(url);

    var newSource = getUrlParam('sourcesource');
    if(!newSource || newSource == "") {
      newSource = getUrlParam('source');
    }
    var newBrand = getUrlParam('sourcebrand');
    if(!newBrand || newBrand == "") {
      var newBrand = getUrlParam('brand');
    } 
      
    var newTrackingBrand = getUrlParam('trackingBrand');
    if(!newTrackingBrand || newTrackingBrand == "") {
      if(document.referrer) {
        var refererUrl =  document.referrer;
        var pattern = new RegExp('^http://?([^/]+)');
        var resultReferer = pattern.exec(refererUrl);
        if (resultReferer != null) {
          newTrackingBrand = resultReferer[1];       
        }
      }
      else {
        var newTrackingBrand = 'unknown';
      }
    }

// Set Source
    newSource = getSource(newSource);
// Set Brand 
    newBrand = getBrand(newBrand);

// Modify links "a"
    var links = document.getElementsByTagName("*");

    for(i = 0; i < links.length; i++){
      if(links[i].nodeName.toLowerCase() == "a" && links[i].href.indexOf("#TOP") == -1 || links[i].nodeName.toLowerCase() == "area" && links[i].href.indexOf("#TOP") == -1) {
 
        if(links[i].href.indexOf(domainName) > -1 || links[i].href.indexOf("/pd_search/") > -1 || links[i].href.indexOf("asmt") > -1 || links[i].href.indexOf("/g2.lmc.cz/") > -1 || links[i].href.indexOf("onrea.com") > -1 || links[i].href.indexOf('tcpdsearch:') > -1 || links[i].href.indexOf('.jobs.cz/lang/') > -1 || links[i].href.indexOf('.topjobs.sk/pd/') > -1 || links[i].href.indexOf('.jobs.cz/pd/') > -1){
          if(links[i].href.indexOf("javascript:") == -1 && 
             links[i].href.indexOf("mailto:") == -1 && 
             links[i].href.indexOf(".gif") == -1 && 
             links[i].href.indexOf(".jpg") == -1 && 
             links[i].href.indexOf(".jpeg") == -1 && 
             links[i].href.indexOf(".pdf") == -1 && 
             links[i].href.indexOf("acl0=") == -1 && 
             links[i].href !== "#") {

            var newKotva = getKotva(links[i]);
            if(!newKotva) {
              newKotva = "";
            }
            links[i].href = clearUrlFromKotva(cleanUrlFromBrands(cleanUrlFromSources(cleanUrlFromEntryPoint(links[i].href))));
        
            var delimiter = "?";
            if(links[i].href.indexOf("?") > -1) {
              delimiter = "&";
            }
  
            if(newSource == "3"){
              if(links[i].href.indexOf("/pd_search/") > -1) {
                links[i].href = links[i].href + delimiter + "sourcebrand="+newBrand+"&source="+newSource+"&trackingBrand="+newTrackingBrand;
              }
              else if(links[i].href.indexOf("/asmt/") > -1) {
                if(newSource == "3") {
                  if(links[i].href.indexOf("exportID=") > -1 && getUrlParam('exportID') != "") {
                    links[i].href = links[i].href + delimiter + "brand="+newBrand+"&sourcebrand="+newBrand+"&source="+newSource+"&trackingBrand="+newTrackingBrand;
                  }
                  else {
                    links[i].href = cleanUrlFromExportID(links[i].href) + delimiter + "brand="+newBrand+"&sourcebrand="+newBrand+"&source="+newSource+"&exportID="+exportId+"&trackingBrand="+newTrackingBrand;
                  }
                }
                else {
                  links[i].href = links[i].href + delimiter + "brand="+newBrand+"&sourcebrand="+newBrand+"&sourcesource="+newSource+"&trackingBrand="+newTrackingBrand;
                }
              }
              else if(links[i].href.indexOf("/pd/") > -1 && links[i].href.indexOf(".prace.cz") == -1 && links[i].href.indexOf("/prace.cz") == -1 && links[i].href.indexOf(".jobs.cz") == -1 && links[i].href.indexOf("/jobs.cz") == -1 && links[i].href.indexOf(".topjobs.sk") == -1 && links[i].href.indexOf("/topjobs.sk") == -1) {
                links[i].href = links[i].href + delimiter + "sourcebrand="+newBrand+"&source="+newSource+"&exportRCM="+exportId+"&trackingBrand="+newTrackingBrand;
              }
              else {
                links[i].href = links[i].href + delimiter + "sourcebrand="+newBrand+"&source="+newSource+"&trackingBrand="+newTrackingBrand;
              }
            }
            else if(links[i].href.indexOf("/pd_search/") > -1) {
              links[i].href = links[i].href + delimiter + "sourcebrand="+newBrand+"&source="+newSource+"&trackingBrand="+newTrackingBrand;
            }
            else if(links[i].href.indexOf("/asmt/") > -1) {
              if(+newSource == newSource && newSource !== "3") {
                links[i].href = links[i].href + delimiter + "brand="+newBrand+"&source="+newSource+"&sourcebrand="+newBrand+"&sourcesource="+newSource+"&trackingBrand="+newTrackingBrand;
              }
              else {
                links[i].href = links[i].href + delimiter + "brand="+newBrand+"&sourcebrand="+newBrand+"&sourcesource="+newSource+"&trackingBrand="+newTrackingBrand;
              }
            }
            else if(links[i].href.indexOf("/pd/") > -1 && links[i].href.indexOf(".prace.cz") == -1 && links[i].href.indexOf("/prace.cz") == -1 && links[i].href.indexOf(".jobs.cz") == -1 && links[i].href.indexOf("/jobs.cz") == -1 && links[i].href.indexOf(".topjobs.sk") == -1 && links[i].href.indexOf("/topjobs.sk") == -1) {
              links[i].href = links[i].href + delimiter + "sourcebrand="+newBrand+"&source="+newSource+"&exportRCM="+exportId+"&trackingBrand="+newTrackingBrand;
            }
            else {
              links[i].href = links[i].href + delimiter + "sourcebrand="+newBrand+"&source="+newSource+"&trackingBrand="+newTrackingBrand;
            }
            
            coverStart = "javascript:window.location.href='";
            coverEnd = "';";
            links[i].href = coverStart+links[i].href+newKotva+coverEnd;
          }
          else if (links[i].href.indexOf("acl0=") != -1) {
            links[i].href = cleanUrlFromEntryPoint(links[i].href)+ "&trackingBrand="+newTrackingBrand;
          }
          else if (links[i].href == "#") {
            links[i].href = 'javascript:scrollTo(0,0);';
          }
        }
      }
    }
//Create hidden inputs for searchforms
    var forms = document.getElementsByTagName("form");
    if(forms.length > 0) {
      for(i = 0; i < forms.length; i++){
//         if(forms[i].action.value == 'jd') {
        var exists = forms[i]['action'];
        if(exists && exists.value && exists.value == 'jd' || exists && !exists.value && exists.indexOf('/pd_search/') > -1) {
          var inputsource = document.createElement('input');
          inputsource.setAttribute("type", "hidden");
          inputsource.setAttribute("name", "source");
          inputsource.setAttribute("value", newSource);
          var inputbrand = document.createElement('input');
          inputbrand.setAttribute("type", "hidden");
          inputbrand.setAttribute("name", "sourcebrand");
          inputbrand.setAttribute("value", newBrand);
          var inputtrackingbrand = document.createElement('input');
          inputtrackingbrand.setAttribute("type", "hidden");
          inputtrackingbrand.setAttribute("name", "trackingBrand");
          inputtrackingbrand.setAttribute("value", newTrackingBrand);
          forms[i].appendChild(inputsource);
          forms[i].appendChild(inputbrand);
          forms[i].appendChild(inputtrackingbrand);
        }
      }
    }
  }
}

function getSourceToIframeRedirect(exportId) {
/*
Funkce vrátí query string s aktuálními zdroji, který se pak vloží za link pro redirect (IFRAMY)
*/
  if(!exportId) {
    exportId = "";
  }
  var newSource = getUrlParam('source');
  var newBrand = getUrlParam('brand'); 
  var newTrackingBrand = getUrlParam('trackingBrand');
  if(!newTrackingBrand || newTrackingBrand == "") {
    if(document.referrer) {
      var refererUrl =  document.referrer;
      var pattern = new RegExp('^http://?([^/]+)');
      var resultReferer = pattern.exec(refererUrl);
      if (resultReferer != null) {
        newTrackingBrand = resultReferer[1];       
      }
    }
    else {
      var newTrackingBrand = 'unknown';
    }
  }
// Set Source
  newSource = getSource(newSource);
// Set Brand 
  newBrand = getBrand(newBrand);

  var queryString = "?exportID="+exportId+"&source="+newSource+"&brand="+newBrand+"&trackingBrand="+newTrackingBrand;
  return queryString;
}