		function DoCalculation()
		{
		    if(CheckInputs())
		    {
		        CalculateResult();
		        ToggleElement("outputData", true);
		        ToggleElement("outputDataHeader", true);
		    }
		    else 
		    {
		        ToggleElement("outputData", false);
		        ToggleElement("outputDataHeader", false);
		    }
		}
		
		function CalculateResult() 
		{
				var isMale = Boolean(document.getElementById("isMale").checked);
				var birthYear = Number(document.getElementById("year").value);
				var curCost = Number(document.getElementById("curCost").value);
				var curInsureCost = Number(document.getElementById("curInsureCost").value);
				var wage  = Number(document.getElementById("wage").value) * 12;
				var yield = Number(document.getElementById("yield").value)/100;
				var addFee = Number(document.getElementById("addFee").value);
				
				var pensionYear = isMale ? birthYear + 60 : birthYear + 55;
				var fee = 0;
				var insure = 0;
				
				if (birthYear >= 1967)
				{
				    if(wage < 280000)
				    {
				        fee = wage * 0.06;
				        insure = wage * 0.08; 
				    }
				    else if (wage>600000)
				    {
				        fee = 24480;
				        insure = 32320; 
				    }
				    else 
				    {
				        fee = 16800+0.024*(wage-280000);
				        insure = 22400+0.031*(wage-280000);
				    }
		    		
				    if (fee >= 2000)
				        fee = fee + Math.min(addFee,12000)+addFee;
				    }
				else
				{
				    fee = 0;
				    if(wage < 280000)
				    {
				        insure = wage * 0.14; 
				    }
				    else if (wage>600000)
				    {
				        insure = 56800; 
				    }
				    else 
				    {
				        insure = 39200+0.055*(wage-280000);
				    }
		
				    
				}
				var curDate = new Date(); 
				var curYear = curDate.getFullYear();
				
				if (yield > 0)
				{ 
				    var outputCumulativeSum = Math.round(curCost*Math.pow((1+yield),(pensionYear-curYear))+fee*(1+yield)*(Math.pow((1+yield),(pensionYear-curYear))-1)/(yield));
				    var outputInsureSum = Math.round(curInsureCost*Math.pow((1+yield),(pensionYear-curYear))+insure*(1+yield)*(Math.pow((1+yield),(pensionYear-curYear))-1)/(yield));
				}
				else
				{
				    var outputCumulativeSum = Math.round(curCost+fee*(pensionYear-curYear));
				    var outputInsureSum = Math.round(curInsureCost+Insure*(pensionYear-curYear));
				}
		
				if (birthYear < 1967) 
				    outputCumulativeSum = 0;
		
				var outputCumulativePension = Math.round(outputCumulativeSum/19/12);
				var outputInsurePension = Math.round(outputInsureSum/19/12);
				var outputBasePension = 1794;
				var outputPension = outputCumulativePension + outputInsurePension + outputBasePension;
				
				document.getElementById("outputPension").innerHTML = FormatIntNumber(outputPension);
				document.getElementById("outputCumulativePension").innerHTML = FormatIntNumber(outputCumulativePension);
				document.getElementById("outputInsurePension").innerHTML = FormatIntNumber(outputInsurePension);
				document.getElementById("outputBasePension").innerHTML = FormatIntNumber(outputBasePension);
				document.getElementById("outputCumulativeSum").innerHTML = FormatIntNumber(outputCumulativeSum);
				document.getElementById("outputInsureSum").innerHTML = FormatIntNumber(outputInsureSum);		
				
		}
		
		function CheckInputs()
		{
		    var result = true;
		    var is4DigitValue = new RegExp("^\\d{4}$");
		    var isDigitValue = new RegExp("^\\d+$");
		    var isDecimalValue = new RegExp("^[+-]?(?:\\d+\\.?\\d*|\\d*\\.?\\d+)[\\r\\n]*$");
		    
		    result = ValidateElement("year", "errYear", is4DigitValue) && result;
		    result = ValidateElement("curCost", "errCurCost", isDigitValue) && result;
		    result = ValidateElement("curInsureCost", "errCurInsureCost", isDigitValue) && result;
		    result = ValidateElement("wage", "errWage", isDigitValue) && result;
		    result = ValidateElement("addFee", "errAddFee", isDigitValue) && result;
		    result = ValidateElement("yield", "errYield", isDecimalValue) && result;
		    
		    return result;
		        
		}
		
		function ValidateElement(elementName, labelName, regexp)
		{
		    if(regexp.test(document.getElementById(elementName).value))
		    {
		        ToggleElement(labelName, false);
		        return true;
		    }
		    else
		    {
		        ToggleElement(labelName, true);
		        return false;
		    }
		}
		
		function ToggleElement(elementId, toShow)
		{
		    document.getElementById(elementId).style.display = toShow ? "block" : "none";
		}
		
		function FormatIntNumber(number)
		{
		    var strNumber = String(number);
		    var formattedNumber = "";
		    for(i=strNumber.length-1;i>=0;i=i-3)
		    {
		        if(formattedNumber.length>0) formattedNumber = " " + formattedNumber;
		        var s = new String();
		        var startIndex = Math.max(i-2,0);
		        var len = Math.min(i+1,3);
		        formattedNumber = strNumber.substr(startIndex, len) + formattedNumber;
		    }
		    return formattedNumber;
		}


