﻿var CTEK;

if (typeof CTEK === "undefined") {
    CTEK = {};
}

CTEK = function () {
    // OnInit
    function _init() {
    }

    return {
        // Returns alert on existing
        ClassExists: function () {
            alert('CTEK class exists!');
        },
        // Sets empty labels to text inputs
        TextboxDefaultText: function () {
            $('.emptymessage:text').each(function () {
                this.value = $(this).attr('title'); // value for empty inputs
                $(this).addClass('text-label');

                // input on focus event
                $(this).focus(function () {
                    if (this.value == $(this).attr('title')) {
                        this.value = '';
                        $(this).removeClass('text-label');
                    }
                });

                // input on blur events
                $(this).blur(function () {
                    if (this.value == '') {
                        this.value = $(this).attr('title');
                        $(this).addClass('text-label');
                    }
                });
            });
        },
        // Open dialog
        OpenDialogBox: function (elementID, destroyOnClose) {
            var destroy = destroyOnClose != undefined ? destroyOnClose : false;
            $('#' + elementID).dialog('open');
            $('.ui-widget-overlay').click(function () {
                if (destroy) {
                    $('#' + elementID).dialog('destroy');
                }
                else {
                    $('#' + elementID).dialog('close');
                }
            });
        },
        // Open dialog
        OpenPopupDialogBox: function (elementID, url) {
            $('#' + elementID).dialog('open');
            $('.ui-widget-overlay').click(function () {
                $('#' + elementID).dialog('close');
                window.location = url;
            });
        },
        // Open dialog
        OpenDialogBoxLogin: function (elementID, hideelements, showbuttons, returnUrl) {

            // Reset form
            $('#form-login').find(':input[type=text]').each(function (e) {
                if (!$(this).attr('disabled')) {
                    this.value = '';
                }
            });

            $('#form-login').find(':input[type=password]').each(function (e) {
                if (!$(this).attr('disabled')) {
                    this.value = '';
                }
            });

            // Hide this by default
            $('#register-newcustomer-form').css('display', 'none');
            $('#newpassword-form').css('display', 'none');

            if (!hideelements) {
                $('#login-div-form').css('display', 'block');
                $('#newcustomer').css('display', 'block');
            }
            else {
                $('#login-div-form').css('display', 'none');
                $('#newcustomer').css('display', 'none');
            };
            if (!showbuttons) {
                $('#selectbuttons').css('display', 'none');
            }
            else {
                $('#selectbuttons').css('display', 'block');
            };
            $('#' + elementID).dialog('open');
            $('#returnurl-hidden').val(returnUrl);
        },


        // Close dialog
        CloseDialogBox: function (elementID) {
            $('#' + elementID).dialog('close');
        },

        // Open Ajax dialog
        OpenAjaxDialogBox: function (dialogElementId, url, destroyOnClose) {
            var destroy = destroyOnClose != undefined ? destroyOnClose : false;

            $.ajax({
                type: 'GET',
                url: url,
                success: function (data) {
                    $('#' + dialogElementId).dialog('open');
                    $('#' + dialogElementId + ' .content:first-child').html(data);
                    $('.ui-widget-overlay').click(function () {
                        if (destroy) {
                            $('#' + dialogElementId).dialog('destroy');
                        }
                        else {
                            $('#' + dialogElementId).dialog('close');
                        }
                    });
                }
            });
        },
        // Close Ajax dialog
        CloseAjaxDialogBox: function (elementId, url) {
        },

        // Product list.
        LoadProductList: function (productListId, elementClass, selectedClass, url) {

            var categories = new Array();

            $('.' + elementClass).each(function () {
                if ($(this).hasClass(selectedClass)) {
                    var id = $(this).attr('id');
                    id = id.substring(id.indexOf('-') + 1);
                    categories.push(id);
                }
            });

            // use traditional settings for array to work correct for mvc.
            var oldSettings = jQuery.ajaxSettings.traditional;

            jQuery.ajaxSettings.traditional = true;

            // TODO:    validate for errors here.
            $.post(
                    url,
                    { categories: categories },
                    function (data) {
                        $('#' + productListId).html(data);
                    }
                    );

            jQuery.ajaxSettings.traditional = oldSettings;
        },
        // Accessories list.
        LoadAccessoriesList: function (productListId, elementClass, selectedClass, url) {

            var chargers = new Array();

            $('.' + elementClass).each(function () {
                if ($(this).hasClass(selectedClass)) {
                    var id = $(this).attr('id');
                    id = id.substring(id.indexOf('-') + 1);
                    chargers.push(id);
                }
            });

            // use traditional settings for array to work correct for mvc.
            var oldSettings = jQuery.ajaxSettings.traditional;

            jQuery.ajaxSettings.traditional = true;

            // TODO:    validate for errors here.
            $.post(
                    url,
                    { chargers: chargers },
                    function (data) {
                        $('#' + productListId).html(data);
                    }
                    );

            jQuery.ajaxSettings.traditional = oldSettings;
        },
        // Slider
        Slider: function (elementClass, outerClass, innerClass, leftButtonClass, rightButtonClass, duration) {
            if (duration == undefined) {
                duration = 1000;
            }
            var step = $('.' + elementClass + ':first').width();

            $('.' + innerClass).width(step * $('.' + elementClass).length);

            var inAnimation = false;
            var visibleWidth = $('.' + outerClass).width();
            var maxScroll = $('.' + innerClass).width();

            $('.' + leftButtonClass).addClass('disabled');
            $('.' + leftButtonClass).parent().addClass('disabled');

            $('.' + leftButtonClass).mouseenter(function () {
                if (!inAnimation) {
                    inAnimation = true;
                    $('.' + rightButtonClass).removeClass('disabled');
                    $('.' + rightButtonClass).parent().removeClass('disabled');
                    var ul = $('.' + innerClass);
                    var s = Math.abs(((ul).position().left / (maxScroll - visibleWidth)) * duration);
                    $(ul).animate({ left: '+=' + (-($(ul).position().left)) }, s, 'swing', function () {
                        $('.' + leftButtonClass).addClass('disabled');
                        $('.' + leftButtonClass).parent().addClass('disabled');
                    });
                }
            });


            $('.' + rightButtonClass).mouseenter(function () {
                if (!inAnimation) {
                    inAnimation = true;
                    $('.' + leftButtonClass).removeClass('disabled');
                    $('.' + leftButtonClass).parent().removeClass('disabled');
                    var ul = $('.' + innerClass);
                    var s = Math.abs(((maxScroll - visibleWidth + (ul).position().left) / (maxScroll - visibleWidth)) * duration);
                    $(ul).animate({ left: '+=' + (-(maxScroll + $(ul).position().left - visibleWidth)) }, s, 'swing', function () {
                        $('.' + rightButtonClass).addClass('disabled');
                        $('.' + rightButtonClass).parent().addClass('disabled');
                    });
                }
            });


            $('.' + leftButtonClass).mouseleave(function () {
                if (inAnimation) {
                    $('.' + innerClass).stop(true);
                    if ($(this).hasClass('disabled')) {
                        inAnimation = false;
                    }
                    else {
                        var ul = $('.' + innerClass);
                        var left = $(ul).position().left;

                        var delta = ((Math.abs(left / step) - Math.floor(Math.abs(left / step)))) * step;

                        $(ul).animate({ left: '+=' + (delta) }, (delta / (maxScroll - visibleWidth)) * duration, 'swing', function () {
                            inAnimation = false;
                        });
                    }
                }
            });

            $('.' + rightButtonClass).mouseleave(function () {
                if (inAnimation) {
                    $('.' + innerClass).stop(true);
                    if ($(this).hasClass('disabled')) {
                        inAnimation = false;
                    }
                    else {
                        var ul = $('.' + innerClass);
                        var left = $(ul).position().left;

                        var delta = (1 - (Math.abs(left / step) - Math.floor(Math.abs(left / step)))) * step;

                        $(ul).animate({ left: '+=' + (-delta) }, (delta / (maxScroll - visibleWidth)) * duration, 'swing', function () {
                            inAnimation = false;
                        });
                    }
                }
            });
        },


        //ProductImages function
        SmallImageMouseOver: function (obj, imageUrl) {
            var largeId = $(obj).attr('name') + '-large';
            var parent = $(obj).parent('.smallproductimages').parent('.productimages').children('.largeproductimages');
            if (!$(parent).children('.' + largeId).is('*')) {
                $(parent).append('<img style="display:none;" alt="" src="' + imageUrl + '" class="' + largeId + '"/>');
                $(parent).children('.' + largeId).load(function () {
                    $(parent).children('img').css('display', 'none');
                    $(parent).children('.' + largeId).css('display', 'inline-block');
                });
            }
            else {

                $(parent).children('img').css('display', 'none');
                $(parent).children('.' + largeId).css('display', 'inline-block');
            }
        },

        //ProductImages function
        XSmallImageMouseOver: function (largeobj, imageUrl) {
            $('#' + largeobj).attr('src', imageUrl);
        },

        //AddToCart Accessorie
        AddToCartById: function (productId, updatesuccedid, url, clickedbutton) {
            $(clickedbutton).attr('disabled', 'disabled');
            $.ajax
        (
            {
                type: 'POST',
                url: url,
                data: { productId: productId, updateSuccedid: updatesuccedid },
                success: function (data) {

                    if (data.ok) {
                        $('#minicartQuantity').text(data.totalQuantity);
                        $('#minicartValue').text(data.totalSum);
                        var updateSuccedid = $('#' + data.updateSuccedid);
                        updateSuccedid.fadeIn('fast')
                        updateSuccedid.delay(1500).fadeOut('slow');

                    }
                    $(clickedbutton).removeAttr('disabled');
                }
            }
        )
        },

        //AddToCart Checkout
        AddToCartByIdCheckout: function (productId, updatecarturl, updatecampaignurl, url, clickedbutton) {
            $(clickedbutton).attr('disabled', 'disabled');
            $.ajax
        (
            {
                type: 'POST',
                url: url,
                data: { productId: productId },
                success: function (data) {

                    if (data.ok) {
                        $('#minicartQuantity').text(data.totalQuantity);
                        $('#minicartValue').text(data.totalSum);
                        var updateSuccedid = $('#' + data.updateSuccedid);
                        updateSuccedid.fadeIn('fast')
                        updateSuccedid.delay(1500).fadeOut('slow');
                        //Update checkout cart
                        $.ajax
                        (
                            {
                                type: 'GET',
                                url: updatecarturl,
                                success: function (data) {
                                    $('#cart').html(data);
                                }
                            });
                        //Update checkout campaignproducts
                        $.ajax
                        (
                            {
                                type: 'GET',
                                url: updatecampaignurl,
                                success: function (data) {
                                    $('.campaign').html(data);
                                }
                            });
                    }
                    $(clickedbutton).removeAttr('disabled');
                }

            }
        )
        },
        AddToCartCheckout: function (family, updatecarturl, updatecampaignurl, url, clickedbutton) {
            $(clickedbutton).attr('disabled', 'disabled');
            $.ajax({
                type: 'POST',
                url: url,
                data: { family: family },
                success: function (data) {
                    if (data.ok) {
                        $('#minicartQuantity').text(data.totalQuantity);
                        $('#minicartValue').text(data.totalSum);
                        $('#multiPopupDiv').dialog('destroy');
                        $('#multiPopupDiv > .content').html('');
                        //Update checkout cart
                        $.ajax
                        (
                            {
                                type: 'GET',
                                url: updatecarturl,
                                success: function (data) {
                                    $('#cart').html(data);
                                }
                            });
                        //Update checkout campaignproducts
                        //                        $.ajax
                        //                        (
                        //                            {
                        //                                type: 'GET',
                        //                                url: updatecampaignurl,
                        //                                success: function (data) {
                        //                                    $('.campaign').html(data);
                        //                                }
                        //                            });

                    }
                    else {
                        $("#multiPopupDiv").dialog({
                            autoOpen: false,
                            draggable: true,
                            resizable: false,
                            width: 420,
                            modal: true,
                            open: function (type, data) {
                                $(this).parent().appendTo("body");
                            }

                        });

                        var content = $("#multiPopupDiv").children('.content');

                        content.html('');

                        for (var product in data.products) {
                            $(content).append("<a class=\"selected\" onclick=\"CTEK.AddToCart('','" + data.updateSuccedid + "','" + data.products[product].Url + "')\"><span>" + data.products[product].Name + "</span><br /><img src='" + data.products[product].Image + "' alt=''/></a>");
                        }

                        CTEK.OpenDialogBox('multiPopupDiv', true);
                    }
                    $(clickedbutton).removeAttr('disabled');
                }
            })
        },

        // Open Ajax dialog
        AddToCart: function (family, updatesuccedid, url, clickedbutton) {
            $(clickedbutton).attr('disabled', 'disabled');
            $.ajax({
                type: 'POST',
                url: url,
                data: { family: family, updateSuccedid: updatesuccedid },
                success: function (data) {
                    if (data.ok) {
                        $('#minicartQuantity').text(data.totalQuantity);
                        $('#minicartValue').text(data.totalSum);
                        $('#multiPopupDiv').dialog('destroy');
                        $('#multiPopupDiv > .content').html('');
                        var updateSuccedid = $('#' + data.updateSuccedid);
                        updateSuccedid.fadeIn('fast')
                        updateSuccedid.delay(1500).fadeOut('slow');
                    }
                    else {
                        $("#multiPopupDiv").dialog({
                            autoOpen: false,
                            draggable: true,
                            resizable: false,
                            width: 420,
                            modal: true,
                            open: function (type, data) {
                                $(this).parent().appendTo("body");
                            }

                        });

                        var content = $("#multiPopupDiv").children('.content');

                        content.html('');

                        for (var product in data.products) {
                            $(content).append("<a class=\"selected\" onclick=\"CTEK.AddToCart('','" + data.updateSuccedid + "','" + data.products[product].Url + "')\"><span>" + data.products[product].Name + "</span><br /><img src='" + data.products[product].Image + "' alt=''/></a>");
                        }

                        CTEK.OpenDialogBox('multiPopupDiv', true);
                    }
                    $(clickedbutton).removeAttr('disabled');
                }
            });
        }
    };
} ();

