/* Cart is empty only if there is no "cart" cookie */

function quantityChanged(){
  updateCartLink();
}

function updateCartLink(){
  var item_count = itemCount(); 
  var cartLinkInnerHTML = "";
  if (item_count == 1) cartLinkInnerHTML = item_count + " item<br />in cart";
  else cartLinkInnerHTML = item_count + " items<br />in cart";
  document.getElementById("cart").innerHTML = cartLinkInnerHTML;
}

function itemCount(){
//  return getCartArray().length;
  var count = 0;
  var cartArr = getCartArray();
  if (!isNaN(cartArr[0][1])){
    for (i = 0; i < cartArr.length; i++){
      count += parseInt(cartArr[i][1]);
    }
  }
  return count;
}

function addCartValue(prodId, qty, event){
  if (!isQtyValid(qty)) return;
  if (qty == null) qty = -1;
  if (!navigator.cookieEnabled){
    alert("Your browser must be cookie enabled to add to cart. \n Please enable cookies and continue shopping");
    return;
  }
  
  
  if (!getCookieValue("cart")){    // if nothing is in the cart (no cookie is set)
    if (qty == -1) qty = 1;
    setCookie("cart",prodId+"*"+qty);
  }
  else{
    if (!productAddedAlready(prodId)){
      addItem(prodId, qty);
    }
    else increaseQty(prodId,qty);
  }
  quantityChanged();
  showAddedBox(event);
} 


function showAddedBox(event){
  addedBox = document.getElementById('added');
  var x = event.x;
  var y = event.y;
  if (!x){
    x = event.clientX;
    y = event.clientY;
  }
  if (window.pageXOffset){
    x += window.pageXOffset
    x += window.pageYOffset
  }
  else {
    x += document.documentElement.scrollLeft || document.body.scrollLeft;
    y += document.documentElement.scrollTop || document.body.scrollTop;
  }
  addedBox.style.left = (x-100)+"px";
  addedBox.style.top = (y-50)+"px";
  addedBox.style.visibility="visible";
}

function emptyCart(){
  setCookie("cart", "", -1);
  quantityChanged();
}

function deleteItem(prodId){
  if (!confirm("You are about to delete an item do you want to do that?")) return;
  var tempCart = getCartArray();
  for (i = 0; i < tempCart.length; i++){
    if (tempCart[i][0] == prodId){
      tempCart.splice(i,1);
      if (!tempCart.length <1){
        reSetCookie(tempCart);
        quantityChanged();
      }
      else (emptyCart());
      break;
    }
  }
}

function replaceItemQty(prodId, newQty){
  var tempCart = getCartArray();
  for (i = 0; i < tempCart.length; i++){
    if (tempCart[i][0] == prodId){
      tempCart[i][1] = newQty;
      reSetCookie(tempCart);
      break;
    }
  }
}

function increaseQty(prodId,qty){
  var tempCart = getCartArray();
  for (i = 0; i < tempCart.length; i++){
    if (tempCart[i][0] == prodId){
      if (qty == -1) tempCart[i][1] = parseInt(tempCart[i][1]) + 1;
      else tempCart[i][1] = parseInt(tempCart[i][1]) + parseInt(qty);
      break;
    }
  }
  reSetCookie(tempCart);
}

function addItem(prodId, qty){
  if (qty < 0) qty = 1;
  var cookieStr = getCookieValue("cart");
  cookieStr += "@"+prodId + "*" + qty;
  setCookie("cart",cookieStr, 1);
}

function reSetCookie(newCartArray){

    // First checks if any qty is 0
    // If there are 0 quantites: deletes that array element
  for (i = 0; i < newCartArray.length; i++){
    if (parseInt(newCartArray[i][1]) == 0){
      newCartArray.splice(i,1);
    }
  }
  
    // Checks if the cart now is empty and if it is:
    //    deletes the cookie.
  if (newCartArray.length < 1){
    emptyCart();
    return;
  }
  
    // Creates a string from the two dimensional array
    //    and send the string to reSet the cookie.
  for (i = 0; i < newCartArray.length; i++){
    newCartArray[i] = newCartArray[i].join("*");
  }
  setCookie("cart",newCartArray.join("@"),1);
}

function productAddedAlready(prodId){
  cartArray = getCartArray();
  var b = false;
  for (i = 0; i < cartArray.length; i++){
    if (cartArray[i][0] == prodId){ b = true; break;}
  }
  return b;
}


    // The multidimentional cart array has one cart array item
    // in each element: array[x][0] = id, array[x][1] = quantity
function getCartArray(){
  var cartArr = new Array();
  cartStr = getCookieValue("cart");
  var tempArr = cartStr.split("@");
  for (i = 0; i < tempArr.length; i++){
    cartArr.push(tempArr[i].split("*"));
  }
  return cartArr;
}

function isQtyValid(qty){
  b = true, msg = "";
  if (qty == ""){
    b = false;
    msg = "The quantity box cannot be empty.";
  }
  else if (isNaN(qty)){
    b = false;
    msg = "The quantity box must only contain a number.";
  }
  if (!b) alert(msg);
  return b;
}

function getCookieValue(name){
  if (document.cookie.length>0){
    c_start=document.cookie.indexOf(name+"=");
    if (c_start!=-1){ 
      c_start=c_start + (name.length+1); 
      c_end=document.cookie.indexOf(";",c_start);
      if (c_end==-1) c_end=document.cookie.length;
      return unescape(document.cookie.substring(c_start,c_end));
    } 
  }
  return "";
}

function setCookie(name,value,expDays){
  if (!expDays) expDays = 1;
  var exdate=new Date();
  exdate.setDate(exdate.getDate()+expDays);
  document.cookie = name + "=" +escape(value)+((expDays==null) ? "" : ";expires="+exdate.toGMTString())+";path=/";
}
