var nothingEnteredMsg = "Please enter a quantity."
// global made items to keep track of OOS notifications
var addToCartItems = null;
var addToCartTitleSrcId = null;
var addToCartAuthorSrcId = null;
var addToCartContent = "addToCartContent";
var addToCartSrc = null;

function overlayAddToCartPopWithCheck(curobj, subobjstr, opt_position, workId, titleSrc, authorSrc)
{	
	//make an ajax call to check the sps user in session
	var httpRequest = createRequest();
	var url = getPrefixDomain() + "/tbw/checkLogin.do";
	httpRequest.onreadystatechange = function() { if (checkEducatorLoginProcess(httpRequest, curobj, subobjstr, opt_position)) { overlayAddToCartPop(curobj, subobjstr, opt_position, workId, titleSrc, authorSrc); } };
	httpRequest.open('GET', url, true);
	httpRequest.send(null);
}

function checkEducatorLoginProcess(httpRequest, curobj, originPopoverStr, opt_position)
{
	if (httpRequest.readyState == 4) {
            if (httpRequest.status == 200) {
            
            	var result = new processedXMLresponse(httpRequest.responseXML);
                  if (result.isSuccess()) {
                  
                  	return true;
                  	
                  } else if (result.isNotEducator()) {
                  
                  	//show login popover
                  	setUpLoginPopover(originPopoverStr);
                  	// set up the login message for non educators
			document.getElementById("loginPopHeader").innerHTML = document.getElementById("loginPopNotEducatorInHeader").innerHTML;
			document.getElementById("loginPopBody").innerHTML = document.getElementById("loginPopNotEducatorInBody").innerHTML;

			//the user will be logging in as a different user. 
			//If the user is viewing a private booklist, 
			//overwrite the login link href value, so that the user comes back to the homePage
			var privateBooklist = document.getElementById('privateBooklist');
			if ((privateBooklist != undefined) && (privateBooklist.value == "true")) {
				var loginPath = document.getElementById('loginPath').value;
				
				document.getElementById("loginPopLoginLink").href = loginPath + "?finalSuccessURL=" + getPrefixDomain() + "/tbw/homePage.do";
			}
			
                  	overlayLoginPop(curobj, 'login', opt_position);
                  	return false;
                  }
                  else
                  {
                  	return checkLoginProcess(httpRequest, curobj, originPopoverStr, opt_position);
                  }
            } else {
				alert('There was a problem with the request, ' + httpRequest.status);
            }
      }
      return false;
}

function overlayAddToCartPop(curobj, subobjstr, opt_position, workId, titleSrc, authorSrc)
{
	addToCartSrc = curobj;
	addToCartTitleSrcId = titleSrc;
	addToCartAuthorSrcId = authorSrc;
	overlay(curobj, subobjstr, opt_position);
	if(document.getElementById(subobjstr).style.display != "none")
		addToCartLoad(workId);
	return true;
}

function overlayAddToCartPopAgain(opt_position)
{
	overlay(addToCartSrc, 'addtocart', opt_position);
	addToCartPaintForm();
	return true;
}

function addToCartLoad(id, isBooklist)
{
	var useBooklist = false;
	if(typeof isBooklist!="undefined" && isBooklist=="true")
		useBooklist=true;
	var httpRequest = createRequest();
	var url = "";
	if(useBooklist)
		url = getPrefixDomain() + "/tbw/retrieveCartItems.do?booklistId=" + id;
	else
		url = getPrefixDomain() + "/tbw/retrieveCartItems.do?workId=" + id;
	httpRequest.onreadystatechange = function() { addToCartLoadProcess(httpRequest); };
	httpRequest.open('GET', url, true);
	httpRequest.send(null);
}

function addToCartLoadProcess(httpRequest)
{
      if (httpRequest.readyState == 4)
      {
            if (httpRequest.status == 200)
            {
				var result = new cartItemXMLresponse(httpRequest.responseXML);
				if(result.isSuccess())
				{
					if(result.hasCartItems())
						addToCartItems = result.getCartItems();
					else
						addToCartItems = null;
					addToCartPaintForm();
				}
				else
				{
					overlayclose("addtocart");
					result.alertErrors();
				}
            }
            else
            {
                  alert('There was a problem with the request, ' + httpRequest.status);
            }
      }
      else
      		if(document.getElementById(addToCartContent))
      			document.getElementById(addToCartContent).innerHTML = "Loading ...";
}

