/* Coremetrics Tagging
 * updated 3-31-2009 - added hp supplies finder pagename parameter -md
 * updated 4-1-2009 - added cookie creation when psGetReferrer not null -md
 * updated 4-10-2009 - updated hpsupplies dynamic page name -md  
 * updated 4-20-2009 - added Coremetrics Search cm_mmc keyword id detection - md
 * updated 11-17-2010 - added support for Permuto/AdTarget - md
 */

var G_PS_URL_PATH = document.location.href.toLowerCase();
var G_PS_PATHNAME = document.location.pathname.toLowerCase();
var G_PS_QUERYSTRING = document.location.search.toLowerCase();
var G_PS_URL_REFERRER = document.referrer.toLowerCase();
var G_PS_SITE_DOMAIN = "pcrush.com";
var G_PS_COOKIE_LIFETIME = 5; // 5 days
var CM_AT_TAG = ""; //Coremetrics AdTarget flag

/*
 * pcRUSH cookie functions
 */
function pcr_SetCookie(ck_name,ck_value,expiredays)
{
	var expdate=new Date();
	expdate.setDate(expdate.getDate()+expiredays);
	document.cookie=ck_name+ "=" +escape(ck_value)+
	((expiredays==null) ? "" : "; expires="+expdate.toGMTString())+"; path=/; domain="+escape(G_PS_SITE_DOMAIN);	
}

