/*
 * zeepzap tracker version 1.4
 *
 * Copyright (c) 2010 zeepzap team (zeepzap.info)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL version 2.0 (GPL-LICENSE.txt) licenses.
 *
 * Date: 2011-01-05
 * Rev: 4
 */
var zeepzap = zeepzap ? zeepzap : new Object();
var _gaq = _gaq || [];
var clicky_custom = clicky_custom ? clicky_custom : new Object();

// Object constructor
zeepzap.tracker = new Object();
zeepzap.tracker.ready = 0;
zeepzap.tracker.workers = ['self'];
zeepzap.tracker.options = {'autoload':true};

zeepzap.tracker.init = function(options) {
 if (this.ready > 1) {
  return;
 };
 if (options.workers.ga) {
   this.workers.push('ga');
   this.options.ga = options.workers.ga;
 }
 if (options.workers.clicky) {
   this.workers.push('clicky');
   this.options.clicky = options.workers.clicky;
 }
 this.ready = 1;
 if (this.options.autoload) {
  this.track('pageview');
 };
};

zeepzap.tracker.detectFlash = function() {
	var flashData = {installed:false};
	if(navigator.plugins && navigator.plugins.length>0){
	 var type = 'application/x-shockwave-flash';
	 var mimeTypes = navigator.mimeTypes;
	 if(mimeTypes && mimeTypes[type] && mimeTypes[type].enabledPlugin && mimeTypes[type].enabledPlugin.description){
	  var version = mimeTypes[type].enabledPlugin.description;
	  var descParts = version.split(/ +/);
	  var majorMinor = descParts[2].split(/\./);
	  var revisionStr = descParts[3];
	  var versionObj = {
	   //"raw":version,
	   "major":parseInt(majorMinor[0], 10),
	   "minor":parseInt(majorMinor[1], 10) 
	  };
	     
      //flashData.raw = version;
      flashData.major = versionObj.major;
      flashData.minor = versionObj.minor; 
      flashData.installed = true;
	 }
	} else if(navigator.appVersion.indexOf("Mac")==-1 && window.execScript){
	 var version = -1;
	 var getActiveXObject = function(name){
		 var obj = -1;
		 try{
		 obj = new ActiveXObject(name);
		 }catch(err){
		 obj = {activeXError:true};
		 }
		 return obj;
		 };	
	 var getActiveXVersion = function(activeXObj){
		 var version = -1;
		 try{
		 version = activeXObj.GetVariable("$version");
		 }catch(err){}
		 return version;
		 };	 
	 var activeXDetectRules = [{
		  "name":"ShockwaveFlash.ShockwaveFlash.7",
		  "version":function(obj){
		   return getActiveXVersion(obj);
		  }
		 },
		 {
		  "name":"ShockwaveFlash.ShockwaveFlash.6",
		  "version":function(obj){
		   var version = "6,0,21";
		   try{
		   obj.AllowScriptAccess = "always";
		    version = getActiveXVersion(obj);
		   }catch(err){}
		    return version;
		  }
		 },
		 {
		  "name":"ShockwaveFlash.ShockwaveFlash",
		  "version":function(obj){
		   return getActiveXVersion(obj);
		  }
		 }
	 ];
	 for(var i=0; i<activeXDetectRules.length && version==-1; i++){
	  var obj = getActiveXObject(activeXDetectRules[i].name);
	  if(!obj.activeXError){
	 	 flashData.installed = true;
	   	 version = activeXDetectRules[i].version(obj);
	   	 if(version!=-1){
	   		 var versionArray = version.split(",");//replace with regex
	   		 var versionObj = {
	   	            "raw":version,
	   	            "major":parseInt(versionArray[0].split(" ")[1], 10),
	   	            "minor":parseInt(versionArray[1], 10),
	   	            "revision":parseInt(versionArray[2], 10),
	   	            "revisionStr":versionArray[2]
	   	     };
    		 flashData.raw = versionObj.raw;
             flashData.major = versionObj.major;
             flashData.minor = versionObj.minor; 
             flashData.revision = versionObj.revision;
             flashData.revisionStr = versionObj.revisionStr;
         }
	  }
	 }
	}
	return flashData;
};

