﻿// JScript File

/* MUST IMPLEMENT custom versions of the following functions */
// SetButtonStates -client side.

// AjaxDefault.CreateOrder          -server side
// AjaxDefault.GetCartItemCount     -server side
// AjaxDefault.AddItemToOrder       -server side
// AjaxDefault.GetNewGuid           -server side
// AjaxDefault.DeleteOrder          -server side

// CreateOrder
function CreateOrder(Guid) 
{
    return AjaxDefault.CreateOrder(Guid);
}
// GetCartItemCount
function GetCartItemCount(Guid) 
{
    return AjaxDefault.GetCartItemCount(Guid);
}
// AddItemToOrder
function AddItemToOrder(Guid, InventoryItemId, Quantity, AddItemToOrder_callback) 
{
    return AjaxDefault.AddItemToOrder(Guid, InventoryItemId, Quantity, AddItemToOrder_callback);
}
// GetNewGuid
function GetNewGuid() 
{
    return AjaxDefault.GetNewGuid();
}
// DeleteOrder
function DeleteOrder(Guid) 
{
    return AjaxDefault.DeleteOrder(Guid);
}

// add an item to the current cart
var _lastAddedItem = null;
var _lastWaitImg = null;
var _lastNumSpanContainer = null;
var _lastNumSpan = null;
var _lastRemoveImg = null;

function addToCart(InventoryItemId, WaitImgId, NumberSpanId, NumberSpanContainerId, RemoveImageId, Quantity)
{
    _lastWaitImg = document.getElementById(WaitImgId);
    _lastNumSpanContainer = document.getElementById(NumberSpanContainerId);
    _lastNumSpan = document.getElementById(NumberSpanId);
    _lastRemoveImg = document.getElementById(RemoveImageId);
    
    
    // default to 1
    if (null == Quantity)
    {
        Quantity = 1
    }
    else if (Quantity < 0)
    {
        // check to make sure there is more than 0 in the cart
        var t = (_lastNumSpan.textContent != null) ? _lastNumSpan.textContent : _lastNumSpan.innerText;
        if (t.substring(0, 1) == '0')
        {
            // nothing to remove
            return;
        }
    }
    
    // _lastClickedButton = document.getElementById(ClickedButton);
    if (null != _lastWaitImg)
    {
        _lastWaitImg.style.visibility = 'visible';
    }

    SetButtonStates(false);
    _lastAddedItem = InventoryItemId;
    
    // if this function is called without a guid, that means that this is a new cart.
    // let's set up a new guid..
    // eraseCookie('hiivecartguid');
    var Guid = getGuidCookieValue();

    
    AddItemToOrder(Guid, InventoryItemId, Quantity, AddItemToOrder_callback);
}

function getGuidCookieValue()
{
    var Guid = readCookie('hiivecartguid');
    if (Guid == null || Guid == 'null' || Guid == '')
    {
        var NewGuid = GetNewGuid();
        Guid = NewGuid.value;
        // save as a cookie (valid for seven days)...
        createCookie('hiivecartguid',Guid,7);
        CreateOrder(Guid);
    }
    return Guid;
}

function resetWaitImage()
{
    if (null != _lastWaitImg)
    {
        _lastWaitImg.style.visibility = 'hidden';
    }
}

// call back for result
function AddItemToOrder_callback(result)
{
    resetWaitImage();
    SetButtonStates(true);
    // show the cart icon...
    // todo - might want to modify this to show/hide based on content count
    var cartlink = document.getElementById(_cartlinkid); // cartlinkid is registered in the masterpage
    if (null != cartlink) cartlink.style.visibility = 'visible';
    
    // check for error...
    if (result.error != null)
    {
        alert('An error occurred connecting to the AJAX server.\nPlease refresh the page and try again.');
    }
    
    _lastRemoveImg.disabled = (result.value == 0);
    var labelText = result.value + ' in cart';
    // this is for firefox/ie/whatever compatibility
    if (_lastNumSpan.textContent != null)
    {
        // firefox
        _lastNumSpan.textContent = labelText;
            
    }
    else
    {
        // ie
        _lastNumSpan.innerText = labelText;
    }
    return true;
}

function removeFromCart(InventoryItemId, WaitImgId, NumberSpanId, NumberSpanContainerId, RemoveImageId)
{
    addToCart(InventoryItemId, WaitImgId, NumberSpanId, NumberSpanContainerId, RemoveImageId, -1);
    // now check the cart count.
    // if the cart is empty, remove the icon and delete the cookie.
    var Guid = getGuidCookieValue();
    var cartItemCount = GetCartItemCount(Guid);
    if (cartItemCount != null && cartItemCount.Value == 0)
    {
        eraseCookie('hiivecartguid');
        var cartlink = document.getElementById(_cartlinkid); // cartlinkid is registered in the masterpage
        if (null != cartlink) cartlink.style.visibility = 'hidden';   
        DeleteOrder(Guid);     
    }

}


function ModifyCartTimeout()
{
    resetWaitImage();
    SetButtonStates(true);
    alert('WARNING: The request to modify your cart timed out\nPlease try again.');
    return true;
}




// handle ajax timeout
// fixes 'bug' with ajaxpro
try
{
    if (AjaxPro != null) 
    {
        AjaxPro.onTimeout = ModifyCartTimeout;
        AjaxPro.timeoutPeriod = 120 * 1000;
    }
}
catch (e)
{
}
