﻿var menu =
{
    calculateCost: function(id)
    {
        if (parseFloat($('servings' + id).value) > 0)
            $('cost' + id).innerHTML = 'R' + Math.round((parseFloat($('servings' + id).value) * parseFloat($('price' + id).innerHTML)) * 100) / 100;
        else
            $('cost' + id).innerHTML = '';
    },
    popupCalculateCost: function(id)
    {
        if (parseFloat($('recommendation_servings' + id).value) > 0)
            $('recommendation_cost' + id).innerHTML = 'R' + Math.round((parseFloat($('recommendation_servings' + id).value) * parseFloat($('recommendation_price' + id).value)) * 100) / 100 + ' at R ' + parseFloat($('recommendation_price' + id).value) + ' per serving';
        else
            $('recommendation_cost' + id).innerHTML = '';
    },

    removeFromBasket: function(pid)
    {
        new Ajax.Request('/parts/removeFromBasket',
        {
            method: 'post',
            parameters:
            {
                id: pid
            },

            onSuccess: function(transport)
            {

                menu.updateBasket();
                messenger.quick('Basket', 'You have successfuly removed an item from your basket.');
            },

            onComplete: function()
            {

            },

            onFailure: function()
            {
                alert('failure');
            },

            onException: function(requester, exception)
            {
                alert(exception.message);
            }
        });
    },

    dropBasket: function()
    {
        new Ajax.Request('/parts/clearBasket',
        {
            method: 'post',

            onSuccess: function(transport)
            {
                menu.updateBasket();
                messenger.quick('Basket', 'You have successfuly cleared your basket.');
            },

            onComplete: function()
            {

            },

            onFailure: function()
            {
                alert('failure');
            },

            onException: function(requester, exception)
            {
                alert(exception.message);
            }
        });
    },

    readNotice: function()
    {
        new Ajax.Request('/pages/readNotice',
        {
            method: 'get',

            onSuccess: function(transport)
            {
                if ($('notice-box') != null)
                    $('notice-box').innerHTML = '<h3>' + transport.responseText + '</h3>';
            },

            onComplete: function()
            {

            },

            onFailure: function()
            {
                alert('failure');
            },

            onException: function(requester, exception)
            {
                alert(exception.message);
            }
        });
    },

    addToBasket: function(pid, ptype)
    {
        if ($('servings' + pid).value <= 0)
        {
            if (messenger.is_messenger_open())
                messenger.update('Basket', 'Please select a serving before adding.');
            else
                messenger.open('Basket', 'Please select a serving before adding.');
        }
        else
        {
            if (messenger.is_messenger_open())
                messenger.quickUpdate('Basket', 'Adding items to your basket');
            else
                messenger.open('Basket', 'Adding items to your basket');

            new Ajax.Request('/parts/addToBasket',
        {
            method: 'post',
            parameters:
            {
                name: $('name' + pid).innerHTML,
                servings: $('servings' + pid).value,
                price: $('price' + pid).innerHTML,
                id: pid,
                type: ptype
            },

            onSuccess: function(transport)
            {
                _response = transport.responseText.evalJSON();

                if (_response.success == false)
                {
                    account.signInDialog(pid, ptype);
                }
                else
                {
                    menu.updateBasket();

                    _plural = '';
                    if (_response.servings > 1)
                        _plural = 's'

                    _header = 'You have successfuly added a ' + _response.servings + ' serving' + _plural + ' ' + _response.name + ' pack to your basket.';

                    messenger.quick('Basket', _header);
                }
            },

            onFailure: function()
            {
                messenger.quick('Basket', 'You are not currently signed in. ');
            },

            onException: function(requester, exception)
            {
                alert(exception.message);
            }
        });
        }
    },

    recommendAddToBasket: function(pid, ptype)
    {

        _name = $('recommendation_name' + pid).value;
        _servings = $('recommendation_servings' + pid).value;
        _price = $('recommendation_price' + pid).value;

        messenger.open('Basket', 'Adding items to your basket');

        new Ajax.Request('/parts/addToBasket',
        {
            method: 'post',
            parameters:
            {
                name: _name,
                servings: _servings,
                price: _price,
                id: pid,
                type: ptype
            },

            onSuccess: function(transport)
            {
                _response = transport.responseText.evalJSON();

                if (_response.success == false)
                {
                    account.signInDialog(pid, ptype);
                    return;
                }

                menu.updateBasket();

                _plural = '';
                if (_response.servings > 1)
                    _plural = 's'

                _header = 'You have successfuly added a ' + _response.servings + ' serving' + _plural + ' ' + _response.name + ' pack to your basket.';

                if (_response.recommendations > 0)
                {
                    menu.addedToBasket(pid, _header);
                }
                else
                {
                    messenger.quick('Basket', 'You are not currently signed in. ');
                }
            },

            onFailure: function()
            {
                messenger.quick('Basket', 'You are not currently signed in. ');
            },

            onException: function(requester, exception)
            {
                alert(exception.message);
            }
        });
    },

    updateBasket: function()
    {
        new Ajax.Request('/parts/updateBasket',
        {
            method: 'post',

            onSuccess: function(transport)
            {
                $('basket-box').innerHTML = transport.responseText;
                menu.updateProfile();
            },

            onComplete: function()
            {
                menu.readNotice();
            },

            onFailure: function()
            {

            },

            onException: function(requester, exception)
            {
                alert(exception.message);
            }
        });
    },

    updateProfile: function()
    {
        new Ajax.Request('/parts/updateProfile',
        {
            method: 'post',

            onSuccess: function(transport)
            {
                if ($('profile-cart') != null)
                    $('profile-cart').innerHTML = transport.responseText;
            },

            onComplete: function()
            {
                menu.readNotice();
            },

            onFailure: function()
            {

            },

            onException: function(requester, exception)
            {
                alert(exception.message);
            }
        });
    },

    clearBasket: function()
    {
        $('basket-box').innerHTML = '';
    },

    addedToBasket: function(pid, header)
    {
        new Ajax.Request('/parts/AddedToBasket',
        {
            method: 'get',
            parameters:
            {
                id: pid
            },

            onSuccess: function(transport)
            {
                messenger.update(header, transport.responseText);
            },

            onFailure: function()
            {
                messenger.update(header, '');
            },

            onException: function(requester, exception)
            {
                alert(exception.message);
            }
        });
    }
}
    

