/***********************************************************
These are for display.
***********************************************************/

function loadInfo()
{
  loadCustomerInfo(true);
  loadCartInfo(false);
}

function loadCustomerInfo(doLoadShippingInfo)
{
  new Ajax.Request("checkout/customerInfo.php", {
  method: 'post',
  parameters: {action : "default"},
  onComplete: function(transport) { _loadCustomerInfo(transport, doLoadShippingInfo); },
  onException: function(req,exc) {
	log_ajax_error("LoadCustInfoExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("","LoadCustInfoFail:"+request.transport.responseText); }
  });
}

function _loadCustomerInfo(transport, doLoadShippingInfo)
{
  $("customerInfo").update(transport.responseText);
  if(doLoadShippingInfo)
    loadShippingInfo();
}

function loadCartInfo(doLoadShippingInfo)
{
  new Ajax.Updater("cartInfo", "checkout/cartInfo.php", {
  onComplete: function(transport) { _loadCartInfo(transport, doLoadShippingInfo); },
  onException: function(req,exc) {
	log_ajax_error("LoadCartInfoExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("","LoadCartInfoFail:"+request.transport.responseText); }
  });
}

function _loadCartInfo(transport, doLoadShippingInfo)
{
  if(doLoadShippingInfo)
    loadShippingInfo();
}

//this one is for the cart page (where you choose credit card or paypal or google etc)
function loadCartInfo2()
{
  new Ajax.Updater("cartInfo", "checkout/cartInfo2.php", {
  parameters: {page : document.location.pathname, params : document.location.search.substring(1)},
  onComplete: function(transport) { hideOverlay(); },
  onException: function(req,exc) {
	log_ajax_error("LoadCartInfo2Exc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("","LoadCartInfo2Fail:"+request.transport.responseText); }
  });
}

function loadShippingInfo()
{
  //If editing cart items this will already have been called
  showOverlay();

  new Ajax.Updater("shippingInfo", "checkout/shippingInfo.php", {
  onComplete: function(transport) { hideOverlay(); },
  onException: function(req,exc) {
	log_ajax_error("LoadShippingInfoExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("","LoadShippingInfoFail:"+request.transport.responseText); }
  });
}

function _loadMiniCart()
{
  new Ajax.Updater("miniCart", "helpers/miniCart.php", {

  parameters: {mode : "ajax", page : document.location.pathname, params : document.location.search.substring(1)},

  onComplete: function(transport) { confirmCart(transport); },
  onException: function(req,exc) {
	log_ajax_error("LoadMiniCartExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("","LoadMiniCartFail:"+request.transport.responseText); }
  });
}

function confirmCart(transport) {
  hideOverlay();
  var response = transport.responseText;
  var it_start=0;
  var it_end=0;
  var item_name="";

  if (!getCookie("cartCookie")) {
	alert("Please enable cookies to continue.");
	return;
  }

  var ptr=response.lastIndexOf("minicart_partnum");
  if (ptr) {
	it_start=ptr+18;
	var ptr2=response.indexOf("/span",ptr);
  	if (ptr2) {
		it_end=ptr2-1;
		if (it_end-it_start<7) {
			log_std_err("","item len too short:"+response.length);
			return;
		} else {
			item_name=response.substring(it_start,it_end);
		}
	} else {
		log_std_err("","no span end:"+response.length);
		return;
	}
  } else {
	log_std_err("","no minicart_partnum:"+response.length);
	return;
  }



  alert("A "+item_name+" has been added to your cart. This item will appear in the minicart on the right side of your screen.");
}

/***********************************************************
These edit the cart's items.
***********************************************************/

function updateItem(product_id, product_name, input, oldQuantity)
{
  var quantity = input.value;
  
  if(!quantity.match(/^\d+$/))
  {
    input.value = oldQuantity;
    return;
  }

  if(quantity == 0)
  {
    if(!confirm("Remove " + product_name + " from your cart?"))
    {
      input.value = oldQuantity;
      return;
    }
  }

  showOverlay();
  new Ajax.Request("actions/updateItemAction.php", {
  method: 'post',
  parameters: {product_id : product_id, quantity : quantity},
  onSuccess: function(transport) { loadCartInfo2(); },
  onException: function(req,exc) {
	log_ajax_error("UpdateItemExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("UpdateItemFail:"+request.transport.responseText); }
  });
}

function deleteItem(product_id, product_name, input, oldQuantity)
{
  input.value = 0;
  updateItem(product_id, product_name, input, oldQuantity);
}

//Mode = 0, in the site, update the minicart
//Mode = 1, on cart page

function addToCart(product_id, mode) { 
	addToCartMultiple(product_id,mode,1,"",""); 
}

function addToCartMultiple(product_id, mode, product_qty, quickitem, cursel)
{
	if (quickitem!=cursel) {
		alert("Error: Cannot add '"+quickitem+"' to your cart");
		return false;
	}
	var cart_url=web_pathname+"addbounce.php?product_id="+product_id+"&"+
		"product_qty="+product_qty;
	if (quickitem.length>0)
		cart_url+="&quickform=1";
	document.location.href=cart_url;
}

//Mode = 0, in the site, update the minicart
//Mode = 1, on cart page
function _addToCart(transport, mode)
{
  var response = transport.responseText.evalJSON(true);
  if(mode == 1)
    loadCartInfo2();
  if(mode == 0)
    _loadMiniCart();
}

//Mode = 0, Credit Card - checkout.php
//Mode = 1, Paypal with shipping options - checkout.php
//Mode = 2, Paypal express, they did not want shipping options - cart.php
//Mode = 3, Dealer - cart.php
function saveOrder(mode)
{ 
  var payment_type = "CREDITCARD";
  if(mode == 1)
    payment_type = "PAYPAL";
  else if(mode == 2)
    payment_type = "PAYPALEXPRESS";
  else if(mode == 3)
    payment_type = "SALESORDER";

  showOverlay();
  var ont;

  if(mode != 2)
  { 
    var form = document.getElementById("orderForm"); 
	//determine if drop ship is needed
	if(mode == 3) {
		var drpOpt = document.getElementById("drpOpt");
		var drpOptRad = drpOpt.getElementsByTagName("input"); 
		var radLength = drpOptRad.length;
		for(var x = 0; x < radLength; x++) {
			if(drpOptRad[x].type == "radio" && drpOptRad[x].checked) { var drpOptVal = drpOptRad[x].value; }
		}
		if(drpOptVal == "Yes") { 
			var inputs = form.getElementsByTagName('input');
			var selCountry = document.getElementById("dropShipCountry");
			var selCountryNum = selCountry.selectedIndex;
			ont = "\03"+selCountry.options[selCountryNum].text+"\03<br />";
			for(var i in inputs) { 
				if(inputs[i].type == "text") {
					ont += inputs[i].value+"\03<br />";
				}
			}
			ont += "<br />\04"+document.getElementById("order_notes_text").value+"\04";
		} 
		else {
			ont = document.getElementById("order_notes_text").value; 
		}
	} else {
		ont = document.getElementById("order_notes_text").value; 
	}
	if(mode == 1) { $("orderFormCreditCardNumError").update(); }
    new Ajax.Request("actions/saveOrderAction.php", {
		method: 'post',
		parameters: { payment_type : payment_type, order_notes_text : ont },
		onComplete: function(transport) { _saveOrder(transport, mode); },
		onException: function(req,exc) { log_ajax_error("saveOrder1Exc",req,exc); return true; },
		onFailure: function(request) { log_std_error("saveOrder1Fail:"+request.transport.responseText); }
		}
	);
  }
  else
  {
    new Ajax.Request("actions/saveOrderAction.php", {
    method: 'post',
    parameters: { payment_type : payment_type },
    onComplete: function(transport) { _saveOrder(transport, mode); },
    onException: function(req,exc) { log_ajax_error("saveOrder2Exc:",req,exc); return true; },
    onFailure: function(request) { log_std_error("saveOrder2Fail:"+request.transport.responseText); }
    });
  }
}

function confirmDealerOrder()
{
  if(confirm("Submit this order?"))
    saveOrder(3);
}

function _saveOrder(transport, mode)
{
  //alert(transport.responseText);

  var response = transport.responseText.evalJSON(true);

  if(response["status_code"] == 1)
  {
  
    if(mode == 0)
      saveCreditCard();

    if(mode == 1 || mode == 2)
    {
      hideOverlay();

      var form = $("paypalForm");

      form.item_name.value = "Powerlet Products Order Number " + response["order_id"];
      form.invoice.value = response["order_id"];

      form.submit(); 
    }

    //dealer order - the order is already complete.
    //pulling them to order history via the checkout page
    //it will notice that the order is complete
    if(mode == 3)
    {
      hideOverlay();

      //it is possible that this move is not happening due to cacheing
      //in some browsers so we're giving them an alert that says the
      //order is complete along with regetting this page
      alert("Your order is complete.");

      var location = "/checkout.php?timestamp=" + Math.floor(Math.random() * 50000);
      document.location = location;
    }
  }
}

function saveCreditCard()
{
  new Ajax.Request("actions/saveCreditCardAction.php", {
  method: 'post',
  parameters: $("orderForm").serialize(true),
  onComplete: function(transport) {hideOverlay();_saveCreditCard(transport);},
  onException: function(req,exc) {
	log_ajax_error("saveccExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("saveccFail:"+request.transport.responseText); }
  });
}

function _saveCreditCard(transport)
{
  var response = transport.responseText.evalJSON(true);

  if(response["status_code"] == 1)
  {

    //it is possible that this move is not happening due to cacheing
    //in some browsers so we're giving them an alert that says the
    //order is complete along with regetting this page
    alert("Your order is complete.");

    var location = "/checkout.php?timestamp=" + Math.floor(Math.random() * 50000);
    document.location = location;
  }
  else
  {
    $("orderFormCreditCardNumError").update("Card rejected. "+response["status_text"]);
  }
}

/***********************************************************
These edit shipping details.
***********************************************************/

function editAddresses()
{
  new Ajax.Request("checkout/customerInfo.php", {
  method: 'post',
  parameters: {action : "edit"},
  onComplete: function(transport) { $("customerInfo").update(transport.responseText); },
  onException: function(req,exc) {
	log_ajax_error("editAddressExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("editAddressFail:"+request.transport.responseText); }
  });
}

//Mode = 0: they are logged in
//Mode = 1: they are not logged in so email address is required
function saveAddresses(mode)
{
  if(_validateAddresses(mode) > 0)
    return;

  new Ajax.Request("actions/saveAddressesAction.php", {
  method: 'post',
  parameters: $("addressesForm").serialize(true),
  onSuccess: function(transport) { loadInfo(); },
  onException: function(req,exc) {
	log_ajax_error("saveAddressExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("saveAddressFail:"+request.transport.responseText); }
  });
}

function saveShippingRate(shipper_service_id)
{
  new Ajax.Request("actions/saveShippingRateAction.php", {
  method: 'post',
  parameters: {shipper_service_id : shipper_service_id},
  onSuccess: function(transport) { loadCartInfo(true); },
  onException: function(req,exc) {
	log_ajax_error("saveShipRateExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("saveShipRateFail:"+request.transport.responseText); }
  });
}

function editShippingRate()
{
  showOverlay();
  new Ajax.Request("checkout/shippingInfo.php", {
  method: 'post',
  parameters: {action : "edit"},
  onComplete: function(transport) { $("shippingInfo").update(transport.responseText); loadCartInfo(false); hideOverlay(); },
  onException: function(req,exc) {
	log_ajax_error("editShipRateExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("editShipRateFail:"+request.transport.responseText); }
  });
}

function loadShippingRates(country_code, postal_code)
{
  if(country_code == "US" && !validateZipCode(postal_code))
  {
    $("shippingQuotesFormPostalCodeError").update("Invalid Zip Code.");
    return;
  }
  else
    $("shippingQuotesFormPostalCodeError").update();

  if(country_code == "CA" && !validatePostalCode(postal_code))
  {
    $("shippingQuotesFormPostalCodeError").update("Invalid Postal Code.");
    return;
  }
  else
    $("shippingQuotesFormPostalCodeError").update();

  showOverlay();
  new Ajax.Updater("shippingInfo", "checkout/shippingQuotes.php", {
  method: 'post',
  parameters: {country_code : country_code, postal_code : postal_code},
  onComplete: function(transport) { hideOverlay(); },
  onException: function(req,exc) {
	log_ajax_error("loadShipRateExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("loadShipRateFail:"+request.transport.responseText); }
  });
}

//This is for the 10 million shipping pages
function showPage(id, page)
{
  new Ajax.Updater(id, page);
}

function showPageWithOverlay(id, page)
{
  showOverlay();
  new Ajax.Updater(id, page, {
  onComplete: function(transport) { hideOverlay(); }
  });
}

function showPageWithOverlayMessage(id, page, msg)
{
  showOverlayWithMessage(msg);
  new Ajax.Updater(id, page, {
  onComplete: function(transport) { hideOverlayWithMessage(); }
  });
}
//agony...
function _validateAddresses(mode)
{
  var errorCount = 0;

  //require only when they don't log in
  if(mode == 1)
  {
    if($F("email_addr").blank())
    {
      $("addressesFormEmailAddrError").update("Required.");
      errorCount++;
    }
    else
      $("addressesFormEmailAddrError").update();
  }

  if($F("billing_first_name").blank())
  {
    $("addressesFormBillingFirstNameError").update("Required.");
    errorCount++;
  }
  else
    $("addressesFormBillingFirstNameError").update();

  if($F("billing_last_name").blank())
  {
    $("addressesFormBillingLastNameError").update("Required.");
    errorCount++;
  }
  else
    $("addressesFormBillingLastNameError").update();

  if($F("billing_address_line1").blank())
  {
    $("addressesFormBillingAddressLine1Error").update("Required.");
    errorCount++;
  }
  else
    $("addressesFormBillingAddressLine1Error").update();

  if($F("billing_city_name").blank())
  {
    $("addressesFormBillingCityNameError").update("Required.");
    errorCount++;
  }
  else
    $("addressesFormBillingCityNameError").update();

  if($F("billing_country_code") == "US")
  {
    if(!validateZipCode($F("billing_postal_code")))
    {
      $("addressesFormBillingPostalCodeError").update("Invalid Zip Code.");
      errorCount++;
    }
    else
      $("addressesFormBillingPostalCodeError").update();
  }

  if($F("billing_country_code") == "CA")
  {
    if(!validatePostalCode($F("billing_postal_code")))
    {
      $("addressesFormBillingPostalCodeError").update("Invalid Postal Code.");
      errorCount++;
    }
    else
      $("addressesFormBillingPostalCodeError").update();
  }
  
  if($F("billing_phone_num").blank())
  {
    $("addressesFormPhoneNumberCodeError").update("Required for online payment.");
    errorCount++;
  }
  else
    $("addressesFormPhoneNumberCodeError").update();

  if($F("shipping_first_name").blank())
  {
    $("addressesFormShippingFirstNameError").update("Required.");
    errorCount++;
  }
  else
    $("addressesFormShippingFirstNameError").update();

  if($F("shipping_last_name").blank())
  {
    $("addressesFormShippingLastNameError").update("Required.");
    errorCount++;
  }
  else
    $("addressesFormShippingLastNameError").update();

  if($F("shipping_address_line1").blank())
  {
    $("addressesFormShippingAddressLine1Error").update("Required.");
    errorCount++;
  }
  else
    $("addressesFormShippingAddressLine1Error").update();

  if($F("shipping_city_name").blank())
  {
    $("addressesFormShippingCityNameError").update("Required.");
    errorCount++;
  }
  else
    $("addressesFormShippingCityNameError").update();

  if($F("shipping_country_code") == "US")
  {
    if(!validateZipCode($F("shipping_postal_code")))
    {
      $("addressesFormShippingPostalCodeError").update("Invalid Zip Code.");
      errorCount++;
    }
    else
      $("addressesFormShippingPostalCodeError").update();
  }

  if($F("shipping_country_code") == "CA")
  {
    if(!validatePostalCode($F("shipping_postal_code")))
    {
      $("addressesFormShippingPostalCodeError").update("Invalid Postal Code.");
      errorCount++;
    }
    else
      $("addressesFormShippingPostalCodeError").update();
  }
  return(errorCount);
}

function loadMainPanel(divTarget,url)
{
  showOverlay();
  new Ajax.Request("actions/loadMainPanel.php", {
  method: 'post',
  parameters: { url : url },
  onComplete: function(transport) { _loadMainPanel(transport,divTarget,url) },
  onException: function(req,exc) {
	log_ajax_error("loadMainPanelExc",req,exc); return true; },
  onFailure: function(request) {
	log_std_error("loadMainPanelFail:"+request.transport.responseText); }
  });
}

function _loadMainPanel(transport,divTarget,url)
{
  hideOverlay();
  var response = transport.responseText.evalJSON(true);
  $(divTarget).update(response.html);
}


function locateDealers(myzipcode,radius,international,mapTarget,listTarget)
{
  showOverlay();
  if (myzipcode.length==0 && ! international) {
  		hideOverlay();
                var nozipcode=noZipcodeMessage();
                $(mapTarget).update(nozipcode);
                return;
  }
  new Ajax.Request("actions/locateDealers.php", {
  method: 'post',
  parameters: {myzipcode : myzipcode, radius : radius , international : international },
  onComplete: function(transport) { _locateDealers(transport,mapTarget,listTarget) },
  onException: function(req,exc) {
	//log_ajax_error("dlr_locatorExc",req,exc); return true; },
	log_std_error("dlr_locatorExceptBypass:"+req.transport.responseText);
	_locateDealers(req.transport,mapTarget,listTarget) },
  onFailure: function(request) {
	log_std_error("dlr_locatorFail:"+request.transport.responseText); }
  });
}

function _locateDealers(transport,mapTarget,listTarget)
{
  hideOverlay();
  var response = transport.responseText.evalJSON(true);
  generateDealerList(response.mylat,response.mylon,response.international,response.dealers,listTarget);
  generateGMAP(response.mylat,response.mylon,response.international,response.radius,response.dealers,mapTarget);
}

function log_ajax_error(msg,req,exc) {
	var errstr="AjaxFailure "+msg+"::"+exc.name+"::"+exc.message+"::"+req.transport.responseText;
        log_std_error("Ajax Error : "+msg,errstr);
}

function log_std_error(amsg,theData) {
	//hideOverlay();
        var img = new Image();
        img.src = "logger.php?" + encodeURI(theData).substr(0,2000);
	if (amsg.length<1)
		amsg="There was an error processing your request";
	alert(amsg);
}