// Document Ready functions
$(document).ready(function () {

    // Load default text to textboxes
    if (typeof CTEK != "undefined") {
        // Set empty labels to text inputs
        CTEK.TextboxDefaultText();
    }

    // Handling login form
    if ($("#dialog-login-form").is('*')) {
        $("#dialog-login-form").dialog({
            autoOpen: false,
            draggable: true,
            resizable: false,
            width: 'auto',
            modal: true,
            open: function (type, data) {
                $(this).parent().appendTo("body");
            },
            close: function (event, ui) {
                window.location = window.location;
            }
        });
    }


    if ($("#noshoping_alert").is('*')) {
        $("#noshoping_alert").dialog({
            autoOpen: false,
            draggable: true,
            resizable: false,
            width: 'auto',
            height: 'auto',
            modal: true,
            open: function (type, data) {
                $(this).parent().appendTo("body");
            },
            close: function (event, ui) {
                var url = $('#selectedurl').val();
                window.location = url;
            }
        });
    }

    if ($("#infopopup").is('*')) {
        $("#infopopup").dialog({
            autoOpen: true,
            draggable: true,
            resizable: false,
            width: 'auto',
            height: 'auto',
            modal: true,
            open: function (type, data) {
                $(this).parent().appendTo("body");
            },
            close: function (event, ui) {
            }
        });
    }

    // Handling language form
    if ($("#change_region_language").is('*')) {
        $("#change_region_language").dialog({
            dialogClass: 'dialog-regions',
            autoOpen: false,
            draggable: true,
            resizable: false,
            width: 800,
            height: 500,
            modal: true,
            open: function (type, data) {
                $(this).parent().appendTo("body");
            }
        });
    }
    // Handling moreproductinfo
    if ($("#moreproductInfo").is('*')) {
        $("#moreproductInfo").dialog({
            dialogClass: 'dialog-moreinfo',
            autoOpen: false,
            draggable: true,
            resizable: false,
            width: 800,
            height: 500,
            modal: true,
            open: function (type, data) {
                $(this).parent().appendTo("body");
            }
        });
    }
    //Purchasing conditions
    if ($("#purchasingConditions").is('*')) {
        $("#purchasingConditions").dialog({
            dialogClass: 'dialog-conditions',
            autoOpen: false,
            draggable: true,
            resizable: false,
            width: 800,
            height: 500,
            modal: true,
            open: function (type, data) {
                $(this).parent().appendTo("body");
            }
        });
    }
    //Handling select ordercustomer form
    if ($("#dialog-selectordsercustomer-form").is('*')) {
        $("#dialog-selectordsercustomer-form").dialog({
            dialogClass: 'dialog-selectordercustomer',
            autoOpen: false,
            draggable: true,
            resizable: false,
            width: 470,
            modal: true,
            open: function (type, data) {
                $(this).parent().appendTo("body");
            }
        });
    }
    //Movie player
    if ($("#video-popup").is('*')) {
        $("#video-popup").dialog({
            dialogClass: 'dialog-movie',
            autoOpen: false,
            draggable: true,
            modal: true,
            width: 'auto',
            height: 'auto',
            open: function (event, ui) {
                $(".dialog-movie").hide();
                $(this).parent().appendTo("body");
                $(".dialog-movie").show('fast', function () {
                    $(".dialog-movie").css("position", "absolute");
                    $(".dialog-movie").css("top", ($(window).height() - $(".dialog-movie").height()) / 2 + $(window).scrollTop() + "px");
                    $(".dialog-movie").css("left", ($(window).width() - $(".dialog-movie").width()) / 2 + $(window).scrollLeft() + "px");
                });
            }
        });
    }

    //Dibs status code popup
    if ($("#statuscodepopup").is('*')) {
        $("#statuscodepopup").dialog({
            dialogClass: 'dialog-orderstatus',
            autoOpen: false,
            draggable: true,
            resizable: false,
            width: 500,
            height: 500,
            modal: true,
            open: function (type, data) {
                $(this).parent().appendTo("body");
            }
        });
    }


    $(document).ajaxStart(function () {
        if ($('#ajaxerror').is('*')) {
            $('#preloader').removeClass('error');
            $('#ajaxerror').hide();
        }
        $('#preloaderbox').show();
        $('#preloaderbox').css('z-index', '999999999');
    });

    $(document).ajaxSuccess(function () {
        $('#preloaderbox').hide();
    });

    $(document).ajaxError(function (e, xhr, settings, exception) {
        if ($('#ajaxerror').is('*')) {
            $('#preloader').addClass('error');
            $('#ajaxerror').show();
        }
    });
});

