﻿var submitState = false;
var cartState = false;
var addState = new Array();
var buttonType = "main";
function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
function updateShoppingCart(data) {
    $("#shopping-cart-container").html(data);
}
function resetSubmitState() {
    submitState = false;
}
function resetCartState() {
    cartState = false;
}
function getStoreErrorMessageByCode (code) {
    if(!code)
        return false;
    if(code == 1) return "Felaktig verifieringskod";
    else if(code == 2) return "Felaktigt personnummer";
    else if(code == 3) return "Artikeln finns redan i varukorgen";
    else if(code == 5) return "Artikeln finns inte i varukorgen";
    else if(code == 6) document.location="/store.html?timeout=1";
    else if(code == 8) return "Ogiltigt mobilnummer";
    else if(code == 9) return "Namnet stämmer inte överens med personnumret. Rätta till och försök igen.";
    else if(code == 10) return "Namnet stämmer inte överens med personnumret. Rätta till och försök igen.";
    else if(code == 11) return "Du har redan beställt maximalt tillåtna produkter";
    else if(code == 12) return "Beställningen kan inte genomföras: Du är för ung för att handla denna produkt";
    else if(code == 17) return "Du har gjort för många försök";
    else if(code == 18) return "Du har gjort för många försök";
    else if(code == 21) return "Måste skicka ut en SMS-kod för att bekräfta att numret tillhör dig innan du kan flytta ditt nummer";
    else if(code == 23) return "Du kan inte välja faktura som betalningssätt";
    else if(code == 27) return "Detta är redan ett tele2-nummer och kan inte porteras";
    else if(code == 28) return "Ditt nummer håller redan på att flyttas till Comviq. Kontakta kundservice om du har frågor";
    else if(code == 29) return "Ditt nummer håller redan på att flyttas till Comviq. Kontakta kundservice om du har frågor";
    else 
        document.location="/store.html?error=1";
    return false;
}
function setPhoneNumberValidation(paymentMethod) {
    if($("#phoneNumber").length>0) {
        if(paymentMethod == "1") {
            $("#phoneNumber").rules("add", { required: true, regex:"^07[0-9]{8}$"} );
        } else {
            $("#phoneNumber").rules("remove");
            $("#phoneNumber").rules("add", { regex:"^07[0-9]{8}$"} );
        }
    }
}
$(document).ready(function(){
    $(".submit-button").click(function() {
        $("#formType").val("main");
        if ($(this).attr("id")=="submit-main") {
            buttonType = "main";
        } else {
            buttonType = "small";
        }
        $("#person-data-form").submit();
        return false;
    });
    $("#change-payment-button").click(function() {
        paymentInfoSwitch(true);
        return false;
    });
    $("#change-payment-abort").click(function() {
        paymentInfoSwitch(false);
        return false;
    });
    $("#change-address-button").click(function() {
        $("#formType").val("change");
        addressInfoSwitch(true);
        return false;
    });
    $("#change-address-abort").click(function() {
        $("#formType").val("main");
        addressInfoSwitch(false);
        $("#firstName").val($("#firstNameText").text());
        $("#lastName").val($("#lastNameText").text());
        $("#email").val($("#emailText").text());
        $("#phoneNumber").val($("#phoneNumberText").text());
        $("#identificationNumber").val($("#identificationNumberText").text());
        $(".adviceFieldError").text("");
        $("input.adviceFieldError").removeClass("adviceFieldError");
        $("div.txt-box-red").removeClass("txt-box-red");
        return false;
    });
    $("#change-address-submit").click(function() {
        $("#person-data-form").submit();
        return false;
    });
    $.validator.addMethod(
            "regex",
            function(value, element, regexp) {
                var re = new RegExp(regexp);
                return this.optional(element) || re.test(value);
            },
            "Felaktigt format."
    );
    $.validator.addMethod(
            "pNum",
            function(value, element, number) {
                var re = new RegExp("[19|20][0-9]{10}");
                if (!re.test(value)) {
                    return false; 
                }
                if (!isDate(value.substring(0,4), value.substring(4,6), value.substring(6,8))) {
                    return false;
                }
                return true;
            },
            "Använd formatet: YYYYMMDDXXXX"
    );
    $.validator.addMethod(
            "pNumControl",
            function(value, element, number) {
                var n;
                var checkSum = 0;
                for (var i = 2; i < 12; i++) {
                    n = parseInt(value.charAt(i));
                    if (i % 2 == 0) {
                          checkSum += (n * 2) % 9 + Math.floor(n / 9) * 9;
                    } else {
                          checkSum += n;
                    }
                }
                if (checkSum%10==0) {
                    return true; 
                } else {
                    return false;
                }
            },
            "Felaktigt personnummer"
    );
    function addressInfoSwitch(showAddress) {
        var addClassName, removeClassName;
        if (showAddress) {
            addClassName = "hidden"; removeClassName = "visible";
        } else {
            addClassName = "visible"; removeClassName = "hidden";
        }
        $("#addressInfo").removeClass(removeClassName).addClass(addClassName);
        $("#first-column-text-box").removeClass(addClassName).addClass(removeClassName);
        $("#change-address-button").removeClass(removeClassName).addClass(addClassName);
        $("#change-address-edit").removeClass(addClassName).addClass(removeClassName);
    }
    function isDate(year, month, day) {
        month = month - 1; // 0-11 in JavaScript
        var tmpDate = new Date(year,month,day); 
        
        if ( (tmpDate.getFullYear() == year) && (month == tmpDate.getMonth()) && (day == tmpDate.getDate()) )
            return true;
        else
            return false;
    }
    var validation = $("#person-data-form").validate({
        errorClass: "adviceFieldError",
        errorElement: "p",
        ignoreTitle: true,
        rules: {
            firstName: { required: true, minlength:2, maxlength: 19, regex:"^[a-zA-ZáàéèëíóúûüýåäãöøÁÀÉÈÍÏÓÚÛÜÝZÅÃÄÖØ\\-\\.:'´`ñçÇæõÕ]{2}[a-zA-ZáàéèëíóúûüýåäãöøÁÀÉÈÍÏÓÚÛÜÝZÅÃÄÖØ \\-\\.:'´`ñçÇæõÕ]{0,17}$" },
            lastName: { required: true, minlength:2, maxlength: 20, regex:"^[a-zA-ZáàéèëíóúûüýåäãöøÁÀÉÈÍÏÓÚÛÜÝZÅÃÄÖØ\\-\\.:'´`ñçÇæõÕ]{2}[a-zA-ZáàéèëíóúûüýåäãöøÁÀÉÈÍÏÓÚÛÜÝZÅÃÄÖØ \\-\\.:'´`ñçÇæõÕ]{0,18}$"  },
            identificationNumber: { required: true, digits: true, maxlength: 12, pNum:true, pNumControl:true},
            email: { required: true, maxlength: 100, email: true  },
            phoneNumber: { regex:"^07[0-9]{8}$"},
            acceptTerms: { required: true }
        },
        messages: {
            phoneNumber:{regex:"Felaktigt telefonnummer"},
            acceptTerms: {required:"Du måste godkänna villkoren."}
        },
        errorPlacement: function(error, element) {
            if ($(element).attr("name") == "paymentMethod") {
                $("#paymentMethodError").replaceWith(error);
            } else if (element.is(":radio") || element.is(":checkbox") || element.hasClass("password")) {
                element.next().next().replaceWith(error);
            } else {
                element.parent().addClass("txt-box-red");
                element.parent().next().replaceWith(error);
            }
        },
        success: function(label) {
            elementName = "#" + label.attr("for");
            element = $(elementName);
            if (element.is(":checkbox") || element.hasClass("password")) {
                //
            } else {
                element.parent().removeClass("txt-box-red");
            }
        },
        submitHandler: function(form) {
            if (!submitState) {   
                var formType = $("#formType").val();
         
                if (formType=="change") {
                    var actionUrl = "/ajax/storeValidatePersonalData.html";
                    $.ajax({
                        type: "post",
                        url: actionUrl,
                        method: "abort",
                        port: "validatePersonalData",
                        data: $("#person-data-form").serialize(),
                        dataType: "html",
                        cache: false,
                        success: function(result) {
                            try {   
                                $("#firstNameText").text($("#firstName").val());
                                $("#lastNameText").text($("#lastName").val());
                                $("#emailText").text($("#email").val());
                                $("#phoneNumberText").text($("#phoneNumber").val());
                                $("#identificationNumberText").text($("#identificationNumber").val());
                                addressInfoSwitch(false);
                            }
                            catch (e) {
                                console.debug("openInfo error:\n" + e.message);
                            }
                            
                        }
                    });
                    return false;
    
                } else {
                    if (buttonType=="main") {
                        $("#formLoadingMain").show();
                    } else {
                        $("#formLoadingSmall").show();
                    }
                    form.submit();
                }
                submitState = true;
                setTimeout("resetSubmitState();", 30000); 
            }
        }
    });
    if ($("#phoneNumber").length>0) {
        if ($("#pay-method-container input").length>0) { 
            $("#phoneNumber").rules("add", { required: true});
        } else {
            $("#phoneNumber").rules("add", { required: false});
        }
    }
    $("#send-sms-code").click(function() {
        
        if(!$("#portMobileNumber").valid())
            return false;
        var f = $("#register-form");
        var actionUrl = "/ajax/storeSendSMSCode.html";
        if (!submitState) $.ajax({
            type: "post",
            url: actionUrl,
            method: "abort",
            port: "sendSMSCode",
            data: { phoneNumber: $("#portMobileNumber").val() },
            dataType: "html",
            cache: false,
            success: function(data) {
                $("#sms-code-success").hide();
                if(data.indexOf("ajax-error") != -1) {
                    var errorCode = trim(data.substring(data.indexOf("ajax-error") + 11));
                    var errorMessage = getStoreErrorMessageByCode(errorCode);
                    if(errorMessage)
                        validation.showErrors({"portMobileNumber": errorMessage});
                } else {
                    $("#portMobileNumberError").html("");
                    $("#sms-code-success").show();
                }
            }
        });
        return false;
    });
    $(".pay-method-ajax input").click(function() {
        var element = this;
        var actionUrl = "/ajax/storeChangePaymentMethod.html";
        if (!submitState) $.ajax({
            type: "post",
            url: actionUrl,
            method: "abort",
            port: "changePaymentMethod",
            data: { paymentMethod: $(this).val() },
            dataType: "html",
            cache: false,
            success: function(data) {
                if(data.indexOf("ajax-error") != -1) {
                    var errorCode = trim(data.substring(data.indexOf("ajax-error") + 11));
                    var errorMessage = getStoreErrorMessageByCode(errorCode);
                    if(errorMessage)
                        validation.showErrors({"paymentMethod": errorMessage});
                    return false;
                } else {
                    setPhoneNumberValidation($(element).val());
                    updateShoppingCart(data);
                    window.location.hash = "pm=" + $(this).val();
                }
            }
        });
        return true;
    });
    $(".pay-method-ajax input").click(function() {
        if($(this).attr("id") == "payment-method-credit-card") {
            $(".shipping-address-field-container").show();
            $("#info-text").hide();
            $("#adress-uppgifter").show();
            
            var addressInput = $("#address");
            var addressMaxLength = addressInput.attr("maxlength");
            addressInput.rules("add", { required: true, minlength: 2, maxlength: addressMaxLength });

            var postalCodeInput = $("#postalCode");
            var postalCodeMaxLength = postalCodeInput.attr("maxlength");
            postalCodeInput.rules("add", { required: true, minlength: 2, maxlength: postalCodeMaxLength });

            var cityInput = $("#city");
            var cityMaxLength = cityInput.attr("maxlength");
            cityInput.rules("add", { required: true, minlength: 2, maxlength: cityMaxLength });         
        } else {    
            $(".shipping-address-field-container").hide();
            $("#info-text").show();
            $("#adress-uppgifter").hide();
            $("#address").rules("remove");
            $("#postalCode").rules("remove");
            $("#city").rules("remove");
        }
    });

    $(".radio-button-cont input").click(function() {
        var element = $(this);
        var actionUrl = "/ajax/storeChangeActiveVariant.html";
        if (!submitState) $.ajax({
            type: "post",
            url: actionUrl,
            method: "abort",
            port: "changeActiveVariant",
            data: { variant: $(this).val()},
            dataType: "html",
            cache: false,
            success: function(data) {
                if(data.indexOf("ajax-error") != -1) {
                    var errorCode = trim(data.substring(data.indexOf("ajax-error") + 11));
                    var errorMessage = getStoreErrorMessageByCode(errorCode);
                    if(errorMessage)
                        validation.showErrors({"variant": errorMessage});
                    return false;
                } else {
                    updateShoppingCart(data);
                    $("#main-offer-image").attr("src", "/images/products/" + $(element).val() + "_01_l.jpg");
                }
            }
        });
        return true;
    });
    $("#port-new-number").click(function() {
        var element = $(this);
        var actionUrl = "/ajax/storeSetPortOrder.html";
        if (!submitState) $.ajax({
            type: "post",
            url: actionUrl,
            method: "abort",
            port: "setPortOrderFalse",
            data: { isPortOrder: false },
            dataType: "html",
            cache: false,
            success: function(data) {
                if(data.indexOf("ajax-error") != -1) {
                    var errorCode = trim(data.substring(data.indexOf("ajax-error") + 11));
                    var errorMessage = getStoreErrorMessageByCode(errorCode);
                    if(errorMessage)
                        $("#mobilNrError").html(errorMessage); 
                    return false;      
                } else {
                    $("#mobilNrError").html(""); 
                    hideNewNumber();
                }
            }
        });
        return true;
    });
    $("#port-keep-number").click(function() {
        
        var element = $(this);
        var actionUrl = "/ajax/storeSetPortOrder.html";
        if (!submitState) $.ajax({
            type: "post",
            url: actionUrl,
            method: "abort",
            port: "setPortOrderTrue",
            data: { isPortOrder: true },
            dataType: "html",
            cache: false,
            success: function(data) {
                if(data.indexOf("ajax-error") != -1) {
                    var errorCode = trim(data.substring(data.indexOf("ajax-error") + 11));
                    var errorMessage = getStoreErrorMessageByCode(errorCode);
                    if(errorMessage)
                        $("#mobilNrError").html(errorMessage);
                    return false;         
                } else {
                    $("#mobilNrError").html(""); 
                    showNewNumber();
                }
            }
        });
        return true;
    });
    $(".add-to-cart").click(function() {
        var element = this;
        var actionUrl = "/ajax/storeAddToShoppingCart.html";
        var itemNum = $(this).attr("href").substring(1);
        if (!submitState && (addState[itemNum]=="" || addState[itemNum]==null)) {
 
            addState[itemNum] = itemNum;
            $.ajax({
                type: "post",
                url: actionUrl,
                method: "abort",
                port: "addToShoppingCart" + itemNum,
                data: { articleNumber: itemNum },
                dataType: "html",
                cache: false,
                success: function(data) {
                    if(data.indexOf("ajax-error") != -1) {
                        var errorCode = trim(data.substring(13));
                        var errorMessage = getStoreErrorMessageByCode(errorCode);            
                        if(errorMessage && errorCode == 3)
                            return false;
                    } else {
                        $(element).parent().children(".remove-from-cart").show();
                        $(element).hide();
                        updateShoppingCart(data);
                    }
                    addState[itemNum] = "";
                }
            });
        }
        return false;
    });    
    $(".remove-from-cart").click(function() {
        var element = this;
        var actionUrl = "/ajax/storeRemoveFromShoppingCart.html";
        var itemNum = $(this).attr("href").substring(1);
        if (!submitState && (addState[itemNum]=="" || addState[itemNum]==null)) {
            addState[itemNum] = itemNum;
            $.ajax({
                type: "post",
                url: actionUrl,
                method: "abort",
                port: "removeFromShoppingCart" + itemNum,
                data: { articleNumber: itemNum },
                dataType: "html",
                cache: false,
                success: function(data) {
                    if(data.indexOf("ajax-error") != -1) {        
                        var errorCode = trim(data.substring(13));
                        var errorMessage = getStoreErrorMessageByCode(errorCode);            
                        if(errorMessage && errorCode == 5)
                            return false;                
                    } else {
                        $(element).parent().children(".add-to-cart").show();
                        $(element).hide();
                        updateShoppingCart(data);
                    }
                    addState[itemNum] = "";
                }
            });
        }
        return false;
    });
    $("#pay-method-1, #pay-method-2, #pay-method-3").change(function() {
            var actionValue =  $(this).val();
            var actionUrl = "/ajax/storeChangePaymentMethod.html";
            $.ajax({
                type: "post",
                method: "abort",
                port: "paymentMethod",
                url: actionUrl,
                data: {paymentMethod:actionValue},
                dataType: "html",
                cache: false,
                success: function(data) {
                    try {   
                        if(data.indexOf("ajax-error") != -1) {
                            var errorCode = trim(data.substring(13));
                            var errorMessage = getStoreErrorMessageByCode(errorCode);
                            if(errorMessage && errorCode == 3)
                            return false;
                        } else {
                            var paymentInfo = $("#payment-info-" + actionValue).html();
                            $("#payment-info").html(paymentInfo);
                            paymentInfoSwitch(false);
                            updateShoppingCart(data);
                            setPhoneNumberValidation(actionValue);
                        } 
                    }
                    catch (e) {
                        //console.debug("Pay-method error:\n" + e.message);
                    }
                    
                }
            });
    });
    function paymentInfoSwitch(showAddress) {
        var addClassName, removeClassName;
        if (showAddress) {
            addClassName = "hidden"; removeClassName = "visible";
        } else {
            addClassName = "visible"; removeClassName = "hidden";
        }
        $("#change-payment-button").removeClass(removeClassName).addClass(addClassName);
        $("#change-payment-abort").removeClass(addClassName).addClass(removeClassName);
        $("#payment-info").removeClass(removeClassName).addClass(addClassName);
        $("#payment-change").removeClass(addClassName).addClass(removeClassName);
    }
});