var bag = null;
var bagActive = false;
var bagBusy = false;
var bagItemtracker = null;
var customerType = -1;
var ajaxReqid = 1;

var _ajaxReq = new Array();

function AjaxShoppingBag(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;
	
	var d = new Date();
	var params = new Object();
	params.tzoff = d.getTimezoneOffset();
	params.reqid = req.reqid;
	
	$.ajax({ type: "POST", url: "/RetailScience/shoppingbag", data: params, dataType: "json",
			success: ajaxSuccess, error: ajaxFailure });
}

function ajaxSuccess(resp, statusText)
{
	var req = _ajaxReq[resp.reqid];
	if(req == null)
		return;
		
	if(typeof(req.success) == 'function')
		req.success(resp, statusText);

	_ajaxReq[req.reqid] = null;
}

function ajaxFailure(resp, statusText)
{
	var req = _ajaxReq[resp.reqid];
	if(req == null)
		return;
	
	if(typeof(req.failure) == 'function')
		req.failure(resp, statusText);

	_ajaxReq[req.reqid] = null;
}

function AjaxQueryShoppingBag(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	var params = new Object();
	params.reqid = req.reqid

	$.ajax({ type: "POST", url: "/RetailScience/shoppingbag", data: params, dataType: "json",
			success: ajaxSuccess, error: ajaxFailure });
}

function AjaxQueryOrdersummary(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	var params = new Object();
	params.reqid = req.reqid;
	if(req.giftwrap)
		params.giftwrap = req.giftwrap;
		
	if(req.shippingaddress)
		params.shippingaddress = req.shippingaddress;

	$.ajax({ type: "POST", url: "/RetailScience/ordersummary", data: params, dataType: "json",
			success: ajaxSuccess, error: ajaxFailure });
}

function AjaxQueryCustomerType(req)
{
	var sid = GetCookie("sid");
	if(sid === null)
	{
		ajaxSuccess(req, "");
		return;
	}
		
	if(sid.length === 0)
	{
		ajaxSuccess(req, "");
		return;
	}
		
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;
	
	var params = new Object();
	params.reqid = req.reqid;

	$.ajax({ type: "POST", url: "/RetailScience/customertype", data: params, dataType: "json",
		   success: ajaxCustomerTypeSuccess, error: ajaxFailure });

}

function ajaxCustomerTypeSuccess(resp, statusText)
{
	if(resp.status === 0)
	{
		customerType = resp.customerType;
	}
		
	var req = _ajaxReq[resp.reqid];
	if(req == null)
		return;

	if(typeof(req.success) == 'function')
		req.success(resp, statusText);
}

function AjaxVerifyDeal(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	var d = new Date();
	var params = new Object();
	params.reqid = req.reqid;
	params.dealcode = req.dealcode;
	params.tzoff = d.getTimezoneOffset();

	$.ajax({ type: "POST", url: "/RetailScience/verifydeal", data: params, dataType: "json",
			success: ajaxSuccess, error: ajaxFailure });
}

function AjaxAddToBag(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	var d = new Date();

	var params = new Object();
	params.reqid = req.reqid;
	params.itemid = req.itemid;
	params.quantity = req.quantity;
	params.itemindex = req.itemindex;
	params.tzoff = d.getTimezoneOffset();
	if(req.custom)
	{
		params.custom = req.custom;
	}

	$.ajax({ type: "POST", url: "/RetailScience/shoppingbagadd", data: params, dataType: "json",
			success: ajaxSuccess, error: ajaxFailure });
	
	return(1);
}

function AjaxAddress(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	params = new Object();
	params.reqid = req.reqid;
	params.addressid = req.addressid;

	$.ajax({ type: "POST", url: "/RetailScience/addressbody", data: params, dataType: "json",
			success: ajaxSuccess, error: ajaxFailure });
	return(1);
}

function AjaxAddToWishlist(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	params = new Object();
	params.reqid = req.reqid;
	params.wishlistid = req.wishlistid;
	params.itemid = req.itemid;
	params.quantity = req.quantity;
	params.importance = 3;

	$.ajax({ type: "POST", url: "/RetailScience/wishlistadd", data: params, dataType: "json",
			success: ajaxSuccess, error: ajaxFailure });
	return(1);
}