function addToCartPaintForm()
{
	var space = document.getElementById(addToCartContent);
	var output = '';
	output += '<p class="booktitle" id="addToCartTitle">' + document.getElementById(addToCartTitleSrcId).value + '</p>';
	output += '<p class="nomargin" id="addToCartAuthor">' + document.getElementById(addToCartAuthorSrcId).value + '</p>';
	output += '<p class="function">Quantity</p>';
	
	if(addToCartItems!=null && addToCartItems.length>0)
		for(var i=0; i<addToCartItems.length; i++)
			output += addToCartItems[i].getHTML();
	else
		output = 'No products found.';

	output += '<p class="pop_subtotal">Subtotal: $<span id="addToCart_subtotal">0.00</span></p>';
	output += '<p class="pop_message">Pricing for Educators Only</p>';
	output += '<p class="buy_button"><a class="buy_link" href="javascript: void(0);" onClick="addToCartPurchase()" title="add to cart"><img class="buy_icon" src="/content/presentation/tbw/images/add_to_cart.gif" width="96" height="15" alt="" border="0"></a></p>';

	space.innerHTML = output;
	//swapPopovers('addtocart', 'addtocart');
	overlayclose('addtocart');
	overlay(addToCartSrc, 'addtocart', 'bottomlcenter');
}

function addToCartPurchase(workId)
{
	if(parseFloat(document.getElementById("addToCart_subtotal").innerHTML)<=0.0)
	{
		alert(nothingEnteredMsg);
		return false;
	}
	if(addToCartItems==null)
		addToCartLoad(workId);
	var httpRequest = createRequest();
	var url = getPrefixDomain() + "/cart/TBWOrderItemAdd?storeId=10001&catalogId=10002&continue=1";
	var k = 0;
	for(var i=0; i<addToCartItems.length; i++)
		if(document.getElementById(addToCartItems[i].getId() + "_qty"))
			if(parseBase10(document.getElementById(addToCartItems[i].getId() + "_qty").value)>0)
			{
				url += "&catEntryId_" + (k+1) + "=" + addToCartItems[i].getId() + "&quantity_" + (k+1) + "=" + parseBase10(document.getElementById(addToCartItems[i].getId() + "_qty").value);
				k++;
			}
	httpRequest.onreadystatechange = function() { addToCartPurchaseProcess(httpRequest); };
	httpRequest.open('GET', url, true);
	httpRequest.send(null);
}

function addToCartPurchaseProcess(httpRequest)
{
	// to be used later to determine items not present in the order
	var found;
	if (httpRequest.readyState == 4)
	{
		if (httpRequest.status == 200)
		{
			var result = new processedCartXMLresponse(httpRequest.responseXML);
			var failed = true;
			for(var j=0; j<addToCartItems.length; j++)
			{
				if(addToCartItems[j].isAvailable())
				{
					temp_item = addToCartItems[j].getId();
					document.getElementById(temp_item + "_qty").className = "qty";
					document.getElementById(temp_item + "_error").className = "carterrormsg";
					document.getElementById(temp_item + "_error").innerHTML = "";
				}
			}
			if(result.hasOrderError())
			{
				alert(result.getOrderError());
				//overlayclose('addtocart');
				return;
			}
			else if(!result.hasErrors())
			{
				overlayclose('addtocart');
				addToCartSuccess(result);
				failed = false;
			}
			else
			{
				var items = result.getItems();
				var item = null;
				for(var i=0; i<items.length; i++)
				{
					if(items[i].hasError() && document.getElementById(items[i].getId() + "_qty") != null)
					{
						item = items[i].getId();
						var desc = getApplicationMessageXML(items[i].getError().getKey());
						if(desc == null)
							desc = items[i].getError().getDescription();
						document.getElementById(item + "_qty").className = "qty textinputwarning";
						document.getElementById(item + "_error").className = "carterrormsg redwarning";
						document.getElementById(item + "_error").innerHTML = desc;
						// if oos then do some omniature stufff
					}
					else if(!items[i].hasError())
					{
						failed = false;
					}
				}
				if(!failed)
				{
					overlayclose('addtocart');
					addToCartSuccess(result);
				}
			}
			// clear the input values if successful
			if(!failed)
			{
				for(var j=0; j<addToCartItems.length; j++)
					if(addToCartItems[j].isAvailable() && document.getElementById(addToCartItems[j].getId()+"_qty") != null)
						document.getElementById(addToCartItems[j].getId()+"_qty").value = 0;
				document.getElementById("addToCart_subtotal").innerHTML = "0.00";
			}
		}
		else
		{
		      alert('There was a problem with the request, ' + httpRequest.status);
		}
	}
}

