﻿//current culture on page
var currentCulture = "";
//current domain on page
var currentDomain = "";
//translated texts
var translateDictionary = {};
// shopNotBuyable status
var shopNotBuyable = false;

$(document).ready(function () {

    /* Add to cart */
    initAddToCart();
    initAddToShoppingList();
    initLoginBox();

    //set global variables
    currentCulture = $(".currentCulture").attr("value");

    if ($(".currentDomain").attr("value") == "") {
        currentDomain = location.protocol + location.host;
    }
    else {
        currentDomain = $(".currentDomain").attr("value");
    }

    if ($(".shopNotBuyable").attr("value") == "True") {
        shopNotBuyable = true;
    }
    //get translated texts and parse to json
    translateDictionarystring = $(".translateDictionary").attr("value");
    translateDictionary = jQuery.parseJSON(translateDictionarystring);

    initCart();

    // Form funtions
    $(".ExtendedFormOptions").change(function (event, ui) {
        UpdateFormFields();
    });

    UpdateFormFields();
});

function UpdateFormFields() {
    var options = $(".ExtendedFormOptions");

    if (options.length > 0) {
        var extFormFields = $(".extended-form-fields");

        extFormFields.hide();
        $(".extended-form-fields-" + options[0].selectedIndex).show();

        extFormFields.filter(":hidden").find(".form-item > span").each(function () {
            ValidatorEnable(this, false);
            $(this).hide();
        });

        extFormFields.filter(":visible").find(".form-item > span").each(function () {
            ValidatorEnable(this, true);
            $(this).hide();
        });
    }
}

function MakeAjaxRequest(url, ajaxParameters, callbackFunction, callbackParameters, errorFunction, errorParameters) {
    var ajaxRequest = $.ajax({
        type: "POST",
        data: ajaxParameters,
        url: url,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            callbackFunction(data, callbackParameters);
        },
        error: function (error) {
            if (errorFunction) {
                errorFunction(error, errorParameters);
            }
        }
    });

}

// initialize click event on add to cart
function initAddToCart() {
    //add to cart functionality
    $(".add-product a").live("click", function () {
        $(this).addClass("loading");

        // GA: Item is added to shopping cart
        if ($(this).hasClass("topp3")) {
            _gaq.push(['_trackEvent', 'CTA', 'Shopping cart', 'Item added Topp3']);
        } else {
            _gaq.push(['_trackEvent', 'CTA', 'Shopping cart', 'Item added']);
        }

        addToCart(this);
        return false;
    });

    
}

// initialize click event on add to cart
function initAddToShoppingList() {
    //add to shopping list functionality
    $(".shopping-list a").live("click", function () {
        $(this).addClass("loading");

        // GA: Item is added to shopping list
        if ($(this).hasClass("topp3")) {
            _gaq.push(['_trackEvent', 'CTA', 'Shopping list', 'Item added Topp3']);
        } else {
            _gaq.push(['_trackEvent', 'CTA', 'Shopping list', 'Item added']);
        }
        addToCart(this);

        return false;
    });
}

// function to initialize cart items
function initCart() {
    if ($('#cart').length != 0) {
        var url = currentDomain + "Services/Duni/Cart.asmx/GetCart";
        var parameters = "{culture: '" + currentCulture + "'}";
        var callbackFunction = UpdateProductsInCart;
        var errorFunction = initCartError;
        MakeAjaxRequest(url, parameters, callbackFunction, null, errorFunction, null);
    }
}

function initCartError(data) {

}

// function to call webservice addToCart
function addToCart(caller) {
    var id = $(caller).parent().attr('id').toString();
    var amount = "1";
    $amount = $(caller).parent().siblings(".item-count");
    if ($amount.attr("value") != null) {
        amount = $amount.attr("value");
    }
    var url = currentDomain + "Services/Duni/Cart.asmx/AddToCart";
    var parameters = "{productId:'" + id + "', quantity:'" + amount + "', culture: '" + currentCulture + "'}";
    var callbackFunction = HandleProductsInCart;
    var callbackParameters = caller;
    var errorFunction = addToCartError;
    MakeAjaxRequest(url, parameters, callbackFunction, callbackParameters, errorFunction, callbackParameters);
}

// function to call webservice addToCart
function addProductsToCart(productList, caller) {
    var url = currentDomain + "Services/Duni/Cart.asmx/AddProductsToCart";
    var parameters = JSON.stringify({ productIdList: productList, culture: currentCulture });
    var callbackFunction = HandleProductsInCart;
    var callbackParameters = caller;
    var errorFunction = addToCartError;
    MakeAjaxRequest(url, parameters, callbackFunction, callbackParameters, errorFunction, callbackParameters);
}

