// $Id: basket.js 151 2007-07-11 16:47:41Z emalethan $
// Copyright 2006 Beanlogic Limited


function addToBasket(link)
{
    // get values
    var buyDiv = link.parentNode;
    var inputs = buyDiv.getElementsByTagName("input");
    var id;
    var displayId;
    var quantity;
    for(var a = 0; a < inputs.length; a++)
    {
        var input = inputs[a];
        if(input.getAttribute("name") == "id")
        {
            id = input.value;
        }
        else if(input.getAttribute("name") == "displayId")
        {
            displayId = input.value;
        }
        else if(input.getAttribute("name") == "quantity")
        {
            quantity = input.value;
        }
    }
    //alert("id = "+id+", quantity = "+quantity);

    /// send request to update cart
    new Ajax.Request("/UpdateBasket.do?action=add&id="+id+"&quantity="+quantity+"&displayId="+displayId,
    {
        onSuccess:addToBasketSuccess,
        onFailure:addToBasketFailure
    })
}
function addToBasketSuccess()
{
    showAddedMessage();
    updateBasketCount();
}
function addToBasketFailure()
{
    alert('Basket add fail');
}

var showMessageEffect;
function showAddedMessage()
{
    showMessage();
}
function showQuantityUpdatedMessage()
{
    showMessage();
}
function showMessage()
{
    if(showMessageEffect)
    {
        showMessageEffect.cancel();
    }
    showMessageEffect = Effect.Appear('ActionMessage',
    {
            duration: 0.1,
            from: 0.0,
            to: 1.0,
            afterFinish: function()
            {
                showMessageEffect = Effect.Fade('ActionMessage',
                {
                    duration: 1.4,
                    from: 1.0,
                    to: 0.0
                });
            }
    });
}

function removeFromBasket(id)
{
    /// send request to update cart
    new Ajax.Request("/UpdateBasket.do?action=update&id="+id+"&quantity=0",
    {
        onSuccess:removeFromBasketSuccess,
        onFailure:removeFromBasketFailure
    })
}
function removeFromBasketSuccess()
{
    updateBasketCount();
    basketRefresh();
}
function removeFromBasketFailure()
{
    alert('Basket remove fail');
}

function basketRefresh()
{
    if($('Basket'))
    {
        new Ajax.Updater("Basket", "/ShowBasketRefresh.do");
    }
}
function updateBasketCount()
{
    new Ajax.Updater("BasketItemCount", "/DisplayBasketCount.do");
}

function displayErrors()
{
    // todo:
}

var quantityEditInput;
function quantityEdit(input, lineItemId)
{
    quantityEditInput = input;
    quantityEditInput.lineItemId = lineItemId;
    quantityEditInput.className='live';
    quantityEditInput.focus();
    quantityEditInput.select();
}
function quantityEditNoUpdate(input)
{
    quantityEditInput = input;
}
function quantityEditKeyDown(e)
{
//    alert("key "+getKeyNumFromEvent(e));
    if(getKeyNumFromEvent(e) == 13)
    {
        // Enter key
        quantityEditFinish();
    }
    else if(getKeyNumFromEvent(e) == 38)
    {
        // Up key
        quantityEditIncrement();
    }
    else if(getKeyNumFromEvent(e) == 40)
    {
        // Down key
        quantityEditDecrement();
    }
}
function quantityEditIncrement()
{
    if(quantityEditInput)
    {
        if(quantityEditInput.value < 9999)
        {
            quantityEditInput.value = parseInt(quantityEditInput.value)+1;
        }
    }
}
function quantityEditDecrement()
{
    if(quantityEditInput)
    {
        if(quantityEditInput.value > 1)
        {
            quantityEditInput.value = parseInt(quantityEditInput.value)-1;
        }
    }
}
var updater;
function quantityEditFinish()
{
    if(quantityEditInput != null && quantityEditInput.className=='live')
    {
        /// send request to update cart
        updater = new Ajax.Updater("Basket", "/UpdateBasket.do"+
                            "?action=update"+
                            "&id="+quantityEditInput.lineItemId+
                            "&quantity="+quantityEditInput.value+
                            "&forward=showBasket",
            {
                onSuccess: function(){ quantityEditInput.className=''; quantityEditInput = null; },
                onFailure: function(){ quantityEditFailure(); },
                evalScripts: true
            }
        );
    }
}
function quantityEditFailure()
{
    alert("The quantity of an item failed to update. Please refresh your basket and try again.")
}

// Util
function getKeyFromEvent(e)
{
    return String.fromCharCode(getKeyNumFromEvent(e));
}
function getKeyNumFromEvent(e)
{
    if(window.event) // IE
    {
        return e.keyCode;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
        return e.which;
    }
    // Browser not supported
    return null;
}


