﻿/// <reference path="~/Resources/js/jquery-1.2.6-intellisense.js" />

//Utöka Array-objektet med en funktion som kollar om en viss sträng finns
Array.prototype.exists = function(val) {
    for (var i = 0; i < this.length; i++)
        if (this[i] === val)
        return true;
    return false;
}    

function toggleInfoLayer(layerid, relativeTo) {
    $parent = $(relativeTo);
    $layer = $(layerid);

    $layer.toggle();    
    $layer.css('top', $parent.position().top + 40).css('left', $parent.position().left + 232);
    return false;
}

$(function() {
    $("#checkout-area .information #ctl00_SiteContent_CheckoutInformation_txtPersNr").change(function() {
        var field = $(this);
        if (new NoNationalId(field.val()).valid) {
            var addedError = false;
            $("#checkout-area #CheckoutInvoice input, #checkout-area #CheckoutGE input").each(function(index) {
                if (!addedError && this.checked == true) {
                    $("#checkout-area .payment .errors").children().remove();
                    $("#checkout-area .payment .errors").append('<div class="error full restriction"><SPAN style="COLOR: white">Alla betalsätt är inte tillgängliga om du inte har ett svenskt personnummer.</SPAN></div>');
                    addedError = true;
                }
                this.checked = false;
                this.disabled = true;
            });
        } else {
            $("#checkout-area .payment .errors .error.restriction").remove();
            $("#checkout-area .payment .option input").each(function() {
                this.disabled = false;
            });
        }
    }).trigger("change");
});

$(function() {
    $("#checkout-area .button input").click(function() {
        //$(".addon-service :checkbox").each(function(i) {
            var form = document.forms[0];
            //form.deliveryOption1 = true;
        //});
    });

    $("#checkout-area .information .delivery-address input:eq(2), #checkout-area .information .form input:eq(3)")
        .keyup(CheckDeliveryOptions);
    CheckDeliveryOptions();
});

function CheckDeliveryOptions() {
    var zip = $("#checkout-area .information .delivery-address input:eq(2)").val();
    if (zip == "")
        zip = $("#checkout-area .information .form input:eq(3)").val();
    if (typeof (zip) == "undefined")
        return;
        
    for (var i = 0; i < zip.length; i++)
        zip = zip.replace(" ", "");
    if (zip != null && zip != "" && zip.length == 5) {
        if (VVM.zip && VVM.zip == zip) {
            return;
        }

        var element = $("#checkout-area .addon-service");
        element.hide();
        element.children().remove();

        $.get("/Checkout/DeliveryOptions.ashx?p=" + zip, function(data) {
            var options = data.split("\n");
            if (options.length > 1) {
                var newHtml = "<h3>Tilläggstjänster för dig som bor i " + options[0] + ":</h3>";
                for (i = 1; i < options.length; i++) {
                    var selected = "";
                    if (options[i].charAt(0) == '>') {
                        selected = "checked=\"checked\"";
                        options[i] = options[i].substring(1);
                    }
                    newHtml += "<p>";
                    newHtml += "<label><input type=\"checkbox\" name=\"delivery-option-" + i + "\" value=\"" + options[i] + "\" " + selected + " />" + options[i] + "</label>";
                    newHtml += "</p>";
                }
                newHtml += "<p>Vid kortbetalning eller direktbetalning betalas tilläggstjänsterna mot faktura 15 dagar.</p>";
                element.append(newHtml);
                element.show();
            }
        });
        VVM.zip = zip;
    } else {
        var element = $("#checkout-area .addon-service");
        element.hide();
        element.children().remove();
        VVM.zip = null;
    }
}

$(function() {
    $("#checkout-area span.error").wrap("<div class=\"error\"></div");
    $("#checkout-area div.error").each(function() {
        if ($(this).children("span:visible").hasClass("full")) {
            $(this).children().removeClass("full");
            $(this).addClass("full");
        }
        if ($(this).children("span:visible").hasClass("top")) {
            $(this).children().removeClass("top");
            $(this).addClass("top");
        }

        if (!$(this).hasClass("full")) {
            $(this).prepend("<img src=\"/Resources/images/arrow-red-left.png\" />");
        }

        $(this).children("span:visible").length > 0 ? $(this).show() : $(this).hide();
    });

    $("#checkout-area .delivery-address .form").find("input").each(function() {
        if ($(this).val() != '') { $("#checkout-area .delivery-address .form").show(); }
    });
    $("#checkout-area .wish .text textarea").each(function() {
        if ($(this).val() != "")
            $(this).parent().show();
    });
});

function NoNationalId(raw) {
    this.raw = raw;
    this.weights1 = [3, 7, 6, 1, 8, 9, 4, 5, 2, 1, 0];
    this.weights2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2, 1];
    this.valid = false;

    this.parse = function() {
        this.raw = this.raw.replace('-', '');

        if (this.raw.length != 11)
            return;

        //TODO: Check birthdate for numbers
        var individualNumber = this.raw.substring(6, 9);
        var year = this.raw.substring(4, 6);
        var millenium = "19";
        if (individualNumber >= 500) {
            if (individualNumber <= 749 && year > 54)
                millenium = "18";
            else if (individualNumber >= 900 && year > 39)
                millenium = "19";
            else if (year < 40)
                millenium = "20";
            else
                return null;
        }

        this.dateOfBirth = this.raw.substring(0, 4) + millenium + year;
        if (this.checkControlDigits(this.raw)) {
            this.valid = true;
        } else {
            this.valid = false;
        }
    }

    this.checkControlDigits = function(birthNumber) {
        var checksum1 = 0;
        var checksum2 = 0;
        for (i = 0; i < 11; i++) {
            var digit = birthNumber[i];
            if (digit < 0 || digit > 9)
                return false;
            checksum1 += digit * this.weights1[i];
            checksum2 += digit * this.weights2[i];
        }
        return (checksum1 % 11) == 0 && (checksum2 % 11) == 0;
    }

    this.parse();
}

