/* 
ibancheckcalc.js  version 1.0.2

*/

IBANcheckCalc = {
	jsversion: '1.0.2',
	
  init: function() {
		var Toolbox = CalculatorToolbox;
  	var CoreCompliance=DBcore.getJSversion(DBcore,'1.16.0');
		var ToolCompliant=DBcore.getJSversion(CalculatorToolbox,'1.33.3');
		var ErrorCompliant=DBcore.getJSversion(ErrorHandler,'1.10.0');
  	//if (CoreCompliance.compliant && ToolCompliant.compliant && ErrorCompliant.compliant) {
			 Toolbox.calculatorObj=IBANcheckCalc;
			 Toolbox.listOfTriggers=['calculateIBAN','resetIBANmessage'];
			 Toolbox.pseudoChangeElementIdsFromCalc=[];
			 Toolbox.setClickListeners();
			 Toolbox.setChangeListeners();
			 Toolbox.setButtonActivation();
			 Toolbox.setKeydownListeners();
			 //Toolbox.activateExcel();
		//}
  },

	dispLocalValidators: function(field,classFunction,classParams,eventType) {
			var self=IBANcheckCalc;
			var ok=true;
			switch (classFunction){
					case 'calculateIBAN':
							 		if (eventType=='click') {
							 			 self.handleCalculateIBAN(field,classParams);
									}
									break;
					case 'resetIBANmessage':
							 		if (eventType=='change') {
										 self.handleResetIBANmessage();
									}
									break;
					default:
									break;
			}
			return ok;
	},
	
	handleCalculateIBAN: function(button,theparams) {
    var self=IBANcheckCalc;
		var ibanOK=false;
		if (CalculatorToolbox.fieldsAreValid()) {
			  var ibannumber;
    		var ibanfield=document.getElementById('iban');
    		var ibanOkContainer=document.getElementById('ibanOkMessage');
    		var ibanNotOkContainer=document.getElementById('ibanFaultMessage');
    		var ibanNeutralContainer=document.getElementById('ibanNeutralMessage');
    		var iban = ibanfield.value;
    		iban = DBcore.removeNonAlpha(iban);
    		ibanfield.value=iban;
    		if (self.isStandardLength(iban)) {
    			 ibannumber=self.moveFirst4toBack(iban);
    			 ibannumber=self.convertLetters(ibannumber);
    			 if (CalculatorToolbox.MOD97(ibannumber)==1) {
    			 		ibanOK=true;
    			 } 
    		}
				self.handleResetIBANmessage();
    		DisplayToolbox.hideElement(ibanNeutralContainer);
				if (ibanOK) {
					 DisplayToolbox.showElement(ibanOkContainer);
				} else {
					 DisplayToolbox.showElement(ibanNotOkContainer);
				}
		}
	},
	
	handleResetIBANmessage: function() {
		var ibanOkContainer=document.getElementById('ibanOkMessage');
		var ibanNotOkContainer=document.getElementById('ibanFaultMessage');
		var ibanNeutralContainer=document.getElementById('ibanNeutralMessage');
		DisplayToolbox.hideElement(ibanNotOkContainer);
		DisplayToolbox.hideElement(ibanOkContainer);
		DisplayToolbox.showElement(ibanNeutralContainer);
	},
	
	convertLetters: function(tekst) {
	   var self=IBANcheckCalc;
	   var result='';
		 var nextnumber;
		 for (var i=0;i<tekst.length;i++) {
		 		 nextnumber = tekst.charAt(i);
				 if (isNaN(nextnumber)) {
				 		nextnumber=self.convertLetterToNumberCode(nextnumber);
				 } 
				 result += nextnumber; 				 
		 }
		 return result;
	},
	
	convertLetterToNumberCode: function(letter) {
		 var result=0;
		 if (letter!='') {
		 		var letter=letter.toUpperCase();
		 		result = letter.charCodeAt(0)-55;// A=10,..., Z=35
		 }
		 return result;
	},

	isStandardLength: function(iban) {
		 var ok=false;
		 var LengthList = {
				 'AT': 20,
				 'BE': 16,
				 'CH': 21,
				 'CY': 28,
				 'CZ': 24,
				 'DE': 22,
		 		 'DK': 18,
				 'EE': 20,
				 'ES': 24,
				 'FI': 18,
				 'FO': 18,
				 'FR': 27,
				 'GB': 22,
				 'GL': 18,
				 'GR': 27,
				 'HU': 28,
				 'IE': 22,
				 'IS': 26,
				 'IT': 27,
				 'LI': 21,
				 'LT': 20,
				 'LU': 20,
				 'LV': 21,
				 'MT': 31,
				 'NL': 18,
				 'NO': 15,
				 'PL': 28,
				 'PT': 25,
				 'RO': 24,
				 'SE': 24,
				 'SI': 19,
				 'SK': 24,
				 'TN': 24
				 }
				 if (iban != '') {
				 	  var countryCode=iban.substring(0,2).toUpperCase();
						if (LengthList[countryCode]!== undefined && LengthList[countryCode]==iban.length) {
						  ok= true;
						}
						/* for(var lengthproperty in LengthList) {
								if (lengthproperty==countryCode && LengthList[lengthproperty]==iban.length) {
									 ok=true;
									 break;
								}
						}					*/
		 		 }
		 return ok;
	},
	
	moveFirst4toBack: function(iban) {
		return iban.substring(4,iban.length)+iban.substring(0,4);
	}

}
DBcore.start(IBANcheckCalc);


