// nvk functions
//////////////////////
// version: 2.3.2
// date: 2010-02-01
//////////////////////

// global vars
var nvk_tracker = "";
var nvk_visit_time = false;
var nvk_time = new Date().getTime();
var form_match=/(\/de\/form.php|\/bm\/form.php|nvk_form.php|bmail.ca\/form.php|bettermail.ca\/form.php)/;
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";


function encode64(input) {
	if (!input || input=="") {
		return false;
 	}
	var output = "";
	var chr1, chr2, chr3 = "";
	var enc1, enc2, enc3, enc4 = "";
	var i = 0;

	do {
		 chr1 = input.charCodeAt(i++);
		 chr2 = input.charCodeAt(i++);
		 chr3 = input.charCodeAt(i++);
		 enc1 = chr1 >> 2;
		 enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
		 enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
		 enc4 = chr3 & 63;

		 if (isNaN(chr2)) {
				enc3 = enc4 = 64;
		 } 
		 else if (isNaN(chr3)) {
				enc4 = 64;
		 }

		 output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
		 chr1 = chr2 = chr3 = "";
		 enc1 = enc2 = enc3 = enc4 = "";
	} while (i < input.length);
	return output;
}


function decode64(input) {
	if (!input || input=="") {
		return false;
 	}
	var output = "";
	var chr1, chr2, chr3 = "";
	var enc1, enc2, enc3, enc4 = "";
	var i = 0;
	var base64test = /[^A-Za-z0-9\+\/\=]/g;
	
	// fail if not a base64 encoded string	
	if (base64test.exec(input)) {
		 return false;
	}
	input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

	do {
		 enc1 = keyStr.indexOf(input.charAt(i++));
		 enc2 = keyStr.indexOf(input.charAt(i++));
		 enc3 = keyStr.indexOf(input.charAt(i++));
		 enc4 = keyStr.indexOf(input.charAt(i++));
		 chr1 = (enc1 << 2) | (enc2 >> 4);
		 chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
		 chr3 = ((enc3 & 3) << 6) | enc4;

		 output = output + String.fromCharCode(chr1);

		 if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
		 }
		 if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
		 }

		 chr1 = chr2 = chr3 = "";
		 enc1 = enc2 = enc3 = enc4 = "";
		 
	} while (i < input.length);
	return output;
}


function getValue(text,name,delim) {
 if (!text || text=="" || !name || name=="" || !delim || delim=="") {
	 return false;
 }
 var i,i2,value=false;
 i=text.indexOf(name);
 if (i > -1) {
  i2=text.indexOf(delim,i); 
	if (i2 < 0) { 
		i2=text.length;
	}
  value=text.substring((i+name.length),i2);
 }
 return value;
}


function getCookie(name) {
	if (!name || name=="") {
		return false;
	}
	return getValue(document.cookie, name+'=', ';');
}


function concatTracker(tracker, name, value) {
	if (!name || name=="" || !value || value=="") {
		return tracker;
	}
	return tracker += name + "=" + unescape(value) + "|";
}


function getQuery(check) {
	var query;
	if (!(query = getValue(check,'q=','&'))) { //google
		if (!(query = getValue(check,'query=','&'))) { //aol
			if (!(query = getValue(check,'p=','&'))) { //yahoo
				if (!(query = getValue(check,'encquery=','&'))) { //aol
					if (!(query = getValue(check,'terms=','&'))) {  //about
						if (!(query = getValue(check,'qt=','&'))) { //looksmart
							query = false;
						}
					}
				}
			}
		}
	} 
	return query;
}


function isSearchEngine(check) {
	if (!check || check=="") {
		return false;
	}
	var fromsearch = false;	
	if ((check.indexOf("google.")>-1) || (check.indexOf("yahoo.")>-1) || (check.indexOf("bing.")>-1)) {
		fromsearch = true;
	}	
	return fromsearch;
}

// legacy support
if(typeof(BM_Track) != 'function') {
	BM_Track = function() {	return true; }
}

