/********************************************************************
 * Copyright © 2007-2008 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' : {},
	'optParams' : {},
	'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'},
	'optParamMap' : {	'email':'email',
						'fullname':'name',
						'gender':'gender',
						'zipcode':'zip'},
	'pagetype' : null,
	'pageTypeMap' : {	'HOME' : 'h',
						'PRODUCT_DETAILS' : 'prod',
						'SHOPPING_CART' : 'cart',
						'ORDER_CONFIRMATION' : 'purchase',
						'CATEGORY' : 'cat',
						'SEARCH_RESULTS' : 'ks',
						'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',

	// One click signup
	'rcBgColor' : "#29678D",
	'rcTextColor' : "#ffffff",
	'rcBgMOColor' : "#7CAAD1",
	'rcTextMOColor' : "#ffffff",
	'rcSDMinWidth' : 250,
	'rcSDHeight' : 80,
	'rcSDIndent' : 7,
	'rcSDExtraHeight' : 110,
	'rcHeightDelta' : 200,
	'rcTimerInterval' : 5,
	'rcCrtHeight' : 0,
	'rcDefEmail' : " Your Email Address",
	'rcBtnLabel' : "Alert me about more like this",
	'rcBtnAlt' : 'Alert me about more like this',
	'rcThxMsg' : "Thank you!",
	'rcSubmitBtnLabel' : "SUBMIT",
	'rcCancelBtnLabel' : "CANCEL",
	'rcPrivacyLinkLabel' : "It's safe and private",
	'rcWhatsThisLinkLabel' : "What's this?",
	'rcCrtBtn' : null,
	'oneclkImgSrc' : null,
	'oneclkLinkLabel' : null,
	'oneclkLinkAlt' : 'Get Personalized Product Alerts',
	'signedupEmail' : null,
	'oneclkEvtElem' : null,
	'privacyContent' : 'Consumer privacy is very important to us, just as it is for you.  This summary is intended to inform you, the end user, about how MyBuys handles information we process on behalf of our retailer clients who use our service  to deliver a better user experience for you.  We collect personal information to use in delivering recommendations to you that match your interests.  We don\'t buy or sell your information.  We don\'t disclose it to third parties except to deliver our service.  And those third parties can only use the data for delivery of the service.  We do NOT collect sensitive information like credit card numbers.  We do not install software on users\' computers or track keystrokes.   For the full privacy policy, <a class="mbSDLink" href="http://www.mybuys.com/privacy.html" target="blank">click here</a>.',
	'whatsthisContent' : 'Throughout the site you can click "Alert me about more like this" to let us know what products you like. We\'ll look for items we think you\'ll love and follow up with you via email.<br>Just what you want. No junk. No kidding.<br>You can add or change any time. And opting out is fast and easy if you decide you\'re not interested anymore. Give it a try - we think you\'ll like it.',
	'oneclkForExistingSignup' : false,
	
	'el' : function(id)
	{
	  return document.getElementById(id);
	},
	'initPage' : function()
 	{	if (!this.client) return;
 		this.createContainer();
 		if (!this.pagetype) return;
		this.getPageContext();
		this.traverseMBNodes();
		//this.populateSignupLinks();
		if (this.retrieveProductIds) this.retrieveProductIds();
		this.sendXMLRequest();
 	},
 	'traverseMBNodes' : 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 els=document.getElementsByTagName("*");
		for(var m=0; m <els.length; m++)
		{	var elm=els[m];
			// 1. Signup links
			var mbid=elm.getAttribute("mbid");
			if (mbid)
			{
				var atext=elm.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);
				elm.innerHTML=ctext;
				elm.style.display="inline";
				if(this.oneclkForExistingSignup)
				{	elm.href="javascript:void()";
					elm.onclick= function(){mybuys.checkSignedupEmail(this);return false;};
				}
			}
			// 2. webrec zone
			var zoneKey=elm.getAttribute("mybuyszone");
			if (zoneKey)
			{	var zoneKeyInt = parseInt(zoneKey);
				if (!isNaN(zoneKeyInt)&&zoneKeyInt>=0) this.addZone(zoneKeyInt, elm);
			}
			// 3. oneclick signup
			var oneclk=elm.getAttribute("mboneclk");
			if (oneclk)
			{	var htmlStr=mboneclk.rcBtnStr();
				var rcBtn=true;
				if(this.oneclkImgSrc)
				{
					htmlStr=mboneclk.imgStr();
					rcBtn=false;
				}
				else if(this.oneclkLinkLabel)
				{
					htmlStr=mboneclk.alinkStr();
					rcBtn=false;
				}
				elm.innerHTML=htmlStr;
				mybuys.initOneclkSignupBtn(rcBtn);
			}
		}
		// Set wr param
		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;
 	},
 	'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;
	},
	'setOptParam' : function(param, value)
	{	this.optParams[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"] += '"'+this.embedQuote(id);
			if (quantity && quantity != "")
			{	this.params["items"] += "|" + quantity;
				if (subtotal && subtotal != "")	this.params["items"] += "|" + subtotal;
			}
			this.params["items"] += '"';
		}
	},
	'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 dp="|d$|";
		var fn = function(w, g)
        { 	var value = p_context[g];
            if (value == null) return "";
            // For Mac Safari 2.0.4, when use regular expression to 
            // substitue parameter values, if price value starts with
            // $1 or $0, such as $113.99 or $0.23, the $0 and $1 will
            // be treated as arg1 and arg2, so in rendered string,
            // there will be "Price mblistprice13.99" displayed. In order
            // to fix it, replace "$" with other value, and restore it back
            // after regular expression is done.
            try 
            {	if (value.indexOf("$0")>=0||value.indexOf("$1")>=0)
				{
					value=value.replace("$", dp);
				}
			} catch (e)
			{	// Do nothing
			}
			return value;
		};

		p_template = p_template.replace(/%\(([A-Za-z0-9_|.-]*)\)/g, fn);
		while (p_template.indexOf(dp)>=0) { p_template=p_template.replace(dp, "$");}
		return p_template;
    },
	'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;
	},
	'sendAsyncRequest' : function(url)
	{	if (this.mybuysContainer)
		{
			var mbscript=document.getElementById("mbTransportScript");
			if (mbscript) // For FF, have to remove it and recreate it again
			{	this.mybuysContainer.removeChild(mbscript);
			}
			mbscript=document.createElement("script");
			mbscript.setAttribute("type", "text/javascript");
			mbscript.setAttribute("id","mbTransportScript")
			mbscript.setAttribute("src",url);
			this.mybuysContainer.appendChild(mbscript);
		}
	},
	'sendXMLRequest' : function()
	{	//this.collectZones();
		var mburl=this.getWebrecUrl();
		if (!this.zonesEnabled || !this.params["wrz"])
		{	this.sendBeacon(mburl);
			return;
		}
		if (mbTest) { this.processtestxml(); return; }//uses the xml test blob for server-less testing.
		this.sendAsyncRequest(mburl);
		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="";
	},
	'getWebrecUrl' : 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"] || "";
		var hasEmail=false;
		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]);
					}
					if (p == "email")
					{	hasEmail=true;
					}
				}
				break;
		}
		
		var mboptin=this.getCookie("mboptin");
		if (mboptin)
		{	
			if (!hasEmail)
			{	mburl+="&"+this.paramMap["email"]+"="+mboptin;
			}
			this.eraseCookie("mboptin");
		}

		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;
	},
	'assembleParams' : function()
	{	var params="";
		for (var p in this.params)
		{	if(p=="notinstock")
			{	var subtype=(this.params[p].toLowerCase()=="y")?"IBIS":"NA";
				params += "&subType="+subtype;
			} else
			{	params += "&";
				params += (this.paramMap[p])?this.paramMap[p]:p;
				params += "=" + encodeURIComponent(this.params[p]);
			}
		}
		params += "&lang="+this.language;
		params += "&v="+this.version;
		return params;
	},
	'getCheckSignupUrl' : function()
	{	var mburl=(this.isSecure)?this.webrecRoot.replace(/^http:/,"https:"):this.webrecRoot;
		mburl+="webrec/signup.do?method=check";
		mburl+="&client=" + this.client;
		mburl+=this.assembleParams();
		return mburl;
	},
	'getOneclkSignupUrl' : function(oldEmail)
	{	var mburl=(this.isSecure)?this.signupRoot.replace(/^http:/,"https:"):this.signupRoot;
		mburl+="rs_consumer/ocsignup.do?";
		mburl+="clientId=" + this.client;
		if (oldEmail!=null)
		{	mburl += "&old="+encodeURIComponent(oldEmail);
		}
		mburl+=this.assembleParams();
		return mburl;
	},
	'useOneclkForExistingSignup' : function(flag)
	{	this.oneclkForExistingSignup=flag;
	},
	'assembleOptParams' : function(bOptIn)
	{	var mburl=(this.isSecure)?this.webrecRoot.replace(/^http:/,"https:"):this.webrecRoot;
		mburl+="webrec/" + (bOptIn?"orgOptin":"orgOptout") + ".do?";
		mburl+="client=" + this.client;
		for (var k in this.optParams)
		{	mburl += "&"
			mburl += (this.optParamMap[k])?this.optParamMap[k]:("flx_"+k);
			mburl += "=" + encodeURIComponent(this.optParams[k]);
		}

		mburl += "&lang="+this.language;
		mburl += "&v="+this.version;
		return mburl;
	},
	'getOptInUrl' : function()
	{	return this.assembleOptParams(true);
	},
	'getOptOutUrl' : function()
	{	return this.assembleOptParams(false);
	},
	'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;
		}
	},
	'processResponseHTML' : function(zoneHtmls)
	{	for (zonekey in zoneHtmls)
		{
			var zoneDivId = this.zoneKeysToZoneDivIds[zonekey];
			if (!zoneDivId) continue;
			var zoneDiv = document.getElementById(zoneDivId);
			if (zoneDiv)
			{
				zoneDiv.innerHTML=zoneHtmls[zonekey];
			}
		}
	},
	'track' : function(url)
	{	if (url)
		{	var beaconURL=(this.isSecure)?url.replace(/http:/,"https:"):url;
			this.sendBeacon(beaconURL);
		}
	},
	'handlePriceItemSelector' : function(selector, propname, propvalue)
	{
		if (selector==".mblistrowleft"||selector==".mblistrowright"||
			selector==".mbsalerowleft"||selector==".mbsalerowright"||
			selector==".mbpricerowleft"||selector==".mbpricerowright"||
			selector==".mbdiscrowleft"||selector==".mbdiscrowright")
		{	var args = arguments;
			var len = arguments.length;
			var css = {};
			this.setters[selector]=this.setters[selector] || {};
			for (var s=1;s<len;s++)
			{	css[args[s]]=args[s+1];
				this.setters[selector][args[s]]=args[s+1];
				s++;
			};
			this.loadCSS(selector, css);
			return true;
		}
		else
		{
			return false;
		}
	},
	'setStyle' : function(selector, propname, propvalue)
	{
		var bpriceitem = selector==".mblistrowleft"||selector==".mblistrowright"||
						selector==".mbsalerowleft"||selector==".mbsalerowright"||
						selector==".mbpricerowleft"||selector==".mbpricerowright"||
						selector==".mbdiscrowleft"||selector==".mbdiscrowright";
		var args = arguments;
		var len = arguments.length;
		var css = {};
		this.setters[selector]=this.setters[selector] || {};
		for (var s=1;s<len;s++)
		{	this.setters[selector][args[s]]=args[s+1];
			if(bpriceitem)
			{
				css[args[s]]=args[s+1];
			}
			s++;
		};
		if(bpriceitem)
		{
			this.loadCSS(selector, css);
		}

		/*
		if (!this.handlePriceItemSelector.apply(this,arguments))
		{
			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;
	},
	'loadCSS' : function(selector, attrs)
	{	if (!document.styleSheets || document.styleSheets.length==0) return true;
		var x,z,w,s;
		for (z=0;z<document.styleSheets.length;z++)
		{   if (mybuys.isIE)
			{	try
				{ var cssrules = document.styleSheets[z].rules;
				}
				catch(e)
				{	continue;
				}
			}
			else
			{	try
				{ var cssrules = document.styleSheets[z].cssRules;
				}
				catch(e)
				{	continue;
				}
			}
			cssloop:
			for (x=0;x<cssrules.length;x++)
			{	try
				{	if (cssrules[x].selectorText==selector )
					{	if (attrs=="clear")
						{	for (w in cssrules[x].style)
							{	try {cssrules[x].style[w]=""} catch(e){}; }
							continue;
						}
						for (s in attrs)
						{	var sn=s;
							if (s=="float") sn=(mybuys.isIE)?"styleFloat":"cssFloat";
							try { cssrules[x].style[sn]=attrs[s] } catch(e) { return false };
						}
					}
				}
				catch(e)
				{	continue cssloop;
				}
			}
		}
		return true;
	},
	'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";
		}

		// One click signup
		var mbsu;
		if((mbsu=this.el("_mbsignupBtn")))
		{	mbsu.innerHTML = mboneclk.rcBtnStr();
			mybuys.initOneclkSignupBtn();
		}
	},
	'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&ss=1";
		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&ss=1";
		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&ss=1";
		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+"&ss=1";
		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;
    },
    'registerConsumerEmail' : function()
    {   if (!this.mybuysContainer) {
			this.createContainer();
		}

		if (this.optParams["email"])
		{
			this.setCookie("mboptin", this.optParams["email"], 365);
		}
		this.sendBeacon(this.getOptInUrl());
    },
    'unregisterConsumerEmail' : function()
    {   if (!this.mybuysContainer) {
			this.createContainer();
		}

		this.sendBeacon(this.getOptOutUrl());
    },
	'hookupOptOnsubmit' : function (fm, optFunc) {
		var fmos=fm.onsubmit;

		if (fmos) {
			fm.onsubmit = function() {
				if (fmos.apply(fm,arguments)) {
					optFunc();
					return true;
				} else {
					return false;
				}
			}
		} else {
			fm.onsubmit = function() {
				optFunc();
				return true;
			}
		}
	},
	'setCookie' : function (ckname,ckvalue,expiredays)
	{	var exdate=new Date();
		exdate.setDate(exdate.getDate()+expiredays);
		document.cookie=(ckname+ "=" +escape(ckvalue)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString()));
	},
	'getCookie' : function (ckname)
	{
		if (document.cookie.length>0)
		{
			var c_start=document.cookie.indexOf(ckname + "=");
			if (c_start!=-1)
			{ 
				c_start=c_start + ckname.length+1; 
				var 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 null;
	},
	'eraseCookie' : function (ckname) {
		this.setCookie(ckname,"",-1000);
	},
	'embedQuote' : function (str) {
		str=""+str;
		str=str.replace(/"/g, '""');
		return str;
	},
	
	// One click signup
	'initOneclkSignupBtn' : function(rcBtn)
	{	if(rcBtn) 
		{	this.rcToggle(false);
			this.el("_mbRCBtnFrame").style.width = ""+(this.rcSDMinWidth)+"px";
		}
	},

	'setOneclkPrivacyPolicyContent' : function(content)
	{	this.privacyContent = content;
	},

	'setOneclkWhatsThisContent' : function(content)
	{	this.whatsthisContent = content;
	},

	'setOneclkButtonLabel' : function(label)
	{	this.rcBtnLabel = label;
	},

	'setOneclkButtonAlt' : function(alt)
	{	this.rcBtnAlt = alt;
	},

	'setSignedupEmail' : function(email)
	{	this.signedupEmail = email;
	    if(this.oneclkEvtElem != null)
	    {	this.rcShowSlidedown(this.oneclkEvtElem, true);
	    	this.oneclkEvtElem = null;
	    }
	},
	
	'checkSignedupEmail' : function(evtElem)
	{	if (this.signedupEmail != null)
		{	this.rcShowSlidedown(evtElem, true);
		}else
		{	this.oneclkEvtElem = evtElem;
		}
		this.sendAsyncRequest(this.getCheckSignupUrl());
	},

	'setOneclkSignupAsImg' : function(src)
	{	this.oneclkImgSrc=src;
	},

	'setOneclkSignupAsLink' : function(label, alt)
	{	this.oneclkLinkLabel=label;
		this.oneclkLinkAlt=alt||this.oneclkLinkAlt;
	},

	'setOneclkThankYouText' : function(txt)
	{	this.rcThxMsg=txt;
	},

	'setOneclkSubmitBtnLabel' : function(label)
	{	this.rcSubmitBtnLabel=label;
	},

	'setOneclkCancelBtnLabel' : function(label)
	{	this.rcCancelBtnLabel=label;
	},

	'setOneclkPrivacyLinkLabel' : function(label)
	{	this.rcPrivacyLinkLabel=label;
	},

	'setOneclkWhatsThisLinkLabel' : function(label)
	{	this.rcWhatsThisLinkLabel=label;
	},
	
	'rcShowSlidedown' : function(btn, flag)
	{
		this.rcCrtBtn = btn;
		var sd=this.el("_mbrcslidedown");
		if (!sd)
		{
			sd=document.createElement("div");
			sd.setAttribute("id", "_mbrcslidedown");
			sd.className="mbSDOuterLayer";
			document.body.appendChild(sd);
			sd.innerHTML = mboneclk.sdPanelStr();

			if (this.isIE) {
			  window.attachEvent("onresize", mybuys.rcSyncPos);
			  window.attachEvent("onscroll",   mybuys.rcSyncPos);
			} else {
			  window.addEventListener("resize", mybuys.rcSyncPos,   true);
			  window.addEventListener("scroll",   mybuys.rcSyncPos, true);
			}
		}

		if (btn && flag)
		{
			this.rcSyncPos();
			sd.style.height="0px";
			this.el("_mbemail").value=this.signedupEmail!=null?this.signedupEmail:this.rcDefEmail;
			sd.style.display="block";
			this.rcToggleSDPanel(this.signedupEmail==null);
			this.rcCrtHeight=0;
			this.rcSlidedown();
		}
		else
		{
		  sd.style.display="none";
		}
		this.el("_mbsdmore").style.display="none";
	},

	'rcSyncPos' : function()
	{
		if (mybuys.rcCrtBtn)
		{
			mybuys.el("_mbemail").style.width = ""+(mybuys.rcSDMinWidth-110)+"px";
			
			var sd=mybuys.el("_mbrcslidedown");
			var top=mybuys.getElementClientAreaTop(mybuys.rcCrtBtn);
			var left=mybuys.getElementClientAreaLeft(mybuys.rcCrtBtn);
			var width=mybuys.getElementClientAreaWidth(mybuys.rcCrtBtn);
			var height=mybuys.getElementClientAreaHeight(mybuys.rcCrtBtn);
			if (mybuys.oneclkLinkLabel)
			{	top+=height;
			}
			else
			{	left+=mybuys.rcSDIndent;
				top+=(height-2);
			}
			sd.style.left=""+left+"px";
			sd.style.top=""+top+"px";
			width=width<mybuys.rcSDMinWidth?mybuys.rcSDMinWidth:width;
			width=width-2*mybuys.rcSDIndent;
			sd.style.width=""+width+"px";
			
			//document.body.clientWidth+", "+document.body.clientHeight+", "+document.documentElement.clientWidth+", "+document.documentElement.clientHeight
		}
	},

	'rcSlidedown' : function()
	{
		if (this.rcCrtHeight<this.rcSDHeight)
		{
			var sd=this.el("_mbrcslidedown");
			if ((this.rcCrtHeight+this.rcHeightDelta)<=this.rcSDHeight) this.rcCrtHeight+=this.rcHeightDelta;
			else this.rcCrtHeight=this.rcSDHeight;
			sd.style.height=""+this.rcCrtHeight+"px";
			setTimeout("mybuys.rcSlidedown()", this.rcTimerInterval);
		}
	},

	'rcSlidedownMore' : function(type)
	{
		this.el("_mbsdprivacy").style.display=type=="privacy"?"block":"none";
		this.el("_mbsdwhatis").style.display=type!="privacy"?"block":"none";
		this.el("_mbsdmore").style.display="block";

		this.rcSDExtraHeight=type=="privacy"?this.getElementClientAreaHeight(this.el("_mbsdprivacy"))
			:this.getElementClientAreaHeight(this.el("_mbsdwhatis"));
		this.rcSDExtraHeight=parseInt(this.rcSDExtraHeight);

		var sd=this.el("_mbrcslidedown");
		this.rcCrtHeight=this.rcSDHeight+this.rcSDExtraHeight;
		sd.style.height=""+this.rcCrtHeight+"px";
	},

	'rcSDSubmit' : function()
	{	var em =this.el("_mbemail");
		var val = em.value;
		if(this.checkEmail(val))
		{
			this.set("email", val);
			var oldem=null;
			if (this.signedupEmail!=null && val!=this.signedupEmail) oldem=this.signedupEmail;
			this.sendBeacon(this.getOneclkSignupUrl(oldem));
		  	this.signedupEmail = val;
			this.set("email", null);
			this.rcToggleSDPanel(false);
		}else
		{	em.focus();	
		}
	},

	'rcToggle' : function(bOver)
	{
	  var bg=bOver?this.rcBgMOColor:this.rcBgColor;
	  this.el("_mbtoprc1").style.backgroundColor=bg;
	  this.el("_mbtoprc2").style.backgroundColor=bg;
	  this.el("_mbtoprc3").style.backgroundColor=bg;
	  this.el("_mbtoprc4").style.backgroundColor=bg;
	  this.el("_mbbtmrc4").style.backgroundColor=bg;
	  this.el("_mbbtmrc3").style.backgroundColor=bg;
	  this.el("_mbbtmrc2").style.backgroundColor=bg;
	  this.el("_mbbtmrc1").style.backgroundColor=bg;
	  this.el("_mbrctext").style.backgroundColor=bg;
	  this.el("_mbrctext").style.color=bOver?this.rcTextMOColor:this.rcTextColor;
	},

	'rcToggleSDPanel' : function(bShowSignup)
	{
		this.el("_mbsdthanku").style.display=!bShowSignup?"block":"none";
		this.el("_mbsdsignup").style.display=bShowSignup?"block":"none";
		this.el("_mbsdmore").style.display="none";
		this.el("_mbrcslidedown").style.height=""+this.rcSDHeight+"px";
		this.rcCrtHeight=this.rcSDHeight;
	},

	'rcResetEmail' : function(elem)
	{
		if (elem.value==this.rcDefEmail)
		{	elem.value="";
		}
	},

	'setOneclkTaupeStyle' : function()
	{
		//Taupe
		this.rcBgColor='#95856A';
		this.rcTextColor='#FFFFFF'
		this.rcBgMOColor='#B5A58A';
		this.rcTextMOColor='#FFFFFF';
		this.setStyle('table.mbSDInnerLayer', 'background-color', '#F9F9F9', 'border-left','1px solid #595A40', 'border-right', '1px solid #595A40', 'border-bottom', '1px solid #595A40', 'border-top', '1px solid #595A40');
		this.setStyle('table.mbSDInnerLayer td', 'background-color', '#F9F9F9');
		this.setStyle('button.mbSDBtn','color','#95856A');
		this.setStyle('a.mbSDLink','color','#645A48');
		this.setStyle('input.mbSDInput','border-color','#595A40','color','#202020');
		this.setStyle('button.mbSDBtn','background-color','#95856A','border-color','#95856A','color','#FFFFFF');
		this.setStyle('button.mbSDLiteBtn','background-color','#DED3C0','border-color','#DED3C0','color','#65553A');
		this.setStyle('div.mbSDText, div.mbSDBoldText','color','#202020');
		this.setStyle('td.mbSDText, td.mbSDBoldText','color','#202020');
	},

	'setOneclkOrangeStyle' : function()
	{
		//Orange
		this.rcBgColor='#FF9900';
		this.rcTextColor='#FFFFFF'
		this.rcBgMOColor='#FDB64C';
		this.rcTextMOColor='#FFFFFF';
		this.setStyle('table.mbSDInnerLayer', 'background-color', '#F7FAFF', 'border-left','1px solid #330000', 'border-right', '1px solid #330000', 'border-bottom', '1px solid #330000', 'border-top', '1px solid #330000');
		this.setStyle('table.mbSDInnerLayer td', 'background-color', '#F7FAFF');
		this.setStyle('button.mbSDBtn','color','#95856A');
		this.setStyle('a.mbSDLink','color','#224488');
		this.setStyle('input.mbSDInput','border-color','#595A40','color','#645A48');
		this.setStyle('button.mbSDBtn','background-color','#FF9900','border-color','#FF9900','color','#FFFFFF');
		this.setStyle('button.mbSDLiteBtn','background-color','#FCDDA9','border-color','#DED3C0','color','#993300');
		this.setStyle('div.mbSDText, div.mbSDBoldText','color','#224488');
		this.setStyle('td.mbSDText, td.mbSDBoldText','color','#224488');
	},

	'setOneclkBlueStyle' : function()
	{
		//Blue
		mybuys.rcBgColor='#29678D';
		mybuys.rcTextColor='#FFFFFF'
		mybuys.rcBgMOColor='#7CAAD1';
		mybuys.rcTextMOColor='#FFFFFF';
		mybuys.setStyle('table.mbSDInnerLayer', 'background-color', '#F9F9F9', 'border-left','1px solid #7CAAD1', 'border-right', '1px solid #7CAAD1', 'border-bottom', '1px solid #7CAAD1', 'border-top', '1px solid #7CAAD1');
		mybuys.setStyle('table.mbSDInnerLayer td', 'background-color', '#F9F9F9');
		mybuys.setStyle('button.mbSDBtn','color','#29678D');
		mybuys.setStyle('a.mbSDLink','color','#17394E');
		mybuys.setStyle('input.mbSDInput','border-color','#7F9DB9','color','#808080');
		mybuys.setStyle('button.mbSDBtn','background-color','#29678D','border-color','#29678D','color','#FFFFFF');
		mybuys.setStyle('button.mbSDLiteBtn','background-color','#7CAAD0','border-color','#7CAAD0','color','#17394E');
		mybuys.setStyle('div.mbSDText, div.mbSDBoldText','color','#17394E');
		mybuys.setStyle('td.mbSDText, td.mbSDBoldText','color','#17394E');
	},
	
	'getElementClientAreaTop' : function (elem)
	{
		t = elem.offsetTop;
		tempElem = elem.offsetParent;
		while ( tempElem != null) {
			t += tempElem.offsetTop;
			tempElem = tempElem.offsetParent;
		}
		return t;
	},

	'getElementClientAreaLeft' : function (elem)
	{
		l = elem.offsetLeft;
		tempElem = elem.offsetParent;
		while ( tempElem != null) {
			l += tempElem.offsetLeft;
			tempElem = tempElem.offsetParent;
		}
		return l;
	},

	'getElementClientAreaWidth' : function (elem)
	{
		return elem.offsetWidth;
	},

	'getElementClientAreaHeight' : function (elem)
	{
		return elem.offsetHeight;
	},
	
	'checkEmail' : function (val)
	{	var value = val.replace(/^\s+|\s+$/g,"");
		var emailfilter=/^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i;
		var ret = emailfilter.test(value);
		if (ret==false)
		{
			alert("Please enter a valid email address.");
			return false;
		}else
		{
			return true;
		}
	}
}

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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>'

//dynamically generate styles for price items list/sale/price instead of putting them in mybuys.css, cuz those styles cannot be overridden at run-time
document.write(mybuys.getStyleTagString(
{'.mblistrowleft'  : {'float':'','text-align':''},
 '.mblistrowright' : {'float':'','text-align':''},
 '.mbsalerowleft'  : {'float':'','text-align':''},
 '.mbsalerowright' : {'float':'','text-align':''},
 '.mbpricerowleft' : {'float':'','text-align':''},
 '.mbpricerowright': {'float':'','text-align':''},
 '.mbdiscrowleft' :  {'float':'','text-align':''},
 '.mbdiscrowright':  {'float':'','text-align':''}
}
));
mybuys.loadCSS(".mbsalerowleft",{'float':'left','textAlign':'left'});
mybuys.loadCSS(".mbsalerowright",{'float':'right','textAlign':'right'});
mybuys.loadCSS(".mblistrowleft",{'float':'left','textAlign':'left'});
mybuys.loadCSS(".mblistrowright",{'float':'right','textAlign':'right'});
mybuys.loadCSS(".mbpricerowleft",{'float':'left','textAlign':'left'});
mybuys.loadCSS(".mbpricerowright",{'float':'right','textAlign':'right'});
mybuys.loadCSS(".mbdiscrowleft",{'float':'left','textAlign':'left'});
mybuys.loadCSS(".mbdiscrowright",{'float':'right','textAlign':'right'});

// One click signup
var mboneclk =
{
	'alinkStr' : function()
	{	return '<a class="mboneclklink" href="javascript:void()" onclick="mybuys.checkSignedupEmail(this); return false;" alt="'+mybuys.oneclkLinkAlt+'" title="'+mybuys.oneclkLinkAlt+'">'+mybuys.oneclkLinkLabel+'</a>';
	},
	

	'imgStr' :  function()
	{	return '<img src="'+mybuys.oneclkImgSrc+'" onclick="mybuys.checkSignedupEmail(this);" alt="'+mybuys.rcBtnAlt+'" title="'+mybuys.rcBtnAlt+'" style="cursor:hand; cursor:pointer">';
	},

	'rcBtnStr' : function()
	{	return '<div id="_mbRCBtnFrame" class="mbRCBox" style="width:250px" onclick="mybuys.checkSignedupEmail(this)" onmouseover="mybuys.rcToggle(true)" onmouseout="mybuys.rcToggle(false)" title="'+mybuys.rcBtnAlt+'">'+
		'<b class="mbRCTop"><b id="_mbtoprc1" class="mbRC1"></b><b id="_mbtoprc2" class="mbRC2"></b><b id="_mbtoprc3" class="mbRC3"></b><b id="_mbtoprc4" class="mbRC4"></b></b>'+
			'<table id="_mbsignuptxt" class="mbRCInnerBox" width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td id="_mbrctext" class="mbRCText">'+
				'&nbsp;&nbsp;<img src="'+mybuys.webrecRoot+'/clients/MASTER/images/Oneclick_icon.gif'+'" width="12" height="13">&nbsp;'+mybuys.rcBtnLabel+
				'</td></tr>'+
			'</table>'+
		'<b class="mbRCBtm"><b id="_mbbtmrc4" class="mbRC4"></b><b id="_mbbtmrc3" class="mbRC3"></b><b id="_mbbtmrc2" class="mbRC2"></b><b id="_mbbtmrc1" class="mbRC1"></b></b>'+
	'</div>';
	},

	'sdPanelStr' :  function()
	{	return '<table class="mbSDInnerLayer" cellspacing="0" cellpadding="5" width="100%">'+
	'<tr>'+
    	'<td>'+
		'<div id="_mbsdthanku" style="display:">'+
			'<table cellspacing="0" cellpadding="5" width="100%" height="100%">'+
			  '<tr>'+
				'<td width="100%" class="mbSDBoldText">'+
				  mybuys.rcThxMsg +
				'</td>'+
				'<td align="right">'+
				  '<button class="mbSDBtn" onclick="mybuys.rcShowSlidedown(null, false)">CLOSE</button>'+
				'</td>'+
			  '</tr>'+
			  '<tr>'+
				'<td valign="top">'+
				  '<a class="mbSDLink" href="javascript:void(mybuys.rcToggleSDPanel(true));">Change Email</a><br>'+
				'</td>'+
				'<td valign="top">'+
				  '&nbsp;'+
				'</td>'+
			  '</tr>'+
			'</table>'+
		'</div>'+
		'<div id="_mbsdsignup" style="display:none">'+
			'<table cellspacing="0" cellpadding="5" width="100%" height="100%">'+
			  '<tr>'+
				'<td align="left">'+
				  '<input id="_mbemail" class="mbSDInput" value="" onfocus="mybuys.rcResetEmail(this)"/>'+
				'</td>'+
				'<td align="right">'+
				  '<button class="mbSDBtn" onclick="mybuys.rcSDSubmit()">'+mybuys.rcSubmitBtnLabel+'</button>'+
				'</td>'+
			  '</tr>'+
			  '<tr>'+
				'<td valign="top">'+
				  '<a class="mbSDLink" href="javascript:void(mybuys.rcSlidedownMore(\'privacy\'));">'+mybuys.rcPrivacyLinkLabel+'</a><br>'+
				  '<a class="mbSDLink" href="javascript:void(mybuys.rcSlidedownMore(\'what\'));">'+mybuys.rcWhatsThisLinkLabel+'</a>'+
				'</td>'+
				'<td valign="top" align="right">'+
				  '<button class="mbSDLiteBtn" onclick="mybuys.rcShowSlidedown(null, false)">'+mybuys.rcCancelBtnLabel+'</button>'+
				'</td>'+
			  '</tr>'+
			'</table>'+
		'</div>'+
        '<div id="_mbsdmore" style="display:none">'+
          '<div id="_mbsdprivacy" class="mbSDText" style="display:none">'+mybuys.privacyContent+
		  '</div>'+
          '<div id="_mbsdwhatis" class="mbSDText" style="display:none">'+mybuys.whatsthisContent+
		  '</div>'+
        '</div>'+
      '</td>'+
    '</tr>'+
  '</table>';
  }
};
