﻿// constants used by the cart
var k_klc_cookie_name = "klc4_cart_data";
var k_klc_cart_orderid_delimiter = "^^";
var k_klc_cart_delimiter = "||";
var k_klc_cart_item_delimiter = "::";
var k_klc_cart_domain = ".kidlandia.com";

//alert("deleting cart data");
//klc_clearCartItems("unknown");
//klc_clearCartItems("jhainley");
// debug convenience functions
// show's all cookie data
function klc_showCookieData(){
    //alert("cookie data : " + document.cookie);
}

function klc_checkCartOrderStatus(pUserId){
    var orderId = klc_getCartOrderId(pUserId);
    
    // if the cart's order id is zero then we don't need to do anymore
    if(orderId == 0){
        return;
    }

    var orderStatus = klc_getOrderStatus(orderId);
    
    if(orderStatus == "completed"){
        klc_setCartOrderId(pUserId, 0);
        klc_clearCartItems(pUserId);
        //klc_showCartData(pUserId);        
    }
}

function klc_getOrderStatus(pOrderId){

  var ts = new Date().getTime();
  if (window.XMLHttpRequest) {              
    AJAX=new XMLHttpRequest();              
  } else {                                  
    AJAX=new ActiveXObject("Microsoft.XMLHTTP");
  }
  if (AJAX) {
     AJAX.open("GET", "WebSvcs/GetCartStatusForOrder.ashx?OrderId=" + pOrderId + "&ts=" + ts, false);                             
     AJAX.send(null);
     return(AJAX.responseText);
  } else {
    return("");
  }                                             
}

// show's the cookie data for a specific users cart
function klc_showCartData(pUserId){
    var cartId = klc_getCartId(pUserId);
    //alert("cart data for user : " + pUserId + "\n" + klc_getCartData(cartId));
}

// clears all of the cart data out of the cookie for the user specified
function klc_clearCartItems(pUserId){
    var expires = new Date();
    expires.setUTCFullYear(expires.getUTCFullYear() + 1);

    document.cookie = klc_getCartId(pUserId) + "=; expires=" + expires.toUTCString() + "; path=/;"; // domain=" + k_klc_cart_domain;    
}

// utility function to merge the user id with the cart cookie name constant
function klc_getCartId(pUserId){
    return(k_klc_cookie_name.toUpperCase() + "_" + pUserId.toUpperCase());
}

// returns the number of items currently in the cart
function klc_getTotalItemsInCart(pUserId){
    //klc_checkCartOrderStatus(pUserId);
    var cartId  = klc_getCartId(pUserId);
    
    if(!klc_cartDataExists(cartId)){
        return(0);        
    }
    
    cartData = klc_getCartData(cartId);
    arrCartData = cartData.split(k_klc_cart_delimiter);
    
    var total = 0;

    // does the specified sku/personalizationid combo exist?
    for(j=0;j<arrCartData.length;j++){
    	if(arrCartData[j] != ""){
	        var arrItemData = arrCartData[j].split(k_klc_cart_item_delimiter);
	        total += parseInt(arrItemData[2]);
	    }
    }    
    
    if(pUserId != "unknown"){
    	total += klc_getTotalItemsInCart("unknown");
    }
    return(total);
}

// add's items to the cart, the main function to be called by the
// flash data. will only add each item to the cart one time and will
// not store quantities per the requirements
function klc_addToCart(pUserId, pSKU, pPersonalizationId) {
    klc_addQtyToCart(pUserId, pSKU, pPersonalizationId, 1);
}

function klc_addQtyToCart(pUserId, pSKU, pPersonalizationId, pQty)
{    
    klc_checkCartOrderStatus(pUserId);

    var cartId = klc_getCartId(pUserId);

    var sku = pSKU.toUpperCase();

    if(!(klc_itemExists(cartId, sku, pPersonalizationId)))
    {        
        klc_addCartItem(cartId, sku, pPersonalizationId, pQty);

        return "success";
    }
    else 
    {
        klc_updateCartItem(cartId, sku, pPersonalizationId, pQty);

        // this item already exists

        return "success";        
    }
    
}

// pulls out the cart data from the cookie and appends the new
// item to the cookie data
function klc_addCartItem(pCartId, pSKU, pPersonalizationId, pQty){
    cartData = klc_getCartData(pCartId);

    var cartOrderId = klc_getCartOrderIdByCartId(pCartId);
    if(cartData == undefined || cartData == ""){
        cartData = "";
    }
    else {
        cartData += k_klc_cart_delimiter;
    }

    cartData += pSKU + k_klc_cart_item_delimiter + pPersonalizationId + k_klc_cart_item_delimiter + pQty;

    var expires = new Date();
    expires.setUTCFullYear(expires.getUTCFullYear() + 1);
    
    document.cookie = pCartId + "=" + cartOrderId + k_klc_cart_orderid_delimiter + cartData + "; expires=" + expires.toUTCString() + "; path=/;"; // domain=" + k_klc_cart_domain;
}

