$(document).ready(function(){
    loadCart();
    testCartActivator();
});

function testCartActivator(){
    var trigger = String(location.search);

    //if(trigger.indexOf(testCart=true) > -1){
        $(".shoppingCart-toggle").removeClass("shoppingCart-toggle");
    //}
}

var currentCart = new Array();
var itemsPer = 5;
var pageSpecs = "width=560,height=600,menubar=no,resizable=no,toolbar=no,directories=no,scrollbars=yes";
var checkoutURL = "https://ssl57.chi.us.securedata.net/proantiqueauto.com/checkout.php";
var finalCheckoutLink = "";

function loadCart(){
    var cartFromCookie = readCookie("PROcookie");

    if( cartFromCookie.length > 0 ){
        currentCart = cartFromCookie.split("#");
    }

    if(window.location.search.indexOf("clearCart=true") > -1)currentCart = new Array();

    refreshCart();
}

function addToCart(part, name, make, quantity, price){
    var start = currentCart.length;

    if( (start / itemsPer) >= 12 ){
        alert("We apologize, but we can only take orders of up to 12 items online. If you would like to purchase additional parts, please complete this order, then start a new order with the additional parts.");
        return;
    }

    if(quantity < 1 || !Number(quantity) ){
        alert("Quantity entered must be a number between 1 and 99.");
        return;
    }

    var i = 0;
    var found = -1;

    while(i < start && found == -1){
        if( currentCart[i] == part )found = i;
        else i += itemsPer;
    }

    if(found != -1){
        currentCart[found+3] = String(parseInt(Number(currentCart[found+3]) + Number(quantity)));
    }
    else{
        currentCart[start] = String(part);
        currentCart[start+1] = String(name);
        currentCart[start+2] = String(make);
        currentCart[start+3] = String(quantity);
        currentCart[start+4] = String(price);
    }

    alert(quantity + " items of " + part + " : " + name + " have been added to your cart.");
    $("#partQuantity").attr("value", "0");

    refreshCart();
}

function removeFromCart(part){
    var i = 0;
    var found = -1;

    while(i < currentCart.length && found == -1){
        if( currentCart[i] == part )found = i;
        else i += itemsPer;
    }

    if(found == -1)alert("error: could not match part for deletion.");
    else{
        currentCart.splice(found, itemsPer);
    }

    refreshCart();
}

function modQuantityCart(part, newQuantity){
    if(Number(newQuantity) == 0 || newQuantity == null){
        removeFromCart(part);
        return;
    }

    if(Number(newQuantity) < 0 || Number(newQuantity) > 99 || !Number(newQuantity)){
        alert("Sorry you must enter a value between 0 and 99.");
        return;
    }

    var i = 0;
    var found = -1;

    while(i < currentCart.length && found == -1){
        if( currentCart[i] == part )found = i;
        else i += itemsPer;
    }

    if(found == -1)alert("error: could not match part for modification.");
    else{
        currentCart[found+3] = newQuantity;
    }

    refreshCart();
}

function refreshCart(){
    var cartLength = currentCart.length / itemsPer;

    if(cartLength > 0){
        $("#shoppingCart-button div.button span").html( cartLength + " Items" );

        var cartString = '<div class="itemBar topBar"><div class="itemBar-id">Part ID</div><div class="itemBar-title">Part Name</div><div class="itemBar-quantity">#</div><div class="itemBar-price">Price</div></div>';
        var cartTotal = 0;

        for(var i = 0; i < cartLength; i++){
            var k = i*itemsPer;
            cartString += '<div class="itemBar partRow">';
            cartString += '<div class="itemBar-id">' + currentCart[k] + '</div>';
            cartString += '<div class="itemBar-title">' + currentCart[k+1] + '<span class="make">' + currentCart[k+2] + '</span></div>';
            cartString += '<div class="itemBar-quantity">' + currentCart[k+3] + '</div>';
            var itemTotal = Number(currentCart[k+4]) * Number(currentCart[k+3]);
            cartTotal += itemTotal;
            cartString += '<div class="itemBar-price">$' + itemTotal.toFixed(2) + '</div>';
            cartString += '<div class="deleteRow">Remove from cart</div></div>';
        }

        $("#cartItems").html(cartString);
        $("#totalBox span").html("$" + cartTotal.toFixed(2) + " US");
    }
    else{
        $("#shoppingCart-button div.button span").html( "0 Items" );
        $("#cartItems").html('<div class="itemBar topBar"><div class="itemBar-id">Part ID</div><div class="itemBar-title">Part Name</div><div class="itemBar-quantity">#</div><div class="itemBar-price">Price</div></div>');
        $("#totalBox span").html("$0.00 US");
    }

    activateCart();
    writeCookie();
    setCheckoutLink();
}

////////////////////////////////////////////////////////////////////////////////
// COOKIE FUNCTIONS
////////////////////////////////////////////////////////////////////////////////

function writeCookie(){
    var cookieString = "PROcookie=";

    for(var i = 0; i < currentCart.length; i++){
        if(i != 0) cookieString += "#" + currentCart[i];
        else cookieString += currentCart[i];
    }

    cookieString += "; expires=";

    var exDate = new Date();
    exDate.setDate(exDate.getDate()+7);

    cookieString += exDate.toUTCString();

    document.cookie = cookieString;
}

function readCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_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 "";
}

////////////////////////////////////////////////////////////////////////////////
// INTERNAL CALLS
////////////////////////////////////////////////////////////////////////////////

function activateCart(){
    $(".deleteRow").unbind("click");
    $(".deleteRow").click(function(){
        var partID = $(this).siblings(".itemBar-id").html();
        removeFromCart( partID );

        refreshCart();
    });

    $(".itemBar-quantity").unbind("click");
    $(".itemBar-quantity").click(function(){
        var partID = $(this).siblings(".itemBar-id").html();
        var oldQuantity = $(this).html();

        var newQuantity = prompt('Please input a new quantity for part "' + partID + '"', oldQuantity );

        modQuantityCart(partID, newQuantity);

        refreshCart();
    });

    $(".itemBar-id").unbind("click");
    $(".itemBar-id").click(function(){
        var linkPart = $(this).html();
        var linkMake = $(this).siblings("div.itemBar-title").children("span.make").html();
        
        window.open("product.php?make="+linkMake+"&part="+linkPart,"_self");
    });

    $("#addToCartButton").unbind("click");
    $("#addToCartButton").click(function(){
        if(!thisPart)alert("Cannot add to cart, unable to match part info from product page.");
        else{
            var thisQuantity = $("#partQuantity").attr("value");
            addToCart(thisPart, thisName, thisMake, thisQuantity, thisPrice);
        }
    });
}

function setCheckoutLink(){
    var cartString = "?";
    var cartLength = currentCart.length / itemsPer;

    for(var i = 0; i < cartLength; i++){
        var k = i*itemsPer;

        if(i != 0)cartString += "&";

        cartString += (currentCart[k] + "=" + currentCart[k+3] + "." + currentCart[k+2]);
    }

    finalCheckoutLink = checkoutURL + cartString;
}
