/*
function Country_decode_format(form){
  var form_list = new Array();
  var parts = form.split(" ");
  for (var i = 0; i<parts.length; ++i)  {
    var part = parts[i];
    if (part != "") {
      var a_n = part.charAt(part.length - 1);
      if (a_n == "a" || a_n == "n") part = part.substring(0, part.length - 1);
      else a_n = "an";
      var lng = parseInt(part);
      form_list[form_list.length] = new Array(lng, a_n);
    }
  }
  return form_list;
}

function Country_calc_length(form_list){
  var sum = 0;
  for (var i = 0; i < form_list.length; ++i)
    sum += form_list[i][0];
  return sum;
}
*/
function CalcIBAN(country, bank, account){
  var fill_acc = FillAccount(country, account);
  var checksum = ChecksumIBAN(country.code + "00" + bank + fill_acc);
  return country.code + checksum + bank + fill_acc;
}

function extern(intern){
  var s = "";
  for (var i = 0; i < intern.length; ++i)  {
    if (i % 4 == 0 && i!=0) s += " ";
    s += intern.charAt(i);
  }
  return s;
}
function intern(extern){
  extern = extern.toUpperCase();
  if (extern.substring(0, 4) == "IBAN")
    extern = extern.substring(4);
  var s = "";
  for (var i = 0; i < extern.length; ++i)
    if (extern.charAt(i) != " ")
      s += extern.charAt(i);
  return s;
}

function CountryData(code){
  for (var i = 0; i < iban_data.length; ++i)
    if (iban_data[i].code == code)
      return iban_data[i];
  return null;
}

function InvalidIBANlength(country, iban){return (iban.length != country.total_lng);}
function InvalidBank(country, bank){return (InvalidBankLength(country, bank) || InvalidPart(country.bank, bank));}
function InvalidBankLength(country, bank){return (bank.length != country.bank_lng);}
function InvalidAccount(country, account){return (InvalidAccountLength(country, account) || InvalidPart(country.acc, FillAccount(country, account)));}
function InvalidAccountLength(country, account){return (account.length < 1 || account.length > country.acc_lng);}
function IBANokay(iban){return ChecksumIBAN(iban) == "97";}

function FillAccount(country, account){return fill0(account, country.acc_lng);}
function fill0(s, l){
  while (s.length < l)
    s = "0" + s;
  return s;
}

function ChecksumIBAN(iban){
  var code     = iban.substring(0, 2);
  var checksum = iban.substring(2, 4);
  var bban     = iban.substring(4);

  // Assemble digit string
  var digits = "";
  for (var i = 0; i < bban.length; ++i){
    var ch = bban.charAt(i);
    if ("0" <= ch && ch <= "9")
      digits += ch;
    else
      digits += capital2digits(ch);
  }
  for (var i = 0; i < code.length; ++i){
    var ch = code.charAt(i);
    digits += capital2digits(ch);
  }
  digits += checksum

  // Calculate checksum
  checksum = 98 - mod97(digits);
  return fill0("" + checksum, 2);
}

function mod97(digit_string){
  var m = 0;
  for (var i = 0; i < digit_string.length; ++i)
    m = (m * 10 + parseInt(digit_string.charAt(i))) % 97;
  return m;
}

function capital2digits(ch){
  var capitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  for (var i = 0; i < capitals.length; ++i)
    if (ch == capitals.charAt(i))
      break;
  return i + 10;
}



function InvalidPart(form_list, iban_part){
  for (var f = 0; f < form_list.length; ++f){
    var lng = form_list[f][0], a_n = form_list[f][1];
    if (lng > iban_part.length)
      lng = iban_part.length;
    for (var i = 0; i < lng; ++i){
      var ch = iban_part.charAt(i);
      var a = ("A" <= ch && ch <= "Z");
      var n = ("0" <= ch && ch <= "9");
      if ((!a && !n) || (!a && a_n == "a") || (!n && a_n == "n"))
        return true;
    }
    iban_part = iban_part.substring(lng);
  }
  return false;
}


