/*
 * Sample Campaign Info: (Only provide necessary fields!)
 * var campaignInfo = {
 * 	zcsr: "source",  // Source
 *  zccn: "title",   // Title
 *  zcmd: "medium",  // Medium
 *  zcct: "content"  // Content
 * }
 * 
 * Sample Call: (ga.js NOT urchin.js)
 * // Typical Google Analytics call...
 * var pageTracker = _gat._getTracker("UA-1386352-2");
 * pageTracker._initData();
 * new CampaignInjector( pageTracker, campaignInfo ); // <- Add this
 * pageTracker._trackPageview();
 */

var CampaignInjector = Class.create();
CampaignInjector.prototype = {
	initialize: function( pageTracker, campaignInfo ) {
	    var utmz = pageTracker.i.M[4][1]().split('.');
	    var cookies = pageTracker.a.cookie.split(';');
	    
	    if (!utmz[2] || !utmz[3]) // if we don't have the nsessions or nresponse, get them directly from the cookies
	    {
	    	// Find the utmz cookie
	    	for( i=0; i<cookies.length; i++ )
	    	{
	    		// the utmz cookie contains the sessions and response counts which we want for later
	    		var re = new RegExp(/__utmz\=(.*)/);
	    		if ( re.exec(cookies[i]) ) {
	    			utmz = cookies[i].split('.');
	    			break;
	    		}
	    	}
	    }
	    
	    // Overwrite anything that's already there with the stuff we pass in.
	    this.utmParams = Object.extend( this.parseParams( utmz[4] ), campaignInfo );
   		var adjUtmParams = "";
		for ( var value in this.utmParams ) {
			adjUtmParams += value + '=' + this.utmParams[value]+ '|';
		}	
		adjUtmParams = adjUtmParams.substring(0, adjUtmParams.length-1 ); // will remove last pipe.

	   	if( utmz[2] && utmz[3] ) // if anything has changed, override
	   	{
	   		// recreate the utmz cookie...
	   		var zstr_id = [ pageTracker.f, pageTracker.ja, utmz[2], utmz[3] ].join('.');

			pageTracker.u.V[4][2](zstr_id+'.'+ adjUtmParams);
	   		pageTracker.u.V[4][3](); 
		} 
	},
	
	parseParams: function( paramString ) {
		var paramObj = new Object(); 
		$A( paramString.split("|") ).each(
			function( nvp ) {
				var nvpObj = nvp.split("=");
				paramObj[nvpObj[0]] = nvpObj[1];
			}
		);
		return paramObj;
	}
}