zeepzap.tracker.session_data = (-1);

zeepzap.tracker.track = function (ttype, url) {
 switch(ttype) {
  case 'pageview':
   this._pageView();
   break;
  case 'virtual':
  case 'virt':
   this._track_local({'type':'virt',path:url});
   if(typeof(zeepzap.tracker._track_ga) != 'undefined') {
    zeepzap.tracker._track_ga({'virtual_pageview':url});
   }
   if(typeof(zeepzap.tracker._track_clicky) != 'undefined') {
	zeepzap.tracker._clicky_log(url);
   }
   break;
 }
};

zeepzap.tracker._track_local = function(options) {
 if (!options) {
  options = {'path': Drupal.settings.zeepzap.cpath}
 }
 var t = zeepzap.tracker;
 var rdata = {'ts':new Date().getTime(),'vid':'', 'sid':'', 'lang':Drupal.settings.zeepzap.lang };
 if (options.type) {
  rdata.type = options.type;
 }
 if (options.path) {
  rdata.path = options.path;
 }
 if (typeof(document.referrer)!='undefined'){
  rdata.ref = document.referrer;
 }
 // Detect visitor.
 if (t.session_data.visitor) {
  rdata.vid = t.session_data.visitor; 
 }
 else if (typeof(window.localStorage)!='undefined' && typeof(window.localStorage.unitrack_vid)!='undefined' && window.localStorage.unitrack_vid) {
  rdata.vid = window.localStorage.unitrack_vid;
 }
 else {
  cookie_data = zeepzap.readCookie('unitrack_vid');
  if (cookie_data) {
	rdata.vid = cookie_data;
	if(typeof(window.localStorage)!='undefined') {
	 window.localStorage.unitrack_vid = cookie_data;
	}
  }
 }
 
 // Detect session.
 if (t.session_data.session) {
  rdata.sid = t.session_data.visitor; 
 }
 else if (typeof(window.sessionStorage)!='undefined' && typeof(window.sessionStorage.unitrack_sid)!='undefined' && window.sessionStorage.unitrack_sid) {
  rdata.sid = window.sessionStorage.unitrack_sid;
 }
 else {
  cookie_data = zeepzap.readCookie('unitrack_sid');
  if (cookie_data) {
   rdata.sid = cookie_data;
   if(typeof(window.sessionStorage)!='undefined') {
	window.sessionStorage.unitrack_sid = cookie_data;
   }  
  }
 }
 
 if (!rdata.sid) {
  rdata.javaEnabled = navigator.javaEnabled().toString();
  rdata.os = navigator.platform;
  rdata.ua = navigator.userAgent;
  rdata.resolution = screen.width + 'x' + screen.height;
  flashData = this.detectFlash();
  rdata.flash = flashData.installed ? (flashData.major + '.' + flashData.minor) : 'none';
 }
 zeepzap.tracker.ready = 0;
 $.post(Drupal.settings.zeepzap.tracker, rdata, function(data) {
  if(typeof(data.visitor)!='undefined' && typeof(window.localStorage)!='undefined' && data.visitor.length>10) 
   window.localStorage.unitrack_vid = data.visitor;
  else
   data.visitor = rdata.vid;
  if(typeof(window.sessionStorage)!='undefined' && typeof(data.session)!='undefined' && data.session.length>10)
   window.sessionStorage.unitrack_sid = data.session;
  else
   data.session = rdata.sid;
  zeepzap.tracker.session_data = data;
  zeepzap.tracker.ready = 2;
 },'json');	
};

