/**
* $RCSfile: cookies_spread.js,v $
* $Date: 2009-09-01 17:05:45 $
* $Author: salatino $
* $Revision: 1.3.2.11 $
*/
function getCookiesToTransfer() {
   var cks = Array('WEB_ID','_pdid_','_pds_','_pd_','TRADEDOUBLER','friend_code','user_id','ref','NB_SWITCH',
            '__utma','__utmb','__utmc','__utmx','__utmz','__utmv','__utmk');

   return cks;
}

function getCookiesStringForTransfer(encode) {
   var cks = getCookiesToTransfer();

   var cktr = "" ;

   var cookiesArr = document.cookie.split(";");
   var cookiesKeys = new Array();
   var cookiesVals = new Array();
   for (var i=0; i<cookiesArr.length; i++) {
	   var keyVal = cookiesArr[i];
	   cookiesKeys[i]=keyVal.substr(0, keyVal.indexOf("=")).replace(/^\s+|\s+$/g,"");
	   cookiesVals[i]=keyVal.substr(keyVal.indexOf("=")+1).replace(/^\s+|\s+$/g,"");
   }
   
   for(var ii=0;ii<cks.length;ii++){
	   for (var j=0; j<cookiesKeys.length; j++) {
		   if (cks[ii]==cookiesKeys[j]) {
			   cktr += cookiesKeys[j]+"="+cookiesVals[j]+";";
		   }
	   }
   }

   if(encode) {
      cktr = encodeURIComponent(cktr.substr(0,cktr.length-1));
   }

   return cktr;
}

function cookiesTransfer(e)
{

   // get event cross-brower way
   var source_element;
   if (!e) {
      var e = window.event;
   }
   source_element = (e.srcElement || e.target);

   // get anchor for href change
   var root = null;
   if(isALink(source_element)){
      root = source_element;
   } else if(isALinkChild(source_element)){
      // event element is not an anchor so try to look for an anchor in the hierarchy
      root = source_element.parentNode;
      var max_dep = 10;
      while(root != null  && max_dep > 0){
         if(isALink(root)){
            break;
         }
         root = root.parentNode;
         max_dep--;
      }
      // no root found so return
      if(root == null || max_dep <= 0){
         return;
      }
   } else {
      // any other element must be left unmodified
      return;
   }


   cktr = getCookiesStringForTransfer(true);

   var frtr = "" ;
   frtr = encodeURIComponent(document.location.hash.substr(1));

   if(root.href.indexOf("javascript:") == -1 && root.href.indexOf("cktr=") == -1 && isDifferentDomain(root.href)) {
      var p = root.href.split("#");
      var sep = p[0].indexOf("?") > -1 ? '&' : '?';
      root.href =p[0] + sep +'cktr=' + cktr + ( frtr != "" ? "&frtr="+frtr : "");
   }
}


/**
 * Utility function that define if an element is considered to be a child of an anchor
 */
function isALinkChild(el){
   // by now only IMG is considered to be included in an anchor
   if(el.tagName != null && el.tagName.toUpperCase() == "IMG"){
      return true;
   }
   return false;
}

/**
 * Utility function to check if an element is a link
 */
function isALink(el){
   if(el.tagName != null && (el.tagName.toUpperCase() == "A" || el.tagName.toUpperCase() == "AREA") ){
      return true;
   }
   return false;
}

/**
 * Function to check if the given href contains a different from page one
 */
function isDifferentDomain(href){

   var host = document.location.host;
   var host_elements = host.split('.');

   if(href.search("(https?://)?(.){2,3}\\."  + host_elements[1] + "\\." + host_elements[2]) != 0){
      return true;
   }

   return false;

}

function addEventHandler(oTarget, sEventType, fnHandler) {
       if (oTarget.addEventListener) {
           oTarget.addEventListener(sEventType, fnHandler, false);
       } else if (oTarget.attachEvent) {
           oTarget.attachEvent("on" + sEventType, fnHandler);
       } else {
           oTarget["on" + sEventType] = fnHandler;
       }
}


/**
 * Function that choose where to apttach on click event for
 * cookie transfer
 */
function registerCookiesTransfer(){


   // init controll vars
   var is_kwp_page = false;
   var is_full_lg = false;

   // check if domain is within full page click handling
   // this mean if its a lg domain or if it has an lg param within de,zh,es
   var full_handling_lg ={'zh':1, 'de':1, 'es':1};

   var page_domain = document.location.host;
   var page_domain_elements = page_domain.split('.');
   if(typeof(full_handling_lg[page_domain_elements[0]]) != 'undefined' ){
      is_full_lg = true;
   }

   // analyze query string
   var search_string = document.location.search.substring(1);
   var search_elements = search_string.split('&');   
   for(var i=0;i<search_elements.length;i++){
      var search_el = search_elements[i];
      var search_el_array = search_el.split('=');
      // check for kwp in qs
      if(search_el_array[0] == 'kwp'){
         is_kwp_page = true;
      }
      // check for lg in qs wintin full
      if(search_el_array[0] == 'lg' && typeof(full_handling_lg[search_el_array[1]]) != 'undefined' ){
         is_full_lg = true;
      }
   }

   // look for the correct root to register event
   var registerTarget;
   if(is_kwp_page && is_full_lg){
      var body_list = document.getElementsByTagName('body');
      if(body_list.length == 0){
         return;
      }
      registerTarget = body_list[0];
   } else {
      registerTarget = document.getElementById("languagebar");
      if(registerTarget==null){
         return;
      }
   }

   addEventHandler(registerTarget, "mousedown", cookiesTransfer);

}

// do registering on window load
addEventHandler(window, "load", registerCookiesTransfer);
