// ####################################################
// FUNCTION CALLED FROM THE CLIENT PAGE
// Parameters:
// Client ID,
// Bit for remote process (asp page on reasonlabs.com),
// Search engine name HTML object id,
// Keywords HTML object id,
// Campaign HTML object id,
// Referrer URL HTML id,
// Bit to save the referral URL before conversion (asp page on reasonlabs.com)

function getKeywords(strClientID,intSave,strSEngineBox,strKeywordsBox,strCampaignBox,strReferrerURLBox,intSaveReferralConversion)
{
	// HILITE IS THE FUNCTION THAT RETURNS THE SEARCH ENGINE NAME AND KEYWORDS USED. ALSO BAKES THE COOKIES.
	Hilite.hilite(strClientID,intSave,intSaveReferralConversion);

	// Get the cookies baked by the HILITE function
	strSEngine = getKWCookie('SEngine');
	strKeywords = getKWCookie('SEKeywords');
	strCampaign = getKWCookie('SECampaign');
	strReferrerURL = getKWCookie('SEReferrer');

	// If there's a cookie, check if elements are found on the page. If so, populate with the cookie values.
	if (strSEngine != null && strSEngine != "")
	{
		if(strSEngineBox != null && strSEngineBox != "")
		{
			if(document.getElementsByName(strSEngineBox).length > 0)
			{document.getElementById(strSEngineBox).value = strSEngine;}
		}
		if(strKeywordsBox != null && strKeywordsBox != "")
		{
			if(document.getElementsByName(strKeywordsBox).length > 0)
			{document.getElementById(strKeywordsBox).value = strKeywords;}
		}
		if(strCampaignBox != null && strCampaignBox != "")
		{
			if(document.getElementsByName(strCampaignBox).length > 0)
			{document.getElementById(strCampaignBox).value = strCampaign;}
		}
		if(strReferrerURLBox != null && strReferrerURLBox != "")
		{
			if(document.getElementsByName(strReferrerURLBox).length > 0)
			{document.getElementById(strReferrerURLBox).value = strReferrerURL;}
		}
	}
}
// ####################################################

// ####################################################
// COOKIES FUNCTIONS

// Bake cookie.
function setKWCookie(c_name,value)
{
	document.cookie = c_name + "=" + escape(value);
}

// Get cookie.
function getKWCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    { 
    c_start=c_start + c_name.length+1; 
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    } 
  }
return "";
}
// ####################################################

// ####################################################
// GENERATES A UNIQUE ID BASED ON TIME STAMP
getUniqueId = function ()
{
     var dateObject = new Date();
     var uniqueId = 
         dateObject.getMonth() + '' + 
         dateObject.getDate() + '' + 
         dateObject.getTime();
	
	uniqueId = String(uniqueId) + String((1 + Math.floor((Math.random()*99999))))
    return uniqueId;
};
// ####################################################

// ####################################################
// GET VALUE FROM QUERYSTRING
function querySt(ji)
{
	qs1 = window.location.search.substring(1);
	gy = qs1.split("&");
	for (i=0;i<gy.length;i++)
		{
			ft = gy[i].split("=");
			if (ft[0] == ji)
				{
					return ft[1];
				}
		}
}
// ####################################################

// ####################################################
// CAPITALIZE
String.prototype.capitalize = function()
	{ return this.replace(/\S+/g, function(a){return a.charAt(0).toUpperCase() + a.slice(1).toLowerCase();}); };
// ####################################################

// ####################################################
// MAIN FUNCTIONS. GET THE SEARCH ENGINE DATA AND BAKE COOKIES.
Hilite = { };

Hilite.search_engines = [
    ['google\\.', 'q'],
    ['search\\.yahoo\\.', 'p'],
    ['search\\.msn\\.', 'q'],
	['search\\.live\\.', 'q'],
    ['search\\.aol\\.', 'query'],
    ['ask\\.com', 'q'],
    ['altavista\\.', 'q'],
    ['search\\.lycos\\.', 'query'],
    ['alltheweb\\.', 'q']
];

