/*
 * Copyright (c) contentmetrics GmbH, 2008
 * THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
 * APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
 * HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
 * OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
 * IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
 * ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
 *
 * Autor: Frank Raether, 20090508
 * Code: JavaScript Library zum Hinzufuegen von events
 * Kunde: G+J
 * v29.9.09 fuer ftd.de
 */
 
 /* array with all referer-domains that should be excluded (look at sc_get_external_referer()) */
 /* this is specific for every site ************************************************************/
 var excluded_referers = new Array('www.ftd.de','new.ftd.de','markets.ftd.de','karte.ftd.de','immobilien.ftd.de'); // alle server die nicht als referrer auftauchen sollen.
 /**********************************************************************************************/
 
function cm_varIsSet(vn){//variable vn ist gesetzt und nicht leer
  if(typeof(vn)!="undefined"&&vn!="")return true;
  return false;
}
function cm_eventIsSet(ev){//event ev ist gesetzt
  if(!cm_varIsSet(s.events))return false;
  var events=''+s.events;
  if(events.indexOf(ev)>-1)return true;
  return false;
}
function cm_addEvent(ev){//setzt einen event ev einmalig pro seite
  if(!cm_varIsSet(s.events)){//1.fall events nicht definiert oder leer
    s.events=ev;
    return;
  }  
  if(cm_eventIsSet(ev)) return;//2.fall nicht leer aber schon drin
  s.events+=','+ev;//3.fall nicht leer aber nicht drin
}

/*Plugin cm_getGroup V1.0 20090508FR?
finds clustered values
*/

function cm_getGroup( value, values, titles ){
  if( typeof(value)=='string' ) value=parseInt(value);
  vals = values.split(';');
  if( titles ){
    names = titles.split(';');
  } else {
    names = vals;
  }
  for( pair in vals ){
    if (typeof(pair) != 'number') {
      continue;
    }
    v = vals[pair].split('-');
    if( v.length==2 ){//has -
      if( v[0]=='' && parseInt(v[1])>=value ){
        return names[pair];
      }
      if( parseInt(v[0])<=value && (v[1]=='' || parseInt(v[1])>=value) ){
        return names[pair];
      }
    } else {//is max or min
      if( v[0].indexOf('<')==0 ){
        if( parseInt(v[0].substr(1))>=value ){
          return names[pair];
        }
      } else if( v[0].indexOf('>')==0 ){
        if( parseInt(v[0].substr(1))<=value ){
          return names[pair];
        }
      } else {//no match
        return '';
      }
    }
  }
}

//Clustering of search result amount.
function cm_numberOfSearchResults(number_of_results){
  if (!number_of_results.match(/^\d+$/)) {
    return number_of_results;
  }
  return cm_getGroup(number_of_results,'<1;1-5;6-10;11-20;21-30;31-40;41-50;>50','<1;1-5;6-10;11-20;21-30;31-40;41-50;>50');
}

//Hilfsfunktionen Cookies
function Delete_Cookie(name,path,domain){
  if(Get_Cookie(name)){
    document.cookie=name+"="+((path)?";path="+path:"")+((domain)?";domain="+domain:"")+";expires=Thu, 01-Jan-1970 00:00:01 GMT";
  }
}
function Set_Cookie(name,value,expires,path,domain,secure){
  var today=new Date();
  today.setTime( today.getTime() );
  if(expires)expires = expires * 1000 * 60 * 60 * 24;
  var expires_date=new Date(today.getTime()+(expires));
  document.cookie=name+"="+escape(value)+((expires)?";expires="+expires_date.toGMTString():"")+((path)?";path="+path:"")+((domain)?";domain="+domain:"")+((secure)?";secure":"");
}
function Get_Cookie(check_name) {
  var a_all_cookies=document.cookie.split(';');
  var a_temp_cookie='';
  var cookie_name='';
  var cookie_value='';
  var b_cookie_found=false;
  for(i=0;i<a_all_cookies.length;i++){
    a_temp_cookie=a_all_cookies[i].split('=');
    cookie_name=a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
    if(cookie_name==check_name){
      b_cookie_found = true;
      if(a_temp_cookie.length>1){
        cookie_value=unescape(a_temp_cookie[1].replace(/^\s+|\s+$/g, ''));
      }
      return cookie_value;
      break;
    }
    a_temp_cookie=null;
    cookie_name='';
  }
  if (!b_cookie_found)return null;
}

/**
 * Helper function to parse a param-string into an array
 * ~paz
 */
