﻿
App = function () {

    /* Private */

    /* Properties */

    var cmp = {};





    /* Defaults */

    TVI.debug = true;





    /* Methods */

    var init = function () {

        /* Constructor */

        $(window).load(function () {
            if ($('.cycle').length != 0) {
                $('.cycle').cycle({ timeout: 1000 });
            }
        });

        $('#nav_gallery').click(function () {

            $(this).next('UL').slideToggle('fast');

            return false;

        });

        $('.newsletter').click(function () {

            var container = $(this).parent();
            var form = $('#newsletterForm');

            if (form.is(':visible')) {

                form.slideUp(300, function () {

                    container.animate({
                        width: 90
                    }, 300);

                });
            }
            else {
                container.animate({

                    width: 205

                }, 300, function () {

                    $('#newsletterForm').slideDown(300);

                });
            }

            return false;

        });

        $('#basketCaller').click(function () {

            var basket = $('#basket');
            var items = $('.basketContents');

            if (items.is(':visible')) {

                items.slideUp(300, function () {

                    basket.animate({

                        width: 105

                    }, 200);

                });

            } else {

                basket.animate({

                    width: 150

                }, 200, function () {

                    items.slideDown(300);

                });

            }

            return false;

        });

        //Mini basket delete handler
        $('.basketDelete').live('click', function () {

            basketDelete($(this).parents('.basketItem').attr('data-basketitemid'));

            return false;

        });

        //Mini basket refresh handler
        $('.basketRefresh').live('click', function () {

            refreshBasket($(this).parents('.basketItem').attr('data-basketitemid'), $(this).prev('INPUT').val());

            return false;

        });

        //Basket page delete handler
        $('.basketPageItem .delete').live('click', function () {

            basketDelete($(this).parents('.basketPageItem').attr('data-basketitemid'));

            return false;

        });

        //Basket page refresh handler
        $('.basketPageItem .refresh').live('click', function () {

            refreshBasket($(this).parents('.basketPageItem').attr('data-basketitemid'), $(this).prev('INPUT').val());

            return false;

        });

        //Address Delete handler
        $('.addressContainer .delete').live('click', function () {

            var container = $(this).parents('.addressContainer');
            var addressID = container.attr('data-addressid');

            TVI.ajax({

                url: TVI.handlers + 'App.Account.aspx/deleteAddress',
                data: { addressID: addressID },
                success: function (d) {

                    container.animate({

                        left: -620

                    }, function () {

                        container.slideUp();

                    });

                }

            });

            return false;

        });

        $('.sideBarNewsletterCaller').click(function () {

            $('#sideBarNewsletterForm').slideToggle('fast');

            return false;

        });

        $('.login').click(function () {

            cmp.redirect = '';

            window.location.href = "/login.aspx";

            return false;

        });

        cmp.newsletterForm = new TVI.Form({

            ID: 'newsletterForm',
            url: TVI.handlers + 'App.Contact.aspx/subscribeToNewsletter',
            success: function () {

                this.success();

            }

        });

        if ($('#sideBarNewsletterForm').length != 0) {
            cmp.sideBarNewsletterForm = new TVI.Form({

                ID: 'sideBarNewsletterForm',
                url: TVI.handlers + 'App.Contact.aspx/subscribeToNewsletter',
                success: function () {

                    this.success();

                }

            });
        }

    };

    var menu = function (name) {
        TVI.ready(function () {

            $('#nav_' + name).addClass('selected');

        });
    };

    var galleryMenu = function (name) {
        TVI.ready(function () {

            $('#galleryNav_' + name).addClass('selected');
            $('.subNav').show();

        });
    };

    var rightMenu = function (name) {
        TVI.ready(function () {

            $('#rightNav_' + name).addClass('selected');

        });
    };

    function basketDelete(itemID) {

        var miniBasketContainer = $('.basketItem[data-basketitemid="' + itemID + '"]');
        var basketPageContainer = $('.basketPageItem[data-basketitemid="' + itemID + '"]');
        var splitter = basketPageContainer.next('.splitter');

        TVI.ajax({

            url: TVI.handlers + 'App.Product.aspx/deleteFromBasket',
            data: { basketItemID: itemID },
            success: function (d) {

                $('.basketSubtotal').html('&pound' + d.basketSubtotal);
                $('.basketPostage').html('&pound' + d.basketPostage);
                $('.basketDiscount').html('&pound' + d.basketDiscount);
                $('.basketTotalPrice').html('&pound' + d.basketTotal);

                $('.basketCount').html(d.basketCount);

                miniBasketContainer.animate({

                    left: -150

                }, function () {

                    miniBasketContainer.slideUp(function () { miniBasketContainer.remove(); });

                });

                if ($('.basketPageItem').length > 0) {

                    basketPageContainer.animate({

                        left: -620

                    }, function () {

                        basketPageContainer.slideUp(function () { basketPageContainer.remove(); });
                        splitter.slideUp(function () { splitter.remove(); });

                    });

                }

            }

        });

        return false;

    }

    function refreshBasket(itemID, quantity) {

        var miniBasketContainer = $('.basketItem[data-basketitemid="' + itemID + '"]');
        var basketPageContainer = $('.basketPageItem[data-basketitemid="' + itemID + '"]');
        var splitter = basketPageContainer.next('.splitter');

        TVI.ajax({

            url: TVI.handlers + 'App.Product.aspx/updateBasketItem',
            data: { basketItemID: itemID, quantity: quantity },
            success: function (d) {

                var content = '' +
                    '{for r in rows}' +
                        '<div class="basketItem sansSerif" data-basketitemid="${r.ID}">' +
                            '<div class="imageContainer">' +
                                '<a href="${r.Url}"><img src="${r.Image}" /></a>' +
                            '</div>' +
                            '<div class="itemDetails">' +
                                '<a href="${r.Url}" class="title">${r.Name}</a>' +
                                '<span class="price">&pound;${r.Price}</span>' +
                            '</div>' +
                            '<div class="itemButtons">' +
                                '<span class="x">x</span>' +
                                '<input type="text" value="${r.Quantity}" />' +
                                '<a href="#" class="basketRefresh"></a>' +
                                '<a href="#" class="basketDelete"></a>' +
                            '</div>' +
                        '</div>' +
                    '{/for}' +
                    '<div class="basketTotal">' +
                        '<div class="text">' +
                            '<span class="title">Total</span>' +
                            '<span class="price basketSubtotal">&pound;' + d.basketSubtotal + '</span>' +
                        '</div>' +
                        '<a href="/basket.aspx" class="redLink flourish">Checkout</a>' +
                    '</div>';

                $('.basketContents').html(content.process(d));
                $('.basketCount').html(d.basketCount);

                if ($('.basketPageItem').length > 0) {

                    content = '' +
                    '{for r in rows}' +
                        '<div class="basketPageItem" data-basketitemid="${r.ID}">' +
                            '<a href="${r.Url}" class="imageContainer" style="background:#fff url(${r.LargeImage}) no-repeat center;"></a>' +
                            '<div class="itemDetails">' +
                                '<div class="left">' +
                                    '<h2><a href="${r.Url}">${r.Name}</a></h2>' +
                                    '<span class="price">&pound;${r.Price}</span>' +
                                '</div>' +
                                '<div class="right">' +
                                    '<h3>Sub Total</h3>' +
                                    '<span class="price">&pound${r.SubTotal}</span>' +
                                '</div>' +
                            '</div>' +
                            '<div class="itemButtons">' +
                                '<label class="quantity">Quantity</label>' +
                                '<input class="sansSerif" type="text" value="${r.Quantity}" />' +
                                '<a href="#" class="redLink refresh">Update</a>' +
                                '<a href="#" class="redLink delete">Remove</a>' +
                            '</div>' +
                        '</div>' +
                        '<div class="splitter"></div>' +
                    '{/for}';

                    $('.basketPageContents').html(content.process(d));
                    $('.basketSubtotal').html('&pound' + d.basketSubtotal);
                    $('.basketPostage').html('&pound' + d.basketPostage);
                    $('.basketDiscount').html('&pound' + d.basketDiscount);
                    $('.basketTotalPrice').html('&pound' + d.basketTotal);

                }

            }

        });

    };


    /* Public */

    TVI.apply(cmp, {

        menu: function (name) {

            menu(name);

        },
        galleryMenu: function (name) {

            galleryMenu(name);

        },
        rightMenu: function (name) {

            rightMenu(name);

        },
        redirect: ''

    });


    TVI.ready(init);


    return cmp;


} ();
