/*
 * 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
 * basierend auf v29.9.09 fuer ftd.de
 */
  
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');
}


/**
 * 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) {
  if (typeof siteCatalystLocal !== 'object' || typeof siteCatalystLocal.excludedReferers !== 'array') {
    return false;
  }

  for (i=0; i < siteCatalystLocal.excludedReferers.length; i++) {
    if (item == siteCatalystLocal.excludedReferers[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 != '') && (document.referrer.indexOf("fb-xd-fragment") == "-1") && (document.URL.indexOf("fb-xd-fragment") == "-1")) {
    s.prop11 = referer;
  }

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

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

  // 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;
    } 
  }

  // call and get site specific stuff
  if (typeof siteCatalystLocal === 'object') {
    if (typeof siteCatalystLocal.setProperties === 'function') {
      siteCatalystLocal.setProperties(); 
    }
    if (typeof siteCatalystLocal.linkInternalFilters === 'string') {
      s.linkInternalFilters = siteCatalystLocal.linkInternalFilters;
    }
  }

  // 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');

}

