﻿
App.Product = function () {

    /* Private */

    /* Properties */

    var cmp = {};


    /* Defaults */


    /* Methods */

    var init = function () {

        // REVIEW RATING
        $('.ratingSelect A').click(function () {

            $(this).parent().removeClass().addClass('ratingSelect rating ' + $(this).attr('data-rating'));

            $('#addReviewForm-rating-control').val($(this).attr('data-rating').substring(4));

            return false;
        });

        // GALLERY
        // Append extra <a> tags for lightbox
        $('.gallery .thumbnail').each(function () {

            var largeImage = $(this).attr('data-largeImage');

            if (largeImage != $('.gallery .mainImgContainer A:first').attr('href')) {
                $('<a class="lightbox" rel="gallery" href="' + largeImage + '"></a>').appendTo('.gallery .mainImgContainer');
            }

        });

        $('.fancybox, .lightbox').fancybox({
            'overlayOpacity': 0.94,
            'overlayColor': '#aeaeae',
            'padding': 17
        });

        // Functionality
        $('.gallery .thumbnail').click(function () {

            // Change main image
            $('.gallery .mainImgContainer IMG').attr('src', $(this).attr('data-mainImage'));

            // Move correct href to top of stack
            $('.gallery .mainImgContainer A[href*="' + $(this).attr('data-largeImage') + '"]').attr('href', $('.gallery .mainImgContainer A:first').attr('href'));

            $('.gallery .mainImgContainer A:first').attr('href', $(this).attr('data-largeImage'));

            return false;

        });
        // TELL A FRIEND
        $('.socialSharing .tellAFriend').click(function () {
            if (!$('.socialSharing .bottom').is(":animated")) {
                $('.socialSharing .bottom').slideToggle();
            }

            return false;
        });

        var reviewForm = new TVI.Form({

            ID: 'addReviewForm',
            query: 'addReview',
            submit: function () {
                this.submit();
                reviewForm.hiddenData.productID = App.productID;
            },
            success: function () {
                TVI.ajax({

                    url: '/handlers/app.products.aspx/sendReviewToAdmins',
                    data: { 'ReviewContent': reviewForm.field('comments').val(), 'product': App.productName }
                });
                data = {};

                // Build the data

                data['productID'] = App.productID;
                data['pageNo'] = 1;

                TVI.ajax({

                    url: '/handlers/app.products.aspx/getReviews',
                    data: data,
                    responseType: 'text',
                    success: function (d) {
                        $('#reviewContainer').replaceWith(d);
                        Cufon.replace('.imageBox H2, .ratingTitle, .headingBar H2, #header .customerService, #header .loginArea .text, .homepageFeatureGallery .panel H2, .homepageQuicklinks .promo .panel, .fancyList .title');
                        $('#reviewContainer .rounded').append('<div class="tl"></div><div class="tr"></div><div class="br"></div><div class="bl"></div>');

                        $('.headingBar').each(function () {
                            var light = $(this).find('.light').outerHeight();
                            var dark = $(this).find('.dark').outerHeight();

                            if (light > dark) {
                                $(this).find('.dark').height(light);
                            }
                        });

                        $('#reviewContainer').hide();
                        $('#reviewContainer').fadeIn('fast');

                    }

                });
                $('#addReviewForm .TVI-form-fields').fadeOut('400', function () {

                    $('.TVI-form-loading').hide();

                    $('#addReviewForm .TVI-form-complete').fadeIn();
                    setTimeout(function () {

                        $('#addReviewForm .TVI-form-complete').fadeOut('400', function () {

                            $('#addReviewForm .TVI-form-fields').fadeIn();
                            $('#addReviewForm .TVI-form-submit').fadeIn();
                            reviewForm.reset();
                            $('.ratingSelect').removeClass().addClass('ratingSelect rating star0');

                        });

                    }, 2000);

                });

            }

        });

        // Add to basket
        TVI.event('.addButton:not(.specialOffers .addButton)', 'click', function (e) {

            var buttonClicked = $(this);
            var loadingIndicator = buttonClicked.parent().find('.loading');
            var originalText = $(this).text();

            // Make sure the added message disappears first (in case they add two in quick succession)
            $('#addToBasketErrors').hide();
            buttonClicked.fadeOut('fast', function () {
                loadingIndicator.fadeIn('fast');


                data = {};

                // Build the data
                data["productID"] = buttonClicked.attr('data-productID');


                // Get Quantity
                data['quantity'] = buttonClicked.parent().find('input').val();

                if (data['quantity'] == undefined) {
                    data['quantity'] = 1;
                }

                TVI.ajax({

                    url: '/handlers/app.products.aspx/addToBasket',
                    data: data,
                    success: function (d) {

                        // We get the basket back
                        $('.basket').html(d.basket);
                        loadingIndicator.fadeOut('1000', function () {
                            var addedText = data["quantity"] + ' Added';
                            if (originalText == 'Add') {
                                addedText = '&#10003;&nbsp;';
                            }
                            buttonClicked.html(addedText).removeClass('TVI-created');
                            TVI.Components.initialize();
                            if (originalText == 'Add') {
                                buttonClicked.find('span').css('font-size', '1.1em');
                            }
                            buttonClicked.fadeIn('fast');
                            setTimeout(function () {
                                buttonClicked.fadeOut('fast', function () {
                                    buttonClicked.text(originalText).removeClass('TVI-created');
                                    TVI.Components.initialize();
                                    buttonClicked.fadeIn('fast');
                                });


                            }, 1500);
                        });


                    }, failure: function (d) {

                        $('#addToBasketErrors').text('');
                        for (var i = 0; i < d.errors.length; i++) {
                            $('#addToBasketErrors').append(d.errors[i].message + "<br />");
                        }
                        $('#addToBasketErrors').show();
                        $('.loading').fadeOut('fast', function () {
                            $('.addToBasketButton').fadeIn('fast');
                        });

                    }

                });
            });
            return false;
        });

        var tellAFriendForm = new TVI.Form({
            ID: 'tellAFriendForm',
            url: '/handlers/app.products.aspx/tellAFriend',
            data: { itemID: App.productID }
        });

        TVI.event('.pagination a', 'click', function () {

            $('#reviewContainer').parent().css('min-height', $('#reviewContainer').height());
            $('#reviewContainer').fadeOut('fast', function () {
                $(this).html('<div class="loading" style="margin: auto;"></div>').show();
                $('#reviewContainer .loading').show();
            });

            data = {};

            // Build the data

            data['productID'] = App.productID;


            // Work out page no
            if ($(this).text() == 'next') {
                data['pageNo'] = App.pageNo + 1;
            }
            else if ($(this).text() == 'first') {
                data['pageNo'] = 1;
            }
            else if ($(this).text() == 'prev') {
                data['pageNo'] = App.pageNo - 1;
            }
            else if ($(this).text() == 'last') {
                data['pageNo'] = App.reviewPages;
            }
            else {
                data['pageNo'] = $(this).text();
            }

            TVI.ajax({

                url: '/handlers/app.products.aspx/getReviews',
                data: data,
                responseType: 'text',
                success: function (d) {
                    $('#reviewContainer').replaceWith(d);
                    Cufon.replace('.imageBox H2, .ratingTitle, .headingBar H2, #header .customerService, #header .loginArea .text, .homepageFeatureGallery .panel H2, .homepageQuicklinks .promo .panel, .fancyList .title');
                    $('#reviewContainer .rounded').append('<div class="tl"></div><div class="tr"></div><div class="br"></div><div class="bl"></div>');

                    $('.headingBar').each(function () {
                        var light = $(this).find('.light').outerHeight();
                        var dark = $(this).find('.dark').outerHeight();

                        if (light > dark) {
                            $(this).find('.dark').height(light);
                        }
                    });

                    $('#reviewContainer').hide();
                    $('#reviewContainer').fadeIn('fast');

                }

            });

        });


    };





    /* Public */

    TVI.apply(cmp, {

    });


    TVI.ready(init);


    return cmp;


} ();