function pcr_GetCookie(ck_name)
{
	if(document.cookie.length>0)
	{
	c_start=document.cookie.indexOf(ck_name + "=");
	if(c_start!=-1)
		{ 
		c_start=c_start + ck_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 "";
}
	
function pcr_DelCookie(ck_name)
{
	document.cookie = ck_name + "=; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/; domain="+escape(G_PS_SITE_DOMAIN);
	//delete previously set cookie without domain declaration
	document.cookie = ck_name + "=; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/"; 
} 	

/*
 * parse Coremetrics Search Keyword ID from cm_mmc parameter
 */
function pcr_getKWID()
{
	var KWid = "";
	var cmMMC = psGetParamValue("cm_mmc");	
	if(psCheckElementExist(cmMMC)==true)
	{
		var mmcARR = cmMMC.split("-_-");
		if(psCheckArrayExist(mmcARR)==true)
		{
			//keyword id is in last string of cm_mmc
			var temp = mmcARR[mmcARR.length-1];
			if(psCheckElementExist(temp)==true)
			{
				temp = temp.toLowerCase();
				//search for "|-|" pattern, including unicode "%7C-%7C"
				var exp =  /(?:%7c-%7c|\|-\|)/;
				var temp2 = temp.search(exp);
				if( temp2 > -1)
				{
					KWid = temp.substr(temp2);
				}
			}
		}
	}
	return KWid;
}

function StrLeft(str, n)
{
	if(n <= 0)
	{
		return "";
	}
	else if(n > String(str).length)
	{
		return str;
	}
	else
	{
		return String(str).substring(0,n);
	}
}
	

// some Coremetrics provided scripts	(edited)

/* PURPOSE: Remove all leading & trailing spaces of a string
 * Note: [&nbsp;] is also considered as a space
 * RETURN: string
 */
function psTrim(pStr)
{
	if(pStr == null || typeof(pStr) != "string")
		return pStr;
	return (pStr != null) ? pStr.replace(/&nbsp;|\u00A0/gi, ' ').replace(/^\s+|\s+$/g, '') : null;
}

/* PURPOSE: Remove all unaccepted characters
 * including [, ', ", :, comma,]
 * RETURN: string
 */
function psCleanPageId(pPageId)
{
	if(pPageId!=null)
	{
		pPageId=pPageId.replace(/ &amp; /gi, " ");
		pPageId=pPageId.replace(/&amp;/gi, " ");
	}

	return (pPageId != null) ? pPageId.replace(/[\n\t\v\r’\'\"\™\®\%]/gi, "") : null; 
}

/* PURPOSE: extract value from the URL
 * in format of http://xxx.com/page.ext?key1=value1&key2=value2
 * or key1=value1&key2=value2
 * RETURN: string value of the parameter
 */
function psGetValueFromUrl(pUrl, pKey)
{
	pUrl = (pUrl != null) ? "?" + psTrim(pUrl.toLowerCase()) : null;
	pKey = (pKey != null) ? psTrim(pKey.toLowerCase()) : null;

	if(pUrl == null || pKey == null || pUrl.indexOf(pKey) == -1) 
		return null;
	
	var start = pUrl.indexOf('&' + pKey + '=');
	start = (start == -1) ? pUrl.indexOf('?' + pKey + '=') : start;
	if(start >= 0)
	{
		start = start + pKey.length;
		var end = pUrl.indexOf("&", start);
		if(end == -1) 
			end = pUrl.length;
		var middle = pUrl.indexOf("=", start);
		return pUrl.substring(middle + 1, end);
	}
	return null;
}

/*
 * Get parameter value from URL
 */
function psGetParamValue(param)
{
	var term = "";
	var temp=psGetValueFromUrl(G_PS_URL_PATH,param);
	if(psCheckElementExist(temp)==false)
	{
		return null;
	}
	temp=temp.replace(/[+]/g, " ") ;
	term=temp;
	return term;
}

// Check an element exist or not
function psCheckElementExist(pElement)
{
    if(typeof(pElement) == "undefined" || pElement == null || pElement == "")
    {
        return false;
    }

    return true;
}

// Check if array is exist or not
function psCheckArrayExist(pArrElement)
{
    if(typeof(pArrElement) == "undefined" || pArrElement == null || pArrElement.length <= 0)
    {
        return false;
    }

    return true;
}

/* PURPOSE: Get inner text of an object or remove html tags of a particular string
 *          work properly even when the designated tag/text has script tag inside
 * RETURN: resultant string or null object
 */
function psGetInnerText(pTagOjb){
	var pattern = /<script[\s\S]*?<\/script>/gi; // question mark means non-greedy
	if(pTagOjb != null)
	{
		var sT = (typeof(pTagOjb) == "object") ? pTagOjb.innerHTML : pTagOjb;
		// remove all script tags and its content
		while (sT.search(pattern) > -1)
		{
			sT = sT.replace(pattern, "");
		}
		return sT.replace(/\<+.+?\>+/g, "");
	}
	return null;
}

/* PURPOSE: extract domain part in the URL
 * RETURN: domain
 */
function psGetDomain(pUrl)
{
    var se = /^https*\:\/\/([^\/\:]+)/gi;
    return (pUrl.search(se) > -1) ? RegExp.$1 : null;
}

function psGetReferrer()
{
	if(G_PS_URL_REFERRER!=""){
		if(G_PS_URL_REFERRER.indexOf("search.pcrush.com/")>=0)
		{
			return "search";
		}
		else if(psGetDomain(G_PS_URL_REFERRER).indexOf("pcrush.hpsuppliesfinder.com")>=0)
		{
			return "hp supplies finder";
		}	
		else if(psGetDomain(G_PS_URL_REFERRER).indexOf("pcrush.com")<0)
		{
			return "referred";
		}
		else
		{
			return null;
		}
	}
	return "bookmark";
}


/*
 * Set manual MMC parameter
 */
function psGetMMC_refid()
{
	if(G_PS_URL_PATH.indexOf("refid=")>=0)
	{
		var pagepathARR = G_PS_PATHNAME.split("/");
		var refid = psGetParamValue("refid");
		// clean up non-numeric refid value
		if(isNaN(refid))
		{
			var therefid = "";
			for(i=0; i < refid.length; i++)
			{
				if(isNaN(refid.substr(i,1))==false)
				{
					therefid = therefid+refid.substr(i,1);
				}
			}
			refid = therefid;
		}
		// validate refid value
		if(refid.length==4)
		{
			var refDomain = psGetDomain(G_PS_URL_REFERRER);
			if(refDomain == null)	{
				var refDomain = "unknown";
			}
			var MMCparam = refid + "-_-" + refDomain.toLowerCase() + "-_-";
			//check for Permuto ID
			if(refid == 2185) {
				CM_AT_TAG = "at_";
			}
			
			//Coremetrics Search Keyword ID
			var cmkwID = pcr_getKWID();
			
			// product page view		
			if((G_PS_URL_PATH.indexOf("/product/")>=0)&&(pagepathARR.length==5))
			{
				return MMCparam+ CM_AT_TAG + pagepathARR[2].toLowerCase() + "-_-item: " + pagepathARR[3].toLowerCase() + " - " + psCleanPageId(pagepathARR[4].toLowerCase()) + cmkwID;
			}
			// subcategory page view
			else if((G_PS_URL_PATH.indexOf("/subcat/")>=0)&&(pagepathARR.length==4))	
			{
				return MMCparam + CM_AT_TAG + "subcat page-_-subcat: " + pagepathARR[2].toLowerCase() + " - " + psCleanPageId(pagepathARR[3].toLowerCase()) + cmkwID;
			}
			// category page view
			else if((G_PS_URL_PATH.indexOf("/category/")>=0)&&(pagepathARR.length==4))	
			{
				return MMCparam + CM_AT_TAG + "category page-_-cat: " + pagepathARR[2].toLowerCase() + " - " + psCleanPageId(pagepathARR[3].toLowerCase()) + cmkwID;
			}
			// non-product page view
			else
			{
				// try to get the page title from html
				var pagename=document.getElementsByTagName("title")[0];
				if(pagename=="undefined")
				{
					// get the pagename from url
					pagename = pagepathARR[pagepathARR.length-1].toLowerCase();
				}
				else
				{
					// pagename is first array value from split string - title format "XXXXX | pcRUSH.com"
					pagename = psTrim(psGetInnerText(pagename).split("|")[0]);
				}
				return MMCparam + CM_AT_TAG + "non product page-_-page: " + psCleanPageId(pagename.toLowerCase()) + cmkwID;
			}
		}
		else
		{
		return null;
		}
	}
	else
	{
		return null;
	}			
}


/*
 * Determine if the page is the search result page
 */
function psIsSearchView()
{
	if(G_PS_URL_PATH.indexOf("search.pcrush.com/")>=0)
	{
		return true;
	}
	return false;
}

function psIsRefinementPage()
{
	var temp=psGetParamValue("af");
	if(psCheckElementExist(temp)==true)
	{
		return true;
	}
	else
	{
		if(G_PS_URL_PATH.indexOf("&af=")>=0)
		{
			return true;
		}
	}
	return false;
}

function psGetSearchTerm_Refinement()
{
	var temp=psGetParamValue("af");
	if(psCheckElementExist(temp)==true)
	{
		temp=temp.replace("cat1%3a","");
		temp=temp.replace("br%3a","");
		temp=temp.replace("pb%3a","");
		temp=temp.replace("%3a","");
		temp=temp.replace(/[+]/g, " ");		
	}
	return temp;
}

function psSendPageViewTag_Search()
{
	var pageId="search successful page";
	var catId="search";
	var searchTerm=psGetParamValue("w");
	var searchResult="0";
	if (typeof(numresults)!= 'undefined')
	{	
		searchResult=numresults;
	}
	if(searchResult=="0")
	{
		pageId="search unsuccessful";
	}
	else
	{
		if(psIsRefinementPage()==true)
		{
			pageId="search refinement";
			searchTerm=psGetSearchTerm_Refinement()+" "+searchTerm;
		}
	}
	pcr_SetCookie("pcr_prodcat", catId, G_PS_COOKIE_LIFETIME);	
	cmCreatePageviewTag(pageId, catId, searchTerm, searchResult);
}

/*
 * Determine if the page is the hp supplies finder page
 */
function psIsHPSuppliesFinder()
{
	if(G_PS_URL_PATH.indexOf("pcrush.hpsuppliesfinder.com/")>=0)
	{
		return true;
	}
	return false;
}

function psSendPageViewTag_HPSupplies()
{
	var pageId="hp supplies finder";
	var catId="hp supplies finder";
	var selecttab=psGetParamValue("_sltab");
	
	if(typeof(hpsuppliesfinder_page)!= 'undefined')
	{
		if(hpsuppliesfinder_page.toLowerCase() == "detail")
		{
			catId = "hp supply detail page"; 
			pageId = "hp supply detail";	
		}
		else
		{
			catId = "hp supply list page";
			if(selecttab!=null)
			{
				pageId=selecttab+ " supplies";
			}			
		}
	}
	if(typeof(hpsuppliesfinder_product)!= 'undefined' && psCheckElementExist(hpsuppliesfinder_mfgpart)== true)
	{
		pageId = pageId + " for " + hpsuppliesfinder_product.toLowerCase() + " (" + hpsuppliesfinder_mfgpart.toLowerCase() + ")" 
	}
	else if(typeof(hpsuppliesfinder_product)!= 'undefined')
	{
		pageId = hpsuppliesfinder_product.toLowerCase()
	}
	pcr_SetCookie("pcr_prodcat", catId, G_PS_COOKIE_LIFETIME);
	cmCreatePageviewTag(psCleanPageId(pageId), catId, null, null);
}

function psIsRefLink()
{
	if(psIsSearchView()==true)
	{
		psSendPageViewTag_Search();
		return true;
	}
	else if(psIsHPSuppliesFinder()==true)
	{
		psSendPageViewTag_HPSupplies();
		return true;
	}
	return false;	
}

/*
 * Set default category or referrer
 */
function psGetProdCatID(defProdCatID)
{
	var prodcatID=defProdCatID;
	var ck_prodcatID=pcr_GetCookie("pcr_prodcat");
	if(psGetReferrer()!=null)
	{
		prodcatID=psGetReferrer();
		pcr_SetCookie("pcr_prodcat", prodcatID, G_PS_COOKIE_LIFETIME);		
	}
	else if(psCheckElementExist(ck_prodcatID)==true)
	{
		prodcatID=ck_prodcatID;
	}
	return prodcatID;
}







