function Map(){
	  this.elements=new Array();
	  this.size=function(){
	    return this.elements.length;
	  }

	  this.put=function(_key,_value){
	    this.elements.push({key:_key,value:_value});
	  }
	
	  this.remove=function(_key){
	    var bln=false;
	    try{
		    for (i=0;i<this.elements.length;i++){
			  if (this.elements[i].key==_key){
			    this.elements.splice(i,1);
			    return true;
	              	  }
	               }
	    }catch(e){
	    		bln=false;
	    }
	    return bln;
	  }
	  this.containsKey=function(_key){
	    var bln=false;
	    try{
		    for(i=0;i<this.elements.length;i++){
			    if (this.elements[i].key==_key){
			    		bln=true;
		    		}
	    		}
	    }catch(e){
	    		bln=false;
	    }
	    return bln;
	  }
	  this.get=function(_key){
	    try{
	    		for(i=0;i<this.elements.length;i++){
	    			if (this.elements[i].key==_key){
	    				return this.elements[i].value;
	    			}
	    		}
	    }catch(e){
	    		return null;
	    }
	  }
}
var ToTal = function(TotalInfo){
	var info = TotalInfo;
	this.totalExpenses=function(){
		var rentMortgage = Money.formatNumbert(eval(info.RentMortgage));
		var utilities = Money.formatNumbert(eval(info.Utilities));
		var carLoansLeases = Money.formatNumbert(eval(info.CarLoansLeases));
		var groceries = Money.formatNumbert(eval(info.Groceries));
		var creditCards = Money.formatNumbert(eval(info.CreditCards));
		var childcare = Money.formatNumbert(eval(info.Childcare));
		var studentLoans = Money.formatNumbert(eval(info.StudentLoans));
		var entertainment = Money.formatNumbert(eval(info.Entertainment));
		var schoolExpenses = Money.formatNumbert(eval(info.SchoolExpenses));
		var clothing = Money.formatNumbert(eval(info.Clothing));
		var medicalExpenses = Money.formatNumbert(eval(info.MedicalExpenses));
		var other = Money.formatNumbert(eval(info.Other));
		var totalexpenses = rentMortgage+utilities+carLoansLeases+groceries+creditCards+childcare+studentLoans+entertainment+schoolExpenses+clothing+medicalExpenses+other;
		var totalExpenseses = document.getElementsByName("totalExpenses");
		for(var i=0;i<totalExpenseses.length;i++){
			totalExpenseses[i].innerHTML = ASC.util.formatCurrency(totalexpenses,2);
		}
		return totalexpenses;
	}
	this.purchasePrice=function(){
		var purchasePrices = document.getElementsByName("purchasePrice");
		for(var i=0;i<purchasePrices.length;i++){
			purchasePrices[i].innerHTML = ASC.util.formatCurrency(this.totalIncome()-this.totalExpenses(),2);
		}
		return this.totalIncome()-this.totalExpenses();
	}
	this.totalIncome=function(){
		var monthlyIncome = eval(info.MonthlyIncome);
		var regularIncome = eval(info.RegularIncome);
		monthlyIncome = Money.formatNumbert(monthlyIncome);
		regularIncome = Money.formatNumbert(regularIncome);
		var monthlyincomes = document.getElementsByName("monthlyincome");
		for(var i=0;i<monthlyincomes.length;i++){
			monthlyincomes[i].innerHTML = ASC.util.formatCurrency(monthlyIncome+regularIncome, 2);
		}
		return monthlyIncome+regularIncome;
	}
	this.estimatedAffordablePaymentLow=function(){
		var estimatedAffordablePaymentLow = this.purchasePrice()*0.26;
		var estimatedAffordablePaymentLows = document.getElementsByName("estimatedAffordablePaymentLow");
		for(var i=0;i<estimatedAffordablePaymentLows.length;i++){
			estimatedAffordablePaymentLows[i].innerHTML = ASC.util.formatCurrency(estimatedAffordablePaymentLow,2);
			
		}
		return estimatedAffordablePaymentLow;
	}
	this.estimatedAffordablePaymentHigh=function(){
		var estimatedAffordablePaymentHigh = this.purchasePrice()*0.31;
		var estimatedAffordablePaymentHighs = document.getElementsByName("estimatedAffordablePaymentHigh");
		for(var i=0;i<estimatedAffordablePaymentHighs.length;i++){
			estimatedAffordablePaymentHighs[i].innerHTML = ASC.util.formatCurrency(estimatedAffordablePaymentHigh,2);
			
		}
		return estimatedAffordablePaymentHigh;
	}
}
var TabPanel = function(tabDom,panelDom,infoPanelDom,expand){
   var tabDom = tabDom;
   var panelDom = panelDom;
   var infoPanelDom = infoPanelDom;
   var expand  = expand;
   this.showPanel=function(){
	   tabDom.className="budgetCalculatorTabImg show";
	   panelDom.className="show";
	   infoPanelDom.className="show";
   }
   this.before=function(){
	   if(expand != undefined && expand != null){
		   if(expand.before != undefined && expand.before != null){
			   if(!expand.before()){
				   return false;
			   }
		   }
	   }
	   return true;
   }
   this.hidePanel=function(){
	   tabDom.className="budgetCalculatorTabImg hide";
	   panelDom.className="hide";
	   infoPanelDom.className="hide";
   }
}
var TabManage=function(){
	var currentTabKey = "";
	var tabMap=new Map();
	this.registerTab=function(key,tabPanel){
		tabMap.put(key,tabPanel);
	}
	this.showTab=function(key){
		if(!tabMap.get(key).before()){
		
			return;
		}
		if(tabMap.get(currentTabKey) != null){
			tabMap.get(currentTabKey).hidePanel();
		}
		tabMap.get(key).showPanel();
		currentTabKey = key;
	}
}
var Money ={
	formatMoney:function(num){
		return "$"+parseFloat(num).toFixed(2);
	},
	formatNumbert:function(money){
		money = money !=""?parseFloat(money):0;
		return money;
	}
}
function validateMonthlyIncome(){
	var elLabel = ASC.getEl('monthlyIncomeLabel');
	var elField = ASC.getEl('monthlyIncomeInput');
	
	var monthlyIncome = elField.getValue();
	if(monthlyIncome == 0 || monthlyIncome == ""){
		ASC.getEl('divMonthlyIncomeMsg').dom.style.display ='block';
		ASC.util.addClass(elLabel,"errorText");
		ASC.util.addClass(elField,"errorField");
		return false;
	} else {
		ASC.getEl('divMonthlyIncomeMsg').dom.style.display ='none';
		ASC.util.removeClass(elLabel,"errorText");
		ASC.util.removeClass(elField,"errorField");
		return true;
	}
}
function validateInputMoneyFormat(fld,e){
	//if(num.value.match(/^[\+\-]?\d*?\.?\d*?$/) == null){
	//if(num.value.match(/^[0-9]{0,}\.{0,1}[0-9]{0,}$/) == null){
	//	num.value = 0;
	//}
	var str = fld.value; 
	
	//remove non-numeric characters
	ptn = /[^0123456789.]/;
	while(ptn.test(str))
		str = str.replace(ptn,'');

	//remove duplicated  decimals
	ptn = /^[0-9]{0,}\.{0,1}[0-9]{0,}$/;
	while(!ptn.test(str))
		str = str.replace(/\./,'');
	
	//remove leading zeroes
	ptn = /^0\d/;
	while(ptn.test(str))
		str = str.replace(/0/,'');

	//key empty field as '0'
	if(str==''||str==null)
		str='0';
	
	fld.value = str;
}

