function cartAdd(element)
{
  var productName = getVarFromUrl(element.href, 'product');
  var price = getVarFromUrl(element.href, 'price');
  var productCode = getVarFromUrl(element.href, 'code');
  
  if (productName == false || price == false)
  alert('Fatal Error: CartAdd(element) element has an invalid href.');
  
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'addToCart', {title:productName, price:price, productcode:productCode}, cartAddCallback);
  sendQueuedAjaxMessages();

  return false;
}

function cartRemove(element)
{
  itemId = getVarFromUrl(element.href, 'id');

  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'removeFromCart', {itemId:itemId});
  sendAjaxMessage('Cart', 'getCartEditHTML', null, getCartEditHTMLCallback);
  sendQueuedAjaxMessages();

  return false;
}

function cartUpdateItemQty(itemId, newValue)
{
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'updateItemQty', {itemId:itemId, newValue:newValue});
  sendAjaxMessage('Cart', 'getCartTotals', {itemIds:[itemId]}, getCartTotalsCallback);
  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';
  
  //sendAjaxMessage('Cart', 'getDisplayFreightForCountry', {countryCode:countryCode}, getDisplayFreightForCountryCallback);
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'setDestinationCountry', {countryCode:countryCode});
  sendAjaxMessage('Cart', 'getCartTotals', {}, getCartTotalsCallback);
  sendAjaxMessage('Cart', 'getPostageMethods', {}, getPostageMethodsCallback);
  sendQueuedAjaxMessages();
}

function getPostageMethodsCallback(results)
{
  document.getElementById('postage_methods').innerHTML = results.postageMethodsHTML;
}

function postageInsuranceChanged(element){
  PostageMethodEl = document.getElementById('postage_method');
  postageMethodDidChange(PostageMethodEl);
}

function postageMethodDidChange(element)
{
  PostageInsurance = document.getElementById('cart-insurance');
  var include_insurance = false;
  
  if(PostageInsurance.checked)
    include_insurance = true;
    
  beginAddingAjaxMessagesToQueue();
  sendAjaxMessage('Cart', 'setPostageInsurance', {insurance:include_insurance});
  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;
  carttotalEl = document.getElementById('cart-checkout-total');
  carttotalEl.innerHTML = results.cartTotal;
  
  var elementsToFlash = [freightEl, totalEl, carttotalEl];
  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;
}

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);
  }
  
  freightEl = document.getElementById('cart-edit-freight-total');
  freightEl.innerHTML = results.freightTotal;
  totalEl = document.getElementById('cart-edit-cart-total');
  totalEl.innerHTML = results.cartTotal;
  carttotalEl = document.getElementById('cart-checkout-total');
  carttotalEl.innerHTML = results.cartTotal;
  
  elementsToFlash.push(carttotalEl);
  elementsToFlash.push(freightEl);
  elementsToFlash.push(totalEl);
  flashElements(elementsToFlash);
}

function validatePaymentMethods()
{
  if (
    document.getElementById('payment_method_Paypal').checked == false &&
    document.getElementById('payment_method_Bank_Transfer').checked == false &&
    document.getElementById('payment_method_Bank_Cheque_or_Postal_Order').checked == false &&
    document.getElementById('payment_method_Phone').checked == false &&
    document.getElementById('payment_method_Credit_Card_via_National_Australia_Bank').checked == false
  ) return 'Please select a payment method.';

  return false;
}

function ByID(id) {
  if (!document.getElementById) return false;
  return document.getElementById(id);
}

function SelectIndexByID(id) {
  s=ByID(id); if (!s) return false;
  if(s.options.length==0 || !s.options.length > s.options.selectedIndex) return false;
  return s.options[s.options.selectedIndex].value;
}

/* Cart Related Functions   */

function paymentMethodOnChange()
{ 
  ByID('card-details').style.display = (ByID('payment_method_Credit_Card').checked) ? 'block' : 'none';
  ByID('card-details').visible = (ByID('payment_method_Credit_Card').checked) ? true : false;
  
 }

function validate_credit_card_details(){
  var err = '';
  var error_string = "Please fill in the ";
  if(ByID('payment_method_Credit_Card').checked){
    if (SelectIndexByID('cc_type') == '') err = err + 'Please choose a Credit Card Type\n' ;
    if (ByID('cc_name').value == '') err = err + error_string + 'Credit Card Name\n' ;
    if (ByID('cc_number').value == '') err = err + error_string + 'Credit Card Number\n' ;
    if (ByID('cc_csv').value == '') err = err + error_string + 'Security Code\n' ;
  }
  
  if (err != '')
    return err;
    
  return 0;
}

