/* 
 xtrtrkr 
 custom variables: 
 1: social_first_click - visitor scope
 2: social_influencer - visitor scope
 3: CurrentOfferCode - visit scope
 4: Testing 
 5: subscriber - date of last subscription
*/

var Docs = ['doc','xls','pdf'];
var Srcs = ['twitter','facebook','youtube'];
var Tracked = false;
var ignoredforms = ['/search/','/your-basket/'];
var ignored_elements = [];
var ie7orbelow = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;
var dirtyLinks = ['#','javascript'];
var urchin_source = '';
var urchin_medium = '';
var urchin_term = '';
var pmx = false;
var userType = '';
var transaction_page = '/checkout/onepage/success/';

var domains = [
  [
//production domains
	  {name:'www.magazinesdirect.com',UA:'UA-5142830-1', subdomain:'none'},
	  {name:'secure.magazinesdirect.co.uk',UA:'UA-5142830-1', subdomain:'none'}
  ],
//testing domains
  [
    {name:'panther',UA:'UA-5142830-5',subdomain:'none'},
  	{name:'magazinesdirect.widearea.co.uk',UA:'UA-5142830-5', subdomain:'none'}
  ]
];

var subdomain = 'none';

function get_UA(){
  UA = '';
//g = domain group index
//i = domain index
  for(var g = 0; g < domains.length; g++){
  	for(var i = 0; i < domains[g].length; i++){  
      if(document.location.toString().indexOf(domains[g][i].name) > -1){	  
        UA = domains[g][i].UA;
        if(typeof(domains[g][i].subdomain) != undefined){
    	    subdomain = domains[g][i].subdomain;
        }
        return UA;
      }
    }
  }
  return UA;
}

function getParameterByName( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}

/*
  Helper functions for Internet Explorer's W3C complioance frailty
*/
if (/msie/i.test (navigator.userAgent)) //only override IE
{
  document.nativeGetElementById = document.getElementById; 
  document.getElementById = function(id)
  {
    var elem = document.nativeGetElementById(id);
    if(elem)
    {
      //make sure that it is a valid match on id
      if(elem.attributes['id'].value == id)
      {
        return elem;
      }
      else
      {
        //otherwise find the correct element
        for(var i=1;i<document.all[id].length;i++)
        {
          if(document.all[id][i].attributes['id'].value == id)
          {
            return document.all[id][i];
          }
        }
      }
    }
    return null;
  }
}


function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}
 
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}


function _LinksCheck(CheckItems,lnk){
  var LinkCheck = false;
  for(var i = 0; i < CheckItems.length; i++){
    if(lnk.indexOf(CheckItems[i]) > -1){
      LinkCheck = true;
    }
  }
  return LinkCheck;
}

function _PageTrack(URL){
  var pageTracker = _gat._getTracker(get_UA());
  pageTracker._setDomainName('none');
  pageTracker._setAllowLinker(true);
  pageTracker._trackPageview(URL);

  Tracked = true;
}

function _ExitPageTrack(URL,Dest,newWindow,exit){
  if(exit){
	_PageTrack('/exit/'+URL);
  }else{
	_PageTrack(URL);
  }
 
  setTimeout(function(){
    if(Tracked){
      if(newWindow){
	    Tracked = false;
        window.open(Dest);
      }else{
	    window.location.href = Dest;
      }
    }
  }, 100);
  return false;
}

function pmxdomainCheck(link){
  pmxlink = false;
  for(var i = 0; i < domains.length; i++){
	if((link.indexOf('http:')>=0) && (link.indexOf(domains[i].name)>0) && (document.domain.indexOf(domains[i].name)<0)){pmxlink=true}
  }
  return pmxlink
}

function _ExitTrack(Links){

  for(var i = 0; i < Links.length; i++){
    if((Links[i].href.toString().indexOf(document.domain)<0) && (!pmxdomainCheck(Links[i].href.toString())) && (Links[i].href.toString().indexOf('mailto')<0) && (Links[i].href.toString().indexOf('http:')>=0) && (!_LinksCheck(Docs, Links[i].href.toString()))){
      if(!ie7orbelow){
        Links[i].setAttribute("onclick","return _ExitPageTrack('" + Links[i].href + "','" + Links[i].href + "'," + (Links[i].target != '') + ",true)");
      }else{
	    Links[i].onclick=function() { _ExitPageTrack(this.href,this.href,(this.target != ''),true); };
      }
    }
  }
}

