/* Copyright (C) 2010 Linwood Homes Ltd. <jmaher@linwoodhomes.com>
 * Version: 1.0.2
 * LastModified: Aug 26 2010
 * Requres: JQuery 1.4.2, JQuery Cookie, lw.jquery.urlparms.js
 */

var LW_COOKIE = 'lw_mt';
var LW_SEARCH_COOKIE = 'lw_mt_s';
var options = { path: '/', expires: 365 * 10, domain: 'linwoodhomes.com'};
var DELIM = "$L$";

var $j = jQuery.noConflict();

//Do the tracking
trackParams(LW_COOKIE);
trackGCookie(LW_SEARCH_COOKIE);


//FUNCTIONS

function trackParams(cookiename_){

	var utm_source = $j.getUrlVar('utm_source');
	var utm_medium = $j.getUrlVar('utm_medium');
	var utm_term = $j.getUrlVar('utm_term');
	var utm_content= $j.getUrlVar('utm_content');
	var utm_campaign = $j.getUrlVar('utm_campaign');
	var gclid = $j.getUrlVar('gclid'); //google click ID		
	
	//check if we have any params first
	if(utm_source != ""
	   || utm_medium != ""
	   || utm_term != ""
	   || utm_content != ""
	   || utm_campaign != ""
	   || gclid != ""){	
	   
		//new cookie val		
		var cookie_value = getCampaignCookieValue(utm_campaign,utm_content,utm_term,utm_medium,utm_source,gclid);
	
		//GET EXISTING COOKIE
		var cookie_prev = $j.cookie(cookiename_);	
		
		//append to existing cookie
		var cookie_saved = getAppendedCookie(cookie_prev,cookie_value);			
	
		//SAVE COOKIE
		$j.cookie(cookiename_, cookie_saved, options);
	}
}

/* Append c_prev to c_new, or just return c_new if there was no previous cookie value.
*/
function getAppendedCookie(c_prev,c_new){
	var appended = c_new;
	//append to existing cookie
	if(c_prev != null && c_prev != ""){			   
	   appended = c_prev + DELIM + c_new;
	}
	return appended;
}

function getCampaignCookieValue(utm_campaign,utm_content,utm_term,utm_medium,utm_source,gclid){
	
	var tstamp = Math.round((new Date()).getTime()/1000);
	
	var cookie_value =  "t=" + tstamp 
				
				+ getValidVal("|gclid=",gclid) 
				+ getValidVal("|csr=",utm_source) 
				+ getValidVal("|cmd=",utm_medium) 
				+ getValidVal("|ctr=",utm_term) 
				+ getValidVal("|cct=",utm_content) 
				+ getValidVal("|ccn=",utm_campaign);
			   
        return cookie_value;
}

function getLwCookies(){
	var cookies = getAppendedCookie($j.cookie(LW_COOKIE),$j.cookie(LW_SEARCH_COOKIE));
        if(cookies == null){
	   cookies = "";	   
	}
	return cookies;
}

/** NOT USED */
function getSquashedCookie(cookiename_){	
	var c_compress = $j.cookie(cookiename_)
	
	return c_compress;
	/*
	if(c_compress == null){
		return null
	}else{ 		
		var compressed = Iuppiter.Base64.decode(c_compress,true);
		var decoded = saw.lzw.decode(compressed);		
		return decoded;
	}
	*/
}
/** NOT USED */
function setSquashedCookie(cookiename_,value,options){	
	
	var c_value = value;
	
	/*
	if(c_value != null){ 
		//compress value first				
		var compressed = saw.lzw.encode(c_value);
		//encode it
		 c_value = Iuppiter.Base64.encode(compressed,true);
	}*/

	//save cookie	
	$j.cookie(cookiename_,c_value,options);	
}

/**
* Save new campaign information to lw_mt cookie to track organic search results.
* If the campaign information is the same, it is not re-saved.
* Saves previous google campaign info to lw_utmz for comparisons.
*/
function trackGCookie(cookiename_){
	//Get the previous google compaign cookie	
	var LW_GCOOKIE = 'lw_utmz';
	var GCOOKIE = '__utmz';
	
	var c_google = $j.cookie(GCOOKIE);			
	
	if(c_google != null){
		//we have a google cookie	
                var c_lw_google = $j.cookie(LW_GCOOKIE);		
		
		//Compare the campaign info, 
		var g_campaign = getCampaignCookiePart(c_google);
		var lw_campaign = getCampaignCookiePart(c_lw_google);
		
		//get existing cookie
		var cookie_lw_mt = $j.cookie(cookiename_);
		
		if(g_campaign != lw_campaign || cookie_lw_mt == null){
		   // we have a new campaign, append it to the lw_mt cookie, or append if the lw_mt is empty.
		   
		   
		   //extract info from google cookie
		   var source  = _uGC(c_google, 'utmcsr=', '|');
		   var medium  = _uGC(c_google, 'utmcmd=', '|');
		   var term    = _uGC(c_google, 'utmctr=', '|');
		   var content = _uGC(c_google, 'utmcct=', '|');
		   var campaign = _uGC(c_google, 'utmccn=', '|');
		   var gclid   = _uGC(c_google, 'utmgclid=', '|');
		   
		   var newCampaign = getCampaignCookieValue(campaign,content,term,medium,source,gclid);

		   //append to existing cookie
		   var newcookie = getAppendedCookie(cookie_lw_mt,newCampaign);
		   
		   //save new appended cookie to lw_mt
		   $j.cookie(cookiename_,newcookie,options);		   		   
		   
		   //finally, just copy over the cookie value, it's either changed or new.
		   $j.cookie(LW_GCOOKIE, c_google, options);
		   
		}
		
	}
}

// used to obtain a value form a string of key=value pairs
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 getCampaignCookiePart(cookie){
	
	if(!cookie || cookie == null){
		return null;
	}
	
	var numFound = 0;
	var start = -1;
			   
	
	//there's a cookie.. check it.
	while(numFound < 4){
	   start = cookie.indexOf(".",start+1);
	   if(start == -1){
	      break;
	   }
	   numFound++;	   
	}
			 
	if(start != -1 && numFound == 4 && cookie.length > start+1){
            var len = cookie.length;
	    return cookie.substring(start+1,len-1);
	}else{
	    return null;
	}
	
}

function getValidVal(name,value){
	if(value != ""){
		return name+value;
	}else{
		return ""
	}
}