// linker for multi domain tracking
function nvkLink(url) {
	if (!url || url=="") { return false; }	
	var tracker_data = "";
	var sep = "&";
	if (url.indexOf("?") == -1) {	sep = "?"; }		
	if (nvk_tracker != "") { tracker_data = sep + "nvk_tracker=" + nvk_tracker;	}	
	document.location.href = url + tracker_data;
	return true;
}

// checks for forms and adds required tracking fields
function nvkTag(nvkforms,formids) {
	var old_submit;	
	var tagged = 0;
	if ((typeof(formids) != "undefined") && (typeof(formids) == 'object') && formids.length) {	// add nvkSubmit(this) to forms with ids listed in formids
		var form;
		for (var i=0; i<formids.length; i++){
			form = document.getElementById(formids[i]);		
			if (form.tagName.toLowerCase() == "form") { // only apply to forms			
				old_submit = form.onsubmit;				
				form.onsubmit = function() { nvkSubmit(this); if (typeof(old_submit) != "undefined") { return old_submit(); }}	
				tagged++;
			}
		}		
	}
	if ((typeof(nvkforms) == "undefined") || nvkforms) {	// adds nvkSubmit(this) to all bettermail forms
		var allforms = document.getElementsByTagName("form"); //Get all forms			
		for (var i=0; i<allforms.length; i++){
			var m = allforms[i].action.match(form_match);
			if (m && m[1]) { 
				old_submit = allforms[i].onsubmit;
				allforms[i].onsubmit = function() { nvkSubmit(this); if (typeof(old_submit) != "undefined") { return old_submit(); }}	
				tagged++;
			}			
		}	
	}
	if (tagged > 0) {
		return tagged;
	}
	else {
		return false;
	}
}