function CheckChar(c) {
  var t=""
  for (var i = 0; i < capitals.length; ++i) {
    if (c == capitals.charAt(i)) {t="ok"; break;}
  }
  return t;
}


function CheckIBAN(k){
  var iban = intern(k);
  var code     = iban.substring(0, 2);
  var checksum = iban.substring(2, 4);
  var bban     = iban.substring(4);
  var country  = CountryData(code);

  var err = null;
  if (country == null) err = "Unknown Country Code: " + code;
  else if (InvalidIBANlength(country, iban)) err = "IBAN length " + iban.length + " is not correct for " + country.name + " (" + country.total_lng + ")";
  else {
    var bank_lng = country.bank_lng;
    var bank     = bban.substring(0, bank_lng);
    var account  = bban.substring(bank_lng);

    if (InvalidBank(country, bank)) err = "Bank/Branch Code " + bank + " is not correct for " + country.name;
    else if (InvalidAccount(country, account)) err = "Account Number " + account + " is not correct for " + country.name;
    else if (!IBANokay(iban)) err = "Checksum of IBAN incorrect";
  }
  if (err) {
  	$('#ibanmesage').html('<img border="0" src="/images/noiban.gif" width="16" height="16">&nbsp;'+err);
  	$('#ibanmesage').removeClass('ibanok');
  	$('#ibanmesage').addClass('ibanwrong');
  }
  else {
	$('#ibanmesage').html('<img border="0" src="/images/ibanok.gif" width="16" height="16">'+' IBAN OK');
  	$('#ibanmesage').removeClass('ibanwrong');
  	$('#ibanmesage').addClass('ibanok');

  }
}


function CreateIBAN(){
 var code = "LV";
 var bank = "RTMB";
 var pass=document.frm.account.value;
 pass=pass.toUpperCase();
 var err="";
	switch(pass.length){
		case 9:
			capitals = "0123456789";			
			break; 
		case 15:
			capitals = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";	
			break; 		
		default :
			capitals="error";
			CIAM("Account length must be either 9 or 15 characters.");
			return;			
			break;
	}	
for (var i = 0; i < pass.length; ++i) {if (CheckChar(pass.charAt(i))!="ok") err+=pass.charAt(i);}
if (err!="") { CIAM("In Account find wrong character: \""+err+"\"");
} else {
	if (pass.length==15){
		var zz=	pass.substring(0,9);
		var zx= pass.substring(13,15);
		var zt=pass.charAt(12);
		if (zt=="C" || zt=="T") {
			capitals = "0123456789";
			err="";
			pass2=zz+zx;
		for (var i = 0; i < pass2.length; ++i) {if (CheckChar(pass2.charAt(i))!="ok") err+=pass2.charAt(i);}
		if (err!="") {CIAM("You must enter digits in account number"); return;}		

		var va=pass.substring(9,12);
		var fir=0;
		switch(va){
			case "LVL":
				fir="0";			
				break; 
			case "USD":
				fir="1";	
				break;
			case "EUR":
				fir="2";	
				break;			
			default :
				CIAM("Not Correct Account Currency");
				return;
				break;
		}	
		pass=fir+zz+zt+zx;
		} else {
			CIAM("You must enter Deposit (T) or Card Account (C) Identifier !"); return;}
	}


  var account = intern(pass);
  var country = CountryData(code);
  document.frm.account2.value = extern(CalcIBAN(country, bank, account));
  }
}


function CIAM(err){
$('#ibanmesage2').html('<img border="0" src="/images/noiban.gif" width="16" height="16">&nbsp;'+err);
}

function ReSetIBAN(){
document.frm.account2.value="";
$('#ibanmesage2').html('');
}
function iban2reset(){
document.frm2.IBAN.value="";
$('#ibanmesage').html('');
}