function _DownloadTrack(lnks) {
  for(var i = 0; i < lnks.length; i++){
    if(_LinksCheck(Docs, lnks[i].href)){
	  if(!ie7orbelow){
        lnks[i].setAttribute("onclick","return _ExitPageTrack('/download/" + lnks[i].href + "','" + lnks[i].href + "',true,false);");
	  }else{
	    lnks[i].onclick=function() { _ExitPageTrack('/download/' + this.href,this.href,true,false); };
      }
    }
  }
}

function _MailTrack(Links) {
  for(var i = 0; i < Links.length; i++){
    if(Links[i].href.indexOf("mailto:") > -1){
	  if(!ie7orbelow){
        Links[i].setAttribute("onclick","_PageTrack('/mailto/" + Links[i].href + "')");
	  }else{
	    Links[i].onclick=function() { _PageTrack('/mailto/'+this.href); };
      }
    }
  }
}

function get_utm_value(l,n,s,vregex)
{if (!l || l=="" || !n || n=="" || !s || s=="") return "-";
var i, i2, i3, c="-";
var regex = new RegExp(vregex);
i=l.indexOf(n);
i3=n.indexOf("=")+1;
if (i > -1){i2=l.indexOf(s,i);
  if (i2 < 0){i2=l.length;}
  c=l.substring((i+i3),i2);
}
vout = regex.exec(c) == null ? '' : regex.exec(c)[1];
return vout;}

function _SocialTrack(){
  for(var i = 0; i < Srcs.length; i++){
    if(document.referrer && document.referrer.indexOf(Srcs[i])>=0){
      if(readCookie('__utma')==null){	
        _gaq.push(['_md._setCustomVar',1,'social_first_click',Srcs[i],1]);
      }else{	
	    var social_history = get_utm_value(document.cookie, '__utmv=', ';','social_influencer=([a-zA-Z]*)');
	    if(social_history!='' && social_history.indexOf(Srcs[i])<0){
	      _gaq.push(['_md._setCustomVar',2,'social_influencer',social_history+'-'+Srcs[i],1]);
	    }else{
		  _gaq.push(['_md._setCustomVar',2,'social_influencer',Srcs[i],1]);
	    }
      }
    }
  }

  return true;
}

function _uGC(l, n, s) {
    if (!l || l == "" || !n || n == "" || !s || s == "") return "-";
    var i, i2, i3, c = "-";
    i = l.indexOf(n);
    i3 = n.indexOf("=") + 1;
    if (i > -1) {
        i2 = l.indexOf(s, i);
        if (i2 < 0) {
            i2 = l.length
        }
        c = l.substring((i + i3), i2)
    }
    return c
} 

function grabReferrer() {
    var z = _uGC(document.cookie, "__utmz=", ";");
    urchin_source = _uGC(z, "utmcsr=", "|");
    urchin_medium = _uGC(z, "utmcmd=", "|");
    urchin_term = _uGC(z, "utmctr=", "|");
    var gclid = _uGC(z, "utmgclid=", "|");
    if (gclid != '-') {
        urchin_source = "google";
        urchin_medium = "cpc"
    }
}

function tagSubscriber(date_of_last_subscription){
	_gaq.push(['_md._setCustomVar', 5, 'subscriber', date_of_last_subscription, 1]);
}

function CurrentOfferCode(CurrentOfferCode){
	_gaq.push(['_md._setCustomVar', 3, 'CurrentOfferCode', CurrentOfferCode, 2]);
}


function addItem(id,sku,name,cat,price,quantity){
  _gaq.push(['_md._addItem',
    id,     	       // order ID - required
    sku,        	   // SKU/code - required
    name,       	   // product name
    cat,   			   // category or variation
    price,             // unit price - required
    quantity           // quantity - required
  ]);
}

