
// QUERY STRING PARSER
//  returns hash with key/value pairs
// This should be included in functions.js above this file, but for some reason campaigns don't always get set
function parseQueryString ( myURL )
{
    var query = myURL.replace(/^[^\?]+\??/,'');
    var Params = new Object ();
    if ( ! query ) return Params; // return empty object
    var Pairs = query.split(/[;&]/);
    for ( var i = 0; i < Pairs.length; i++ ) {
        var KeyVal = Pairs[i].split('=');
        if ( ! KeyVal || KeyVal.length != 2 ) continue;
        var key = unescape( KeyVal[0] );
        var val = unescape( KeyVal[1] );
        val = val.replace(/\+/g, ' ');
        Params[key] = val;
    }
    return Params;
}

// Same thing applies to createCookie
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 expires = "";
  domain_string = this.domain ? "; domain="+this.domain : ""; 
  document.cookie = name+"="+value+expires+"; path=/"+domain_string;
}

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 eraseCookie(name,path,domain) {
    if (readCookie(name)) {
        document.cookie = name + "=" + ((path) ? ";path=" + path : "") + ((domain) ? ";domain=" + domain : "" ) + ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
    }
}


/* SiteCatalyst Code 
Copyright 1997-2005 Omniture, Inc. 
More info available at http://www.omniture.com */
/* SiteCatalyst Variables */

var prop_map=new Array();
prop_map["page_name"]=			"pageName";	// Omniture sets default to URL
prop_map["channel"]=			"channel";	// default set to server portion of domain
prop_map["server"]=				"server"; 	// not used
prop_map["page_type"]=			"pageType";	// not used
prop_map["sub_channel_1"]=		"prop1";	
prop_map["sub_channel_2"]=		"prop2";
prop_map["sub_channel_3"]=		"prop3";
prop_map["cms_author"]=			"prop4";
prop_map["cms_article"]=		"prop5";
prop_map["user_id"]=			"prop6";	// default set to data from cookie
prop_map["partner"]=			"prop7";
prop_map["logged_in"]=			"prop8";
prop_map["uuid"]=			    "prop9";
prop_map["account_type"]=		"prop10";
prop_map["hierarchy"]=			"hier1";	// default set to channel and sub_channels
prop_map["campaign"]=			"campaign";
prop_map["internal_campaign"]=	"eVar1";
prop_map["search_term"]=		"eVar2";
prop_map["tool_use"]=			"eVar3";
prop_map["user_id_eVar"]=		"eVar4";
prop_map["new_return_visitor"]=	"eVar5";
prop_map["question"]=			"eVar6";
prop_map["game"]=				"eVar7";
prop_map["form_analysis"]=		"eVar8";
prop_map["uuid_eVar"]=		    "eVar9";
prop_map["account_type_eVar"]=	"eVar10";

var event_map=new Array();
event_map["registration_event"]=	"event1";
event_map["email_registration_event"]= "event2";
event_map["subscription_event"]=	"event3";
event_map["page_view_event"]=		"event4"; 	// Omniture sets
event_map["tool_use_event"]=		"event5";
event_map["keep_logged_in_event"]= 	"event6";
event_map["answered_question_event"]= 	"event7";
event_map["skipped_question_event"]="event8";
event_map["asked_question_event"]= 	"event9";
event_map["form_abandon"]= 			"event10";
event_map["form_success"]= 			"event11";
event_map["form_error"]= 			"event12";


// set a prop via <script type="text/javascript">set_metrics_prop("name", "value");</script>
function set_metrics_prop(name, value)
{
	var js = '<script type="text/javascript">s["'+prop_map[name]+'"]="'+value+'";</script>';
	document.write(js);
}

// metrics_hash is formated as <name>=<value>;
// metrics_events is formatted as <event_name>,
function metrics_props(metrics_hash, metrics_events)
{
	metrics(null, metrics_hash, metrics_events);
}

