
function tbRPCOmnitureCall(evtNm, evtProd) {
	s.events	= evtNm;
	s.products	= evtProd;
	var s_code=s.t();
}

/**
FIRECLICK
	Adding a wrapper function for FC in case their JS doesn't load;
	If it's not there, the function will retry 5 times (1xSecond), then
	just give up
 **/
var fcRptAttempt	= new Number(0);
function my_fc_rpt(params, tags) {
	if (typeof fc_rpt == "undefined") {
	// try again in 1 second
		if (fcRptAttempt < 5) {
			fcRptAttempt++;
			setTimeout(function() { my_fc_rpt(params, tags) }, 1000);
		}
		else {
			fcRptAttempt	= 0;
		}
	}
	else {
	// invoke fc_rpt now
		fc_rpt(params, tags);
	}
}

function tbCartErrorCorrect(sErrStr) {
	sTestStr	= sErrStr.toLowerCase();

	if (sTestStr.indexOf("out of stock") > 0) {
		sErrTtl	= "Out of Stock";
		sErrStr	= "We're sorry, we just sold out of that textbook. We add new inventory constantly, so please check back soon.<br><br>";
	}
	else if (sTestStr.indexOf("exceeds limits") > 0) {
		sErrTtl	= "Quantity Exceeded";
		sErrStr	= "We're sorry. You have exceeded the maximum quantity available for this book. Either checkout to add more or call our bulk selling department at 1-877-292-6442.<br><br>";
	}
	else if (sTestStr.indexOf("duplicate item") > 0) {
		sErrTtl	= "Duplicate eText Added";
		sErrStr	= "We're sorry. You cannot add multiple copies of the same eText.<br><br>";
	}
	else {
		sErrTtl	= "Error Adding Item to Cart";
	}

	return Array(sErrTtl, sErrStr);
}

function tbAddButtonReset(imgId, imgArr) {
	if (String(document.getElementById(imgId).src).indexOf(imgArr[0]) < 0 && String(document.getElementById(imgId).src).indexOf(imgArr[2]) < 0)
		document.getElementById(imgId).src	= imgArr[2];
}