// pulls out the cart data from the cookie and appends the new
// item to the cookie data
function klc_updateCartItem(pCartId, pSKU, pPersonalizationId, pQty){ 
    var newCartData = "";
    
    if(!klc_cartDataExists(pCartId)){
        return false;
    }

    orderId = klc_getCartOrderIdByCartId(pCartId);
    cartData = klc_getCartData(pCartId);

    arrCartData = cartData.split(k_klc_cart_delimiter);
    
    // does the specified sku/personalizationid combo exist?
    for(j=0;j<arrCartData.length;j++){
        arrItemData = arrCartData[j].split(k_klc_cart_item_delimiter);
        
	    if(newCartData != ""){
		    newCartData += k_klc_cart_delimiter;			
	    }

        if(arrItemData[0] == pSKU && arrItemData[1] == pPersonalizationId){
		var qty = parseInt(arrItemData[2]);
		
		qty += parseInt(pQty);
		
		newCartData += (arrItemData[0] + k_klc_cart_item_delimiter + arrItemData[1] + k_klc_cart_item_delimiter + qty);
        }
	else {
		newCartData += arrCartData[j];
	}
    }

    var expires = new Date();
    expires.setUTCFullYear(expires.getUTCFullYear() + 1);
    
    document.cookie = pCartId + "=" + orderId + k_klc_cart_orderid_delimiter + newCartData + "; expires=" + expires.toUTCString() + "; path=/;"; // domain=" + k_klc_cart_domain;
}

// retrieves the cart data for the cartid specified
function klc_getCartData(pCartId){
    if(!klc_cartDataExists(pCartId)){
        return "";
    }
    
    var cookieData = document.cookie;
    //alert(cookieData);
    arrData = cookieData.split("; ");
    //looked through all cookie data 
    for(var i=0;i<arrData.length;i++){
        arrItem = arrData[i].split("=");
        
        // does this item represent the cart data we're looking for?
        if(arrItem[0] == pCartId){
            arrCartDataElements = arrItem[1].split(k_klc_cart_orderid_delimiter);            
            return(arrCartDataElements[1]);
        }
    }
}

// retrieves the order id for the cartid specified
function klc_setCartOrderId(pUserId, pOrderId){
    var cartId = klc_getCartId(pUserId);
    
    var expires = new Date();
    expires.setUTCFullYear(expires.getUTCFullYear() + 1);
    
    var cartData = klc_getCartData(cartId);
    
    document.cookie = cartId + "=" + pOrderId + k_klc_cart_orderid_delimiter + cartData + "; expires=" + expires.toUTCString() + "; path=/;"; // domain=" + k_klc_cart_domain;
}

// retrieves the order id for the cartid specified
function klc_getCartOrderIdByCartId(pCartId){
    var cookieData = document.cookie;
    arrData = cookieData.split("; ");
    //looked through all cookie data 
    for(var i=0;i<arrData.length;i++){
        arrItem = arrData[i].split("=");
        
        // does this item represent the cart data we're looking for?
        if(arrItem[0] == pCartId){
            if(arrItem[1] == undefined){
                return("0");
            }
            arrCartDataElements = arrItem[1].split(k_klc_cart_orderid_delimiter);

            if(arrCartDataElements[0] == undefined || arrCartDataElements[0] == ""){
                return("0");
            }
            else {          
                return(arrCartDataElements[0]);
            }
        }      
    }
    return("0");
}
// retrieves the order id for the cartid specified
function klc_getCartOrderId(pUserId){
    var cartId = klc_getCartId(pUserId);
    return(klc_getCartOrderIdByCartId(cartId));
}

// determines if cart data exists for this cartid
function klc_cartDataExists(pCartId){
    var cookieData = document.cookie;

    arrData = cookieData.split("; ");
    /*
    if(arrData.length <= 1){
        alert("returning with a false");
        return false;
    }
    */
    //looked through all cookie data 
    for(var i=0;i<arrData.length;i++){
        arrItem = arrData[i].split("=");
        
        // does this item represent the cart data we're looking for?
        if(arrItem[0] == pCartId){
            if(arrItem.length <= 1){
                return false;            
            }

            arrCartDataElements = arrItem[1].split(k_klc_cart_orderid_delimiter);

            if(arrCartDataElements[1] != undefined){
                return true;
            }
        }
    }
    return false;
}

// determines if the specified sku/personalization id exists
function klc_itemExists(pCartId, pSKU, pPersonalizationId){
    if(!klc_cartDataExists(pCartId)){
        return false;
    }
    
    
    cartData = klc_getCartData(pCartId);

    arrCartData = cartData.split(k_klc_cart_delimiter);
    
    // does the specified sku/personalizationid combo exist?
    for(j=0;j<arrCartData.length;j++){
        arrItemData = arrCartData[j].split(k_klc_cart_item_delimiter);
        
        if(arrItemData[0] == pSKU && arrItemData[1] == pPersonalizationId){
            return true;
        }
    }
    return false;
}
