function validateIBANChecksum(iban) {
    if(iban == '') {
		return true;
	}
	
	var prefix = iban.substring(0, 2);
    var numPrefix = intArrayToString(getCharCode(prefix,55));

    iban = iban.substring(4, 28) + numPrefix + iban.substring(2, 4);

    var val = parseInt(iban.substring(0, 10), 10);
    val = val % 97;

    val = parseInt(val + iban.substring(10, 20), 10);
    val = val % 97;

    val = parseInt(val + iban.substring(20, 30), 10);
    val = val % 97;

    if (val == 1) {
        return true;
    }

    return false;
}

function intArrayToString(arr) {
    var str = '';
    
    for (i in arr) {
        str += arr[i] + '';
    }
    
    return str;
}

function getCharCode(str, d) {
    var res = Array();

    for (i = 0; i < str.length; i++) {
        res[i] = str.charCodeAt(i) - d;
    }

    return res;
}



$.validator.addMethod('iban', function (value) { 
    return validateIBANChecksum(value);
}, 'Numer konta wg formatu IBAN powienien posiadać 28 znaków w tym oznaczenie kraju np. PL12345678901234567890123456');


$.extend(jQuery.validator.messages, {
        required: "Pole wymagane!",
		email: "Adres email jest niepoprawny!",
		number: "Proszę podać wartość liczbową"
});