function addToCartSuccess(result)
{
	overlay(addToCartSrc, 'addtocartsuccess', 'bottomlcenter');
	document.getElementById("addToCartSuccessTitle").innerHTML = document.getElementById(addToCartTitleSrcId).value;
	document.getElementById("addToCartSuccessAuthor").innerHTML = document.getElementById(addToCartAuthorSrcId).value;
	var result_list_success = "";
	var result_list_failure = "";
	var result_final = "";
	var added_total = 0.0;
	items = result.getItems();
	var products = "";
	var s=s_gi(s_account);
	var noerrors = 0;
	for(var i=0; i<items.length; i++)
	{
		if(!items[i].hasError())
		{
			s.linkTrackVars='server,eVar1,eVar2,events,products';
			s.linkTrackEvents='scAdd';
			s.server='TSO';
			s.eVar1='TSO/ib//eng/tbw_'+document.getElementById("trackrevenue_eVar1").value+'_scadd///tbw/txtl////';
			s.events='scAdd';
			//s.products=';['+items[i].getId()+'];;;;evar2=TBW:'+document.getElementById("trackrevenue_products").value;
			products += ';'+items[i].getId()+';;;;evar2=TBW:'+document.getElementById("trackrevenue_products").value;
			if(i!=(items.length-1))
				products += ',';
			noerrors = 1;
			
			result_list_success += document.getElementById(items[i].getId()+"_qty").value + " " + document.getElementById(items[i].getId()+"_format").innerHTML + "<br>\n";
			added_total += parseBase10(document.getElementById(items[i].getId()+"_qty").value) * parseFloat(document.getElementById(items[i].getId()+"_price").innerHTML);
		}
		else
		{
			result_list_failure += '<p class="carterror redwarnfaded">' + document.getElementById(items[i].getId()+"_qty").value + " " + document.getElementById(items[i].getId()+"_format").innerHTML + ' <br>\n';
			var desc = getApplicationMessageXML(items[i].getError().getKey());
			if(desc == null)
				desc = items[i].getError().getDescription();
			result_list_failure += '<span class="carterrormsg">(' + desc + ')</span></p>\n';
		}
	}
	if(noerrors == 1) {
		s.products=products;
		s.tl(this,'o','TBW:'+document.getElementById("trackrevenue_products").value+' scAdd');
	}
	if(result_list_success != "")
		result_final += '<p class="success_msg"><strong>Items Added to Cart:</strong></p>\n' + '<p class="success_msg">' + result_list_success + '</p>';
	if(result_list_failure != "")
		result_final += '<p class="carterror redwarning"><strong>Items NOT added:</strong></p>' + result_list_failure;
	
	result_final += '<p class="success_msg"><strong>$' + CommaFormatted(added_total.toFixed(2)) + ' Subtotal</strong></p>';
	
	document.getElementById("addToCartResult").innerHTML = result_final;

	// set the store url
	document.getElementById("addToCartCheckoutUrl").href = document.getElementById("tsoHostname").value + "/webapp/wcs/stores/servlet/OrderItemDisplay?storeId=10001&catalogId=10002&langId=-1";
	//swapPopovers('addtocartsuccess', 'addtocartsuccess');
	overlayclose('addtocartsuccess');
	overlay(addToCartSrc, 'addtocartsuccess', 'bottomlcenter');
}

function addToCartOOSEmailPop(subobjstr, opt_position, productId)
{
	overlayclose('addtocart');
	var item = null;
	for(var i=0; i<addToCartItems.length; i++)
		if(addToCartItems[i].getId()==parseInt(productId))
			item = addToCartItems[i];
	document.getElementById("addToCartOOSEmailAddress").className = "";
	document.getElementById("addToCartOOSEmailAddress").value = "";
	document.getElementById("addToCartOOSEmailAddressTitle").innerHTML = "Your E-mail Address";
	document.getElementById("addToCartEmailTitleTypePrice").innerHTML = document.getElementById(addToCartTitleSrcId).value + 
								' <span style="font-weight: normal;">(' + item.getFormat() + ' $' + item.getPrice() + ')</span>';
	document.getElementById("addToCartEmailAuthor").innerHTML = document.getElementById(addToCartAuthorSrcId).value;
	document.getElementById("addToCartEmailLink").onclick = function() { addToCartOOSEmailProceed(productId); };
	document.getElementById("addToCartEmailForm").onsubmit = function() { addToCartOOSEmailProceed(productId); };
	//swapPopovers(subobjstr, subobjstr);
	overlay(addToCartSrc, subobjstr, opt_position);
}

