/* 
ibancalc.js  version 1.0.2

		require: dbcore.js.
						 calculatortoolbox.js
						 dbtoolboxes.js

*/

IBANCalc = {
	jsversion: '1.0.2',
	
  init: function() {
		var Toolbox = CalculatorToolbox;
  	var CoreCompliance=DBcore.getJSversion(DBcore,'1.6.0');
		var ToolCompliant=DBcore.getJSversion(CalculatorToolbox,'1.11.0');
		var ErrorCompliant=DBcore.getJSversion(ErrorHandler,'1.1.0');
  		if (CoreCompliance.compliant && ToolCompliant.compliant && ErrorCompliant.compliant) {
			 Toolbox.calculatorObj=IBANCalc;
			 Toolbox.listOfTriggers=['calculate'];
			 Toolbox.setJShides();
			 Toolbox.setClickListeners();
			 Toolbox.setChangeListeners();
			 Toolbox.setButtonActivation();
			 Toolbox.setKeydownListeners();
			 Toolbox.miscInitiations();
			}
  },
	
	handleCalculate: function(button) {
	  var self=IBANCalc;
		var Toolbox=CalculatorToolbox;
		if (Toolbox.fieldsAreValid(button.form)) {
			 var resultsection=document.getElementById('resultsection');
			 var ibanfield=document.getElementById('ibannumber');
			 var accountnumber=document.getElementById('accountnumber').value;
			 var Iban = self._calcIBANnumber(accountnumber);
			 if (Iban.ok) {
			 		ibanfield.value=Iban.value;
					DisplayToolbox.showElement(resultsection);
					// IE/CMS fix:
			 		window.setTimeout(function() {document.getElementById('resultsection').style.display="block";},100);
			 } else {
			 	 	var Especs={};
					Especs.list='-';
					Especs.brandname='Sampo Bank';
			 	 	ErrorHandler.showErrorInline(Iban.error,'accountnumber',Especs);
			 }
		}
	},
	
  _calcIBANnumber: function(accountstring) {
			var self=IBANCalc;
			var Result={ok:true,error:'',value:''};
			var Cleaner=DBcore.cleanupNumber(accountstring);
			var accountnumber = Cleaner.number;
			accountnumber = self._sampoficate(accountnumber);
			if (accountnumber.charAt(0)!='8') {
				 Result.ok=false;
				 Result.error='N5';
			} else if (( Cleaner.removed.length==1 && Cleaner.removed[0]!='-')|| Cleaner.removed.length>1) {
				 Result.ok=false;
				 Result.error='N4';
			} else if (accountnumber.length!=14) {
				 Result.ok=false;
				 Result.error='N6';
			} else {
				 var verifier=CalculatorToolbox.LuhnMod10(accountnumber.substring(0,13));
				 if (accountnumber.charAt(13)!=verifier) {
				 		Result.ok=false;
				 		Result.error='N6';
				 } else {
				 	  var FIconv='15'+'18'+'00';
						var combinedaccount=accountnumber+FIconv;
						var ibanverifier=98-CalculatorToolbox.MOD97(combinedaccount);
						ibanverifier = (ibanverifier<10) ? '0'+ibanverifier:ibanverifier;
						var IBAN='FI'+ibanverifier+accountnumber;
						Result.value=IBAN;
				 }
			}
			return Result;
	},
	
	_sampoficate: function(accountnumber) {
	  var result='';
		var zeros='00000000';
		var delta14 = 14-accountnumber.length;
		var part1 = accountnumber.substring(0,6);
		var part3 = accountnumber.substring(6);
		var part2 = zeros.substring(0,delta14);
		result=part1.toString()+part2.toString()+part3.toString();
		return result;
	}
	
}
DBcore.start(IBANCalc);