function tbRebuildCart(cartStr, ctDtlStr, wasError, imgId, imgArr) {
	itemRows	= cartStr.split("\n");
	tempArr		= new Array();
	fcProdCart	= "";

	if (itemRows != null) {
		for (var tbrcI=0;tbrcI < itemRows.length;tbrcI++) {
			itemArr		= String(itemRows[tbrcI]).split("||");
			if (itemArr != null) {
				jsTitle		= itemArr[3];
				jsAuthor	= itemArr[14];
				jsCond		= itemArr[4];
				jsPrice		= itemArr[7];
				jsSavings	= itemArr[8];
				jsGBval		= itemArr[13];
				jsCover		= itemArr[2];
				jsSeller	= itemArr[16];
				tempArr[tempArr.length]	= Array(jsTitle, jsAuthor, jsCond, jsPrice, jsSavings, jsGBval, jsCover, jsSeller);

			// FIRECLICK
				fcQty		= itemArr[1];
				fcTitle		= jsTitle.replace(/(\?|,|\/)/g, " ");
				fcTitle		= fcTitle.replace(/\"/g, '``');
				fcIsbn		= itemArr[10];
				fcTotPrice	= String(itemArr[9]).replace(/\D/g, "");
				fcProdCart	+= ((fcProdCart != "")?",":"") +fcTitle+ " - " +fcIsbn+ "?" +fcQty+ "?" +fcTotPrice;
			}
		}
	}
	else {
		fcProdCart	= "-";
	}

	ctItms		= tempArr;
	maxItems	= tempArr.length;

	ctDtlArr	= ctDtlStr.split("||");
	
	var jsSubtotal	= ctDtlArr[0];
	var jsTax	= ctDtlArr[1];
	var jsShipNm	= ctDtlArr[2];
	var jsShipTtl	= ctDtlArr[3];
	var jsTotal	= ctDtlArr[4];
	var jsSavings	= ctDtlArr[5];
	var jsGBVal	= ctDtlArr[6];
	var jsTotalQty	= ctDtlArr[7];
	
	document.getElementById("ctItemCount").innerHTML	= jsTotalQty;
	document.getElementById("ctSubtotal").innerHTML		= jsSubtotal;
	document.getElementById("ctSavings").innerHTML		= "(you save "+jsSavings+"!)";

// make sure all the right things are visible
	document.getElementById("cartEmpty").className		= 'hid';
	document.getElementById("cartInUse").className		= 'ctPriBlock';
	document.getElementById("ctArrUp").className		= 'vis';
	document.getElementById("ctArrDown").className		= 'vis';

	document.getElementById("ctItemRow0").className		= (maxItems >= 1)?"ctBkImg":"hid";
	document.getElementById("ctItemRow1").className		= (maxItems >= 2)?"ctBkImg":"hid";
	document.getElementById("ctItemRow2").className		= (maxItems >= 3)?"ctBkImg":"hid";

// first item
	ctTopItem	= maxItems;
	tbCartItemIterate(1);

// reset button
	if (wasError) {
// TODO = what to say?
		document.getElementById(imgId).src	= imgArr[1];
	}
	else {
		document.getElementById(imgId).src	= imgArr[2];
		tbCartShowFlyout(document.getElementById("ctItemRow0"), 0);
		flyTimer = setTimeout(function() {tbCartHideFlyout(document.getElementById("ctItemRow0"))},2500);

	// FIRECLICK
		var tags			= new Object();
			tags.fc_prod_cart	= fcProdCart;
		my_fc_rpt(null, tags);
	}
}

function tbRPCProcessShipping(rpcText) {
	document.getElementById("shpTbl").innerHTML	= rpcText;

	var optToChoose	= (rpcText.indexOf("ShipCost_0") > 0)?0:-1;

	alreadyGettingShipping	= false;

	setTimeout('SetShippingMethod('+optToChoose+')',25);
}

function tbRPCProcessSingleAdd(rpcText, imgId, imgArr) {
	var errStr	= (rpcText.indexOf("<<ERR") >= 0)?rpcText.substring(rpcText.indexOf("<<ERR")+5, rpcText.indexOf("ERR>>")):"";
	var cartStr	= (rpcText.indexOf("<<CART") >= 0)?rpcText.substring(rpcText.indexOf("<<CART")+6, rpcText.indexOf("CART>>")):"";
	var ctDtlStr	= (rpcText.indexOf("<<CTDTLS") >= 0)?rpcText.substring(rpcText.indexOf("<<CTDTLS")+8, rpcText.indexOf("CTDTLS>>")):"";

	if (errStr) {
// TODO = what to say?
		document.getElementById(imgId).src	= imgArr[1];
		aCartErr	= tbCartErrorCorrect(errStr);
		sErrTitle	= aCartErr[0];
		sErrMsg		= aCartErr[1];
		tbShowLightbox(sErrMsg, sErrTitle);
	}
	
	if (cartStr) {
		document.getElementById("ctBkImg0").src	= gsib+'/img/s.gif';
		tbRebuildCart(cartStr.trim(), ctDtlStr.trim(), ((errStr != "")?true:false), imgId, imgArr);
	}
}

function tbRPCProcessMultiAdd(rpcText, imgId, imgArr) {
	var errStr	= (rpcText.indexOf("<<ERR") >= 0)?rpcText.substring(rpcText.indexOf("<<ERR")+5, rpcText.indexOf("ERR>>")):"";
	var cartStr	= (rpcText.indexOf("<<CART") >= 0)?rpcText.substring(rpcText.indexOf("<<CART")+6, rpcText.indexOf("CART>>")):"";
	var ctDtlStr	= (rpcText.indexOf("<<CTDTLS") >= 0)?rpcText.substring(rpcText.indexOf("<<CTDTLS")+8, rpcText.indexOf("CTDTLS>>")):"";

	if (errStr) {
// TODO = what to say?
		document.getElementById(imgId).src	= imgArr[1];
		aCartErr	= tbCartErrorCorrect(errStr);
		sErrTitle	= aCartErr[0];
		sErrMsg		= aCartErr[1];
		tbShowLightbox(sErrMsg, sErrTitle);
	}
	
	if (cartStr) {
		document.getElementById("ctBkImg0").src	= gsib+'/img/s.gif';
		tbRebuildCart(cartStr.trim(), ctDtlStr.trim(), ((errStr != "")?true:false), imgId, imgArr);
	}
}

function tbRPCProcessMPAdd(rpcText, imgId, imgArr) {
	var errStr	= (rpcText.indexOf("<<ERR") >= 0)?rpcText.substring(rpcText.indexOf("<<ERR")+5, rpcText.indexOf("ERR>>")):"";
	var cartStr	= (rpcText.indexOf("<<CART") >= 0)?rpcText.substring(rpcText.indexOf("<<CART")+6, rpcText.indexOf("CART>>")):"";
	var ctDtlStr	= (rpcText.indexOf("<<CTDTLS") >= 0)?rpcText.substring(rpcText.indexOf("<<CTDTLS")+8, rpcText.indexOf("CTDTLS>>")):"";

	if (errStr) {
// TODO = what to say?
		document.getElementById(imgId).src	= imgArr[1];
		aCartErr	= tbCartErrorCorrect(errStr);
		sErrTitle	= aCartErr[0];
		sErrMsg		= aCartErr[1];
		tbShowLightbox(sErrMsg, sErrTitle);
	}
	
	if (cartStr) {
		document.getElementById("ctBkImg0").src	= gsib+'/img/s.gif';
		tbRebuildCart(cartStr.trim(), ctDtlStr.trim(), ((errStr != "")?true:false), imgId, imgArr);
	}
}

function tbRPCCartPost(urlAction, urlParameters, imgId, imgArr) {
	var tbRPCCart;
	try {
		tbRPCCart = new ActiveXObject('Msxml2.XMLHTTP');
	}
	catch (e) {
		try {
			tbRPCCart = new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch (e2) {
			try {
				tbRPCCart = new XMLHttpRequest();
			}
			catch (e3) {
				tbRPCCart = false;
			}
		}
	}

	tbRPCCart.onreadystatechange  = function() {
		if(tbRPCCart.readyState  == 4) {
			if (tbRPCCart.status  == 200) {
				outStr	= tbRPCCart.responseText;
			}
			else {
				outStr	= "<<ERR\nError code " + tbRPCCart.status + "\nERR>>";
			}
			
			switch (urlAction) {
				case "mpadd":
					tbRPCProcessMPAdd(outStr, imgId, imgArr);
					break;
				case "singleadd":
					tbRPCProcessSingleAdd(outStr, imgId, imgArr);
					break;
				case "multiadd":
					tbRPCProcessMultiAdd(outStr, imgId, imgArr);
					break;
				case "shipping":
					tbRPCProcessShipping(outStr);
					break;
				case "signin":
					tbRPCProcessLogin(outStr);
					break;
				default:
					break;
			}
		}
	}
	tbRPCCart.open("POST", gsib+"/cart-rpc.php?ACTION="+urlAction+"&CSID="+sId,  true);
	tbRPCCart.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	tbRPCCart.send(urlParameters);
}

function tbRPCCartSingleAdd(formId, imgId, imgArr) {
	document.getElementById(imgId).src	= imgArr[0];
	var fvOrder	= document.forms[formId].FVORDER1.value;
	var fvBkn	= document.forms[formId].FVBKN1.value;
	var actUrl	= 'singleadd';

	var sOmniEvent	= ((ctBhc)?"":"scOpen,")+"scAdd";
	ctBhc		= true;

	var sType	= imgId.substring(5,6).toUpperCase();

	var sTypeName	= "(not set)";

	if (sType == "N")
		sTypeName	= "new";
	else if (sType == "U")
		sTypeName	= "used";
	else if (sType == "E")
		sTypeName	= "ebook";

	tbRPCOmnitureCall(sOmniEvent, ";"+fvBkn+";;;;evar7="+sTypeName);

	tbRPCCartPost(actUrl,'FVORDER1='+fvOrder+'&FVBKN1='+fvBkn, imgId, imgArr);
}

function tbRPCCartMultiAdd(formId, imgId, imgArr) {
	document.getElementById(imgId).src	= imgArr[0];
	var allElements	= document.getElementById(formId).elements;
	var l		= allElements.length;
	var urlAdd	= new String("");
	for (var i=0;i < l;i++)
		urlAdd	+= ((urlAdd != "")?"&":"")+allElements[i].name+"="+allElements[i].value;

	var actUrl	= 'multiadd';
	tbRPCCartPost(actUrl,urlAdd, imgId, imgArr);
}

/* MARKETPLACE ADD */
function tbRPCCartMPAdd(listingInfo, imgId, imgArr, isbnStr) {
	document.getElementById(imgId).src	= imgArr[0];
	var actUrl	= 'mpadd';

	var sOmniEvent	= ((ctBhc)?"":"scOpen,")+"scAdd";
	ctBhc		= true;
	tbRPCOmnitureCall(sOmniEvent, ";"+isbnStr+";;;;evar7=marketplace");

	tbRPCCartPost(actUrl,'MPLID='+listingInfo, imgId, imgArr);
}

var alreadyGettingShipping	= false;
function tbRPCGetShipping() {
	if (alreadyGettingShipping)
		return false;

	alreadyGettingShipping	= true;
	document.getElementById("shpTbl").innerHTML	= "<div style='width:420px;margin:0;'><img src='"+gsib+"/img/co/co-ship-wait.gif' width=50 height=50 border=0 align=left> <b class='bld18px'>Please wait...<br>Shipping prices are being calculated...</b></div>";

	shipZip	= document.getElementById('shipmtdzip');
	if (isNaN(shipZip.value) || String(shipZip.value).length != 5) {

	// fail
		tbErrorMsg('Please enter a shipping zip code.', shipZip);
		tbSetFormImage('i_shipmtdzip', 0, 0);
		document.getElementById("shpTbl").innerHTML	= "";
	}
	else {
		tbErrorHide();
//		document.frmCheckoutBilling.SHIPPINGZIP.value = shipZip.value;
//		document.frmCheckoutBilling.dspSHIPPINGZIP.value = shipZip.value;
//		document.getElementById('i_shipmtdzip').src	= gsib+'/img/s.gif';
		tbRPCCartPost('shipping', 'zip='+shipZip.value, null, null);
	}
}

