/********************************************************************
 * Copyright © 2007 MyBuys, Inc.  All Rights Reserved.
 ********************************************************************/

var mybuys = {
	'version' : '3.0',
	'language' : 'en',
	'zonesEnabled' : false,
	'webrecRoot' : "http://t.p.mybuys.com/",
	'signupRoot' : "http://a.p.mybuys.com/",
	'signupTemplates' : {},
	'signupImages' : {},
	'zoneTitleImage' : {},
	'client' : '',
	'mybuyscid' : '',
	'params' : {},
	'tparts' : {},
	'onPageItemIds' : [],
	'onPageItemUrlPattern' : null,
	'onPageItemUrlParam' : null,
	'requestProcId' : null,
	'renderOK' : true,
	'paramMap' : {	'wrz':'wrz',
					'pt':'pt',
					'productid':'cpc',
					'categoryid':'ckc',
					'brandname':'bnm',
					'keywords':'kws',
					'email':'email',
					'amount':'amt',
					'optin':'optin',
					'hfile':'hfile',
					'mybuys':'mybuys',
					'items':'skus',
					'orderid':'order',
					'mybuyscid':'mybuyscid',
					'otheritemtype':'oit',
					'otheritemids':'oid'},
	'pagetype' : null,
	'pageTypeMap' : {	'PRODUCT_DETAILS' : 'prod',
						'SHOPPING_CART' : 'cart',
						'ORDER_CONFIRMATION' : 'purchase',
						'CATEGORY' : 'cat',
						'SEARCH_RESULTS' : 'ks',
						'HOME' : 'h',
						'SALE' : 'sale',
						'NEW' : 'np',
						'BRAND' : 'brand',
						'BRAND_HOME' : 'bh',
						'HIGH_LEVEL_CATEGORY' : 'hcat',
						'LANDING' : 'lnd'},
	'zoneKeysToZoneDivIds' : [],
	'setters' : {},
	'settersByPageType' : {},
	'failOverIntervalMsecs' : 1500,
	'failOverImages' : {},
	'responseXML' : '',
	'rowlist' : '',
    'altValueForZeroPrice' : 'Click For Price',
	'initPage' : function()
 	{	if (!this.client) return;
 		if (!this.pagetype) return;
 		this.createContainer();
		this.getPageContext();
		this.populateSignupLinks();
		if (this.retrieveProductIds) this.retrieveProductIds();
		this.sendXMLRequest();
 	},
 	'createContainer' : function()
 	{	this.mybuysContainer = document.getElementById("mybuyscontainer");
 		if (!this.mybuysContainer)
		{	document.write('<span id="mybuyscontainer" style="display:none"></span>');
			this.mybuysContainer = document.getElementById("mybuyscontainer");
		}
	},
 	'enableZones' : function()
 	{	this.zonesEnabled = true;
 	},
	'getPageContext' : function()
	{	var loc=window.location.href;
		if (loc.indexOf("?") < 0 || loc.indexOf("mybuyscid") < 0 )
		{	this.mybuyscid="";
			return;
		}
		var idpos=loc.indexOf("mybuyscid=")+10;
		var mybuyscid=loc.substr(idpos)
		this.mybuyscid=mybuyscid;
		this.params["mybuyscid"]=mybuyscid;
	},
	'setPageType' : function(pagetype)
	{	if (this.pageTypeMap[pagetype])
		{	this.pagetype=pagetype;
			this.set("pt",this.pageTypeMap[pagetype]);
			this.applyStylesByPageType(pagetype);
		}
		else if (mbTest) alert("MyBuys Page Type " + pt + " is invalid!");
	},
	'setWebrecRoot' : function(root)
	{	this.webrecRoot=root;
	},
	'setSignupRoot' : function(signuproot)
	{	this.signupRoot=signuproot;
	},
	'setClient' : function(clientid)
	{	this.client=clientid;
	},
	'set' : function(param, value)
	{	this.params[param.toLowerCase()]=value;
	},
	'addCartItemQtySubtotal' : function(id, quantity, subtotal)
	{	this.params["items"]=this.params["items"] || "";

		if (id && id != "")
		{
			if (this.params["items"] != "" )
			{
				this.params["items"] += ",";
			}
			
			this.params["items"] += id;
			if (quantity && quantity != "")
			{	this.params["items"] += "|" + quantity;
				if (subtotal && subtotal != "")	this.params["items"] += "|" + subtotal;
			}
		}
	},
	'addOrderItemQtySubtotal' : function(id, quantity, subtotal)
	{	this.addCartItemQtySubtotal(id, quantity, subtotal);
	},
	'addItemPresentOnPage' : function(id)
	{	var testDup = ","+this.onPageItemIds.join()+",";
		if ( testDup.indexOf(","+id+",") == -1 ) this.onPageItemIds.push(id);
	},
	'retrieveProductIdsFromHrefs' : function(pattern, param)
	{
		this.setOnPageItemUrlPattern(pattern);
		this.setOnPageItemUrlParam(param);

		if ( !this.onPageItemUrlPattern || !this.onPageItemUrlParam) return;
		var urls = document.getElementsByTagName("A");

		var param1 =  "?"+this.onPageItemUrlParam+"=";
		var param2 =  "&"+this.onPageItemUrlParam+"=";

		var ids = {};
		for (var i=0; i<urls.length; i++)
		{	var url = urls[i].getAttribute("href");
			var pos1 = -1;
			var pos2 = -1;

			if ( url.indexOf(this.onPageItemUrlPattern) >= 0 &&
				 ((pos1=url.indexOf(param1)) > 0 ||
				  (pos2=url.indexOf(param2)) > 0) )
			{
				// Retrieve product Id using pos1 or pos2 values, set it into id
				var id = null;
				var pos = (pos1>0)?pos1:pos2;

				url = url.substr(pos+param1.length);
				if ( (pos=url.indexOf("&")) == -1 )
				{
					id = url;
				}
				else
				{
					id = url.substr(0, pos);
				}

				if (id)
				{
					mybuys.addItemPresentOnPage(id);
				}
			}    
		}
	},
	'setOnPageItemUrlPattern' : function(pattern)
	{    this.onPageItemUrlPattern = pattern;
	},
	'setOnPageItemUrlParam' : function(param)
	{    this.onPageItemUrlParam = param;
	},
	'setSignup' : function(type, value)
	{	this.signupTemplates[type] = value;
	},
	'setSignupImage' : function(type, src)
	{	this.signupImages[type] = src;
	},
	'setFailOverMsecs' : function(msecs)
	{	this.failOverIntervalMsecs=(msecs)?msecs:1500;
	},
	'addFailOverImage' : function(pagetype,zone,imgurl)
	{	var foImages=this.failOverImages[pagetype];
		if (!foImages)
		{	foImages={};
			this.failOverImages[pagetype]=foImages;
		}
		if (foImages[zone])
			foImages[zone].push(imgurl);
		else
			foImages[zone]=[imgurl];
	},
	'assembleTemplate' : function(rowlist)
	{	if (rowlist=="all") rowlist=this.tparts.all;
		this.rowlist = rowlist;
		this.assembleTemplateString(rowlist);
	},
	'assembleTemplateString' : function(rowlist)
	{	if (!rowlist.join) rowlist=rowlist.split(",");
		var out="";
		for (var r=0;r<rowlist.length;r++)
		{	out += (this.tparts[rowlist[r]])?this.tparts[rowlist[r]]:"";
		}
		out=this.processTemplateString(this.tparts["mbitem"],{'mbitemhtml':out});
		this.templateString=out;
	},
	'isInAssembledTemplate' : function(key)
	{	var tempStr = ","+this.rowlist+",";
		return tempStr.indexOf(","+key+",") != -1;
	},
	'processTemplateString': function(p_template, p_context)
    {	var fn = function(w, g)
        { 	var value = p_context[g];
            if (value == null) return "";
            return value;
        };
        return p_template.replace(/%\(([A-Za-z0-9_|.-]*)\)/g, fn);
    },
	'repQuote': function(p_str)
	{	p_str=p_str.replace(/\'/g, "&lsquo;");
		return p_str.replace(/\"/g, "&quot;");
	},
	'addZone' : function(zoneKey, zoneDiv)
	{	if (this.zoneKeysToZoneDivIds[zoneKey]) return;
		var zoneDivId=zoneDiv.getAttribute("id");
		if (!zoneDivId)
		{	zoneDivId = "mybuyspagezone" + zoneKey;
			zoneDiv.setAttribute("id", zoneDivId);
		}
		this.zoneKeysToZoneDivIds[zoneKey]=zoneDivId;
	},
	'collectZones' : function()
	{	var divs=document.getElementsByTagName("div");
		for (var i=0;i<divs.length;i++)
		{	var zoneKey=divs[i].getAttribute("mybuyszone");
			if (!zoneKey) continue;
			var zoneKeyInt = parseInt(zoneKey);
			if (isNaN(zoneKeyInt)||zoneKeyInt<0) continue;
			this.addZone(zoneKeyInt, divs[i]);
		}
		var zoneKeys="";
		for (var z=0;z<this.zoneKeysToZoneDivIds.length;z++)
		{	if (!this.zoneKeysToZoneDivIds[z]) continue;
			if (zoneKeys != "") zoneKeys += ",";
			zoneKeys += z;
		}
		if (zoneKeys != "")
			this.params["wrz"]=zoneKeys;
	},
	'sendXMLRequest' : function()
	{	this.collectZones();
		var mburl=this.assembleParams();
		if (!this.zonesEnabled || !this.params["wrz"])
		{	this.sendBeacon(mburl);
			return;
		}
		if (mbTest) { this.processtestxml(); return; }//uses the xml test blob for server-less testing.
		var mbscript=document.getElementById("mbTransportScript");
		if (mbscript)
		{	mbscript.setAttribute("src",mburl);
		}
		else
		{	var mbscript=document.createElement("script")
			mbscript.setAttribute("id","mbTransportScript")
			mbscript.setAttribute("src",mburl);
			if (this.mybuysContainer) this.mybuysContainer.appendChild(mbscript);
		}
		this.renderOK=true;
		this.requestProcId=setTimeout("mybuys.cancelXMLRequest()",this.failOverIntervalMsecs)
	},
	'readResponseXML' : function()
	{	clearTimeout(this.requestProcId);
		if (!this.renderOK) return;
		var xDoc=this.createXMLDomFromString(this.responseXML);
		this.processXML(xDoc)
	},
	'cancelXMLRequest' : function()
	{	this.renderOK=false;
		//fill with zone-appropriate filler images
		for (var z=0;z<this.zoneKeysToZoneDivIds.length;z++)
		{	if (this.zoneKeysToZoneDivIds[z])
				this.loadFailoverImage(z);
		}
	},
	'loadFailoverImage' : function(zoneKey)
	{	var zoneDivId=this.zoneKeysToZoneDivIds[zoneKey];
		if (!zoneDivId) return;
		var zoneDiv=document.getElementById(zoneDivId);
		if (!zoneDiv) return;
		var foImages=this.failOverImages[this.pagetype];
		if (!foImages) return;
		var f=foImages[zoneKey];
		if (f && f.join && f.length > 0)
		{	var ndx=Math.floor(Math.random() * f.length);
			var fimg=document.createElement("img");
			fimg.setAttribute("src",f[ndx])
			zoneDiv.appendChild(fimg);
		}
		else
			zoneDiv.innerHTML="";
	},
	'assembleParams' : function()
	{	var mburl=(this.isSecure)?this.webrecRoot.replace(/^http:/,"https:"):this.webrecRoot;
		mburl+="webrec/wr.do?";
		var mbts=new Date().getTime();
		mburl+="client=" + this.client;
		if (this.params["wrz"]) mburl+="&wrz="+this.params["wrz"];
		var pt=this.params["pt"] || "";
		switch (pt) {
			case "cart":
			case "purchase":
				if (mbTest) { if (!this.checkParameters()) return mburl; }

				this.params["items"]=this.params["items"] || "";
				if (this.params["items"].join)
					this.params["items"]=this.params["items"].join(",");
				else
					this.params["items"]=this.params["items"];
			default:
				for (var p in this.params)
				{	if (p != "wrz")
					{	mburl += "&";
						mburl += (this.paramMap[p])?this.paramMap[p]:p;
						mburl += "=" + encodeURIComponent(this.params[p]);
					}
				}
				break;
		}

		if (this.onPageItemIds.length > 0)
		{
			var item = "&pips=" + this.onPageItemIds[0];
			if ((mburl.length + item.length) <= 2000) mburl += item;

			for (var i=1; i < this.onPageItemIds.length; i++)
			{
				item = "," + this.onPageItemIds[i];
				if ((mburl.length + item.length) <= 2000) mburl += item;
			}
		}

		mburl += "&lang="+this.language;
		mburl += "&v="+this.version;
		mburl += "&mbts="+mbts;
		if (document.referrer)
		{	var rf="&rf="+encodeURIComponent(document.referrer);
			if ((mburl.length + rf.length) <= 2000) mburl += rf;
		}
		var pageUrl="&purl="+encodeURIComponent(window.location.href);
		if ((mburl.length + pageUrl.length) <= 2000) mburl += pageUrl;
		return mburl;
	},
	'processtestxml' : function()
	{	var xDoc=this.createXMLDomFromString(xmlblob);
		this.processXML(xDoc);
	},
	'processXML' : function(xDoc)
	{	var leftoverZones=[]
		for (var zk=0;zk<this.zoneKeysToZoneDivIds.length;zk++)
		{	if (this.zoneKeysToZoneDivIds[zk])
				leftoverZones[zk]=true;
		}
		var userNodes=xDoc.getElementsByTagName("mybuyscid");
		if (userNodes[0] && userNodes[0].firstChild)
		{	this.mybuyscid=userNodes[0].firstChild.nodeValue;
			this.params["mybuyscid"]=this.mybuyscid;
		}
		var zoneNodes=xDoc.getElementsByTagName("zone");
		for (var z=0; z<zoneNodes.length; z++)
		{	var zoneobj={}
			for (var a=0; a<zoneNodes[z].childNodes.length;a++)
			{	var nm = zoneNodes[z].childNodes[a].nodeName.toLowerCase();
				if (nm=="items" || nm.charAt(0)=="#") continue;
				if (zoneNodes[z].childNodes[a].firstChild)
					zoneobj[nm]=zoneNodes[z].childNodes[a].firstChild.nodeValue;
			}
			var items=zoneNodes[z].getElementsByTagName("item");
			zoneobj.itemarray=[];
			for (var i=0;i<items.length;i++)
			{	var item={};
				for (var j=0; j<items[i].childNodes.length; j++)
				{	var val=items[i].childNodes[j].firstChild;
					if (val && val.nodeValue)
						item[items[i].childNodes[j].nodeName]=this.repQuote(val.nodeValue);
				}
				zoneobj.itemarray.push(item);
			}
			this.renderZone(zoneobj);
			leftoverZones[zoneobj.zonekey]=false;
		}
		for (var zk=0;zk<leftoverZones.length;zk++)
		{	if (leftoverZones[zk])
				this.loadFailoverImage(zk);
		}
	},
	'renderZone' : function(zoneobj)
	{	var zoneDivId = this.zoneKeysToZoneDivIds[zoneobj.zonekey];
		if (!zoneDivId) return;
		var zoneDiv = document.getElementById(zoneDivId);
		if (zoneDiv)
		{	if (zoneobj.itemarray.length == 0)
			{ 	if (zoneobj.hideifempty=="true")
				{	zoneDiv.style.display="none";
					return;
				}
			}
			var row=zoneobj.itemarray.length;
			var rowcount=0;
			if (zoneobj.zonelayout) //defaults to horizontal
			{	if (zoneobj.zonelayout=="vertical") row=1;
				else
				{	var layoutparts=zoneobj.zonelayout.split(",")
					if (layoutparts[0]=="grid")
					{	row=layoutparts[1] || 1;
					}
				}
			}
			var itemhtml="<table cellpadding=0 cellspacing=0 border=0 class='mbzone'>"
			var ptimg = this.zoneTitleImage[this.pagetype];
			if ( ptimg )
			{
				ptimg = ptimg[zoneobj.zonekey];
			}
			if (zoneobj.zoneimg || zoneobj.zonetitle || ptimg)
			{	if (zoneobj.zoneimg || ptimg)
				{	var zimg = ptimg || zoneobj.zoneimg;
					var zoneimg=(this.isSecure)?zimg.replace(/^http:\/\/w\./,"https://t."):zimg;
					var zonelegend=this.processTemplateString(this.tparts["mbzoneimg"],{mbimgsrc:zoneimg});
				}
				else
					var zonelegend=zoneobj.zonetitle;
				var mbb=zoneobj.zonetitlealign || "";
				var znhead={mblegendcontent:zonelegend,"mba":row,"mbb":mbb}
				itemhtml+=this.processTemplateString( this.tparts["mbzonetitle"],znhead);
			}

			var mbpriceCenteralign = this.isInAssembledTemplate("mbpricecenteralign");
			var mbpriceInAssembledTemplate = this.isInAssembledTemplate("mbprice")||mbpriceCenteralign;
			var mbsaleCenteralign = this.isInAssembledTemplate("mbsalecenteralign");
			var mbsaleInAssembledTemplate = this.isInAssembledTemplate("mbsale")||mbsaleCenteralign;
			var mblistCenteralign = this.isInAssembledTemplate("mblistcenteralign");
			var mblistInAssembledTemplate = this.isInAssembledTemplate("mblist")||mblistCenteralign;
			var mbdiscInAssembledTemplate = this.isInAssembledTemplate("mbdisc");

			for (var i=0;i<zoneobj.itemarray.length;i++)
			{   var item=zoneobj.itemarray[i];
				if (item.mbimgsrc)
				{   item.mbimgsrc=(this.isSecure)?item.mbimgsrc.replace(/http:\/\/w\./,"https://t."):item.mbimgsrc;
				}
				if (item.mbblingcontent)
				{   item.mbblingcontent=(this.isSecure)?item.mbblingcontent.replace(/http:\/\/w\./,"https://t."):item.mbblingcontent;
				}
				itemhtml += (rowcount==0)?"<tr><td valign='top'>":"<td valign='top'>";

				//
				var list = ","+this.rowlist+",";
				if (mbpriceInAssembledTemplate && (!item.mbpricevalue||item.mbpricevalue==""))
				{
					if (mbpriceCenteralign)
					{
						list = list.replace("mbpricecenteralign,", "");
					}
					else
					{
						list = list.replace("mbprice,", "");
					}
				}
				if (mbsaleInAssembledTemplate && (item.mbsalevalue==""||!item.mbsalevalue))
				{
					if (mbsaleCenteralign)
					{
						list = list.replace("mbsalecenteralign,", "");
					}
					else
					{
						list = list.replace("mbsale,", "");
					}
				}
				if (mblistInAssembledTemplate && (item.mblistvalue==""||!item.mblistvalue))
				{

					if (mblistCenteralign)
					{
						list = list.replace("mblistcenteralign,", "");
					}
					else
					{
						list = list.replace("mblist,", "");
					}
				}
				if (mbdiscInAssembledTemplate && (item.mbdiscvalue==""||!item.mbdiscvalue))
				{
					list = list.replace("mbdisc,", "");
				}

				if (mbsaleInAssembledTemplate && item.mbsalevalue && item.mbsalevalue!="" &&
					mblistInAssembledTemplate && (item.mblistvalue==""||!item.mblistvalue))
				{
					if (mbsaleCenteralign)
					{
						list = list.replace("mbsalecenteralign,", "mbpricecenteralign,");
					}
					else
					{
						list = list.replace("mbsale,", "mbprice,");
					}
					item.mbpricevalue = item.mbsalevalue;
				}
				else if ((mbsaleInAssembledTemplate || mblistInAssembledTemplate || mbpriceInAssembledTemplate) &&
						 (item.mblistvalue==""||!item.mblistvalue)&&
						 (item.mbsalevalue==""||!item.mbsalevalue)&&
						 (item.mbpricevalue==""||!item.mbpricevalue))
				{
					list += ",mbprice,";
					item.mbpricevalue = this.altValueForZeroPrice;
				}
				list = list.substr(1, list.length-2);
				this.assembleTemplateString(list);

				itemhtml += this.processTemplateString(this.templateString,item);
				rowcount++;
				if (rowcount==row)
				{   itemhtml += "</td></tr>";
					rowcount=0;
				}
				else itemhtml += "</td>";
			}
			itemhtml += (rowcount==0)?"</table>":"</tr></table>";
			zoneDiv.innerHTML=itemhtml;
		}
	},
	'track' : function(url)
	{	if (url)
		{	var beaconURL=(this.isSecure)?url.replace(/http:/,"https:"):url;
			this.sendBeacon(beaconURL);
		}
	},
	'setStyle' : function(selector, propname, propvalue)
	{	var args = arguments;
		var len = arguments.length;
		this.setters[selector]=this.setters[selector] || {};
		for (var s=1;s<len;s++)
		{	this.setters[selector][args[s]]=args[s+1];
			s++;
		};
	},
	'applyStyles' : function()
	{	document.write(this.getStyleTagString(this.setters));
	},
	'setStyleByPageType' : function(pagetype, selector, propname, propvalue)
	{	var args = arguments;
		var len = arguments.length;
		this.settersByPageType[pagetype]=this.settersByPageType[pagetype] || {};
		this.settersByPageType[pagetype][selector]=
			this.settersByPageType[pagetype][selector] || {};
		for (var s=2;s<len;s++)
		{	this.settersByPageType[pagetype][selector][args[s]]=args[s+1];
			s++;
		};
	},
	'applyStylesByPageType' : function(pagetype)
	{	if (this.settersByPageType[pagetype])
		{
			document.write(this.getStyleTagString(this.settersByPageType[pagetype]));
		}
	},
	'getStyleTagString' : function(setters)
	{	var styleout="<style type='text/css'>";
		if (setters)
		{
			var compsel;
			for (var selector in setters)
			{	for (var s in setters[selector])
				{	if (selector != compsel)
					{	styleout += selector + "{ ";
						compsel=selector;
					}
					var sn=s;
					if (s=="float") sn=(this.isIE)?"styleFloat":"cssFloat";
					styleout += sn + ":" + setters[selector][s] + ";";
				}
				styleout += "} ";
			}
		}
		styleout += "</style>";
		return styleout;
	},
	'createXMLDomFromString' : function(txt)
	 {   //code for IE
	    if (window.ActiveXObject)
	    {   xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		    xmlDoc.loadXML(txt);
	    }
	    // code for Mozilla, Firefox, Opera, etc.
	    else if (document.implementation && document.implementation.createDocument)
	    {   var oParser=new DOMParser();
	        var xmlDoc=oParser.parseFromString(txt,"text/xml");
	    }
	    else
	    {   //browser cannot handle this script
	        return null;
	    }
	    if (xmlDoc.firstChild && xmlDoc.firstChild.nodeName=="parsererror")
	    {   //Error occured - uncomment for debugging
			//alert(p_xml_dom_id + " error parsing " + txt + " for " + p_xml_dom_id);
	        return null;
	    }
	    var docNode = this.getXMLFirstChild(xmlDoc)
	    if (docNode) return docNode;
	    return xmlDoc;
	},
	'getXMLFirstChild' : function(p_node)
	{   if (p_node && p_node.childNodes)
		{	var a=p_node.childNodes;
	    	for (var x=0;x<a.length; x++)
	    	{   if (a[x].nodeName.charAt(0)=="#") continue;
	    	    return a[x];
	    	}
	    }
	    return null;
	},
	'populateSignupLinks' : function()
	{	var linkrxp=/\[_mbsignuplink_\]/;
		var imgrxp=/\[mbimgsrc\]/;
		var glinkrxp=/\[_mbsignuplink_\]/g;
		var gtokenrxp=/\[mbtoken\]/g;
		var mbbr=this.params["brandname"] || "";
		var mbkw=this.params["keywords"] || "";
		var mbcn=this.params["categoryname"] || "";
		var mbpn=this.params["productname"] || "";
		var mboos=this.params["notinstock"] || "";
		var mbaList=document.getElementsByTagName("a");
		for (var m=0;m<mbaList.length;m++)
		{ 	var mbid=mbaList[m].getAttribute("mbid");
			if (!mbid) continue;
			var atext=mbaList[m].innerHTML;
			if (!linkrxp.test(atext)) continue;
			if (mboos.toLowerCase()=='y')
			{	var tplt=this.signupTemplates["ibis"];
				var imgsrc=this.signupImages["ibis"];
			}
			else
			{	var tplt=this.signupTemplates[mbid];
				var imgsrc=this.signupImages[mbid];
			}
			if (imgsrc) tplt=this.signupTemplates["imgtplt"].replace(imgrxp,imgsrc) + tplt;
			switch (mbid)
			{	case "search":
					var btext=tplt.replace(gtokenrxp,mbkw);
					break;
				case "brand":
					var btext=tplt.replace(gtokenrxp,mbbr);
					break;
				case "category":
					var btext=tplt.replace(gtokenrxp,mbcn);
					break;
				case "product":
				case "ibis":
					var btext=tplt.replace(gtokenrxp,mbpn);
					break;
				default:
					continue;
			}
			var ctext=atext.replace(glinkrxp,btext);
			mbaList[m].innerHTML=ctext;
			mbaList[m].style.display="inline";
		}
	},
	'sendBeacon' : function(mburl)
	{	var mbimg=document.getElementById("mbbeacon");
		if (mbimg)
		{	mbimg.setAttribute("src",mburl);
		}
		else
		{	var mbimg=document.createElement("img")
			mbimg.setAttribute("id","mbbeacon");
			mbimg.style.display="none";
			mbimg.setAttribute("height","1");
			mbimg.setAttribute("width","1");
			mbimg.setAttribute("src",mburl);
			if (this.mybuysContainer) this.mybuysContainer.appendChild(mbimg);
		}
	},
	'searchSignup' : function()
	{	var mbkw=this.params["keywords"] || "";
		var wf="status=no,toolbar=no,menubar=no,scrollbars=no";
	    var mburl=this.signupRoot+"rs_consumer/signup.do?method=load&clientId="+this.client+"&subType=KS";
		mburl+=(mbkw)?"&keyword="+encodeURIComponent(mbkw):"";
		if (this.mybuyscid) mburl+="&mybuyscid="+this.mybuyscid;
	 	window.open(mburl,'mbsignup', wf);
	},
	'brandSignup' : function()
	{	var mbbr=this.params["brandname"] || "";
		var wf="status=no,toolbar=no,menubar=no,scrollbars=no";
		var mburl=this.signupRoot+"rs_consumer/signup.do?method=load&clientId="+this.client+"&subType=NA";
		mburl+=(mbbr)?"&bnm="+encodeURIComponent(mbbr):"";
		if (this.mybuyscid) mburl+="&mybuyscid="+this.mybuyscid;
	 	window.open(mburl,'mbsignup', wf);
	},
	'categorySignup' : function()
	{	var mbci=this.params["categoryid"] || "";
		var wf="status=no,toolbar=no,menubar=no,scrollbars=no";
		var mburl=this.signupRoot+"rs_consumer/signup.do?method=load&clientId="+this.client+"&subType=NA";
		mburl+=(mbci)?"&ckc="+encodeURIComponent(mbci):"";
		if (this.mybuyscid) mburl+="&mybuyscid="+this.mybuyscid;
	 	window.open(mburl,'mbsignup', wf);
	},
	'productSignup' : function()
	{ 	var mboos=this.params["notinstock"] || "n";
		var mbpi=this.params["productid"] || "";
		var wf="status=no,toolbar=no,menubar=no,scrollbars=no";
		var subtype=(mboos.toLowerCase()=="y")?"IBIS":"NA";
		var mburl=this.signupRoot+"rs_consumer/signup.do?method=load&clientId="+this.client+"&subType="+subtype;
		mburl+=(mbpi)?"&productCode="+encodeURIComponent(mbpi):"";
		if (this.mybuyscid) mburl+="&mybuyscid="+this.mybuyscid;
	 	window.open(mburl,'mbsignup', wf);
	},
	'checkParameters' : function()
	{	//check that email follows the pattern "XXXX@XXXX.XXX"
		this.params["email"]=this.params["email"] || "";
		var rg=/\w+[@]\w+[.]\w{1,3}$/
		if (!(rg.test(this.params["email"])))
		{	alert("Invalid MyBuys Parameter email: '" + this.params["email"] + "' Use mybuys.set('email','VALUE') ");
			return false;
		}
		this.params["orderid"]=this.params["orderid"] || "";
		if (!this.params["orderid"])
		{	alert("Invalid MyBuys Parameter orderid: '" + this.params["orderid"] + "' Use mybuys.set('orderId','VALUE') ");
			return false;
		}
		//check that amt is a decimal value
		this.params["amount"]=this.params["amount"] || "";
		if (!this.params["amount"])
		{	alert("Invalid MyBuys Parameter amount: '" + this.params["amount"] + "' Use mybuys.set('amount','VALUE') ");
			return false;
		}
		 else
		{	var tamt=parseFloat(this.params["amount"]).toString();
			if (tamt !== this.params["amount"])
		 	{   alert("Invalid MyBuys Beacon Parameter amount: '" + this.params["amount"] + "' Amount should be numeric." );
				return false;
			}
		}
		this.params["optin"]=this.params["optin"] || "";
		if (!this.params["optin"] || (this.params["optin"]!="y" & this.params["optin"]!="n"))
		{	alert("Invalid MyBuys Beacon Parameter optin: '" + this.params["optin"] + "' Use mybuys.set('optin','y or n') ");
			return false;
		}
		//hfile is optional, so y, n or "" are valid
		if ("hfile" in this.params)
		{	if (this.params["hfile"] != "" & this.params["hfile"]!="y" & this.params["hfile"]!="n")
			{	alert("Invalid MyBuys Parameter hfile: '" + this.params["hfile"] + "' Use mybuys.set('hfile','y or n') ");
			return false;
			}
		}
		this.params["mybuys"]=this.params["mybuys"] || "";
		if (!this.params["mybuys"] || (this.params["mybuys"]!="y" & this.params["mybuys"]!="n"))
		{	alert("Invalid MyBuys Parameter mybuys: '" + this.params["mybuys"] + "' Use mybuys.set('mybuys','y or n') ");
			return false;
		}
		this.params["items"]=this.params["items"] || "";
		if (!this.params["items"])
		{	 alert("Invalid MyBuys Parameter items: '" + this.params["items"] + "' Use mybuys.set('items','VALUE') ");
			return false;
		}
		return true;
	},
	'setZoneTitleImage' : function(pagetype, zonekey, src)
	{
		if ( !this.zoneTitleImage[pagetype] )
		{
			this.zoneTitleImage[pagetype] = {};
		}
		this.zoneTitleImage[pagetype][zonekey] = src;
	},
    'setAltValueForZeroPrice' : function(val)
    {   this.altValueForZeroPrice = val;
    }
}

mybuys.isSecure=window.location.href.indexOf("https:") == 0;
mybuys.isIE=false;
if (window.ActiveXObject) mybuys.isIE=true;
try { if(mbTest) mbTest=true; } catch(e) { mbTest=false; }

//default signup templates

mybuys.setSignup("brand","Get [mbtoken] Alerts");
mybuys.setSignup("category","Get [mbtoken] Alerts");
mybuys.setSignup("product","Get [mbtoken] Alerts");
mybuys.setSignup("search","Get [mbtoken] Alerts");
mybuys.setSignup("ibis","Alert me when [mbtoken] arrives");

mybuys.setSignup("imgtplt",'<img src="[mbimgsrc]" alt="" style="vertical-align: middle; padding-right: 3px;" border="0">');

mybuys.tparts["all"]="mbbling,mbimage,mbbrand,mbmore,mbname,mbprice,mbsale,mbdisc,mblist,mbpromotion";

mybuys.tparts["mbzonetitle"]='<tr><td colspan="%(mba)" align="%(mbb)" class="mblegend">%(mblegendcontent)</td></tr>';

mybuys.tparts["mbzoneimg"]='<img border=0 src="%(mbimgsrc)" align="absmiddle">';

mybuys.tparts["mbitem"]='<div class="mbitem">%(mbitemhtml)</div>';

mybuys.tparts["mbbling"]='<span class="mbblingrowspan"><span class="mbbling"><a class="mbblinglink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbblingcontent)</a></span></span>';

mybuys.tparts["mbimage"]='<span class="mbrowspan"><span class="mbimgspan"><a class="mbimglink" href="%(mbitemlink)"><img class="mbimg" height="%(mbimgh)" width="%(mbimgw)" alt="%(mbitemname)" onmousedown="mybuys.track(\'%(mbitembeacon)\')" src="%(mbimgsrc)"></a></span></span>';

mybuys.tparts["mbbrand"]='<span class="mbbrandrowspan"><a class="mbbrandlink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbbrandcontent)</a></span>';

mybuys.tparts["mbmore"]='<span class="mbmorerowspan"><a class="mbmorelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbmorecontent)</a></span>';

mybuys.tparts["mbname"]='<span class="mbnamerowspan"><a class="mbnamelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbitemname)</a></span>';

mybuys.tparts["mbprice"]='<span class="mbpricerowspan"><span class="mbpricerowleft"><a class="mbpricelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbpricecontent)</a></span><span class="mbpricerowright"><a class="mbpricelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbpricevalue)</a></span></span>';

mybuys.tparts["mbpricecenteralign"]='<span class="mbpricerowspan"><span><a class="mbpricelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbpricecontent)</a>&nbsp;</span><span><a class="mbpricelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbpricevalue)</a></span></span>';

mybuys.tparts["mbsale"]='<span class="mbsalerowspan"><span class="mbsalerowleft"><a class="mbsalelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbsalecontent)</a></span><span class="mbsalerowright"><a class="mbsalelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbsalevalue)</a></span></span>';

mybuys.tparts["mbsalecenteralign"]='<span class="mbsalerowspan"><span><a class="mbsalelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbsalecontent)</a>&nbsp;</span><span><a class="mbsalelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbsalevalue)</a></span></span>';

mybuys.tparts["mblistsale"]='<span class="mblistsalerowspan"><a class="mblistlink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mblistcontent)</a>&nbsp;<span class="mblist" >%(mblistvalue)</span>&nbsp;<a class="mbsalelink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbsalevalue)</a></span>';

mybuys.tparts["mblist"]='<span class="mblistrowspan"><span class="mblistrowleft"><a class="mblistlink" style="text-decoration:none" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mblistcontent)</a></span><span class="mblistrowright"><a class="mblistlink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mblistvalue)</a></span></span>';

mybuys.tparts["mblistcenteralign"]='<span class="mblistrowspan"><span><a class="mblistlink" style="text-decoration:none" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mblistcontent)</a>&nbsp;</span><span><a class="mblistlink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mblistvalue)</a></span></span>';

mybuys.tparts["mbdisc"]='<span class="mbdiscrowspan"><span class="mbdiscrowleft"><a class="mbdisclink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbdisccontent)</a></span><span class="mbdiscrowright"><span class="mbdisc">%(mbdiscvalue)</span></span></span>';

mybuys.tparts["mbpromotion"]='<span class="mbpromotionrowspan"><a class="mbpromotionlink" href="%(mbitemlink)" onmousedown="mybuys.track(\'%(mbitembeacon)\')">%(mbpromotioncontent)</a></span>'
