<!--
/*
	library for handling Commanding Heights cookies

	two cookies are defined:
	  commhts_temp (temporary session cookie)
	  commhts_perm (persistent cookie set to expire a year from last setting)

	each of these cookies store URL-escaped &-delimited name=value pairs

	the questions these cookies retain the answers to are:
	  -Do you want to use lo or hi (commhts_perm, site=hi/site=lo)
	  -Where should sniffers take you automatically? (commhts_perm, sniff=hi/sniff=lo)
	  -Where should Rich Media country reports take you automatically? (commhts_temp, rmcr=hi/rmcr=lo)
	  -Is Rich Media country report window 1 open? (commhts_temp, rmcr_win_co1=1/rmcr_win_co1=0)
	  -Is Rich Media country report window 2 open? (commhts_temp, rmcr_win_co2=1/rmcr_win_co2=0)
	  -Which Rich Media country report window was opened last? (commhts_temp, rmcr_last=co1/rmcr_last=co2)

	this library should be accessed via these public methods:

	  setPref(pref, value);
		sets the preference to the given value (e.g., setPref("sniff","hi");)

	  getPref(pref);
		returns the value associated with the given preference (e.g., getPref("rmcr");)

	  clearPref(pref);
		deletes this preference (e.g., clearPref("site");)

*/

function getPref(pref) {
	var value = "";
	var prefStyle = prefStyleLookup(pref);
	var prefs = new Array();
	prefs = getPrefsAsArray(prefStyle);
	for (var i=0; i<prefs.length; i++) {
		// see if this array element contains the pref we want
		var valStart = prefs[i].indexOf(pref + "=");
		if (valStart != -1) {
			value = prefs[i].substring(valStart + pref.length + 1, prefs[i].length);
			// we found it, skip the rest of the loop
			break;
		}
	}
	return value;
}


function setPref(pref, value) {
	// this should get cleaned up a little...
	// pref deletion isn't handled cleanly
	var prefStyle = prefStyleLookup(pref);
	var prefs = new Array();
	prefs = getPrefsAsArray(prefStyle);
	var prefSeen = -1;
	for (var i=0; i<prefs.length; i++) {
		// see if this array element contains the pref we want
		var valStart = prefs[i].indexOf(pref + "=");
		if (valStart != -1) {
			// we found the preference;  remember where so we can overwrite it
			prefSeen = i;
			break;
		}
	}
	// if this preference isn't already set, we need to add
	// a new element to the end of the array
	if (prefSeen < 0) {
		prefSeen = prefs.length;
	}
	if (value == "") {
		prefs[prefSeen] = "";
	} else {
		prefs[prefSeen] = pref + "=" + value; // don't escape anything here
	}
	setCookieFromArray(prefs, prefStyle); // because it happens here
}


function clearPref(pref) {
	setPref(pref,"");
}




// PRIVATE FUNCTIONS:

function prefStyleLookup(pref) {
	// returns "temp" for prefs stored in a session cookie
	// or "perm" for prefs stored in a persistent cookie
	var prefStyle;
	// the Rich Media Country Report "ejection seat" question
	// and the three Country Report window state cookies
	// all use the temporary cookie
	if (pref == "rmcr" || pref == "rmcr_win_co1" || pref == "rmcr_win_co2" || pref == "rmcr_last") {
		prefStyle = "temp";
	} else {
		prefStyle = "perm";
	}
	return prefStyle;
}

function getPrefsAsArray(prefStyle) {
	var cookieName = "commhts_" + prefStyle;
	var allcookies = document.cookie;
	var prefString = "";
	var prefStart = allcookies.indexOf(cookieName + "=");
	if (prefStart != -1) {
		var prefValStart = prefStart + cookieName.length + 1; // skip the "pref=" part
		var prefValStop = allcookies.indexOf(";", prefValStart);
		if (prefValStop == -1) {
			prefValStop = allcookies.length;
		}
		prefString = unescape(allcookies.substring(prefValStart,prefValStop));
	}
	var prefArrayOut = new Array();
	var prefArrayIn = prefString.split("&");
	var j=0;
	// only copy non-empty values
	for (var i=0; i<prefArrayIn.length; i++) {
		if (prefArrayIn[i].length > 0) {
			prefArrayOut[j] = prefArrayIn[i];
			j++;
		}
	}
	return prefArrayOut;
}

function setCookieFromArray(prefsArrayRef, prefStyle) {
	// purge empty preferences
	var cleanPrefsArray = new Array();
	var j=0;
	for (var i=0; i<prefsArrayRef.length; i++) {
		if (prefsArrayRef[i].length > 0) {
			cleanPrefsArray[j] = prefsArrayRef[i];
			j++;
		}
	}
	var prefString = escape(cleanPrefsArray.join("&"));
	var cookieName = "commhts_" + prefStyle;
	if (prefStyle == "perm") {
		var expDate = new Date();
		// add 1 year of mills; JS1.1- and ECMAScript v3 friendly, unlike setYear or setFullYear
		if (prefString.length < 0) {
			// empty cookie set request;  must've deleted the last pref;  clear cookie from prefs
			expDate.setTime(expDate.getTime() - 31536000000);
			prefString = "_"; // I thought I knew of some Netscape browser that hated empty values...
		} else {
			expDate.setTime(expDate.getTime() + 31536000000);
		}
		var expDateString = expDate.toGMTString();
		document.cookie = cookieName + "=" + prefString + "; path=/; expires=" + expDateString + ";";
	} else {
		document.cookie = cookieName + "=" + prefString + "; path=/;";
	}
}


// stuff to do at load time:
var jumpBasedOn;
var jumping;
if (jumpBasedOn != "") {
	// we've been asked to do something at load time
	var jumpWhich = getPref(jumpBasedOn);
	if (jumpWhich == "hi" && jumpToHi != "") {
		// reset the site cookie if we redirected based on sniffer
		if (jumpBasedOn == "sniff") {
			setPref("site","hi");
		}
		jumping = true;
		location.href = jumpToHi;
	}
	if (jumpWhich == "lo" && jumpToLo != "") {
		jumping = true;
		if (jumpToLo == "back") {
			history.back();
		} else {
			// reset the site cookie if we redirected based on sniffer
			if (jumpBasedOn == "sniff") {
				setPref("site","lo");
			}
			location.href = jumpToLo;
		}
	}
}

// -->