var CreditCalculation = {
	creditSumContent: null,
	creditTermContent: null,
	creditInterestContent: null,
	calculateButton: null,
	lastAcceptedCreditSum: "",
	lastAcceptedCreditTerm: "",
	lastAcceptedCreditInterest: "",
	callFunction: function (oSettings) {
		var obj = null;
 
		if (typeof oSettings != "object" ||
			typeof oSettings.id != "string" ||
			!(obj = document.getElementById(oSettings.id)) ||
			typeof oSettings.fn != "function") {
			return CreditCalculation.triggerError("Bad usage of validate(oSettings) function!");
		}
 
		return oSettings.fn(obj);
	},
	triggerError: function (message) {
		/*
		if (console.log) {
			console.log(message);
		} else {
			alert(message);
		}
		*/
		return;
	},
	validateCreditSum: function (o) {
		var pattern = /^([1-9][0-9]{0,7})?(,[0-9]{0,2})?$/;
		var temp = o.value.replace(/\./g,"");
		
		if (!pattern.test(temp)) {
			o.value = CreditCalculation.lastAcceptedCreditSum;
			return CreditCalculation.triggerError("Don't mess with me!");
		}
 
		CreditCalculation.lastAcceptedCreditSum = CreditCalculation.formatCreditSumString(temp);
		o.value = CreditCalculation.lastAcceptedCreditSum;
 
		return;
	},
	validateCreditTerm: function (o) {
		var pattern = /^([1-9][0-9]{0,2})?$/;
 
		if (!pattern.test(o.value)) {
			o.value = CreditCalculation.lastAcceptedCreditTerm;
			return CreditCalculation.triggerError("Don't mess with me!");
		}
 
		CreditCalculation.lastAcceptedCreditTerm = o.value;
		o.value = CreditCalculation.lastAcceptedCreditTerm;
 
		return;
	},
	validateCreditInterest: function (o) {
		var pattern = /^([0-9]{0,2}(,[0-9]{0,2})?)?$/;
 
		if (!pattern.test(o.value)) {
			o.value = CreditCalculation.lastAcceptedCreditInterest;
			return CreditCalculation.triggerError("Don't mess with me!");
		}
 
		CreditCalculation.lastAcceptedCreditInterest = o.value;
		o.value = CreditCalculation.lastAcceptedCreditInterest;
 
		return;
	},
	formatCreditSumString: function (str) {
		var match = str.match(/(,[0-9]{0,2})$/);
		str = str.replace(/(,[0-9]{0,2})$/, "");
		if (str.length > 3) {
			var temp = "";
			var j = 1;
			for (var i = str.length-1; i >= 0; i--, j++) {
				temp += str.charAt(i);
				if (j == 3 && i != 0) {
					temp += ".";
					j = 0;
				}
			}
			str = "";
			for (var i = temp.length-1; i >= 0; i--) {
				str += temp.charAt(i);
			}
		}
		var suffix = "";
		if (match && match[0]) {
			suffix = match[0];
		}
		return str + suffix;		
	},
	calculateMonthlyFee: function () {
		var sum = parseFloat(CreditCalculation.lastAcceptedCreditSum.replace(/\./g, "").replace(/,/, "."));
		var term = parseFloat(CreditCalculation.lastAcceptedCreditTerm);
		var interest = parseFloat(CreditCalculation.lastAcceptedCreditInterest.replace(/,/, ".")) / 100;
		var fee = ((((interest*Math.pow(interest+1, term))/(Math.pow(interest+1, term)-1))*sum).toFixed(2));
		document.getElementById("monthlyFee").firstChild.nodeValue = (fee != 'NaN') ? CreditCalculation.formatCreditSumString(fee.replace(/\./, ",")) : 0;
	}
}
 
CreditCalculation.creditSumContent = document.getElementById("creditsum");
CreditCalculation.creditSumContent.onkeyup
	= CreditCalculation.creditSumContent.onchange
	= CreditCalculation.creditSumContent.onfocus
	= function() {
		CreditCalculation.callFunction({
    		"id": "creditsum",
    		"fn": CreditCalculation.validateCreditSum
		});
	};
 
CreditCalculation.creditTermContent = document.getElementById("creditterm");
CreditCalculation.creditTermContent.onkeyup
	= CreditCalculation.creditTermContent.onchange
	= CreditCalculation.creditTermContent.onfocus
	= function() {
		CreditCalculation.callFunction({
    		"id": "creditterm",
    		"fn": CreditCalculation.validateCreditTerm
		});
	};
 
CreditCalculation.creditInterestContent = document.getElementById("creditinterest");
CreditCalculation.creditInterestContent.onkeyup
	= CreditCalculation.creditInterestContent.onchange
	= CreditCalculation.creditInterestContent.onfocus
	= function() {
		CreditCalculation.callFunction({
    		"id": "creditinterest",
    		"fn": CreditCalculation.validateCreditInterest
		});
	};
 
CreditCalculation.calculateButton = document.getElementById("calculateMonthlyFee");
CreditCalculation.calculateButton.onclick
	= function() {
		CreditCalculation.calculateMonthlyFee();
		return false;
	};