// callback function for addToCart
function HandleProductsInCart(data, addToCartButton) {
    if (data.d != null) {
        //show tooltip
        if (addToCartButton != null) {
            $(addToCartButton).removeClass("loading");
            if ($(addToCartButton).is(":visible"))
                showTooltip(addToCartButton, "success");
        }
        else {
            sendFlashResponse(true);
        }

        if (!shopNotBuyable) {
            // set last added item in cart
            var addedItemHTML =
		    "<h3>" + translateDictionary.LastItemInCartLabel + "</h3>" +
		    "<div class='product'>" +
			    "<img src='" + data.d.LastModifiedItem.Product.ImageUrl + "'/>" +
			    "<div class='text'>" +
				    "<h4>" + data.d.LastModifiedItem.Product.ProductName + "</h4>" +
				    "<p>" + data.d.LastModifiedItem.Product.ProductSize + "</p>" +
				    "<p>" + data.d.LastModifiedItem.Quantity + " " + translateDictionary.LastItemInCarItemPriceDelimiter + " " + data.d.LastModifiedItem.Product.ProductPrice + "</p>" +
			    "</div>" +
		    "</div>" +
		    "<p class='price'>" + translateDictionary.TotalCartAmountPreText + "<strong>" + data.d.FormattedTotalAmountIncShipHandlingVat + "</strong></p>";

            $("#last-cart-item").html(addedItemHTML);

            // set number of items in cart
            $("#nbrItemsInCart").html(data.d.NbrItemsInCart);

            // set related products in cart
            $("#related-products").children().remove();
            if (data.d.LastModifiedItem.Product.RelatedProducts != null && data.d.LastModifiedItem.Product.RelatedProducts.length > 0) {
                $("#related-products").append("<h3>" + translateDictionary.YouMayAlsoLike + "</h3>");
                // add translated texts to json object for access in template
                for (var i = 0; i < data.d.LastModifiedItem.Product.RelatedProducts.length; i++) {
                    data.d.LastModifiedItem.Product.RelatedProducts[i].AddToCart = translateDictionary.AddToCart;
                    data.d.LastModifiedItem.Product.RelatedProducts[i].Quality = translateDictionary.Quality;
                    data.d.LastModifiedItem.Product.RelatedProducts[i].AddProductNoECom = translateDictionary.AddProductNoECom;
                    data.d.LastModifiedItem.Product.RelatedProducts[i].OutOfStock = translateDictionary.OutOfStock;
                    data.d.LastModifiedItem.Product.RelatedProducts[i].NotAvailable = translateDictionary.NotAvailable;
                }

                $.template("relatedProductTemplateLoaded", relatedProductTemplate);
                $.tmpl("relatedProductTemplateLoaded", data.d.LastModifiedItem.Product.RelatedProducts).appendTo("#related-products");
            }



            // open cart if its closed
            $parent = $("#cart").children(".content-toggler");
            $element_to_toggle = $("#additional-cart-info");
            $element_to_toggle_parent = $element_to_toggle.parent();
            if (!$element_to_toggle_parent.hasClass("open")) {
                $element_to_toggle_parent.addClass("open");
                $parent.find("a.open").hide();
                $parent.find("a.close").show();
                $element_to_toggle.slideDown(500, "easeInOutQuart");
            }
        }
        else {
            $("#nbrItemsInShoppingList").html(data.d.NbrItemsInCart);
        }
    }

}


function UpdateProductsInCart(data) {
    if (data.d != null) {
        if (!shopNotBuyable) {

            if (data.d.LastModifiedItem != null) {
                // set last added item in cart
                var addedItemHTML =
			    "<h3>" + translateDictionary.LastItemInCartLabel + "</h3>" +
			    "<div class='product'>" +
				    "<img src='" + data.d.LastModifiedItem.Product.ImageUrl + "'/>" +
				    "<div class='text'>" +
					    "<h4>" + data.d.LastModifiedItem.Product.ProductName + "</h4>" +
					    "<p>" + data.d.LastModifiedItem.Product.ProductSize + "</p>" +
					    "<p>" + data.d.LastModifiedItem.Quantity + translateDictionary.LastItemInCarItemPriceDelimiter + data.d.LastModifiedItem.Product.ProductPrice + "</p>" +
				    "</div>" +
			    "</div>" +
			    "<p class='price'>" + translateDictionary.TotalCartAmountPreText + "<strong>" + data.d.FormattedTotalAmountIncShipHandlingVat + "</strong></p>";

                $("#last-cart-item").html(addedItemHTML);



                // set related products in cart
                $("#related-products").children().remove();
                if (data.d.LastModifiedItem.Product.RelatedProducts != null && data.d.LastModifiedItem.Product.RelatedProducts.length > 0) {
                    $("#related-products").append("<h3>" + translateDictionary.YouMayAlsoLike + "</h3>");
                    // add translated texts to json object for access in template
                    for (var i = 0; i < data.d.LastModifiedItem.Product.RelatedProducts.length; i++) {
                        data.d.LastModifiedItem.Product.RelatedProducts[i].AddToCart = translateDictionary.AddToCart;
                        data.d.LastModifiedItem.Product.RelatedProducts[i].Quality = translateDictionary.Quality;
                        data.d.LastModifiedItem.Product.RelatedProducts[i].AddProductNoECom = translateDictionary.AddProductNoECom;
                        data.d.LastModifiedItem.Product.RelatedProducts[i].OutOfStock = translateDictionary.OutOfStock;
                        data.d.LastModifiedItem.Product.RelatedProducts[i].NotAvailable = translateDictionary.NotAvailable;
                    }

                    $.template("relatedProductTemplateLoaded", relatedProductTemplate);
                    $.tmpl("relatedProductTemplateLoaded", data.d.LastModifiedItem.Product.RelatedProducts).appendTo("#related-products");
                }

            }

            $("#nbrItemsInCart").html(data.d.NbrItemsInCart);

        }
        else {
            $("#nbrItemsInShoppingList").html(data.d.NbrItemsInCart);
        }

    }

}