function AjaxQueryRecommendations(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	var params = new Object();
	params.reqid = req.reqid;
	params.itemlist = req.itemid;
	params.itemindex = req.itemindex;
	$.ajax({ type: "POST", url: "/RetailScience/recommend", data: params, dataType: "json",
			success: ajaxSuccess, error: ajaxFailure });
}

function AjaxUpdateBag(req)
{
	if(bagBusy)
	{
		return;
	}
	bagBusy = true;

	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	bagBookmark = itemid;
	var d = new Date();
	var params = new Object();
	params.reqid = req.reqid;
	params.itemid = req.itemid;
	params.quantity = req.quantity;
	params.tzoff = d.getTimezoneOffset();

	$.ajax({ type: "POST", url: "/RetailScience/shoppingbagupdatebyitemid", dataType: "json", data: params,
			success: ajaxSuccess, error: ajaxFailure });
}

function AjaxVote(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	var params = new Object();
	params.reqid = req.reqid;
	params.objid = req.objid;
	params.contestid = req.contestid;
	params.votevalue = req.votevalue;
	params.trackplugins = req.trackplugins;
	params.trackfonts = req.trackfonts;
	params.tracktimezone = req.tracktimezone;
	params.trackvideo = req.trackvideo;
	params.tracksupercookies = req.tracksupercookies;
	if(req.challenge) { params.challenge = req.challenge; }
	if(req.response) { params.response = req.response; }

	$.ajax({ type: "POST", url: "/RetailScience/vote", data: params, dataType: "json",
			success: ajaxSuccess, error: ajaxFailure, timeout: 7000 });
}

function AjaxVoteretrieve(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	var params = new Object();
	params.reqid = req.reqid;
	params.contestid = req.contestid;

	$.ajax({ type: "POST", url: "/RetailScience/voteretrieve", data: params, dataType: "json",
			success: ajaxSuccess, error: ajaxFailure });
}

var _vcs;

function AjaxVotecount(req)
{
	req.reqid = ajaxReqid++;
	_ajaxReq[req.reqid] = req;

	var params = new Object();
	params.reqid = req.reqid;
	params.contestid = req.contestid;
	_vcs = req.success;

	$.getJSON("/RetailScience/votecount", function(data) { 	if(typeof(_vcs) == 'function') _vcs(data); });
}

function addBagException(r, e)
{
	alert(e.name + ": " + e.message);
}

var itemsWithRecommendations;

function BagModify(itemid)
{
	var s = GetCookie("itemtracker");

	if(s === null) { return; }
	if(s.length < 1) { return; }

	bagItemtracker = eval('(' + s + ')');
	var quantity = bagItemtracker[itemid];
	var e = ge("updqty_" + itemid);
	if(e) { e.value = quantity; }
	
	bagItemtracker = eval('(' + s + ')');
	displayState[itemid] = "change";
	e = ge("bag" + itemid + "_display");
	if(e) { e.style.display = "none"; }
	e = ge("bag" + itemid + "_change");
	if(e) { e.style.display = "block"; }

	e = ge("updqty_" + itemid);
	if(e)
	{
		e.focus();
	}
	if(e)
	{
		e.select();
	}
}

