// --- BEGIN SESSION KEYWORD PERPETUATION FUNCTIONS ---

// Capture all clicks within HTML doc.
document.onclick = Intrinsics_BodyClicked;

/*
Intrinsics_BodyClicked processes all clicks in HTML document, and updates any clicked
hyperlinks, imagemaps, and forms to append certain keywords that are
expected to perpetuate across user's session.

Effective in MSIE 5+ and Netscape 6+ for all pages that include this
JavaScript file (via <script src> tag).  (No need to modify page's HTML.)

Written by Tom Kiefer, Feburary 9, 2004.
Copyright Homestore, Inc.
*/
function Intrinsics_BodyClicked(evt) {
	// Netscape will automatically pass event object to this func
	// If no event obj, check window.event property as per MSIE model
	if(!evt)
		evt = window.event;

	// Get the element (oSrc) that was clicked.
	var oSrc = null;
	if(evt) {
		oSrc = evt.srcElement; // MSIE model
		if(!oSrc) oSrc = evt.target; // Netscape model
	}

	if(oSrc && oSrc.tagName) {
		// was a hyperlink clicked?
		if(oSrc.tagName.toLowerCase() == 'a'  && oSrc.href.substr(0, 11).toLowerCase() != 'javascript:' && oSrc.href != "")
			oSrc.href = Intrinsics_AddStdArgsToURL(oSrc.href);

		// was an imagemap region?
		if(oSrc.tagName.toLowerCase() == 'area'  && oSrc.href.substr(0, 11).toLowerCase() != 'javascript:' && oSrc.href != "")
			oSrc.href = Intrinsics_AddStdArgsToURL(oSrc.href);

		// was a form element clicked?
		if(oSrc.tagName.toLowerCase() == 'input') {
			var oFrm = oSrc.form;
			// is element part of a form?
			if(oFrm) {
				if(oFrm.action == '') // make sure form action isn't blank
					oFrm.action = document.location.pathname;
				if(oFrm.method.toLowerCase() == 'post')  // POST form - update form action
					oFrm.action = Intrinsics_AddStdArgsToURL(oFrm.action);

				var strValue = '';
				if(oFrm.method.toLowerCase() == 'get') {  // GET form - add hidden form fields, as needed
					if(!oFrm.gate)	{
						strValue = Intrinsics_GetSessionKeyword('gate');
						if(strValue != '')
							oFrm.appendChild(Intrinsics_CreateInputField( 'hidden', 'gate', strValue ));
					}
					if(!oFrm.source)	{
						strValue = Intrinsics_GetSessionKeyword('source');
						if(strValue != '')
							oFrm.appendChild(Intrinsics_CreateInputField( 'hidden', 'source', strValue ));
					}
					if(!oFrm.poe)	{
						strValue = Intrinsics_GetSessionKeyword('poe');
						if(strValue != '')
							oFrm.appendChild(Intrinsics_CreateInputField( 'hidden', 'poe', strValue ));
					}
				}
			}
		}
	}
}

function Intrinsics_CreateInputField(strType, strName, strValue) {
	var oHiddenField = document.createElement('input');
	oHiddenField.type  = strType;
	oHiddenField.id    = strName;
	oHiddenField.name  = strName;
	oHiddenField.value = strValue;
	return oHiddenField;
}


function Intrinsics_GetSessionKeyword(strName) {
	var strValue = Intrinsics_GetParamFromQSString(strName, document.location.search);
	if(strValue == '') {
		strRef = document.referrer;
		intQ = strRef.indexOf('?');
		strValue = Intrinsics_GetParamFromQSString(strName, strRef.substr( ( intQ > 0 ? intQ : 0 ) ));
	}
	if(strValue == '') {
		strValue = Intrinsics_GetParamFromSessionCookie(strName);
	}
	return strValue;
}

function Intrinsics_GetParamFromSessionCookie(strName) {
	return Intrinsics_GetParamFromQSString(strName, Intrinsics_GetCookieValue("SessionKeywords"));
}
// --- END SESSION KEYWORD PERPETUATION FUNCTIONS ---



// --- BEGIN GENERAL QUERYSTRING MANIPULATION FUNCTIONS ---
function Intrinsics_GetParamFromQS(strName) {
	return Intrinsics_GetParamFromQSString(strName, document.location.search);
}

function Intrinsics_GetParamFromQSString(strName, strQS) {
	var strValue = '';
	
	if(strQS != null) // Added this condition to check for null values for strQS.
	{
	    var intStart = strQS.indexOf(strName + '=');

	    if(intStart != -1) {
		    var intEnd = strQS.indexOf('&', intStart);
		    if(intEnd == -1) intEnd = strQS.length;
		    strValue = strQS.substring(intStart + strName.length + 1, intEnd);
	    }
	}
	return unescape(strValue);
}


function Intrinsics_AddArgToQS(strURL, strArg) {
	if(strURL.indexOf('?') == -1)
		return strURL + '?' + strArg;
	else
		return strURL + '&' + strArg;
}

function Intrinsics_SetArgInQS(strURL, strName, strValue) {
	var intStartPos = -1, intEndPos;
	intStartPos = strURL.indexOf('?' + strName + '=');
	if(intStartPos == -1)
		intStartPos = strURL.indexOf('&' + strName + '=');
	if(intStartPos == -1)
		return Intrinsics_AddArgToQS(strURL, strName + '=' + strValue)
	else {
		intStartPos += strName.length + 2;
		intEndPos = strURL.indexOf('&', intStartPos);
		if(intEndPos == -1)
			intEndPos = strURL.length;
		return strURL.substr(0, intStartPos) + strValue + strURL.substr(intEndPos);
	}
}

function Intrinsics_AddStdArgsToURL(strOrigURL) {
	var strValue, strURL = strOrigURL
	// NOTE: Keyword names are hardcoded below as: gate, source, poe

	strValue = Intrinsics_GetSessionKeyword('gate')
	if(strValue != '' && strOrigURL.indexOf('gate=') == -1)
		strURL = Intrinsics_AddArgToQS(strURL, 'gate=' + strValue);

	strValue = Intrinsics_GetSessionKeyword('source')
	if(strValue != '' && strOrigURL.indexOf('source=') == -1)
		strURL = Intrinsics_AddArgToQS(strURL, 'source=' + strValue);

	strValue = Intrinsics_GetSessionKeyword('poe')
	if(strValue != '' && strOrigURL.indexOf('poe=') == -1)
		strURL = Intrinsics_AddArgToQS(strURL, 'poe=' + strValue);

	return strURL;
}
// --- END GENERAL QUERYSTRING MANIPULATION FUNCTIONS ---



// --- BEGIN GENERAL COOKIE MANIPULATION FUNCTIONS ---
function Intrinsics_GetCookieValue(strName) {
	var strCookies = document.cookie.split('; ');
	var intNameLen = strName.length;
	for(var i = 0;  i < strCookies.length;  ++i)
		if(strCookies[i].substr(0, intNameLen+1) == strName + '=')
			return strCookies[i].substr(intNameLen+2);
}
// --- END GENERAL COOKIE MANIPULATION FUNCTIONS ---