function addToCartOOSEmailProceed(productId)
{
	var httpRequest = createRequest();
	var url = getPrefixDomain() + "/cart/SIGBackInStockEmailSubmitCmd?storeId=10001&catalogId=10002&productId=" + productId + 
									"&langId=-1&viewname=TSBackInStockEmailThankYouView&errorViewName=TSBackinStockEmailView&email=" + 
									document.getElementById("addToCartOOSEmailAddress").value;
	httpRequest.onreadystatechange = function() { addToCartOOSEmailProceedProcess(httpRequest, productId); };
	httpRequest.open('GET', url, true);
	httpRequest.send(null);
}

function addToCartOOSEmailProceedProcess(httpRequest, productId)
{
	if (httpRequest.readyState == 4)
	{
		if (httpRequest.status == 200)
		{
			if(httpRequest.responseText.indexOf("<b>Error:</b>")==-1)
			{
				overlayclose('outofstockemail');
				for(var i=0; i<addToCartItems.length; i++)
					if(addToCartItems[i].getId()==parseInt(productId))
						addToCartItems[i].OOSsent = true;
				overlayAddToCartPopAgain('bottomlcenter');		
			}
			else
			{
				document.getElementById("addToCartOOSEmailAddress").className = "textinputwarning";
				document.getElementById("addToCartOOSEmailAddressTitle").innerHTML = '<span class="redwarning">Your E-mail Address <em>(required)</em></span>';
			}
		}
		else
		{
		      alert('There was a problem with the request, ' + httpRequest.status);
		}
	}
}

function addToCartOOSEmailWork(curobj, subobjstr, opt_position, productId, workId, titleId, authorId)
{
	addToCartSrc = curobj;
	addToCartTitleSrcId = titleId;
	addToCartAuthorSrcId = authorId;
	if(addToCartItems==null)
		addToCartLoadWork(curobj, workId, "true");
	addToCartOOSEmailPop(subobjstr, opt_position, productId);
	document.getElementById("addToCartOOSEmailAddress").className = "";
	document.getElementById("addToCartOOSEmailAddress").value = "";
	document.getElementById("addToCartOOSEmailAddressTitle").innerHTML = "Your E-mail Address";
	document.getElementById("addToCartEmailLink").onclick = function() { addToCartOOSEmailWorkProceed(productId); };
	document.getElementById("addToCartEmailForm").onsubmit = function() { addToCartOOSEmailWorkProceed(productId); };
	document.getElementById("addToCartEmailCancel").onclick = function() { overlayclose('outofstockemail'); };
	document.getElementById("addToCartEmailX").onclick = function() { overlayclose('outofstockemail'); };
}

function addToCartOOSEmailWorkProceed(productId)
{
	var httpRequest = createRequest();
	var url = getPrefixDomain() + "/cart/SIGBackInStockEmailSubmitCmd?storeId=10001&catalogId=10002&productId=" + productId + 
									"&langId=-1&viewname=TSBackInStockEmailThankYouView&errorViewName=TSBackinStockEmailView&email=" + 
									document.getElementById("addToCartOOSEmailAddress").value;
	httpRequest.onreadystatechange = function() { 
		if (httpRequest.readyState == 4)
		{
			if (httpRequest.status == 200)
			{
				if(httpRequest.responseText.indexOf("<b>Error:</b>")==-1)
				{
					overlayclose('outofstockemail');
					document.getElementById(productId + "_oos").innerHTML = "<em>In-stock Notification Requested</em>";
				}
				else
				{
					document.getElementById("addToCartOOSEmailAddress").className = "textinputwarning";
					document.getElementById("addToCartOOSEmailAddressTitle").innerHTML = '<span class="redwarning">Your E-mail Address <em>(required)</em></span>';
				}
			}
	        else
	        {
	              alert('There was a problem with the request, ' + httpRequest.status);
	        }
		}
	};
	httpRequest.open('GET', url, true);
	httpRequest.send(null);
}