function _Trans(id,affiliation,total,tax,shipping,city,state,country,items,voucher,discount_amount){
	if(voucher != ''){
	  _gaq.push(['_md._trackEvent','discounted_order',voucher,'',discount_amount]);
	}
	
  _gaq.push(['_md._trackPageview',transaction_page]);
  	
  if(readCookie('ecomtracker:'+id.toString())<1){
    _gaq.push(['_md._addTrans',
      id,           	 // order ID - required
      affiliation,       // affiliation or store name
      total,           	 // total - required
      tax,            	 // tax
      shipping,          // shipping
      city,        		 // city
      state,   		     // state or province
      country            // country
    ]);

    for(var i = 0; i < items.length; i++){
  	  addItem(id,items[i].sku,items[i].name,items[i].cat,items[i].price,items[i].quantity);
    }

    _gaq.push(['_md._trackTrans']); //submits transaction to the Analytics servers 
  }
}

function _FormTrack(forms){
  if(forms && forms.length > 0){
 		for(var i = 0; i < forms.length; i++){
	  	form_name = forms[i].name;
	  	elements = forms[i].elements;

	  	for(var j = 0; j < elements.length; j++){
				element_id = elements[j].id;	
				ignored_element = false;
				for(var k = 0; k < ignored_elements.length; k++){
					if(!ignored_element && elements[j].type && elements[j].type == ignored_elements[k]){
						ignored_element = true;
					}					
				}

				if(!ignored_element){
 				  if(!ie7orbelow){			
		  		  elements[j].setAttribute("onFocus","_gaq.push(['_md._trackEvent', 'Form Events', '" + document.location.pathname + "', '" + element_id + "']);");
				  }else{
					  elements[j].onFocus=function() { _gaq.push(['_md._trackEvent', 'Form Events', document.location.pathname + " | ", element_id]); };
	    	  }
        }
	  	}
    }
  }
}

function _cleanForms(forms){
  cleanedForms = [];
  for(var i = 0; i < forms.length; i++){ 
	cleanForm = true;
	for(var j = 0; j < ignoredforms.length; j++){ 
  	  if((forms[i].action != '') && (forms[i].action.toString().indexOf(ignoredforms[j])>=0)){
	    cleanForm = false;
      }
    }
    if(cleanForm){cleanedForms.push(forms[i]);}
  }
  return cleanedForms;
}

function cleanLinks(lnks){
  cleanedLinks = [];
  for(var i = 0; i < lnks.length; i++){ 
	cleanLink = true;
    for(var j = 0; j < dirtyLinks.length; j++){
	  if(lnks[i].href.indexOf(dirtyLinks[j])>=0){
	    cleanLink = false;
	  }
	}
	if(cleanLink){cleanedLinks.push(lnks[i]);}
  }
  return cleanedLinks;
}

function _CleanerInPageAnalytics(lnks){
	tracked = [lnks[0]];
	
	extra_param = 0;
	unique=true;
	for(i = 1;i<lnks.length;i++){
		if((lnks[i].toString().length>0) && (lnks[i].toString().indexOf('extra=')<0) && (tracked.valueOf().toString().indexOf(lnks[i].toString())>-1)){unique=false;}
		if(!unique){
			if(lnks[i].toString().indexOf('?')>0){
	    	lnks[i].href = lnks[i].href + '&extra='+extra_param;
			}else{
	    	lnks[i].href = lnks[i].href + '?extra='+extra_param;					
			}
			extra_param = extra_param + 1;
		  unique=true;
    }else{
	  	tracked.push(lnks[i]);
    }
  }
}

function _EventTrack(category,action,label,value){
  var pageTracker = _gat._getTracker(get_UA());
  if(document.location.toString().indexOf(subdomain)>0){
    pageTracker._setDomainName(subdomain);
    pageTracker._setAllowLinker(true);
  }
  pageTracker._trackEvent(category,action,label,value);

  Tracked = true;
}

function _trackAddToBasket(btn, product){	
	_EventTrack('Add_To_Basket',document.location.pathname,product);
	jQuery('<input type="hidden" name="' + jQuery(btn).attr('name') + '" value="1"/>').insertAfter(jQuery(btn));			
	
	setTimeout(function(){
    if(Tracked){
		  jQuery('form[name="pricing_table"]').submit();
    }
  }, 100);

	return false;
}

