/* 
# v2.2
# Nov 2011
# Extra Tracker
# url: http://www.webexpectations.com/
*/
var ExtraTrack = new function() {
  
	/*
	# Global Variables
	*/
	this.Docs = ['.doc','.xls','.pdf'];
	this.Srcs = ['twitter','facebook','youtube'];
	this.Tracked = false;
	this.ignoredforms = ['login-form','search_mini_form','newsletter-validate-detail','product_addtocart_form','newsletter-validate-detail'];
	this.ignored_elements = ['button','submit','fieldset'];
	this.ie7orbelow = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;
	this.dirtyLinks = ['#','javascript','youtube'];
	this.urchin_source = '';
	this.urchin_medium = '';
	this.urchin_term = '';
	this.pmx = false;
	this.userType = '';
	this.transaction_page = '/checkout/onepage/success/';
	this.k=3381458501;
	this.test_variation = 0;
	this.test_content = ['',
	  ''
	];
	this.subdomain = '';
	this.test_domain = 'bisselldirect';
//	this.test_domain = 'panther';
	this.test_page = '/checkout/cart';
	this.goal_page = '/checkout/onepage';
	this.domains = [
		[
			//production domains
			{name:'www.bisselldirect.co.uk',UA:'UA-5774395-1', subdomain:''}			
		],[
			//Test domains
		],
			//dev domain
		[
			{name:'bisselldirectdev',UA:'UA-5774395-4'},
			{name:'panther',UA:'UA-5774395-4'}
		]
	];
	
	/*
	# init
	# start everything off
	*/	
	this.init = function()
	{
		
		// Reference self so no loss of scope
		var self = ExtraTrack;
		// Xtrtrkr native functions
		self.cleanedForms = self.cleanForms();
		self.FormTrack(self.cleanedForms);
		self.fullLinks = document.getElementsByTagName('a');
		self.Links = self.cleanLinks(self.fullLinks);   
		self.SocialTrack();
		self.ExitTrack();
		self.DownloadTrack();
		self.MailTrack();
		self.CleanerInPageAnalytics();
		// Magento specific functions
		self.MailSignUpTrack();
		self.checkoutTracking();
		self.addToBasketTracking();
		self.videoPlayTracking();
		self.registeredCheck();
		self.loginCheck();
		

		/*
		# Generic trackPageview
		*/
		if ( document.location.pathname.toString().indexOf( self.transaction_page ) < 0 ) {
			if ( jQuery(".std h2").text() == 'Sorry, the page you requested could not be found' ) {
				_gaq.push(['_bissell._trackPageview','/404'+document.location.pathname]);
				self.Tracked = true;
			}
		} else {
			/*
			# If we are on the transaction page
			*/
			if ( self.readCookie('user_type') == 'logged_in' ) {
				_gaq.push(['_bissell._trackPageview','/checkout/onepage/success/logged_in']);
				self.Tracked = true;
			} else if ( self.readCookie('user_type') == 'registered' ) {
				_gaq.push(['_bissell._trackPageview','/checkout/onepage/success/registered']);
				self.Tracked = true;
			} else if ( self.readCookie('user_type') == 'guest' ) {
				_gaq.push(['_bissell._trackPageview','/checkout/onepage/success/guest']);
				self.Tracked = true;			
			}
		}
		if ( self.Tracked == false ) {
			_gaq.push(['_bissell._trackPageview']);
		}
		_gaq.push(['_bissell._trackPageLoadTime']);
		
		/*
		# initTrans() should be called after trackPageview
		*/
		self.initTrans();
				
	};
	
	/*
	# Extra Tracker Native Functions **************************************************************** 
	*/
	
	/*
	# Method to build and return an array of forms not to be ignored
	*/
	this.cleanForms = function(forms)
	{
		var self = ExtraTrack;
		var forms = document.getElementsByTagName('form');
		var cleanedForms = [];
		for(var i = 0; i < forms.length; i++){ 
			var cleanForm = true;
			for(var j = 0; j < self.ignoredforms.length; j++){ 
				if(forms[i].id.toString().indexOf(self.ignoredforms[j])>=0){
					cleanForm = false;
				}
			}
			if(cleanForm){cleanedForms.push(forms[i]);}
		}
		return cleanedForms;
	};
	
	/*
	# Method to track forms
	*/
	this.FormTrack = function(forms)
	{
		var self = ExtraTrack;
		if(forms && forms.length > 0){
			for(var i = 0; i < forms.length; i++){
				var form_name = forms[i].name;
				var elements = forms[i].elements;
				for(var j = 0; j < elements.length; j++){
					var element_id = elements[j].id;	
					var ignored_element = false;
					for(var k = 0; k < self.ignored_elements.length; k++){
						if(!ignored_element && elements[j].type && elements[j].type == self.ignored_elements[k]){
							ignored_element = true;
						}					
					}
					if(!ignored_element){
						if(!self.ie7orbelow){			
							elements[j].setAttribute("onFocus","_gaq.push(['_bissell._trackEvent', 'Form Events', '" + document.location.pathname + "', '" + element_id + "']);");
						}else{
							elements[j].onFocus=function() { _gaq.push(['_bissell._trackEvent', 'Form Events', document.location.pathname + " | ", element_id]); };
						}
					}
				}
			}
		}
	};
	
	/*
	# Build and return an array of links that are not to be ignored
	*/
	this.cleanLinks = function(lnks)
	{
		var self = ExtraTrack;
		var cleanedLinks = [];
		for(var i = 0; i < lnks.length; i++){ 
			var cleanLink = true;
			for(var j = 0; j < self.dirtyLinks.length; j++){
				if(lnks[i].href.indexOf(self.dirtyLinks[j])>=0){
					cleanLink = false;
				}
			}
			if(cleanLink){cleanedLinks.push(lnks[i]);}
		}
		return cleanedLinks;
	};
	
	/*
	# If the user has come from a social networking site reference in self.Srcs track via cookies and a custom var
	*/
	this.SocialTrack = function()
	{
		var self = ExtraTrack;
		for(var i = 0; i < self.Srcs.length; i++){
			if(document.referrer && document.referrer.indexOf(self.Srcs[i])>=0){
				if(self.readCookie('__utma')==null){	
					_gaq.push(['_bissell._setCustomVar',1,'social_first_click',self.Srcs[i],1]);
				}else{	
					var social_history = self.get_utm_value(document.cookie, '__utmv=', ';','social_influencer=([a-zA-Z]*)');
					if(social_history!='' && social_history.indexOf(self.Srcs[i])<0){
						_gaq.push(['_bissell._setCustomVar',2,'social_influencer',social_history+'-'+self.Srcs[i],1]);
					}else{
						_gaq.push(['_bissell._setCustomVar',2,'social_influencer',self.Srcs[i],1]);
					}
				}
			}
		}
		return true;
	};
	
	/*
	# Adding onclick events to external links
	*/
	this.ExitTrack = function(Links)
	{
		var self = ExtraTrack;
		for(var i = 0; i < self.Links.length; i++){
			if((self.Links[i].href.toString().indexOf(document.domain)<0) && (!self.pmxdomainCheck(self.Links[i].href.toString())) && (self.Links[i].href.toString().indexOf('mailto')<0) && (self.Links[i].href.toString().indexOf('http')>=0) && (!self.LinksCheck(self.Docs, self.Links[i].href.toString()))){
				if(!self.ie7orbelow){
					self.Links[i].setAttribute("onclick","return ExtraTrack.ExitPageTrack('" + self.Links[i].href + "','" + self.Links[i].href + "'," + (self.Links[i].target != '') + ",true)");
				}else{
					self.Links[i].onclick=function() { self.ExitPageTrack(this.href,this.href,(this.target != ''),true); };
				}
			}
		}
	};
	
	/*
	# Track exit in page view
	*/
	this.ExitPageTrack = function(URL,Dest,newWindow,exit)
	{
		var self = ExtraTrack;
		if(exit){
			self.PageTrack('/exit/'+URL);
		}else{
			self.PageTrack(URL);
		}
		setTimeout(function(){
			if(self.Tracked){
				if(newWindow){
					self.Tracked = false;
					window.open(Dest);
				}else{
					window.location.href = Dest;
				}
			}
		}, 100);
		return false;
	};
	
	/*
	# Add an onclick event to downloads
	*/
	this.DownloadTrack = function()
	{
		var self = ExtraTrack;
		for(var i = 0; i < self.Links.length; i++){
			if(self.LinksCheck(self.Docs, self.Links[i].href)){
				if(!self.ie7orbelow){
					self.Links[i].setAttribute("onclick","return ExtraTrack.ExitPageTrack('/download/" + self.Links[i].href + "','" + self.Links[i].href + "',true,false);");
				}else{
					self.Links[i].onclick=function() { self.ExitPageTrack('/download/' + this.href,this.href,true,false); };
				}
			}
		}
	};
	
	/*
	# Add am onlclick event to mailto links
	*/
	this.MailTrack = function() {
		var self = ExtraTrack;
		for(var i = 0; i < self.Links.length; i++){
			if(self.Links[i].href.indexOf("mailto:") > -1){
				//console.log( self.Links[i].href );
				if(!self.ie7orbelow){
					self.Links[i].setAttribute("onclick","ExtraTrack.PageTrack('/mailto/" + self.Links[i].href + "')");
				}else{
					self.Links[i].onclick=function() { self.PageTrack('/mailto/'+this.href); };
				}
			}
		}
	};
	
	/*
	# Adds additional details to the anchor
	*/
	this.CleanerInPageAnalytics = function()
	{
		var self = ExtraTrack;
		var tracked = [self.Links[0]];
		var extra_param = 0;
		var unique = true;
		for( var i = 1; i<self.Links.length; i++ ) {
			if ( ( self.Links[i].toString().length>0 ) && 
			( self.Links[i].toString().indexOf('extra=')<0 ) && 
			( tracked.valueOf().toString().indexOf(self.Links[i].toString()) > -1) )
				{ unique=false; }
			if(!unique){
				if(self.Links[i].toString().indexOf('?') > 0) {
					self.Links[i].href = self.Links[i].href + '&extra='+extra_param;
				}else{
					self.Links[i].href = self.Links[i].href + '?extra='+extra_param;					
				}
				extra_param = extra_param + 1;
				unique=true;
			}else{
				tracked.push(self.Links[i]);
			}
		}
	};
	
	/*
	# Check links
	*/
	this.LinksCheck = function(CheckItems,lnk)
	{
		var self = ExtraTrack;
		var LinkCheck = false;
		for(var i = 0; i < CheckItems.length; i++){
			if(lnk.indexOf(CheckItems[i]) > -1){
				LinkCheck = true;
			}
		}
		return LinkCheck;
	};

	/*
	# Track Page
	*/
	this.PageTrack = function(URL)
	{
		
		var self = ExtraTrack;
		//console.log( 'pageTrack - ' + URL +' - '+self.get_UA() );
		_gaq.push(['_bissell._trackPageview',URL]);
		self.Tracked = true;
	};
	
	/*
	# Setup Tracking Transactions
	# We are using the addTrans from Magento page
	# all we are doing here is executing the transaction
	*/
	this.initTrans = function()
	{
		var self = ExtraTrack;
		if( document.location.toString().indexOf(self.transaction_page) > 0 )
		{
			//console.log( 'Trans()' );
			// Track the page view as standard
			//_gaq.push(['_bissell._trackPageview']);
			//_gaq.push(['_bissell._trackPageLoadTime']);
			//_gaq.push(['_bissell._trackTrans']);
			/*
			# Specific for Bissell we are using _setAccount as oppsed to _bissell._setAccount
			# as the transactions are qued up in the HTML and we essentially use them here
			*/
			_gaq.push(['_setAccount', ExtraTrack.get_UA()]);
			_gaq.push(['_trackTrans']);
		}
	}
	
	/*
	# Track printing links
	*/
	this.PrintTrack = function(Links)
	{
		var self = ExtraTrack;
		for(var i = 0; i < Links.length; i++){
			if(Links[i].href.indexOf("printContent();") > -1){
				if(!self.ie7orbelow){
					Links[i].setAttribute("onclick","ExtraTrack.PageTrack('/print/" + Links[i].href + "')");
				}else{
					Links[i].onclick=function() { self.PageTrack('/print/'+this.href); };
				}
			}
		}
	};
	
	/*
	# Magento Specific
	**************************************************************************************
	*/
	
	/*
	# Setup click events on buttons for the subscription sign up
	*/
	this.MailSignUpTrack = function()
	{
		var self = ExtraTrack;
		var subscribeMsg = jQuery('.messages .success-msg').text();
		if ( subscribeMsg == 'Thank you for your subscription.' ) {
			self.PageTrack('/email_signup'+document.location.pathname);
		}
	};
	
	/*
	# Track user type at checkout
	*/
	this.checkoutTracking = function()
	{	
		var self = ExtraTrack;
		
		// Checkout method - guest / registered
		jQuery('#checkoutSteps .col2-set .col-1 .continue-btn').live('click', function(){
			jQuery('input[name="checkout_method"]').each(function() {
				if ( jQuery(this).attr('checked') == 'checked' && jQuery(this).val() == 'guest' ) {
					self.userType = 'guest';
				} else if ( jQuery(this).attr('checked') == 'checked' && jQuery(this).val() == 'register' ) {
					self.userType = 'registered';
				}
			});
			self.createCookie('user_type',self.userType,365);
			_gaq.push(['_bissell._setCustomVar',3,'user_type',self.userType,1]);    
			self.trackCheckout(this,'checkout_method');
		});
		
		// For guests checkout with new layout
		jQuery('.checkout-express .form-button').click(function() {
			self.userType = 'guest';
			self.createCookie('user_type',self.userType,365);
			_gaq.push(['_bissell._setCustomVar',3,'user_type',self.userType,1]);    
			self.trackCheckout(this,'checkout_method');
		});
		
		// For guests checkout with new layout
		jQuery('.checkout-register .form-button').click(function() {
			self.userType = 'registered';
			self.createCookie('user_type',self.userType,365);
			_gaq.push(['_bissell._setCustomVar',3,'user_type',self.userType,1]);    
			self.trackCheckout(this,'checkout_method');
		});

		if ( document.location.toString().indexOf('/checkout/onepage/index/') > 0
			|| jQuery('#checkoutSteps li').eq(0).attr('id') == 'opc-billing' ) {
			self.userType = 'logged_in';
			//console.log( 'logged_in' );
			self.createCookie('user_type',self.userType,365);
			_gaq.push(['_bissell._setCustomVar',3,'user_type','logged_in',1]);    
			self.trackCheckout(this,'checkout_method');
		}

		// Checkout method logged_in only
		/*jQuery('#checkoutSteps .col-2 .login-btn').bind('click', function(){
			self.userType = 'logged_in';
			self.createCookie('user_type',self.userType,365);
			_gaq.push(['_bissell._setCustomVar',3,'user_type','logged_in',1]);			
			return self.trackCheckout(this,'checkout_method');
		});*/

		// Step 2 Billing
		jQuery('#opc-billing .buttons-set .button').bind('click', function(){
			return self.trackCheckout(this,'billing');
		});

		// Step 3 Delivery Address
		jQuery('#opc-shipping .buttons-set .button').bind('click', function(){
			return self.trackCheckout(this,'shipping_information');
		});

		// Step 4 Delivery Method
		jQuery('#opc-shipping_method .buttons-set .button').bind('click', function(){
			return self.trackCheckout(this,'shipping_method');
		});

		// Step 5 Payment details
		jQuery('#opc-payment .buttons-set .button').bind('click', function(){
			return self.trackCheckout(this,'payment_details');
		});

		// Step 6 Order Confirmation
		jQuery('#opc-review .buttons-set .btn-checkout').bind('click', function(){
			return self.trackCheckout(this,'review');
		});
	};
	
	/*
	# Call the page track method passing the current checkout step and user type
	*/
	this.trackCheckout = function(btn,step)
	{
		var self = ExtraTrack;
		self.PageTrack('/checkout/'+step+'/'+self.userType);
		return false;
	};
	
	/*
	# Setup tracking when items are added to basket
	*/
	this.addToBasketTracking = function()
	{	
		var self = ExtraTrack;
		jQuery('.btn-cart').click(function() {
			if ( jQuery('body').hasClass('catalog-category-view') )
			{
				var action = 'Category - ' + document.location.pathname;
				var label = jQuery(this).parents('li').find('h2').text();
			}
			else if ( jQuery('body').hasClass('catalog-product-view') )
			{
				var action = 'Product - ' + document.location.pathname;
				var label = jQuery(this).parents('.product-top-info').find('h1').text();
			}
			else if ( jQuery('body').hasClass('checkout-cart-index') )
			{
				var action = 'Basket - ' + document.location.pathname;
				var label = jQuery(this).parents('.product-details').find('.product-name').text();
			}
			else if ( jQuery('body').hasClass('catalogsearch-result-index') )
			{
				var action = 'Search - ' + document.location.pathname;
				var label = jQuery(this).parents('.item').find('.product-name').text();;
			}			
			_gaq.push(['_bissell._trackEvent', 'Add_To_Basket', action, label]);			
		});
	};
	
	this.videoPlayTracking = function()
	{
		var self = ExtraTrack;
		jQuery('.video-thumbnail').click(function(e) {
			var label = jQuery(this).parents('.product-essential').find('h1').text();
			_gaq.push(['_bissell._trackEvent', 'Video', 'Play', label]);
		});
	}
	
	/*
	# Track Event Method
	*/
	this.EventTrack = function(category,action,label,value)
	{
		//console.log(category+' '+action+' '+label+' '+value);
		var self = ExtraTrack;
		var pageTracker = _gat._getTracker(self.get_UA());
		pageTracker._trackEvent(category,action,label,value);
		self.Tracked = true;
	};
	
	/*
	# Set page view for creating an account
	*/
	this.registeredCheck = function()
	{	
		if(document.referrer.indexOf('/customer/account/create/') > 0){
			_gaq.push(['_bissell._setCustomVar',3,'user_type','registered',1]);		
			_gaq.push(['_bissell._trackPageview','/customer/account/registered']);	
		}
	};

	/*
	# Set page view for user logging in
	*/
	this.loginCheck = function()
	{	
		if( document.referrer.indexOf('/customer/account/login/') > 0 ) {
			_gaq.push(['_bissell._setCustomVar',3,'user_type','logged_in',1]);		
			_gaq.push(['_bissell._trackPageview','/customer/account/loggedin']);	
		}
	};
	
	/*
	# End Magento Specific
	**************************************************************************************
	*/
	
	this.get_UA = function()
	{
		var self = ExtraTrack;
		var UA = '';
		//g = domain group index
		//i = domain index
		for(var g = 0; g < self.domains.length; g++){
			for(var i = 0; i < self.domains[g].length; i++){  
				if(document.location.toString().indexOf(self.domains[g][i].name) > -1){	  
					UA = self.domains[g][i].UA;
					if(typeof(self.domains[g].subdomain) != undefined){
						self.subdomain = self.domains[g].subdomain;
					}
					return UA;
				}
			}
		}
		return UA;
	};

	this.getParameterByName = function(name)
	{
		var self = ExtraTrack;
		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, " "));
	};
	

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



	this.get_utm_value = function(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;
	};

	/*
	# Grab varaible and return it
	*/
	this.uGC = function(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
	};

	/*
	# Grab variables out of the cookie
	*/
	this.grabReferrer = function()
	{
		var self = ExtraTrack;
		var z = _uGC(document.cookie, "__utmz=", ";");
		self.urchin_source = self.uGC(z, "utmcsr=", "|");
		self.urchin_medium = self.uGC(z, "utmcmd=", "|");
		self.urchin_term = _self.uGC(z, "utmctr=", "|");
		var gclid = self.uGC(z, "utmgclid=", "|");
		if (gclid != '-') {
			self.urchin_source = "google";
			self.urchin_medium = "cpc"
		}
	};
	
	/*
	# Testing specific methods -------------------------------------------------------------------------
	*/

	/*
	# Method for manipulating content when MVT is running
	*/
	this.contentFlippah = function()
	{
		var self = ExtraTrack;
		jQuery(document).ready(function() {
			self.test_variation = utmx("combination") == undefined ? 0 : utmx("combination").toString();
			//alert( self.test_variation );
			if(self.test_variation>0){
				//var onclick_attr = jQuery('.button.btn-proceed-checkout.btn-checkout').attr('onclick');
				//alert( onclick_attr );
				//onclick_attr=onclick_attr.substr(0,onclick_attr.length-2);
				//jQuery('.button.btn-proceed-checkout.btn-checkout').attr('onclick',onclick_attr+"?v=alt';")
				
				// Remove the current onclick
				jQuery('.button.btn-proceed-checkout.btn-checkout, .topcart .actions .button').attr('onclick', '');
				// Add our own with the varitation paremeter
				jQuery('.button.btn-proceed-checkout.btn-checkout,  .topcart .actions .button').click(function() {
					window.location = 'https://www.bisselldirect.co.uk/checkout/onepage/?v=alt';
				});
				
			}
			self.TestingTracking(self.test_variation);  
		});
	};

	this.TestingTracking = function(variation)
	{
		var self = ExtraTrack;
		
		_gaq.push(['_bissell._setCustomVar',4,'testing','checkout_test-'+variation,1]);		
		_gaq.push(['gwo._setAccount', 'UA-5774395-5']);
		_gaq.push(['gwo._trackPageview', '/' + self.k + '/test']);
	};

	/*
	# Setup GWO
	*/
	this.TestingGoal = function()
	{
		var self = ExtraTrack;
		
		//goal

		//add mousedown handlers for button clicks here to fire goals
		//original continue button
		jQuery('#checkoutSteps .col2-set .col-1 .continue-btn').live('mousedown', function(){
			_gaq.push(['gwo._setAccount', 'UA-5774395-5']);
			_gaq.push(['gwo._trackPageview', '/' + self.k + '/goal']);
		});
		
		//original login button
		jQuery('#checkoutSteps .col2-set .col-2 .login-btn').live('mousedown', function(){
		  _gaq.push(['gwo._setAccount', 'UA-5774395-5']);
			_gaq.push(['gwo._trackPageview', '/' + self.k + '/goal']);
		});
		
		//alt guest button
		jQuery('#checkout-step-login .col2-set-alt #checkout-wrapper .checkout-express .form-button').live('mousedown', function(){
			_gaq.push(['gwo._setAccount', 'UA-5774395-5']);
			_gaq.push(['gwo._trackPageview', '/' + self.k + '/goal']);
		});
		
		//alt login button
		jQuery('#checkout-step-login .col2-set-alt #checkout-wrapper .checkout-register-login .checkout-login .login-btn').live('mousedown', function(){
			_gaq.push(['gwo._setAccount', 'UA-5774395-5']);
			_gaq.push(['gwo._trackPageview', '/' + self.k + '/goal']);
		});
		
		//alt register button
		jQuery('#checkout-step-login .col2-set-alt #checkout-wrapper .checkout-register-login .checkout-register .form-button').live('mousedown', function(){
			_gaq.push(['gwo._setAccount', 'UA-5774395-5']);
			_gaq.push(['gwo._trackPageview', '/' + self.k + '/goal']);
		});
	};

	/*
	
	*/
	this.Testing = function()
	{	
		var self = ExtraTrack;
		function utmx_section(){}function utmx(){}
		(function(){d=document,l=d.location,c=d.cookie;function f(n){
		if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.indexOf(';',i);return escape(c.substring(i+n.
		length+1,j<0?c.length:j))}}}var x=f('__utmx'),xx=f('__utmxx'),h=l.hash;
		d.write('<sc'+'ript src="'+
		'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com'
		+'/siteopt.js?v=1&utmxkey='+self.k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime='
		+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+
		'" type="text/javascript" charset="utf-8"></sc'+'ript>')})();
		
		if(self.testCheck()==true){
			self.contentFlippah();
		}

		if(self.goalCheck()==true){
			self.TestingGoal();
		}
		jQuery(document).ready(function() {
			self.init();
		});
	};

	this.testCheck = function()
	{
		var self = ExtraTrack; 
		return ((self.k>0) && (document.location.pathname.toString().indexOf(self.test_page)>-1) && (document.location.toString().indexOf(self.test_domain)>0));
	};

	this.goalCheck = function()
	{
		var self = ExtraTrack;
		return ((self.k>0) && (document.location.pathname.toString().indexOf(self.goal_page)>-1) && (document.location.toString().indexOf(self.test_domain)>0));
	};
	
	/*
	# End of testing functions ***********************************************************************
	*/
	
	/*
	# Method for creating a cookie
	*/
	this.createCookie = function(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=/";
	};

	/*
	# Method for reading a cookie
	*/
	this.readCookie = function(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;
	};
	
// End of class
}

/*
# Call ExtraTrack functionality as needed
*/
var _gaq = _gaq || [];	
_gaq.push(['_bissell._setAccount', ExtraTrack.get_UA()]);


/*
# If we are using a sub domain
*/
if(document.location.toString().indexOf(ExtraTrack.subdomain)>0)
{
	_gaq.push(['_bissell._setDomainName',ExtraTrack.subdomain]);
	_gaq.push(['_bissell._setAllowHash',false]);
}
/*
# Include Google Analytics
*/
(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);
})();

if( ExtraTrack.testCheck() == true || ExtraTrack.goalCheck() == true )
{
	ExtraTrack.Testing();
} else {
	jQuery(document).ready(function() {
		ExtraTrack.init();
	});
}