zeepzap.tracker._pageView = function () {
 var rdata = {'ts':new Date().getTime(),'vid':'', 'sid':'','path':Drupal.settings.zeepzap.cpath, 'lang':Drupal.settings.zeepzap.lang};
 var cookie_data = '';
 if (typeof(document.referrer)!='undefined'){
  rdata.ref = document.referrer;
 }
 if (typeof(window.localStorage)!='undefined' && typeof(window.localStorage.unitrack_vid)!='undefined' && window.localStorage.unitrack_vid) {
  rdata.vid = window.localStorage.unitrack_vid;
 }
 else {
  cookie_data = zeepzap.readCookie('unitrack_vid');
  if (cookie_data) {
   rdata.vid = cookie_data;
   if(typeof(window.localStorage)!='undefined') {
	window.localStorage.unitrack_vid = cookie_data;
   }
  }
 }
 if (typeof(window.sessionStorage)!='undefined' && typeof(window.sessionStorage.unitrack_sid)!='undefined' && window.sessionStorage.unitrack_sid) {
  rdata.sid = window.sessionStorage.unitrack_sid;
 }
 else {
  cookie_data = zeepzap.readCookie('unitrack_sid');
  if (cookie_data) {
   rdata.sid = cookie_data;
   if(typeof(window.sessionStorage)!='undefined') {
	window.sessionStorage.unitrack_sid = cookie_data;
   }  
  }
 }
 if (!rdata.sid) {
  rdata.javaEnabled = navigator.javaEnabled().toString();
  rdata.os = navigator.platform;
  rdata.ua = navigator.userAgent;
  rdata.resolution = screen.width + 'x' + screen.height;
  flashData = this.detectFlash();
  rdata.flash = flashData.installed ? (flashData.major + '.' + flashData.minor) : 'none';
 }
 $.post(Drupal.settings.zeepzap.tracker, rdata, function(data) {
  if(typeof(data.visitor)!='undefined' && typeof(window.localStorage)!='undefined' && data.visitor.length>10) 
   window.localStorage.unitrack_vid = data.visitor;
  else
   data.visitor = rdata.vid;
  if(typeof(window.sessionStorage)!='undefined' && typeof(data.session)!='undefined' && data.session.length>10)
   window.sessionStorage.unitrack_sid = data.session;
  else
   data.session = rdata.sid;
  zeepzap.tracker.session_data = data;
  if (zeepzap.tracker.options.clicky) {
   zeepzap.tracker._track_clicky(data);
  }
  if (zeepzap.tracker.options.ga) {
   zeepzap.tracker._track_ga(data);
  }
  if (typeof(data.redirect) != 'undefined' && data.redirect != 'noredirect') {
	window.location = data.redirect;
  }
  zeepzap.tracker.ready = 2; // Ready and stats done.  
 },'json');	
};

function truncate(input) {
  var byteLength = 61;
  return encodeURIComponent(input.substr(0,byteLength));
}

