var promo_code = '';

function cartAdd(element)
{
  var productName = getVarFromUrl(element.href, 'product');
  var price = getVarFromUrl(element.href, 'price');
  var productCode = getVarFromUrl(element.href, 'code');
  var qty = getVarFromUrl(element.href, 'qty');
  
  if (productName == false || price == false)
  alert('Fatal Error: CartAdd(element) element has an invalid href.');

  var message={'title':productName, 'price':price, 'productcode':productCode}
  if(qty!==false) {
    message.qty=qty;
  }
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'addToCart', message, cartAddCallback);
  sendQueuedAjaxMessages();

  return false;
}

function cartRemove(element)
{
  itemId = getVarFromUrl(element.href, 'id');
  return cartRemoveByID(itemId);
}

function cartRemoveByID(itemId)
{
  promo_code = document.getElementById('promo_code').value;
  
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'removeFromCart', {itemId:itemId});
  sendAjaxMessage('Cart', 'redeemPromoCodeAjaxWrapper', {'promocode':promo_code}, redeemPromoCallback);
  sendAjaxMessage('Cart', 'getCartEditHTML', null, getCartEditHTMLCallback);
  sendAjaxMessage('Cart', 'getPaymentSectionHTML', null, getPaymentSectionHTMLCallback);
  sendQueuedAjaxMessages();
  document.getElementById('promo_code').value = promo_code;
  return false;
}

function cartUpdatePromoCode(){
  promo_code = document.getElementById('promo_code').value;
  
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'redeemPromoCodeAjaxWrapper', {'promocode':promo_code}, redeemPromoCallback);
  sendAjaxMessage('Cart', 'getCartEditHTML', null, getCartEditHTMLCallback);
  sendAjaxMessage('Cart', 'getPaymentSectionHTML', null, getPaymentSectionHTMLCallback);
  sendQueuedAjaxMessages();
  document.getElementById('promo_code').value = promo_code;

  return false;
}

function cartUpdateGiftVoucher(){
  giftvoucher_code = document.getElementById('giftvoucher_code').value;
  
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'redeemGiftVoucherAjaxWrapper', {'giftvoucher_code':giftvoucher_code}, redeemGiftVoucherCallback);
  sendAjaxMessage('Cart', 'getCartEditHTML', null, getCartEditHTMLCallback);
  sendAjaxMessage('Cart', 'getPaymentSectionHTML', null, getPaymentSectionHTMLCallback);
  sendQueuedAjaxMessages();
  document.getElementById('giftvoucher_code').value = giftvoucher_code;

  return false;
}

function cartUpdateItemQty(itemId, newValue)
{	
	//Remove items with zero qty
	if(newValue==0) {
	  cartRemoveByID(itemId);
	  return false;
  }

  promo_code = document.getElementById('promo_code').value;
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'updateItemQty', {itemId:itemId, newValue:newValue});
  sendAjaxMessage('Cart', 'redeemPromoCodeAjaxWrapper', {'promocode':promo_code}, redeemPromoCallback);
  sendAjaxMessage('Cart', 'getCartEditHTML', null, getCartEditHTMLCallback);
  sendAjaxMessage('Cart', 'getPaymentSectionHTML', null, getPaymentSectionHTMLCallback);
  sendAjaxMessage('Cart', 'getCartTotals', {itemIds:[itemId]}, getCartTotalsCallback);
  document.getElementById('promo_code').value = promo_code;
  
  sendQueuedAjaxMessages();

  return false;
}



function getVarFromUrl(url, varName)
{
  var startGetVars = url.indexOf('?');
  if (startGetVars == -1)
  return false;

  var getStr = url.substring(startGetVars + 1, url.length);

  var startResultStr = getStr.indexOf(varName + '=');
  if (startResultStr == -1) return false;
  startResultStr += varName.length + 1;

  if (getStr[startResultStr] == '&')
  startResultStr++;

  var endResultStr = getStr.indexOf('&', startResultStr);
  if (endResultStr == -1)
  endResultStr = getStr.length;

  var resultStr = getStr.substring(startResultStr, endResultStr);

  resultStr = resultStr.replace(/\+/g, ' ');

  return resultStr;
}

function cartAddCallback()
{
  alert('The item has been added to your basket.');
}

function destinationCountryDidChange(countryCode)
{
  //document.getElementById('postage-options').style.display = (countryCode == 'AU') ? 'block' : 'none';
  promo_code = document.getElementById('promo_code').value;
  
  //sendAjaxMessage('Cart', 'getDisplayFreightForCountry', {countryCode:countryCode}, getDisplayFreightForCountryCallback);
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'setDestinationCountry', {countryCode:countryCode});
  sendAjaxMessage('Cart', 'getCartTotals', {}, getCartTotalsCallback);
  sendAjaxMessage('Cart', 'getPostageMethods', {}, getPostageMethodsCallback);
  sendAjaxMessage('Cart', 'getPaymentMethods', {}, getPaymentMethodsCallback);
  sendAjaxMessage('Cart', 'redeemPromoCodeAjaxWrapper', {'promocode':promo_code}, redeemPromoCallback);
  sendAjaxMessage('Cart', 'getCartEditHTML', null, getCartEditHTMLCallback);
  sendAjaxMessage('Cart', 'getPaymentSectionHTML', null, getPaymentSectionHTMLCallback);
  sendQueuedAjaxMessages();
}

function getPostageMethodsCallback(results)
{
  document.getElementById('postage_methods').innerHTML = results.postageMethodsHTML;
}


