

function calc()
{
	jknc_calculate_creditor_reference( $('creditor').value );
}


function jknc_calculate_creditor_reference(text)
{
	var bigInteger=new BigInt( convert_text_to_digits(text+'RF00') );		
	//$('integer_calculate').innerHTML=bigInteger.toString();
	var mod=bigint_mod(bigInteger, new BigInt(97));
	var y=bigint_number(mod);
	
	var x=98-y;
	var result="";	

	//$('x').innerHTML=x;
	//$('y').innerHTML=y;

	if (x<10) {
		result='0' + x;
	} else {
		result=x;
	}
	$('result').innerHTML=result;
	var newStr=text.replace(/\s/g,'');

	$('complete_result').innerHTML='RF '+result+ " "+format_string(newStr);
}


function jknc_calculate_iban_creditor_reference(text, country_code)
{
	country_code=country_code.toUpperCase();

	if (country_code=='FI') {

		if ((text=convert_fi_bban_to_machine(text))==false)  {
			$('iban_complete_result').innerHTML="Virheellinen tilinumero";
			return;
		}
	} else {
		text=text.replace(/-/g, '');
	}
	var convert=convert_text_to_digits(text+country_code+'00');
	var zeros=0;

	// Remove leading zeros
	for(var i=0;i<convert.length;i++) {
		if (convert.substr(i, 1)==0)
			zeros++
		else
			break;
	}

	if (zeros) {
		convert=convert.substring(zeros);
	}
	var bigInteger=new BigInt(convert);
	//$('integer_calculate').innerHTML=bigInteger.toString();
	var mod=bigint_mod(bigInteger, new BigInt(97));
	var y=bigint_number(mod);

	var x=98-y;
	var result="";

	//$('x').innerHTML=x;
	//$('y').innerHTML=y;

	if (x<10) {
			result='0' + x;
	} else {
			result=x;
	}
	//$('result').innerHTML=result;
	newStr=text.replace(/\s/g,'');
	$('iban_complete_result').innerHTML=country_code+result+ " "+format_string(newStr);

	if ($('iban_check_input')) {
		$('iban_check_input').value=country_code+result+(newStr);
	}
}


function convert_fi_bban_to_machine(bban)
{
	new_bban=bban=bban.replace('-', '');

	if (bban.length<14 || bban.indexOf('-')!=-1) {

		// Remove - 	
		var left, right;
		switch(new_bban.substr(0,1)) {
			case '4':
			case '5':
				left=new_bban.substr(0, 7);	
				right=new_bban.substr(7);
				break;


			default:
				left=new_bban.substr(0, 6);	
				right=new_bban.substr(6);
				break;
		}

		var len=14-(left.length+right.length);
	
		for(var i=0;i<len;i++) {
			right='0'+right;
		}
		var end_result=left+right;	
	
		// Calculate last 
	} else {
		var end_result=bban;
	} 

	// Check cheksum 
	var sum=0;
	var bal=Array(2, 1);


	for(i=0;i<13;i++) {
		tmp_sum=parseInt(end_result.substr(i, 1))*bal[i % 2]+'';
		for (var j=0;j<tmp_sum.length;j++) {
			sum+=parseInt(tmp_sum.substr(j, 1));
		}
	}

	var checksum=10-(sum % 10);
	if (checksum==10) {
		checksum=0;
	}

	if (checksum!=end_result.substr(13, 1)) {
		alert("Tilinumero on virheellinen: Tarkistussumma on väärin!");
		return false;
	} else {
		return end_result;
	}
}


function format_string(newStr)
{
	var i;
	var output="";

	for(i=0;i<newStr.length;i++) {
		output+=newStr.substr(i, 1);
		if ((i % 4)==3) {
			output+=" ";
		}
	}
	
	return output;
}


function convert_text_to_digits(text)
{
	var alphabets='abcdefghijklmnopqrstuvwxyz';
	var re=/^[A-Za-z0-9]+$/;
	var result="";
	var char;	
	var idx;

	text=text.toLowerCase();

	for(var i=0;i<text.length;i++) {
		char=text.substr(i, 1);	
		if (re.test(char)) {	
			idx=alphabets.indexOf(char);
			if (idx==-1) {		// Integers
				result+=char;
			} else {
				result+=idx+10;
			}
		}
	}	
	// Return as text 
	return result;
}

function calc2()
{
	jknc_validate_creditor_reference( $('check').value );
}

function calc3()
{
	jknc_calculate_iban_creditor_reference( $('iban_calculate').value, $('country_code').value );
}



function jknc_validate_creditor_reference(text)
{

	var str;
	text=text.replace(/\s/g,'');		// Remove whitespaces

	if (text.length>24) {
		text="Check Digits <strong>FAILED</strong><br />Input can only have max 20 characters!";
	} else {

	
		// Move character to right 
		str=text.substr(4)+text.substring(0, 4);
	
		var bigInteger=new BigInt( convert_text_to_digits(str) )
		var mod=bigint_mod(bigInteger, new BigInt(97));
	
		var modInt=bigint_number(mod);

		//$('integer_validate').innerHTML=bigInteger.toString();
		
		var text;
		
		if (modInt==1) {
			text="Check Digits <strong>OK</strong>";
		} else {
			text="Check Digits <strong>FAILED</strong>";
		}
	}
	
	$('validate_result').innerHTML=text;
}