function BagDisplaySummary()
{
	var e = ge("bagmenubar");
	if(e === null)
	{
		return;
	}
	
	var html = '<a class="bagmenubar" id="bagmenubarlink" href="javascript:go(\'bag\')" onmouseover="this.style.color=\'#ffe71a\'; ge(\'bagmenubarextra\').style.color=\'#ffe71a\';" onmouseout="this.style.color=\'#fff\'; ge(\'bagmenubarextra\').style.color=\'#fff\';"><span style="font-size: 8pt" id="bagmenubarextra">Shopping Bag<br />is empty</span></a>';

	var s = GetCookie("itemtracker");

	if(s === null)		{ e.innerHTML = html; return; }
	if(s.length < 1)	{ e.innerHTML = html; return; }

	bagItemtracker = eval('(' + s + ')');
	if(bagItemtracker.subtotal.toString == 'undefined' || bagItemtracker.quantity.toString() == 'undefined')
	{
		html = '<a class="bagmenubar" id="bagmenubarlink" href="javascript:go(\'bag\')" onmouseover="this.style.textDecoration=\'#ffe71a\';" onmouseout="this.style.textDecoration=\'#fff\';">Items: Unknown<br />Click to update</a>';
		e.innerHTML = html;
		return;
	}
	
	html = '<a class="bagmenubar" id="bagmenubarlink" href="javascript:go(\'bag\')" onmouseover="this.style.color=\'#ffe71a\'; ge(\'bagmenubarextra\').style.color=\'#ffe71a\';" onmouseout="this.style.color=\'#fff\'; ge(\'bagmenubarextra\').style.color=\'#fff\';">' + bagItemtracker.quantity + ' Item' + (bagItemtracker.quantity > 1 ? 's' : '') + ' $' + bagItemtracker.subtotal.toFixed(2) + '<br /><span style="font-size: 8pt" id="bagmenubarextra">View Bag</span></a>';

	e.innerHTML = html;
}

function UpdateBag(n)
{
	var e = ge("bagbsk_" + n);
	if(e)
	{
		var basketid = e.value;
		var quantity = ge("bagqty_" + n).value;
		
		if(customerType == 4 && qty < 6)
		{
			alert("There is minimum quantity of 6 units for wholesale customers.\n\nPlease increase your quantity to 6 or more.");
			return;
		}

		var d = new Date();
		var params = new Object();
		params.basketid = basketid;
		params.quantity = quantity;
		params.tzoff = d.getTimezoneOffset();
		params.reqid = ajaxReqid++;

		_ajaxReq[params.reqid] = params;
		$.ajax({ type: "POST", url: "/RetailScience/shoppingbagupdate", data: params, dataType: "json",
				success: bagSuccess });
	}
}

function RemoveBag(n)
{
	var e = ge("bagbsk_" + n);
	if(e)
	{
		var basketid = e.value;
		bagBusy = true;


		var params = new Object();
		params.basketid = basketid;
		params.reqid = ajaxReqid++;

		_ajaxReq[params.reqid] = params;
		$.ajax({ type: "POST", url: "/RetailScience/shoppingbagremove", data: params, dataType: "json",
				success: bagSuccess });
	}
}

function setCheckoutButtons(req)
{
	var cob = true;
	if(pagetype)
	{
		if(pagetype === "checkout")
		{
			cob = false;
		}
	}
	req.checkoutbuttons = cob;
	req.closebutton = ! cob;
}

function bagSuccess(bagdata, statusText)
{
	bag = bagdata;
	bagBusy = false;
	if(bag.count > 0)
	{
		SetCookie("itemtracker", $.toJSON(bag.itemtracker));
	}
	else
	{
		SetCookie("itemtracker", "");
	}
		
	BagDisplaySummary();
	if(bag.status === 0)
	{
		var req = new Object();
		req.bag = bag;
		req.buttons = true;
		req.checkoutbuttons = true;
		req.closebutton = false;
		setCheckoutButtons(req);

		var html = renderBagContents(req);
		bagActive = true;
		modalDialog("Shopping Bag", html, 592, "bagdisplay", "CloseAjaxShoppingBag()");
		pngifyTable($("#sbg" + sbgcount));
	}
}

function CloseAjaxShoppingBag()
{
	if(bagBusy)
	{
		return;
	}
	bagBusy = false;
	bagActive = false;
	modalClose();
	if(typeof(BagCloseNotification) == 'function')
	{
		eval("BagCloseNotification();");
	}
}

var sbgcount = 0;