// error function for addToCart 
function addToCartError(errorMessage, addToCartButton) {
    //show tooltip
    if (addToCartButton != null) {
        $(addToCartButton).removeClass("loading");
        if ($(addToCartButton).is(":visible"))
            showTooltip(addToCartButton, "fail");
    }
    // else send error response to flash
    else {
        sendFlashResponse(false, errorMessage);
    }
}

//function to send response to flash after add to cart in flash
function sendFlashResponse(result) {
    var swf;
    if (navigator.appName.indexOf("Microsoft") != -1) {
        swf = window["slideshow-flash"];
    }
    else {
        swf = document["slideshow-flash"];
    }
    if (swf != null) {
        swf.sendCartResponseToFlash(result);
    }
}


function initLoginBox() {
    if (jQuery().colorbox) {
        $("#login-user2").colorbox({ inline: true, href: "#login-register", opacity: 0.5, initialWidth: 0, initialHeight: 0, width: 630, current: false });

        $(".myAccountLinkRedirect").live("click", function () {
            $(".redirectLink").attr("value", $(this).attr("href"));
            $.colorbox({ inline: true, href: "#login-register", opacity: 0.5, initialWidth: 0, initialHeight: 0, width: 630, current: false });
            return false;
        });

        $(".popup-content").live("keyup", function (e) {
            // Enter key was pressed
            if (e.which === 13) {
                e.preventDefault();
                $(this).blur();

                // Simulate login-button click
                if ($("#login-popup2").is(":visible")) {
                    $("#login-popup2").focus().click();
                }

                // Simulate register-button click
                if ($("#registerbutton").is(":visible")) {
                    $("#registerbutton").focus().click();
                }
            }
        });

        $("#login-popup2").live("click", function () {
            $(".login.error-message").remove();
            if ($("#tbUserName").val() != "" && $("#tbPassword").val() != "") {
                var url = currentDomain + "Services/Duni/Common.asmx/AuthenticateUser";
                var parameters = JSON.stringify({ userName: $("#tbUserName").val(), password: $("#tbPassword").val(), rememberUser: $("#checkBoxRemember").attr("checked") });
                var callbackFunction = HandleLoginCallbackFunction;
                var errorFunction = HandleLoginErrorFunction;
                var callbackParams = $(".redirectLink").attr("value");
                MakeAjaxRequest(url, parameters, callbackFunction, callbackParams, HandleLoginErrorFunction);
            }
            else {
                HandleLoginErrorFunction();
            }
            return false;
        });


        $("#registerbutton").live("click", function () {
            $(".login.error-message").remove();
            if ($("#tbNewUserName").val() != "" && $("#tbNewPassword").val() != "" && $("#tbConfirmNewPassword").val() != "") {
                var url = currentDomain + "Services/Duni/Common.asmx/RegisterUser";
                var parameters = JSON.stringify({ userName: $("#tbNewUserName").val(), password: $("#tbNewPassword").val(), confirmPassword: $("#tbConfirmNewPassword").val(), culture: currentCulture });
                var callbackFunction = HandleRegisterCallbackFunction;
                var errorFunction = HandleRegisterErrorFunction;
                var uniqueID = "";
                MakeAjaxRequest(url, parameters, callbackFunction, uniqueID, HandleRegisterErrorFunction, uniqueID);
            }
            else {
                HandleRegisterErrorFunction();
            }
            return false;
        });

        $("#forgotPasswordLink").live("click", function () {
            $.colorbox({ inline: true, href: "#forgot-password", opacity: 0.5, initialWidth: 0, initialHeight: 0, width: 630, current: false });
            return false;
        });

        $("#forgotPasswordButton").live("click", function () {
            $(".login.error-message").remove();

            if ($("#forgotPasswordEmail").val() != "") {
                var url = currentDomain + "Services/Duni/Common.asmx/ResetPassword";
                var parameters = JSON.stringify({ email: $("#forgotPasswordEmail").val(), culture: currentCulture });
                var callbackFunction = HandleResetCallbackFunction;
                var errorFunction = HandleResetErrorFunction;
                MakeAjaxRequest(url, parameters, callbackFunction, null, errorFunction);
            }
            else {
                HandleResetErrorFunction();
            }
            return false;
        });

        if ($(".redirectLink").attr("value") != undefined && $(".redirectLink").attr("value") != "") {
            $.colorbox({ inline: true, href: "#login-register", opacity: 0.5, initialWidth: 0, initialHeight: 0, width: 630, current: false });
        }

    }
}