Hilite.decodeReferrer = function(referrer,strClientID,intSave,intSaveReferralConversion) {
    var query = null;
    var regex = new RegExp('');

    for (var i = 0; i < Hilite.search_engines.length; i ++) {
        var se = Hilite.search_engines[i];

		regex.compile('^http://(www\\.)?' + se[0], 'i');
        var match = referrer.match(regex);
        if (match)
		{
			var result;
            if (isNaN(se[1])) {
                result = Hilite.decodeReferrerQS(referrer, se[1]);
            } else {
                result = match[se[1] + 1];
            }
            if (result) {
				// Replace characters
				strSE = String(match)
				strSE = strSE.replace(/search/g,'');
				strSE = strSE.replace(/http:\/\//g,'');
				strSE = strSE.replace(/\.com/g,'');
				strSE = strSE.replace(/\./g,'');
				strSE = strSE.replace(/,/g,'');
				strSE = strSE.replace(/www/g,'');
				result = decodeURIComponent(result);
				result = result.replace(/\'|"/g, '');
				result = result.split(/[\s,\+\.]+/);
				result = String(result);
				
				// Replace "," with " "
				rr = result.replace(/,/g,' ');
				
				// Generate visitor's unique ID
				strUID = getUniqueId();
				
				// Bake cookies
				setKWCookie('SEngine',String(strSE.capitalize()));
				setKWCookie('SEKeywords',rr);
				setKWCookie('SECampaign',String(querySt("campaign")));
				setKWCookie('SEReferrer',String(document.referrer));
				setKWCookie('SEUniqueID',String(strUID));

				// Check for remote processing. ASP file located on ReasonLabs.com
				//if(intSave == 1)
				//{
					saveKWData(strClientID,String(strUID),String(strSE.capitalize()),rr,String(querySt("campaign")),String(document.referrer));
				//}
				
                return result;
            }
            break;
        }
		else
		{
			// Traffic did not arrive from Search Engines. Re-bake the referrring cookie with the referring URL.
			setKWCookie('SEReferrer',String(document.referrer));
			
			// Check for update the "Referrer_Before_Conversion" field with the referrer page URL.
			if(intSaveReferralConversion == 1)
				{
					updateReferralConversion(getKWCookie('SEUniqueID'),String(document.referrer));
				}
			 break;
		}
    }
    return null;
};

Hilite.decodeReferrerQS = function(referrer, match) {
    var idx = referrer.indexOf('?');
    var idx2;
    if (idx >= 0) {
        var qs = new String(referrer.substring(idx + 1));
        idx  = 0;
        idx2 = 0;
        while ((idx >= 0) && ((idx2 = qs.indexOf('=', idx)) >= 0)) {
            var key, val;
            key = qs.substring(idx, idx2);
            idx = qs.indexOf('&', idx2) + 1;
            if (key == match) {
                if (idx <= 0) {
                    return qs.substring(idx2+1);
                } else {
                    return qs.substring(idx2+1, idx - 1);
                }
            }
        }
    }
    return null;
};

Hilite.hilite = function(strClientID,intSave,intSaveReferralConversion) {
    var q = document.referrer;
    var e = null;
    q = Hilite.decodeReferrer(q,strClientID,intSave,intSaveReferralConversion);
};
// ####################################################

// ####################################################
// FUNCTION THAT WRITES AN IFRAME WITH THE CALL TO THE ASP PAGE LOCATED ON REASONLABS.COM
function saveKWData(strClientID,strUID,strSEngine,strKeywords,strCampaign,strReferrer)
{ 
	var url="http://www.reasonlabs.com/client-process/searchengines/storeSEData.asp?CID=" + strClientID + "&UID=" + strUID + "&se=" + strSEngine + "&keywords=" + strKeywords + "&campaign=" + strCampaign + "&title=" + document.title + "&url=" + document.URL + "&referrer=" + strReferrer;
	document.write('<iframe frameborder="0" width="1" height="1" style="border:0px; visibility:hidden;" src="' + url + '"></iframe>')
}
// ####################################################

// ####################################################
// FUNCTION THAT WRITES AN IFRAME WITH THE CALL TO THE ASP PAGE LOCATED ON REASONLABS.COM TO UPDATE THE REFERRING PAGE
function updateReferralConversion(strUID,strReferrer)
{ 
	var url="http://www.reasonlabs.com/client-process/searchengines/storeSEData.asp?update=1&UID=" + strUID + "&referrer=" + strReferrer;
	document.write('<iframe frameborder="0" width="1" height="1" style="border:0px; visibility:hidden;" src="' + url + '"></iframe>')
}
// ####################################################