﻿

$.validator.addMethod("SecurityNumber", function(value) {
    return validatePsn($('#BirthDate').val() + ' ' + value)
}, 'Ogiltigt personnummer');

$.validator.addMethod("CheckAge",function() {
    /* the minumum age you want to allow in */
   // var min_age = 18;

    var year = parseInt($('#BirthYear').val());
    var month = parseInt($('#BirthMonth').val()) - 1;
    var day = parseInt($('#BirthDay').val());

    var theirDate = new Date((year + min_age), month, day);
    var today = new Date;

    if ((today.getTime() - theirDate.getTime()) < 0) {
        return false;
    }
    else {
        return true;
    }
},'Du måste vara minst '+ min_age+' år!');


$.validator.addMethod("CheckUserName", function(value) {
    var NameStatus = true;
    $("#UserNameStatus").addClass("processing");
    $.ajax({
        cache: false,
        async: false,
        type: "POST",
        url: "../Webservices/UserService.asmx/CheckUserNameAvailability",
        data: "{\"userName\":\"" + value + "\"}",
        dataType: "json",
        contentType: "application/json",
        success: function(response) {
            NameStatus = response.d;
        }
    });
    $("#UserNameStatus").removeClass("processing");
    return NameStatus;
}, 'Användarnamnet upptaget');

$.validator.addMethod("CheckUserEmail", function(value) {
    var EmailStatus = true;
    $("#UserEmailStatus").addClass("processing");
    $.ajax({
        cache: false,
        async: false,
        type: "POST",
        url: "../Webservices/UserService.asmx/CheckUserEmailAvailability",
        data: "{\"userEmail\":\"" + value + "\"}",
        dataType: "json",
        contentType: "application/json",
        success: function(response) {
            EmailStatus = response.d;
        }
    });
    $("#UserEmailStatus").removeClass("processing");
    return EmailStatus;
}, 'Epostadressen finns redan registrerad');

$.validator.setDefaults({
    onkeyup: function(element) {
        if (element.name == 'username') {
            return true;
        }
        if (element.name in this.submitted || element == this.lastElement) {
            this.element(element);
        }
    }
});


$(document).ready(function() {
    var byear = $("#BirthYear");
    var bmonth = $("#BirthMonth");
    var bday = $("#BirthDay");
    var SecNr = $("#SecNr");
    var SubmitButton = $("#submBtn");

    byear.change(function() {
        SetDays()
        updateDate()
    });

    bmonth.change(function() {
        SetDays()
        updateDate()
    });

    bday.change(function() {
        updateDate()
    });


    function updateDate() {
        var mlz = bmonth.val() //month
        var dlz = bday.val() //Day


        if (mlz < 10) {
            mlz = "0" + mlz
        }
        if (dlz < 10) {
            dlz = "0" + dlz
        }


        $('#BirthDate').val(byear.val() + "-" + mlz + "-" + dlz);
    }

    function SetDays() {
        var selectedDay = parseInt(bday.val());
        var daycount = calculateDays(byear.val(), bmonth.val() - 1) + 1
        bday.find('option').remove();
        for (var mday = 1; mday < daycount; mday++) {
            //bday.append(new Option(mday, mday));
			bday.append('<option value='+mday+'>'+mday+'</option>');
        }
        //Sets the selected day
        if (selectedDay < daycount)
            bday.val(selectedDay);
        else
            bday.val(daycount - 1);

    }

    $("#signupForm").validate({
        errorElement: "span",
        // Validate Fields On Blur    
        onfocusout: function(element) {
            this.element(element);
        },
        success: function(label) {
            label.addClass("success"); //.removeClass("error");
        },

        rules: {
            FirstName: "required",
            LastName: "required",
          //  StreetAdress: "required",
          //  ZipCode: "required",
          //  City: "required",
		  state: "required",
            SecNr:{
                CheckAge:true//,
                //SecurityNumber:true
                },
            username: {
                //CheckUserName: true,
                minlength: 4,
                required: true
            },
            password: {
                required: true,
                minlength: 6    
            },
            confirmPassword: {
                required: true,
                minlength: 6,
                equalTo: "#password"
            },
            email: {
                required: true,
                email: true,
               // CheckUserEmail: true
            },
            userAgree:"required"
        },
        messages: {
            agree: "Please accept our policy"
    }
});


	 $("#state").change(function() {
		 $('#city').children().remove().end().append('<option value="0" class="defaultOption"  selected="selected">--Välj--</option>');
		var StateId = $(this).val();
		$.ajax({
                        type: "POST",
                        dataType: 'json',
						//jsonp: null,
						//jsonpCallback: null,
                        data: { Id: StateId },
                        url: "/getCities.asp",
                        //success: function(result){
                        success: function (res) {
                            $.each(res, function () {
                                $("#city").append($("<option></option>").val(this['id']).html(this['title']));
                            });
                            $('#city').removeAttr('disabled');
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            alert(textStatus+" " + errorThrown);
                        }
                    });
        //updateDate()
		 /*bday.find('option').remove();
        for (var mday = 1; mday < daycount; mday++) {
            bday.append(new Option(mday, mday));
        }*/
    });
});

function calculateDays(year, month) {
    var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    // Test for leap year when February is selected.
    if (1 == month)
        return ((0 == year % 4) && (0 != (year % 100))) || (0 == year % 400) ? 29 : 28;
    else
        return daysInMonth[month];
}

function validatePsn(psn) {
    psn = psn.replace(/[^\d]/g, ''); //rensar extra tecken

    //Villkor:
    // Det skall vara 10 ELLER 12 siffor, annars är det för få/många tecken= Fel
    //Dock bör inte ens denna metod anropas/köras innan personnr är komplett
    if ((psn.length < 10) || (psn.length > 12)) {
        //alert("Fel antal siffror i personnummer");
        return false;
    }
    //Om årtalet angetts med 4 siffor så rensar vi bort tusentalet
    if (psn.length == 12) {
        psn = psn.substring(2, 12);
    }

  
    

    //Denna koll är relativt onödig eftersom det inte GÅR att peta in ett felaktigt datumformat
    //Enda alternativet är att man tar fram det dolda fältet med datumet och editerar det, men då kan man ju även slå av Js och slippa denna validering
    //var datum = new Date(y, m - 1, d);
    if (!validateDate(psn)) {
        return false;
    }
    var n = parseInt(psn.substring(6, 10));
    var s = 0;
    for (i = 0; i < 9; i++) {
        var t = parseInt(psn.substring(i, i + 1));
        if (i % 2 == 0)
            t *= 2;
        if (t >= 10)
            s = s + 1 + (t % 10);
        else
            s += t;
    }
    var c = 10 - Math.floor(s % 10);
    if (c == 10) c = 0;
    if (c != (n % 10)) {
        return false;
    }
    return true;
}

function validateDate(datestring) {
    var y = datestring.substring(0, 2);
    var m = datestring.substring(2, 4);
    var d = datestring.substring(4, 6);
 
    var datum = new Date(y, m - 1, d);
    if ((d != datum.getDate()) || (m != datum.getMonth() + 1) || (y != datum.getYear())) {
        return false;
    }
    else {
        return true;
    }
}


