var confPassword = function (field, rules, i, options) {
	if ($(":input[name=password]").val() != field.val()) {
		return options.allrules.passwordMissmatch.alertText;
	}
};

var confNewPassword = function (field, rules, i, options) {
	if (($(":input[name=new_password]").val() != field.val()) || ($(":input[name=new_password]").val().length > 0 && field.val().length == 0)) {
		return options.allrules.passwordMissmatch.alertText;
	}
};

var confEmail = function (field, rules, i, options) {
	if ($(":input[name=email1]").val() != field.val()) {
		return options.allrules.email.alertText;
	}
};

var validateNib = function (field, rules, i, options){
	var nib = field.val();
    if(nib.length != 21 || nib == null || isNaN(nib)) {
        return options.allrules.nib.alertText;
    }

    var pesos = [73, 17, 89, 38, 62, 45, 53, 15, 50, 5, 49, 34, 81, 76, 27, 90, 9, 30, 3];
    // Check Digit Calculado
    var checkDgtClc = 0;
    // Check Digit Embutido no nib
    var checkDgtEmb = nib.substr(19, 2);
    var i;

    for (i = 0; i < 19; i++) {
        checkDgtClc += parseInt(nib.charAt(i)) * pesos[i];
    }

    checkDgtClc = 98 - (checkDgtClc - parseInt(checkDgtClc / 97) * 97);

    if (checkDgtEmb != checkDgtClc) {
    	return options.allrules.nib.alertText;
    }
};

var validateNif = function (field, rules, i, options) {
	var nif = field.val();
	if (validaBiNif(nif, true) == false) {
    	return options.allrules.nif.alertText;
	}
};

var validateId = function (field, rules, i, options) {
	var type = field.parents('form:first').find("[name=id_doc_type]").val();
	var val = field.val().toString().replace(/[^0-9a-z]/ig, "");
	switch (type.toString().toLowerCase()) {
		case "cc":
			if (!validaCC(val)) {
				return options.allrules.cc.alertText;
			}
			break;
		case "bi":
			if (!validaBiNif(val, false)) {
				return options.allrules.bi.alertText;
			}
			break;
	}
};

var validaBiNif = function (num, nif) {
	var isNif = nif ? ((num.charAt(0)=="1" || num.charAt(0)=="2" || num.charAt(0)=="5" || num.charAt(0)=="6" || num.charAt(0)=="8" || num.charAt(0)=="9") ? true : false) : true;
    if ((num != null) && (!isNaN(num)) && (num.length==9) && isNif) {
        var dC = parseInt(num.charAt(0)) * 9;
        var i;

        for (i= 2; i <= 8; i++){
            dC += (parseInt(num.charAt((i-1)))) * (10-i);
        }

        dC = 11 - (dC % 11);

        if (dC >= 10) {
            dC= 0;
        }

        if (dC!=parseInt(num.charAt(8))){
        	return false;
        } else {
        	return true;
        }
    } else {
    	return false;
    }
};

var validaCC = function (cc) {
	sum = 0;
	secondDigit = false;
	if (cc.length != 12) {
		return false;
	}
	
	for (i = cc.length -1; i>=0; i--) {
		var n = GetNumberFromChar(cc.charAt(i));
		if (secondDigit) {
			n *= 2;
			
			if (n > 9)
				n-= 9;
		}
		
		sum += n;
		secondDigit = !secondDigit;
	}
	
	return ((sum % 10) == 0);
};

var GetNumberFromChar = function (letter) {
	switch(letter.toUpperCase()) {
		case '0' : return 0;
		case '1' : return 1;
		case '2' : return 2;
		case '3' : return 3;
		case '4' : return 4;
		case '5' : return 5;
		case '6' : return 6;
		case '7' : return 7;
		case '8' : return 8;
		case '9' : return 9;
		case 'A' : return 10;
		case 'B' : return 11;
		case 'C' : return 12;
		case 'D' : return 13;
		case 'E' : return 14;
		case 'F' : return 15;
		case 'G' : return 16;
		case 'H' : return 17;
		case 'I' : return 18;
		case 'J' : return 19;
		case 'K' : return 20;
		case 'L' : return 21;
		case 'M' : return 22;
		case 'N' : return 23;
		case 'O' : return 24;
		case 'P' : return 25;
		case 'Q' : return 26;
		case 'R' : return 27;
		case 'S' : return 28;
		case 'T' : return 29;
		case 'U' : return 30;
		case 'V' : return 31;
		case 'W' : return 32;
		case 'X' : return 33;
		case 'Y' : return 34;
		case 'Z' : return 35;
	}
};

var validationOptions = {
    promptPosition : "topLeft", 
    scroll: true,
    isOverflown: true,
    overflownDIV: "#body_right_panel",
    onValidationFaild : function () {
    	MessageBox.Alert("<p class='error_message'>"+ humanportal.regional.validation.faild +"</p>", "");
    	top.stopPreloader();
    }
};

var validationOptionsAjax = {
    promptPosition : "topLeft", 
    scroll: true,
    onValidationFaild : function () {
    	MessageBox.Alert("<p class='error_message'>"+ humanportal.regional.validation.faild +"</p>", "");
    	top.stopPreloader();
    }
};

function bindDocType() {
	$("#id_doc_type").change(function () {
	    if ($("#id_doc_type").val().toString().toLowerCase() == 'bi') {
	    	$("#id_doc").mask("99999999-9", {placeholder:'_', fillwith: '0', fillside: 'left'});
	    } else if ($("#id_doc_type").val().toString().toLowerCase() == 'cc') {
	    	var tmp = $("#id_doc").val().replace(/-/ig, '').padRight(12, 0).replace(/^(.{8})(.{1})(.{3})$/, "$1-$2-$3");
	    	$("#id_doc").mask("99999999-9-***", {placeholder:'_', fillwith: "0", fillside: 'left'});
	    	$("#id_doc").val(tmp);
	    } else {
	    	$("#id_doc").unmask();
	    }
    }).change();
}