function getPaymentMethodsCallback(results)
{
  document.getElementById('payment_methods').innerHTML = results.paymentMethodsHTML;
}

function postageMethodDidChange(element)
{
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'setPostageMethod', {idpostage_method:element.value});
  sendAjaxMessage('Cart', 'getCartTotals', {}, getCartTotalsCallback);
  sendQueuedAjaxMessages();
}

function getDisplayFreightForCountryCallback(results)
{
  freightEl = document.getElementById('cart-edit-freight-total');
  freightEl.innerHTML = results.freightTotal;
  totalEl = document.getElementById('cart-edit-cart-total');
  totalEl.innerHTML = results.cartTotal;
  
  var elementsToFlash = [freightEl, totalEl];
  flashElements(elementsToFlash);
}




var flashingElements = null;
var flashingElementsCountdown = 0;
var colorsBeforeFlashing = null;
var flashColor = '#ff0';
function flashElements(elements)
{
  if (flashingElementsCountdown != 0) return; // bail out if something else is already flashing.

  colorsBeforeFlashing = new Array();

  for (i = 0; i < elements.length; i++) {
    colorsBeforeFlashing[i] = elements[i].style.backgroundColor
    elements[i].style.backgroundColor = flashColor;
  }

  flashingElements = elements;
  flashingElementsCountdown = 2;
  setTimeout("unflashElements()",400);
}

function unflashElements()
{
  for (i = 0; i < flashingElements.length; i++) {
    flashingElements[i].style.backgroundColor = colorsBeforeFlashing[i];
  }

  flashingElementsCountdown--;
  if (flashingElementsCountdown > 0) {
    setTimeout("reflashElements()",300);
  } else {
    flashingElements = null;
  }
}

function reflashElements()
{
  for (i = 0; i < flashingElements.length; i++) {
    flashingElements[i].style.backgroundColor = flashColor;
  }

  setTimeout("unflashElements()",400);
}

function getCartEditHTMLCallback(cartEditHTML)
{
  cartEditEl = document.getElementById('cart-edit');
  cartEditEl.innerHTML = cartEditHTML;
  document.getElementById('promo_code').value=promo_code;
}

function getPaymentSectionHTMLCallback(HTML)
{
  var el = document.getElementById('payment-section');
  if(el) {
    el.innerHTML = HTML;
  }
  var currentVal=getRadioGroupCheckedValue('payment_method');
  setRadioGroupCheckedValue('payment_method',currentVal);
}

function getRadioGroupCheckedValue(name)
{
  var radios=document.getElementsByName(name);
  for(var i=0; i<radios.length; i++) {
	  if(radios[i].checked) {
		  return radios[i].value;
	  }
  }
  return false;
}

function setRadioGroupCheckedValue(name,value)
{
  var radios=document.getElementsByName(name);
  for(var i=0; i<radios.length; i++) {
	  if(radios[i].value==value) {
		  radios[i].checked=true;
		  return true;
	  }
  }
  return false;
}


function getCartTotalsCallback(results)
{
  var elementsToFlash = [];

  for (i = 0; i < results.subtotals.length; i++) {
    itemRec = results.subtotals[i];
    subtotalEl = document.getElementById('cart-edit-item-' + itemRec.itemId);
    subtotalEl.innerHTML = itemRec.subtotal;
    elementsToFlash.push(subtotalEl);
  }

  discountEl = document.getElementById('cart-edit-discounts-total');
  if (discountEl) {
    if (results.discountTotal != '$0.00')
      results.discountTotal = '<span class="announce">-'+results.discountTotal+'</span>';
    
    discountEl.innerHTML = results.discountTotal;
    elementsToFlash.push(discountEl);
  }
  
  freightEl = document.getElementById('cart-edit-freight-total');
  freightEl.innerHTML = results.freightTotal;

  totalEl = document.getElementById('cart-edit-cart-total');
  totalEl.innerHTML = results.cartTotal;
  
  elementsToFlash.push(freightEl);
  elementsToFlash.push(totalEl);
  flashElements(elementsToFlash);
}

function validatePaymentMethods()
{
  var allInputs = document.getElementsByTagName('input');
  
  for (var i = 0; i < allInputs.length; i++) {
    if (allInputs[i].className != 'payment_method_input')
      continue;
    
    if (allInputs[i].checked)
      return false;
  }
  
  return 'Please select a payment method.';
}

function redeemPromoCallback(msg){
  if (msg == true)
  {
    document.getElementById('cart-messages-wrapper').innerHTML = '';
  }
  else if (m = msg.match(/^AUTO_PROMO:(.*)/))
  {
    promo_code = m[1];
    document.getElementById('promo_code').value = promo_code;  
    document.getElementById('cart-messages-wrapper').innerHTML = '';
  }
  else 
  {
    document.getElementById('cart-messages-wrapper').innerHTML = '';
    document.getElementById('cart-messages-wrapper').style.display = '';
    document.getElementById('cart-messages-wrapper').innerHTML = '<div class="Msg Messages"><ul><li>'+msg+'</li></ul></div>';
  }
}

function redeemGiftVoucherCallback(msg){
  if (msg == true)
  {
    document.getElementById('cart-messages-wrapper').innerHTML = '';
  }
  else 
  {
    document.getElementById('cart-messages-wrapper').innerHTML = '';
    document.getElementById('cart-messages-wrapper').style.display = '';
    document.getElementById('cart-messages-wrapper').innerHTML = '<div class="Msg Messages"><ul><li>'+msg+'</li></ul></div>';
  }
}
