﻿// 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_callAjax(uri) {
	if (window.XMLHttpRequest) {
		AJAX = new XMLHttpRequest();
	} else {
		AJAX = new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (AJAX) {
		AJAX.open("GET", uri, false);
		AJAX.send(null);
		return (AJAX.responseText);
	} else {
		return ("");
	}
}

function klc_getOrderStatus(pOrderId) {

	var ts = new Date().getTime();
	return klc_callAjax("/WebSvcs/GetCartStatusForOrder.ashx?OrderId=" + pOrderId + "&ts=" + ts);
}

// 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;
}