function HandleLoginCallbackFunction(data, redirectUrl) {
    if (data.d == true) {
        if (redirectUrl != "") {
            window.location.href = redirectUrl;
        }
        else {
            window.location.reload();
        }

    }
    else {
        $("#loginSection").before("<p class='login error-message'>" + translateDictionary.usernotloggedin + "</p>");

        if ($("#tbUserName").val() == "") {
            $("#tbUserName").after("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
        }
        $("#tbUserName").attr("value", $("#tbUserName").val());

        if ($("#tbPassword").val() == "") {
            $("#tbPassword").after("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
        }
        $("#tbPassword").attr("value", $("#tbPassword").val());

        $.colorbox.resize();
    }
}

function HandleLoginErrorFunction(data) {
    $("#loginSection").before("<p class='login error-message'>" + translateDictionary.usernotloggedin + "</p>");

    if ($("#tbUserName").val() == "") {
        $("#tbUserName").after("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
    }
    $("#tbUserName").attr("value", $("#tbUserName").val());

    if ($("#tbPassword").val() == "") {
        $("#tbPassword").after("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
    }
    $("#tbPassword").attr("value", $("#tbPassword").val());

    $.colorbox.resize();
}

function HandleRegisterCallbackFunction(data, parameters) {
    if (data.d == "") {
        $.colorbox({ inline: true, href: "#account-confirmation", opacity: 0.5, initialWidth: 0, initialHeight: 0, width: 630, current: false });
        return false;
    }
    else {
        $("#emailSection").before("<p class='login error-message'>" + data.d + "</p>");
        
        if ($("#tbNewUserName").val() == "") {
            $("#emailSection").append("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
        }
        $("#tbNewUserName").attr("value", $("#tbNewUserName").val());

        if ($("#tbNewPassword").val() == "") {
            $("#passwordSection").append("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
        }
        $("#tbNewPassword").attr("value", $("#tbNewPassword").val());

        if ($("#tbConfirmNewPassword").val() == "") {
            $("#repeatPasswordSection").append("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
        }
        $("#tbConfirmNewPassword").attr("value", $("#tbConfirmNewPassword").val());

        $.colorbox.resize();

    }
}

function HandleRegisterErrorFunction(data, parameters) {

    $("#emailSection").before("<p class='login error-message'>" + translateDictionary.usernotcreated + "</p>");
    if ($("#tbNewUserName").val() == "") {
        $("#emailSection").append("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
    }
    $("#tbNewUserName").attr("value", $("#tbNewUserName").val());

    if ($("#tbNewPassword").val() == "") {
        $("#passwordSection").append("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
    }
    $("#tbNewPassword").attr("value", $("#tbNewPassword").val());

    if ($("#tbConfirmNewPassword").val() == "") {
        $("#repeatPasswordSection").append("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
    }
    $("#tbConfirmNewPassword").attr("value", $("#tbConfirmNewPassword").val());

    $.colorbox.resize();
}

function HandleResetCallbackFunction(data, parameters) {
    if (data.d == true) {
        $("#forgotPasswordSection").hide();
        $("#forgotPasswordConfirmation").show();

        $.colorbox.resize();
    }
    else {
        $("#emailSection").before("<p class='login error-message'>" + translateDictionary.resetError + "</p>");

        $("#emailSection").append("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
        $("#forgotPasswordEmail").attr("value", "");

        $.colorbox.resize();
    }
}

function HandleResetErrorFunction(data, parameters) {
    $("#emailSection").before("<p class='login error-message'>" + translateDictionary.resetError + "</p>");

    $("#emailSection").append("<p class='login error-message'>" + translateDictionary.pleasefillin + "</p>");
    $("#forgotPasswordEmail").attr("value", "");

    $.colorbox.resize();
}