function _addToBasketTracking(){	
	/*jQuery('.col-button button').bind('click', function(){
		return _trackAddToBasket(jQuery(this),jQuery(this).attr('name'));
  });
  
  Edit by Viral to preserve delegation handler in function loadingMessage in common.js
  */	
  
  jQuery('form').delegate('.col-button button','click', function() {
		return _trackAddToBasket(jQuery(this),jQuery(this).attr('name'));
  });
  
}

function _trackInfoHover(path){
	_EventTrack('Info Hover',path);
	  
	return false;
}

function _moreInfoHoverTrack(){
	jQuery('a.info').mouseout(function(){
		product = jQuery(this).attr('href');
		if(product.indexOf('extra')){
			product=product.substring(0,product.indexOf('extra')-1);
		}
		return _trackInfoHover(product);
	});
}

function _trackAlsoBought(product,pathname){
	_EventTrack('Customer_Who_Also_Bought_Clicked',document.location.pathname,product);
	
	setTimeout(function(){
    if(Tracked){
			document.location.href = pathname;
    }
  }, 100);
	
	return false;
}

function _customerWhoAlsoBoughtTrack(){
	jQuery('#related .item a img').click(function(){
		return _trackAlsoBought(jQuery(this).attr('title'),jQuery(this).parent().attr('href'));
	});
	
	jQuery('#related .button').click(function(){
		return _trackAlsoBought(jQuery(this).attr('title'),jQuery(this).attr('href'));
	});
}

function _trackLastViewed(product,pathname){
	_EventTrack('LastViewed_Clicked',document.location.pathname,product);
	
	setTimeout(function(){
    if(Tracked){
			document.location.href = pathname;
    }
  }, 100);

	return false;
}

function _lastViewedTrack(){
	jQuery('#last-viewed a').click(function(){
		return _trackLastViewed(jQuery(this).text(),jQuery(this).attr('href'));
	});
}

function _ExtraTrack(){
  fullForms = document.getElementsByTagName('form');
  cleanedForms = _cleanForms(fullForms);
  _FormTrack(cleanedForms);

  fullLinks = document.getElementsByTagName('a');
  Links = cleanLinks(fullLinks);   

  _SocialTrack();
  _ExitTrack(Links);
  _DownloadTrack(Links);
  _MailTrack(Links);
  _CleanerInPageAnalytics(Links);
  _addToBasketTracking();
  _moreInfoHoverTrack();
  _customerWhoAlsoBoughtTrack();
  _lastViewedTrack();

  if(pmx){
    grabReferrer();

    for(var i = 0; i < Links.length; i++){
	  for(var j = 0; j < domains.length; j++){
        if((pmxdomainCheck(Links[i].href))&&(Links[i].href.toString().indexOf('utm_content')<0)){
	        poormansxdomain = '';
		
    	    if(Links[i].href.indexOf('?') > 0){
    		    poormansxdomain = "&"
		      } else {
		        poormansxdomain = "?"
		      }
		
		      poormansxdomain += "utm_content=" + urchin_source + "|" + urchin_medium;
		      if (urchin_term != '-') poormansxdomain += "&utm_term=" + urchin_term;
		      pmxlink = Links[i].href + poormansxdomain;
		      Links[i].href = pmxlink;
        }
      }
    }
  }

  if(document.location.pathname.toString().indexOf(transaction_page)<0){
    if(document.location.pathname.indexOf('404.html')>-1){
  	  _gaq.push(['_md._trackPageview','/404'+document.location.pathname]);
    }else{
			if(jQuery("#checkout-page h2").text().toLowerCase().indexOf('payment required') > -1){ 
				_gaq.push(['_md._trackPageview', '/basket']);
			  _gaq.push(['_md._trackPageLoadTime']);
			}else{ 
			  _gaq.push(['_md._trackPageview']);
				_gaq.push(['_md._trackPageLoadTime']);    	
			}
    }
  }
}

var _gaq = _gaq || [];	
_gaq.push(['_md._setAccount', get_UA()]);
if((document.location.toString().indexOf(subdomain)>0) || (subdomain=='none')){
  _gaq.push(['_md._setDomainName',subdomain]);
  _gaq.push(['_md._setAllowLinker',true]);
}

jQuery(document).ready(function() {
  _ExtraTrack();
});

(function() {
  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';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