// allow compatibility with initial implementation with just channel param
function metrics(channel, metrics_hash, metrics_events)
{
	try
	{
		var accountID = null;
		var accountType = null;
		var uuid = null;
		try {
			json = unescape(readCookie('prefs'));
			if (json != "null")
			{
				json = decodeBase64(json);
				//alert("json?:"+json);
				account=eval("("+json+")");
				if (account)
				{
    				accountID = account.account_id;
    				accountType = account.acct_type ? account.acct_type : 'Member';
				}
			}
			var xeons = readCookie("x_eons_token");
			uuid = readCookie("x_eons_uuid");
		} catch(e) {
			// don't read cookies if we don't have functions.js
		}

		s[prop_map["channel"]] = channel ?  channel : document.domain.split('.')[0];		 
		// BETA - replace prior line with following:
		// s[prop_map["channel"]] = "beta_" + (channel ?  channel : document.domain.split('.')[0]);
		s[prop_map["user_id"]] = accountID;
		s[prop_map["user_id_eVar"]] = accountID;
		s[prop_map["account_type"]] = accountType;
		s[prop_map["account_type_eVar"]] = accountType;
		s[prop_map["uuid"]] = uuid;
		s[prop_map["uuid_eVar"]] = uuid;
		s[prop_map["logged_in"]] = xeons ? "LoggedIn" : "NotLoggedIn";
		
        // if there are campaign cookies, do something
		try {
        	var campaign = unescape(readCookie("campaign"));
			var query_params = parseQueryString(window.location.href);
			
        	if (campaign != "null") {
                var registered = false;
	            var splitCampaign = campaign.split(",");
	            if (splitCampaign.length > 4 && splitCampaign[4] == "registered") {
                    registered = true;
                } else {
                    //campaign cookie wasn't updated, but maybe they're registred anyway.
                    
                    if (query_params['r'] == '1') {
                        registered = true;
                    }
                }
                if (registered) {
	                var campaign_prop_name = prop_map["campaign"];
	                s[campaign_prop_name] = splitCampaign[0];
	                // delete cookie here, the registration event is complete
	                if (location.href.match(/build\.eons\.dev/)) {
	                    eraseCookie("campaign","/",".build.eons.dev");
	                } else if (location.href.match(/qa\.eons\.dev/)) {
	                    eraseCookie("campaign","/",".qa.eons.dev");
	                } else {
	                    // if there are more servers, put them here
	                    eraseCookie("campaign","/",".eons.com");
	                }
	            }
			} else {
				// no campaign cookie, see if they should get one
				
				/* Plugin Example: getQueryParam v2.0 */
			    if (query_params['cid'] != undefined && query_params['cid'] != '') {
				    s[prop_map["campaign"]]=query_params['cid'];
		            affiliate = query_params['aid']
		            creative = query_params['crid']
		            date = new Date();
		            now = date.getTime();
					if (affiliate == undefined) { affiliate = '' }
					if (creative == undefined) { creative = '' }
		            value = s.campaign+","+creative+","+affiliate+","+date;
		            createCookie('campaign',value,7300);
		        }
		        if (query_params['cid'] == 'MyPointsMay0701') {
		            var visit_id = query_params['myptsID'];
		            createCookie('mypoints',visit_id,30);
		        }
	        }
		} catch(e) {
			// If we don't load functions, we can't read, set, and erase cookies
			//alert('caught: ' + e);
		}
		
		if (metrics_hash)
		{
			var prop_pairs = metrics_hash.split(';');
			for(var i=0; i<prop_pairs.length; i++)
			{
				var prop = prop_pairs[i].split('=');
				if (prop.length == 2)
				{
					var prop_name_mapped = prop_map[prop[0]];
					s[prop_name_mapped] = prop[1];
				}
			}
		}
		
		// BETA - to fix up page name, uncomment next 6 lines
		// if (s["pageName"])
		// {
		// 	s["pageName"] = "beta/" + s["pageName"];
		// } else {
		// 	s["pageName"] = "beta/" + s.getPageName();
		// }
		// BETA

		if (metrics_events)
		{
			var events = metrics_events.split(",");
			for (var e=0; e<events.length; e++)
			{
				var event_name = event_map[events[e]];
				if (event_name)
				{ 
					0==e ? s.events = event_name : s.events += "," + event_name
				}
			}
		}
	}
	catch (e)
	{
		//alert(e)
	}
	/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
	var s_code=s.t();if(s_code)document.write(s_code);
    /************* DO NOT ALTER ANYTHING ABOVE THIS LINE ! **************/
}

function send_metrics_event(variable, variable_value, event)
{
	var var_name = prop_map[variable];
	var event_name = event_map[event];
	var trackVarsString = "";
	var s=s_gi(s_account);
	
	if (var_name)
	{
		s[var_name] = variable_value;
		trackVarsString += trackVarsString ? ","+var_name : var_name;
	}
	if (event_name)
	{
		trackVarsString += trackVarsString ? ",events" : "events";
		s.linkTrackEvents=event_name;
		s.events=event_name;
	}
	
	s.linkTrackVars = trackVarsString; 
	
	var s_code = s.tl(this,'o','LinkName');
}