function renderBag(req)
{
	var div;

	var html = new Array();
	sbgcount += 1;
	html.push('<table class="lb" cellpadding="0" cellspacing="0" id="sbg' + sbgcount + '">');
	html.push('<tr>');
	html.push('<td class="lbtl"></td>');
	html.push('<td class="lbtop" style="width: 592px;"><table class="bare" cellspacing="0" cellpadding="0"><tr><td style="width: 300px;">Shopping Bag</td><td style="text-align: right; width: 292px;"><a class="titlelink"  href="javascript:CloseAjaxShoppingBag()">X</a></td></tr></table></td>');
	html.push('<td class="lbtr"></td>');
	html.push('</tr>');
	html.push('<tr>');
	html.push('<td class="lbl"></td>');
	html.push('<td class="lbmid" style="width: 592px;">');

	req.buttons = true;
	html.push(renderBagContents(req));

	html.push('</td>');
	html.push('<td class="lbr"></td>');
	html.push('</tr>');

	
	html.push('<tr>');
	html.push('<td class="lbbl"></td>');
	html.push('<td class="lbbot"></td>');
	html.push('<td class="lbbr"></td>');
	html.push('</tr>');
	html.push('</table>');

	return(html.join(''));
}

function renderBagContents(req)
{
	var html = new Array();
	if(req.bag.count > 0)
	{
		if(typeof(req.updatefunc) === 'undefined') req.updatefunc = 'UpdateBag';
		if(typeof(req.removefunc) === 'undefined') req.removefunc = 'RemoveBag';
		if(typeof(req.tag) === 'undefined') req.tag = "bag";
		
		html.push('<table class="bare" cellspacing="0" cellpadding="0" ');
		if(req.buttons)
		{
			html.push('style="margin-top: 15px;');
		}
		html.push('">');
		html.push('<tr>');
		html.push('<td class="bskhd0" style="width: 52px;">Item</td>');
		html.push('<td class="bskhd" style="width: 250px;">Description</td>');
		html.push('<td class="bskhd" style="width: 70px;">Quantity</td>');
		html.push('<td class="bskhd" style="width: 70px;">Price Ea.</td>');
		html.push('<td class="bskhd" style="width: 70px;">Total</td>');
		html.push('</tr>');
		
		var hasbackorder = false;
		for(i = 0; i < req.bag.contents.length; i++)
		{
			var item = req.bag.contents[i];
			
			html.push('<tr>');
			
			// thumbnail
			html.push('<td class="bskthumb"><table class="bare" cellspacing="0" cellpadding="0"><tr><td><img style="border: 0px; width: 50px; height: 50px; border: 1px solid #ddd;" src="' + item.imguri + '" alt="" /></td><td><img style="border: 0px; margin-top: 2px; height: 50px; width: 4px;" src="/images/shadowright.png" alt="" /></td></tr>			<tr><td colspan="2"><img style="border: 0px; height: 4px; width: 54px; margin-left: 2px;" src="/images/shadowbottom.png" alt="" /></td></tr></table></td>');
			
			// description
			html.push('<td class="bsk">' + item.detaildescription + ' (Item ' + item.itemid + ')');

			if(item.removed)
			{
				html.push('<p style="color: #1600FF">Sorry, this item is no longer avaiable and has been removed from your basket</p>');
			}

			if(item.onorder)
			{
				html.push('<p style="color: #1600FF">This item is currently on backorder.</p>');
				hasbackorder = true;
			}
			
			html.push('</td>');
			
			// quantity and input areas
			html.push('<td class="bsk" style="text-align: center">');
			
			if(! item.removed)
			{
				if(req.buttons)
				{
					html.push('<input id="' + req.tag + 'qty_' + i + '" value="' + item.objquantity + '" style="width: 37px; margin-bottom: 3px; text-align: center;" type="text" maxlength="3" size="2" /><br /><div class="smbutton"><a class="smbutton" id="updlnk_' + i + '" href="javascript:' + req.updatefunc + '(' + i + ')"><span>Update</span></a></div><div class="smbutton"><a class="smbutton" id="rmlnk_' + i + '" href="javascript:' + req.removefunc +'(' + i + ')"><span>Remove</span></a></div><input id="' + req.tag + 'bsk_' + i +'" value="' + item.basketid + '" type="hidden" />');
				}
				else
				{
					html.push(item.objquantity);
				}
			}
			
			html.push('</td>');
			
			// price each
			html.push('<td class="bsk" style="text-align: right">' + item.formattedprice + '</td>');
			
			// cost
			html.push('<td class="bsk" style="text-align: right">' + item.formattedcost + '</td>');

			// all done
			html.push('</tr>');
		}

		html.push('<tr><td class="bsk0" colspan="4" style="text-align: right;">Merchandise (Sales tax and shipping may apply)</td>');
		html.push('<td class="bsk" style="text-align: right">' + req.bag.formattedsubtotal + '</td></tr>');

		html.push('</table>');
		
		if(hasbackorder)
		{
			html.push('<p style="color: #1600FF; font-family: arial narrow, helvetica narrow, arial, helvetica, sans-serif; font-size: 10pt; font-weight: bold; text-align: left; marign-top: 10px; margin-bottom: 4pt;">Your order contains one or more backordered items that may cause a delay in shipping your order.</p><p style="color: #1600FF; font-family: arial narrow, helvetica narrow, arial, helvetica, sans-serif; font-size: 10pt; font-weight: bold; text-align: left; margin-top: 0px; margin-bottom: 4pt;">We typically ship any items we have in-stock, then ship any backordered items in additional standard-rate shipment(s) as they become available in our warehouse, usually (but not always) within 1-3 weeks.  In some cases, we may delay shipment of your entire order if backordered items are scheduled to arrive in our warehouse within 5 business days.</p><p style="color: #1600FF; font-family: arial narrow, helvetica narrow, arial, helvetica, sans-serif; font-size: 10pt; font-weight: bold; text-align: left; margin-top: 0px; margin-bottom: 4pt;">Of course, there will be no additional shipping charges.</p');
		}

		if(req.checkoutbuttons)
		{
			html.push('<div class="button"><a class="button" href="/RetailScience/checkout"><span>Checkout</span></a><a class="button" href="javascript:CloseAjaxShoppingBag()"><span>Continue Shopping</span></a></div>');
		}

		if(req.closebutton)
		{
			html.push('<div class="button"><a class="button" href="javascript:CloseAjaxShoppingBag()"><span>Close</span></a></div>');
		}
	}
	else
	{
		html.push('<table class="bare" cellspacing="0" cellpadding="0" style="margin-top: 15px;"><tr><td width="20">&nbsp;</td><td><img style="border: 0px; width: 100px; height: 154px;" src="/images/largebag.png" alt="" /></td><td width="80">&nbsp;</td><td><p class="bigmsg" style="text-align: center; font-size: 18pt; font-weight: normal;">Shopping Bag is empty</p></td></tr></table>');
		html.push('<div class="button"><a class="button" href="javascript:CloseAjaxShoppingBag()"><span>Continue Shopping</span></a></div>');
	}
	
	return(html.join(''));
}