function sc_get_params(str, sep) {
  var vars = new Array();
  var pairs = str.split(sep);
  for(var i in pairs){
    p = pairs[i].split('=');
    vars[p[0]] = p[1];
  }
  return vars;  
}

/**
 * Get the value of a query parameter. 
 * (Dummy-Code by CM functionally rebuilt by paz.)
 */
function sc_get_hash_param(n, sep) {
  if (!sep) var sep = ';';
  return sc_get_params(window.location.hash.substr(1), sep)[name];
}

/**
 * Get the value of a query parameter. 
 * (Dummy-Code by CM functionally rebuilt by paz.)
 */
function sc_get_query_param(name, sep) {
  if (!sep) var sep = '&';
  return sc_get_params(document.location.search.substr(1), sep)[name];
}

function sc_get_external_referer() {
	var ref = document.referrer;
	if (ref != '') {
		ref = ref.replace(/https:\/\//,'');
		ref = ref.replace(/http:\/\//,'');
		ref = ref.substr(0,ref.indexOf('/')); // get domain of referer 
		if (!is_excluded_referer(ref) && ref != window.location.hostname) {
			// so this is an external referer
			return ref;
		}
	} 
	return '';
}
function is_excluded_referer(item) {
	for (i=0; i < excluded_referers.length; i++) {
		if (item == excluded_referers[i]) {
			return true;
		}
	}		
	return false;
}

function sc_get_campaign() {
	var url = window.location.href;
	var index = url.indexOf('#');
	if (index > 0) {
		var string = url.substr(index);
		string = string.replace(/#/,'');
		string = string.replace(/osc_/g,'');
		string = string.replace(/utm_/g,'');
		var pairs = string.split('&');
		var campaign = new Array();
		for (var i = 0; i < pairs.length; i++) {
			var tmp = pairs[i].split('=');
			campaign[tmp[0]] = tmp[1];
		}
		return campaign;
	} else if (index == -1 && url.indexOf('?') != -1) {
		var campaign = new Array();
		campaign['source'] = s.getQueryParam('utm_source');
		campaign['medium'] = s.getQueryParam('utm_medium');
		campaign['campaign'] = s.getQueryParam('utm_campaign');
		campaign['link_position'] = s.getQueryParam('link_position');
		if (campaign['source'] == '') {
			campaign['source'] = s.getQueryParam('osc_source');
			campaign['medium'] = s.getQueryParam('osc_medium');
			campaign['campaign'] = s.getQueryParam('osc_campaign');
		}
		return campaign;
	}
	return null;
}

function s_getRequestParameter(parameterName) {
  var queryString = window.top.location.search.substring(1);
  if (!queryString)
    return '';
  var parameterName = parameterName + '=';
  begin = queryString.indexOf(parameterName);
  if (begin == -1)
    return '';
  begin += parameterName.length;
  end = queryString.indexOf('&' , begin);
  if (end == -1) {
    end = queryString.length;
  }
  return unescape(queryString.substring(begin, end));
}

function s_doPlugins() {
  // number of attempts -- may be used to break recursion
  if (!s.numattempt) {
    s.numattempt = 0;
  }

  // s.prop11: external referer
  var referer = sc_get_external_referer();
  if (referer != '') {
    s.prop11 = referer;
  }

  // s.server 
  s.server = window.location.hostname;

  // get first path element
  var url_first_subdir = window.location.pathname.split('/')[1];

  // special handling for markets.ftd.de
  if (s.server == 'markets.ftd.de') {

    // append first path element
    if (url_first_subdir && url_first_subdir.length) {
      s.pageName += url_first_subdir;
      s.prop1    += url_first_subdir;
      s.prop12   += url_first_subdir;
      s.hier1    += url_first_subdir;
    } else {
      s.hier1 += 'homepage';
    }

    // if present: second navigation element
    var filename = window.location.pathname.split('/')[2];
    if (filename && filename.match(/\.html$/)) {
      filename = filename.replace(/\.html$/, "");
      s.pageName += ':' + filename;
      s.prop1    += '/' + filename;
      s.prop12   += ':' + filename;
      s.hier1    += ',' + filename;
    } else {
      s.hier1 += ',index';
    }

    // parameter ID_SUBCATEGORY -> another level appended
    var id_subcategory = s_getRequestParameter('ID_SUBCATEGORY');
    if (id_subcategory.length) {
      s.pageName += ':' + id_subcategory;
      s.prop1    += '/' + id_subcategory;
      s.prop12   += ':' + id_subcategory;
      s.hier1    += ',' + id_subcategory;
    }

    // parameter ID_NOTATION -> article
    var id_notation = s_getRequestParameter('ID_NOTATION');
    if (id_notation.length) {
      s.prop1  = id_notation + ':markets';
      s.prop7  = 'artikel';
      s.prop12 += ':' + s.prop1;
      s.hier1  += ',' + s.prop1;
    }

    // parameter SEARCH_VALUE -> search
    var search_value = s_getRequestParameter('SEARCH_VALUE');
    if (search_value.length) {
      s.pageName = 'suchergebnis';
      s.prop1    = 'suche';
      s.prop7    = 'suche';
      s.prop8    = search_value;
      s.prop12   = 'boerse:suche';
      s.hier1    = 'boerse,suche,' + search_value;
    }

    // finally append article type to pageName
    if (s.prop7 != 'suche')
      s.pageName += ':' + s.prop7;

  } // end special handling for markets.ftd.de
  
  // special handling for www.ftd.de/debatte
  if (s.server == 'www.ftd.de' && url_first_subdir == 'debatte') {
    
    // if present: add second navigation element
    var filename = window.location.pathname.split('/')[2];
    if (filename && filename.match(/\.html$/)) {
      filename = filename.replace(/\.html$/, "");
      s.pageName += ':' + filename;
      s.prop1    += '/' + filename;
      s.prop12   += ':' + filename;
      s.hier1    += ',' + filename;
    }
    
    // XXX add p, t, page and do parameters
   
  } // end special handling for www.ftd.de/debatte

  // special handling for immobilien.ftd.de
  if ((s.server == 'immobilien.ftd.de' || s.server == 'preview.capital.de') && typeof(sc_immo_data) != 'undefined') {
    var elem = window.location.pathname.split('/');
    if (elem[elem.length-1].match(/\.html$/)) {
      elem = elem.slice(1, elem.length-1);
    }
    s.prop7 = sc_immo_data.type;
    s.pageName = elem.join(':') + ':' + s.prop7;
    s.channel = url_first_subdir;
    if (sc_immo_data.type == 'indexseite') {
      s.prop1 = '/' + elem.join('/') + '/ (indeseite)';
      s.prop12 = s.pageName;
      s.hier1 = elem.join(',') + ',' + s.prop7 + ',pi ohne ajax/flash';
    } else {
      s.prop1 = sc_immo_data.headline + ':' + 'cap-' + sc_immo_data.id;
      s.prop12 = s.pageName + ':' + 'cap-' + sc_immo_data.id + ':' + sc_immo_data.headline;
      s.hier1 = elem.join(',') + ',' + s.prop7 + ',' + s.prop1 + ',pi ohne ajax/flash';
    }
  } // end special handling for immobilien.ftd.de

  // special handling for karte.ftd.de
  if (s.server == 'karte.ftd.de') {
    s.pageName = 'immobilien:kompass:tool';
    s.channel  = 'immobilien';
    s.prop1 = 'immobilien:kompass';
    s.prop7 = 'tool';
    s.prop12 = 'immobilien:kompass:tool';
    s.hier1 = 'immobilien,kompass';
    // append country, city, part of city
    if (typeof(CC_GLOBAL_SELECTED_COUNTRY) != 'undefined' && CC_GLOBAL_SELECTED_COUNTRY !== false) {
      if (typeof(SC_IMMOKOMPASS_COUNTRIES) == 'object' && SC_IMMOKOMPASS_COUNTRIES[CC_GLOBAL_SELECTED_COUNTRY]) {
        s.hier1 += ',' + SC_IMMOKOMPASS_COUNTRIES[CC_GLOBAL_SELECTED_COUNTRY];
      } else {
        s.hier1 += ',' + CC_GLOBAL_SELECTED_COUNTRY;
      }
      if (typeof(CC_GLOBAL_SELECTED_REGION) != 'undefined' && CC_GLOBAL_SELECTED_REGION !== false) {
        if (CC_GLOBAL_SELECTED_COUNTRY == 0 &&
            typeof(SC_IMMOKOMPASS_GERMAN_REGIONS) == 'object' &&
            SC_IMMOKOMPASS_GERMAN_REGIONS[CC_GLOBAL_SELECTED_REGION]) {
          s.hier1 += ',' + SC_IMMOKOMPASS_GERMAN_REGIONS[CC_GLOBAL_SELECTED_REGION];
        } else {
          s.hier1 += ',' + CC_GLOBAL_SELECTED_REGION;
        }
        if (typeof(CC_GLOBAL_SELECTED_DISTRICT) != 'undefined' && CC_GLOBAL_SELECTED_DISTRICT != false) {
          s.hier1 += ',' + CC_GLOBAL_SELECTED_DISTRICT;
        } else {
          s.hier1 += ',kein stadtteil gewaehlt';
        }
      } else {
        s.hier1 += ',keine stadt gewaehlt';
      }
    } else {
      s.hier1 += ',kein land gewaehlt';
    }
  } // end special handling for karte.ftd.de

  // catch register event
  if (s.getQueryParam('sso_action') == 've') {
    var regevent = document.getElementById('sc_register_event');
    // if the element isn't there yet try again in some msecs
    // -- but only a limited number of times
    if (regevent) {
      cm_addEvent('event7');
    } else if (s.numattempt < 3) {
      //console.log("sc_register_event not found, recursing; numattempt: ", s.numattempt);
      s.numattempt++;
      setTimeout("sc_do_request(s)", 500);
      return false;
    } 
  }

  // catch campaigns
  // old param
  if (!s.campaign) {
    s.campaign=s.getQueryParam('CMP')
    s.campaign=s.getValOnce(s.campaign,'s_campaign',0)
  }
  // new param
  if (!s.campaign) {
    s.campaign=s.getQueryParam('campaign')
    s.campaign=s.getValOnce(s.campaign,'s_campaign',0)
  }
  // utm_source or osc_source
  if (!s.campaign && (window.location.href.indexOf('utm_source') != -1 || window.location.href.indexOf('osc_source') != -1)) {
    var campaign = sc_get_campaign();
    if (campaign != null) {
      s.campaign = campaign['source'] + '-' + campaign['medium'] + '-' + campaign['campaign'];
      s.eVar12 = campaign['source'];
      s.eVar13 = campaign['medium'];
      s.eVar14 = '';
      s.prop15 = campaign['link_position'];
      s.hier3  = campaign['source'] + ',' + campaign['medium'] + ',' + campaign['campaign'] + ',' +
                 s.prop1;
      if (typeof(campaign['medium']) == 'undefined' || campaign['medium'] == 'undefined' ||
          campaign['medium'] == '' || typeof(campaign['campaign']) == 'undefined' ||
          campaign['campaign'] == 'undefined' || campaign['campaign'] == '') {
        s.prop19 = window.location;
        s.prop20 = document.referrer;
      }
    }
  }
  
  if(!s.eVar1)s.eVar1=s.prop1;//artikelid in commerce
  if(!s.eVar2)s.eVar2=s.pageName;//pagename in commerce 
  if(!s.eVar3)s.eVar3=s.channel;//site section in commerce 
  if(!s.eVar4)s.eVar4="+1";//pagecount as evar 
  if(!s.eVar7)s.eVar7=s.prop7;//content typ in commerce 
  if(!s.eVar9)s.eVar9=s.prop8;//internal search keyword 
  if(!s.eVar11)s.eVar11=s.prop11;//referrer domain 
  if(!s.eVar12)s.eVar12=s.getValOnce(s.getQueryParam('source'),'v12',0);
  if(!s.eVar13)s.eVar13=s.getValOnce(s.getQueryParam('medium'),'v13',0);
  if(!s.eVar14)s.eVar14=s.getValOnce(s.getQueryParam('campaign'),'v14',0);
  
  // finally, all to lower case...
  var props = new Array('pageName','channel','prop1','prop2','prop3','prop6',
                        'prop7','prop8','prop9','prop10','prop11','prop12',
                        'prop13','prop14','prop15','prop16','prop17','prop18',
                        'prop19', 'prop20',
                        'hier1','hier2','hier3','campaign','eVar12','eVar13',
                        'eVar14');
  for (i in props)
  {
    if (typeof props[i] != 'function')
    {
      eval('tmp = s.'+props[i] + ';');
      if (typeof tmp == 'string')
      {
        eval('s.'+props[i]+'=s.'+props[i]+'.toLowerCase()');
      }
    }
  }

  // fix number of search results
  if (s.prop9) {
    if (!s.prop8) {
      s.prop9 = '';
    } else {
      s.prop9 = cm_numberOfSearchResults(s.prop9);
    }
  }

  // always add "event1"
  cm_addEvent('event1');

}

/* nicht mehr benutzen. funktion ist in s_doPlugins gewandert. 
function sc_do_request(s) {
	s_doPlugins();
  	var s_code = s.t(); 
  	// it looks like this is doing nothing, but it's taken from sc-code so we better let it be
  	if (s_code) {
    	document.write(s_code); 
  	}
} */