function overlayAddToCartWorkPopWithCheck(curobj, subobjstr, opt_position, workId, titleSrc, authorSrc)
{	
	if(parseFloat(document.getElementById("addToCart_subtotal").innerHTML)<=0.0)
	{
		alert(nothingEnteredMsg);
		return false;
	}
	addToCartTitleSrcId = titleSrc;
	addToCartAuthorSrcId = authorSrc;
	//make an ajax call to check the sps user in session
	var httpRequest = createRequest();
	var url = getPrefixDomain() + "/tbw/checkLogin.do";
	httpRequest.onreadystatechange = function() { if (checkEducatorLoginProcess(httpRequest, curobj, subobjstr, opt_position)) { addToCartLoadWork(curobj, workId); } };
	httpRequest.open('GET', url, true);
	httpRequest.send(null);
}

function addToCartLoadWork(src, workId, loadOnly)
{
	var item = null;
	var doNotPurchase = false;
	if(typeof loadOnly!="undefined" && loadOnly=="true")
		doNotPurchase = true;	
	addToCartSrc = src;
	var httpRequest = createRequest();
	var url = getPrefixDomain() + "/tbw/retrieveCartItems.do?workId=" + workId;
	//httpRequest.onreadystatechange = function() { addToCartLoadWorkProcess(httpRequest, workId); };
	httpRequest.open('GET', url, false);
	httpRequest.send(null);
      if (httpRequest.readyState == 4)
      {
            if (httpRequest.status == 200)
            {
				var result = new cartItemXMLresponse(httpRequest.responseXML);
				if(result.isSuccess())
				{
					if(result.hasCartItems())
					{
						addToCartItems = result.getCartItems();
						if(!doNotPurchase)
						{
							for(var i=0; i<addToCartItems.length; i++)
								if(document.getElementById(addToCartItems[i].getId() + "_qty"))
									if(parseBase10(document.getElementById(addToCartItems[i].getId() + "_qty").value)>0)
									{
										item = addToCartItems[i].getId();
										document.getElementById(item + "_qty").className = "qty";
										document.getElementById(item + "_error").className = "carterrormsg";
									}
							addToCartPurchase(workId);
						}
					}
					else
						addToCartItems = null;
				}
				else
				{
					result.alertErrors();
				}
            }
            else
            {
                  alert('There was a problem with the request, ' + httpRequest.status);
            }
      }
}

// COLLECTION ADD TO CART

function overlayAddToCartCollectionPopWithCheck(curobj, subobjstr, opt_position, booklistId, titleSrc, authorSrc)
{	
	//make an ajax call to check the sps user in session
	var httpRequest = createRequest();
	var url = getPrefixDomain() + "/tbw/checkLogin.do";
	httpRequest.onreadystatechange = function() { if (checkEducatorLoginProcess(httpRequest, curobj, subobjstr, opt_position)) { overlayAddToCartCollectionPop(curobj, subobjstr, opt_position, booklistId, titleSrc, authorSrc); } };
	httpRequest.open('GET', url, true);
	httpRequest.send(null);
}

function overlayAddToCartCollectionPop(curobj, subobjstr, opt_position, booklistId, titleSrc, authorSrc)
{
	addToCartSrc = curobj;
	addToCartTitleSrcId = titleSrc;
	addToCartAuthorSrcId = authorSrc;
	overlay(curobj, subobjstr, opt_position);
	if(document.getElementById(subobjstr).style.display != "none")
		addToCartLoad(booklistId, "true");
	return true;
}

// END OF COLLECTION ADD TO CART

function addToCartCalc(e)
{
      if(!e) e = window.event;
      var item = e.target || e.srcElement;
      if(item != null && item.tagName == "INPUT")
      {
		    if(item.value.replace(/^\s+|\s+$/, '')=="")
			  item.value = "0";

	      var products = getElementsByClassName(document, "input", "qty");

	      var subtotal = 0;
	      var itemTotal = 0;
	      var val = 0;
	      for(var i=0; i<products.length; i++)
			{
			if(products[i].disabled == true)
				continue;
			  if(!isInteger(products[i].value))
				return false;
			  itemTotal = parseBase10(products[i].value) * parseFloat(document.getElementById(products[i].id.split("_")[0] + "_price").innerHTML);
			  subtotal += itemTotal; 
		    }

	      document.getElementById("addToCart_subtotal").innerHTML = CommaFormatted(subtotal.toFixed(2));
	}
}