zeepzap.tracker._track_ga = function(session_data) {
  _gaq.push(['_setAccount', this.options.ga.primary_account]);
  
  if(this.options.ga.set_campaign_params && zeepzap.readCookie('__utmz') == '' && typeof(session_data.visitor_data) != 'undefined') {  
          
          var utmz_params = new Array();
          
          if(typeof(session_data.visitor_data[this.options.ga.utm_source]) != 'undefined'){
        	  utmz_params.push('utm_source='+session_data.visitor_data[this.options.ga.utm_source]);
          }
          if(typeof(session_data.visitor_data[this.options.ga.utm_campaign]) != 'undefined'){
        	  utmz_params.push('utm_campaign='+session_data.visitor_data[this.options.ga.utm_campaign]);
          }
          if(typeof(session_data.visitor_data[this.options.ga.utm_medium]) != 'undefined'){
        	  utmz_params.push('utm_medium='+session_data.visitor_data[this.options.ga.utm_medium]);
          }
          if(typeof(session_data.visitor_data[this.options.ga.utm_term]) != 'undefined'){
        	  utmz_params.push('utm_term='+session_data.visitor_data[this.options.ga.utm_term]);
          }
          if(typeof(session_data.visitor_data[this.options.ga.utm_content]) != 'undefined'){
    		  utmz_params.push('utm_content='+session_data.visitor_data[this.options.ga.utm_content]);
          }
          
          utmz_params = utmz_params.join('&');
		  
          if(utmz_params != ""){
        	  var orighash = document.location.hash;
              if (orighash == "") {
                orighash = "_";  // this is done to prevent page scrolling
              }
    		  document.location.hash = utmz_params;
    		  _gaq.push(['_setAllowAnchor', true]);
          }
  }
  
  if (this.options.ga.rollup_account) {
	_gaq.push(['rollup._setAccount', this.options.ga.rollup_account]);
  }
  if (this.options.ga.linkage_enabled && this.options.ga.linked_domains) {
	_gaq.push(['_setAllowLinker', true]);
	_gaq.push(['_setAllowHash', true]);
	$('a').each(function() {
	 if (this.hostname == window.location.hostname) return;
	 var doms = zeepzap.tracker.options.ga.linked_domains;
	 var processed = false;
	 for(i=0;i<doms.length;i++) {
	  if(!processed && this.hostname == doms[i]) {
	   processed = true;
	   $(this).click(function(){_gaq.push(['_link', this.href, 'true']);return false;});
	  }
	 }
	});
  }
  
  if(typeof(session_data.segmentation)!='undefined') {
    _gaq.push(['_setVar', session_data.segmentation]);
  }
  if(typeof(session_data.virtual_pageview)!='undefined') {
    _gaq.push(['_trackPageview', session_data.virtual_pageview]);
  }
  //visualwebsiteoptimizer.com GA integration
  if(typeof(_vis_opt_GA_track) == "function") { 
	  _vis_opt_GA_track(); 
	  _gaq.push(['_trackPageview']);
  }
  else {
    _gaq.push(['_trackPageview']);
    if (this.options.ga.rollup_account) {
  	  _gaq.push(['rollup._trackPageview']);
    }
  }
  //saving referrer to custom var
  if (document.referrer != '') {
	  //max string length received by google
	  var byteLength = 61;
	  var ref = document.referrer.substr(7,document.referrer.length);
	  ref = encodeURIComponent(ref.substr(0,byteLength));
	  _gaq.push(["_setCustomVar",1,"Referrer-Info",ref,1]);  
  }else {
	  _gaq.push(["_setCustomVar",1,"Referrer-Info","noreferrer",1]); 
  }
		  
  var ga = document.createElement('script');
  ga.type = 'text/javascript'; 
  ga.async = true;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  if(this.options.ga.set_campaign_params && zeepzap.readCookie('__utmz') == '' && typeof(session_data.visitor_data) != 'undefined' && utmz_params != "") {
    ga.onload = function() {
    	document.location.hash = orighash;
	}
  }
  var s = document.getElementsByTagName('head')[0]; 
  s.parentNode.insertBefore(ga, s);
};

zeepzap.tracker._track_clicky = function(session_data) {
  var scr = document.createElement('script');
  scr.type = 'text/javascript';
  scr.options = Drupal.settings.zeepzap.workers.clicky;
  scr.onload = function() {
	clicky_custom.session = session_data;
	clicky.init(this.options.account);
  };
  scr.src = 'https://static.getclicky.com/js';
  var headID = document.getElementsByTagName("head")[0];         
  headID.appendChild(scr);
};

zeepzap.tracker._clicky_log = function(log_message) {
 if (typeof(clicky) != 'undefined')
 clicky.log(log_message);
};

/**
 * This function is copied form jQuery.cookie plugin.
 * Place it here to avoid unnecessary loading of additional script file.
 */
zeepzap.readCookie = function(cookie_name) {
 cookieValue = '';
 if (document.cookie && document.cookie != '') {
  var cookies = document.cookie.split(';');
  for (var i = 0; i < cookies.length; i++) {
   var cookie = jQuery.trim(cookies[i]);
   // Does this cookie string begin with the name we want?
   if (cookie.substring(0, cookie_name.length + 1) == (cookie_name + '=')) {
    cookieValue = decodeURIComponent(cookie.substring(cookie_name.length + 1));
    break;
   }
  }
 }
 return cookieValue;
};

$(function(){
 zeepzap.tracker.init(Drupal.settings.zeepzap);
});;