// checks values and adds cookie, scans for forms
function nvkTrack() {
	var value;
	var tracker_cookie;
	var ppc = false;
	var organic = false;
	var referral = false;
	var novalue = "none";
	var noid = "0";
	var refurl = "";
	var refkeyword = "";
	
  // cookie value
	if (tracker_cookie = getCookie("nvk_tracker")) { nvk_tracker = tracker_cookie; } else if (value = getValue(window.location.href,"nvk_tracker=","&")) { tracker_cookie = "";	nvk_tracker = value; } else {	tracker_cookie = ""; nvk_tracker = ""; }
	
	// visit time
	if ((nvk_visit_time = getValue(nvk_tracker, 'nvk_visit_time=', '|')) === false) {	if (!(nvk_visit_time = getCookie("bm-vtime"))) { nvk_visit_time = nvk_time;	}	nvk_tracker = concatTracker(nvk_tracker, "nvk_visit_time", nvk_visit_time); }	
	 
	// referral values
	if ((refurl = getValue(nvk_tracker, 'nvk_ref_url=', '|')) === false) {
		if (value = getCookie("bm-refurl")) {
			nvk_tracker = concatTracker(nvk_tracker, "nvk_ref_url", encode64(value));
			refurl = value;
			referral = true; 
		}
		else if (document.referrer) {
			nvk_tracker = concatTracker(nvk_tracker, "nvk_ref_url", encode64(document.referrer));
			refurl = document.referrer;
			referral = true; 
		} 
		else {
			nvk_tracker = concatTracker(nvk_tracker, "nvk_ref_url", encode64(novalue));
		}
	} 
	else {
		referral = true;
	}
	
	// organic values
	if ((refkeyword = getValue(nvk_tracker, 'nvk_ref_keyword=', '|')) === false) {
		if (value = getCookie("bm-kw")) {
			nvk_tracker = concatTracker(nvk_tracker, "nvk_ref_keyword", encode64(value)); 
			refkeyword = value;
			organic = true; 
		} 
		else if (value = getQuery(document.referrer)) {
			nvk_tracker = concatTracker(nvk_tracker, "nvk_ref_keyword", encode64(value));
			refkeyword = value;
			organic = true; 
		} 
		else {
			nvk_tracker = concatTracker(nvk_tracker, "nvk_ref_keyword", encode64(novalue)); 
		}
	} 
	else { 
		organic = true;
	}		
	
	if (getValue(nvk_tracker, 'nvk_organic=', '|') === false) { if (isSearchEngine(document.referrer)) { nvk_tracker = concatTracker(nvk_tracker, "nvk_organic", "1"); organic = true; } else { nvk_tracker = concatTracker(nvk_tracker, "nvk_organic", noid);	}} else { organic = true; }	
	if (getValue(nvk_tracker, 'nvk_keyword=', '|') === false) {	if (value = getCookie("bm-utm-keyword")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_keyword", value); organic = true; } else if (value = getValue(window.location.href,"nvk_keyword=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_keyword", value); organic = true; } else if (refkeyword != "") {	nvk_tracker = concatTracker(nvk_tracker, "nvk_keyword", refkeyword.replace(/\+/g, " ")); } else {	nvk_tracker = concatTracker(nvk_tracker, "nvk_keyword", novalue);	}} else { organic = true; }
	
	// ppc values
	if (getValue(nvk_tracker, 'nvk_campaign_id=', '|') === false) {	if (value = getValue(window.location.href,"nvk_campaign_id=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_campaign_id", value); ppc = true; } else {	nvk_tracker = concatTracker(nvk_tracker, "nvk_campaign_id", noid); }} else { ppc = true; }
	if (getValue(nvk_tracker, 'nvk_adgroup_id=', '|') === false) { if (value = getValue(window.location.href,"nvk_adgroup_id=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_adgroup_id", value); ppc = true;	} else { nvk_tracker = concatTracker(nvk_tracker, "nvk_adgroup_id", noid); }} else { ppc = true; }
	if (getValue(nvk_tracker, 'nvk_content_id=', '|') === false) { if (value = getValue(window.location.href,"nvk_content_id=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_content_id", value); ppc = true;	} else { nvk_tracker = concatTracker(nvk_tracker, "nvk_content_id", noid); }} else { ppc = true; }	
	if (getValue(nvk_tracker, 'nvk_campaign=', '|') === false) { if (value = getCookie("bm-utm-campaign")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_campaign", value); ppc = true;	}	else if (value = getValue(window.location.href,"nvk_campaign=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_campaign", value); ppc = true; }	else if (value = getValue(window.location.href,"utm_campaign=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_campaign", value); ppc = true;	}	else { nvk_tracker = concatTracker(nvk_tracker, "nvk_campaign", novalue);	}} else { ppc = true; }
	if (getValue(nvk_tracker, 'nvk_adgroup=', '|') === false) { if (value = getValue(window.location.href,"nvk_adgroup=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_adgroup", value); ppc = true; } else { nvk_tracker = concatTracker(nvk_tracker, "nvk_adgroup", novalue);	}} else { ppc = true; }
	if (getValue(nvk_tracker, 'nvk_content=', '|') === false) { if (value = getValue(window.location.href,"nvk_content=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_content", value); ppc = true; }	else if (value = getValue(window.location.href,"utm_content=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_content", value);	ppc = true; } else { nvk_tracker = concatTracker(nvk_tracker, "nvk_content", novalue);	}} else { ppc = true; }
	if (getValue(nvk_tracker, 'nvk_term=', '|') === false) { if (value = getCookie("bm-utm-term")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_term", value); ppc = true; }	else if (value = getValue(window.location.href,"nvk_term=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_term", value); ppc = true; }	else if (value = getValue(window.location.href,"utm_term=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_term", value); ppc = true;	} else { nvk_tracker = concatTracker(nvk_tracker, "nvk_term", novalue);	}} else { ppc = true; }
	if (getValue(nvk_tracker, 'nvk_match=', '|') === false) { if (value = getValue(window.location.href,"nvk_match=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_match", value); } else { nvk_tracker = concatTracker(nvk_tracker, "nvk_match", novalue);	}}
	 
  // source
	if (getValue(nvk_tracker, 'nvk_source=', '|') === false) {
		if (value = getCookie("bm-utm-source")) {
			nvk_tracker = concatTracker(nvk_tracker, "nvk_source", value);	
		}	
		else if (value = getValue(window.location.href,"nvk_source=","&")) {
			nvk_tracker = concatTracker(nvk_tracker, "nvk_source", value); 
		}	
		else if (value = getValue(window.location.href,"utm_source=","&")) {
			nvk_tracker = concatTracker(nvk_tracker, "nvk_source", value);	
		}	
		else if (refurl != "") {			
			var refdomain = refurl.match(/(http|ftp|https):\/\/(.*?)\/.*$/);
			if (refdomain){
				if (refdomain[2] != document.domain) {			
					nvk_tracker = concatTracker(nvk_tracker, "nvk_source", refdomain[2]);	
				}
			}
			else {
				nvk_tracker = concatTracker(nvk_tracker, "nvk_source", novalue);	
			}		
		} 
		else {
			nvk_tracker = concatTracker(nvk_tracker, "nvk_source", novalue); 
		}
	}
	
	// medium
	if (getValue(nvk_tracker, 'nvk_medium=', '|') === false) { if (value = getCookie("bm-utm-medium")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_medium", value);	}	else if (value = getValue(window.location.href,"nvk_medium=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_medium", value); }	else if (value = getValue(window.location.href,"utm_medium=","&")) { nvk_tracker = concatTracker(nvk_tracker, "nvk_medium", value);	}	else if (ppc) {	nvk_tracker = concatTracker(nvk_tracker, "nvk_medium", "cpc"); } else if (organic) { nvk_tracker = concatTracker(nvk_tracker, "nvk_medium", "organic");	}	else if (referral) { nvk_tracker = concatTracker(nvk_tracker, "nvk_medium", "referral"); } else {	nvk_tracker = concatTracker(nvk_tracker, "nvk_medium", "direct"); }}

	// write nvk_tracker cookie
	if ((nvk_tracker != "") && (nvk_tracker != tracker_cookie) && (nvk_tracker.length > tracker_cookie.length)) {
		var domain = document.domain;	
		var expiredate = new Date(nvk_time+31536000000);	
		if (domain.indexOf(".") != domain.lastIndexOf(".")) {	domain=domain.substring((domain.indexOf(".")+1));	}
		document.cookie = "nvk_tracker="+nvk_tracker+"; expires="+expiredate.toUTCString()+"; path=/; domain=."+domain+";";		
	}
	return true;
}

// add or set required form fields
function nvkSubmit(form) {
	// callback in case form isn't specified.
	if (typeof(form) == "undefined") {
		var allforms = document.getElementsByTagName("form"); //Get all forms
		for (var i=0; i<allforms.length; i++){ // loop allforms
			var m = allforms[i].action.match(form_match);
			if (m && m[1]) { 			
				nvkSubmit(allforms[i]);
			}	
		}		
	} 
	else {	
		var novalue = "error";
		var noid = "-1";
		
		// create fields array
		var fields=new Array();
		fields[0]=new Array("nvk[medium]"); 
		fields[1]=new Array("nvk[source]"); 
		fields[2]=new Array("nvk[campaign]"); 
		fields[3]=new Array("nvk[adgroup]"); 
		fields[4]=new Array("nvk[content]"); 
		fields[5]=new Array("nvk[term]"); 
		fields[6]=new Array("nvk[keyword]"); 
		fields[7]=new Array("nvk[ref_keyword]"); 
		fields[8]=new Array("nvk[ref_url]"); 	
		fields[9]=new Array("nvk[match]"); 
		fields[10]=new Array("nvk[campaign_id]"); 
		fields[11]=new Array("nvk[adgroup_id]"); 
		fields[12]=new Array("nvk[content_id]");
		fields[13]=new Array("nvk[visit_time]"); 	
		// old fields
		fields[14]=new Array("my[utm_medium]"); 
		fields[15]=new Array("my[utm_source]"); 
		fields[16]=new Array("my[utm_campaign]"); 
		fields[17]=new Array("my[utm_term]");
		fields[18]=new Array("my[utm_keyword]"); 	
		fields[19]=new Array("my[ref_keyw]"); 		
		
		if (!(nvk_tracker = getCookie("nvk_tracker"))) { 	
			nvk_tracker = "";
		}
		
		// check referring domain
		if ((fields[8][1] = getValue(nvk_tracker, 'nvk_ref_url=', '|')) === false) {
			fields[8][1] = novalue;
		}
		else {
			fields[8][1] = decode64(fields[8][1]);
		}
		
		// check referring keyword
		if ((fields[7][1] = getValue(nvk_tracker, 'nvk_ref_keyword=', '|')) === false) {
			fields[7][1] = novalue;
		}
		else {
			fields[7][1] = decode64(fields[7][1]);
		}		
		
		var cookie_organic = getValue(nvk_tracker, 'nvk_organic=', '|');
		
		if ((fields[0][1] = getValue(nvk_tracker, 'nvk_medium=', '|')) === false) {			
			fields[0][1] = novalue;
		}		
		if ((fields[1][1] = getValue(nvk_tracker, 'nvk_source=', '|')) === false) {
			fields[1][1] = novalue;
		}				
		if ((fields[2][1] = getValue(nvk_tracker, 'nvk_campaign=', '|')) === false) {
			fields[2][1] = novalue;
		}	
		if ((fields[3][1] = getValue(nvk_tracker, 'nvk_adgroup=', '|')) === false) {
			fields[3][1] = novalue;
		}
		if ((fields[4][1] = getValue(nvk_tracker, 'nvk_content=', '|')) === false) {
			fields[4][1] = novalue;
		}
		if ((fields[5][1] = getValue(nvk_tracker, 'nvk_term=', '|')) === false) {
			fields[5][1] = novalue;
		}	
		if ((fields[6][1] = getValue(nvk_tracker, 'nvk_keyword=', '|')) === false) {
			fields[6][1] = novalue;	
		}		
		if ((fields[9][1] = getValue(nvk_tracker, 'nvk_match=', '|')) === false) {
			fields[9][1] = novalue;
		}			
		if ((fields[10][1] = getValue(nvk_tracker, 'nvk_campaign_id=', '|')) === false) {
			fields[10][1] = noid;
		}	
		if ((fields[11][1] = getValue(nvk_tracker, 'nvk_adgroup_id=', '|')) === false) {
			fields[11][1] = noid;
		}
		if ((fields[12][1] = getValue(nvk_tracker, 'nvk_content_id=', '|')) === false) {
			fields[12][1] = noid;
		}		
		if ((fields[13][1] = getValue(nvk_tracker, 'nvk_visit_time=', '|')) === false) { 				
			fields[13][1] = noid;
		}			
	
		//populate old fields
		fields[14][1] = fields[0][1]; //my[utm_medium]
		fields[15][1] = fields[1][1]; //my[utm_source]
		fields[16][1] = fields[2][1]; //my[utm_campaign]
		fields[17][1] = fields[5][1]; //my[utm_term]
		fields[18][1] = fields[6][1]; //my[utm_keyword]
		fields[19][1] = fields[7][1]; //my[ref_keyw]
			
		var name, value, field;
		
		//cnt = fields.length;
		for (var j=0; j<fields.length; j++){	
			name = fields[j][0];
			value = fields[j][1];
			
			// check if field exists then assign value otherwise create it
			if (form.elements[name]) {
				form.elements[name].setAttribute('value',value);
			} 
			else {			
				field = document.createElement('input');
				field.setAttribute('type','hidden');
				field.setAttribute('name',name);
				field.setAttribute('value',value);			
				form.appendChild(field);			
			}		
		}	
	}
	return true;
}