function discountedPrice(price, discount)
{
	var array = price.split(' ');
	price = array[0];
	array = price.split('/');
	price = array[0];
	array = price.split('&nbsp;');
	price = array[0].substr(1);
	var n = (price - price * discount) * 1000;
	n = parseInt(n, 10);
	var round = n % 10 > 0 ? 10 : 0;
	n += round;
	n -= n % 10;
	n /= 1000;
	return(n.toFixed(2));
}

function exceptionHandler(r, e)
{
	if(e.lineNumber !== null && e.fileName !== null)
	{
		var args = "?msg=" + escape(e.message) + "&url=" + escape(e.fileName) + "&line=" + escape(e.lineNumber);
	
		var img = new Image();
		img.src = "http://" + thishost + "/images/ajaxexception.jpg" + args;
	}
}

function BagGenerateWholesalePrices()
{
	var i = 0;

	while(ge("pp" + i) !== null)
	{
		var price = $("#pp" + i).html();
		
		if(price.indexOf("dz") == -1)
		{
			var dprice = discountedPrice(price, 0.5) * 12;
			var hprice = discountedPrice(price, 0.45) * 6;
			var html = "$" + dprice.toFixed(2) + " dz $" + hprice.toFixed(2) + " &frac12;dz<br />";
			$("#pp" + i).html(html);
		}
 		
		i = i + 1;
	}
}

