$.namespace("MortgageCalculator.Slider");

MortgageCalculator.Slider = $.Class.extend({

	id : "",
	selector : "",
	myID : "",
                
	createSlider : function(){
		this.mySlider(this.selector + "sliderAmortization", parseInt($(this.selector + "amortization").val()),1,35, this.selector +"amortization", this.selector);
		this.rateSlider(this.selector +"sliderRate", parseFloat($(this.selector +"rate").val())*10000, 1, 1500, this.selector +"rate", this.selector);
		this.mortgageSlider(this.selector +"sliderMortgage", parseInt($(this.selector + "mortgage").val()), 50000, 3000000, this.selector +"mortgage", this.selector);
		//$(".slider-label").css("display","inline");
	},
				 
	rateSlider: function(sliderDiv,value, min, max,input, myID){

		$(sliderDiv).slider({
			value: value,
			min: min,
			max: max,
			slide: function(event, ui){
				var newValue = (ui.value)/100;
				$(input).val(newValue);
				calcMortgage(myID);
			}
		});
		
		$(input).val(($(sliderDiv).slider("value")/100));
		$(input).change(function(){
			var inputValue = parseFloat($(input).val())*100;
			if(inputValue >= min && inputValue <= max) {
				$(sliderDiv).slider('value',inputValue);
				calcMortgage(myID);
			} else {
				alert("Please pick a value within the range");
				return false;
			}
		});
	},
				
	mortgageSlider : function(sliderDiv,value, min, max,input, myID){
	
		$(sliderDiv).slider({
			value: value,
			min: min,
			max: max,
			step: 5000,
			slide: function(event, ui){
/*
				if(ui.value <=100){
					newValue = ui.value * 1000;
				}
				if (ui.value >100 && ui.value <=190) {
					newValue = (ui.value-90) * 10000;
				}
				if (ui.value >190 && ui.value <=200){
					newValue = parseFloat((ui.value-90)) * 10000;
				}
				if (ui.value >=200 && ui.value <=220){
					newValue = (ui.value-190) * 100000;
				}
*/
				$(input).val(ui.value);
				calcMortgage(myID);
			}
		});

		$(input).change(function(){
			var inputValue = parseInt($(input).val());
			if (inputValue >= 50000 && inputValue <= 3000000) {
				$(sliderDiv).slider('value', inputValue);
				calcMortgage(myID);
			} else {
				alert("Please enter a value within the range");
				return false;
			}
/*
			if(inputValue >= 50000 && inputValue <= 100000){
				$(sliderDiv).slider('value',inputValue/1000);
				calcMortgage(myID);
			} else if (inputValue >= 100000 && inputValue <= 1000000) {
				$(sliderDiv).slider('value',(inputValue/10000 + 90));
				calcMortgage(myID);
			} else if (inputValue >= 1000000 && inputValue <= 3000000){
				$(sliderDiv).slider('value',(inputValue/10000 + 190));
				calcMortgage(myID);
			} else {
				alert("Please pick a value within the range");
				return false;
			}
*/
		});    
	}, 
				       
	mySlider : function(sliderDiv,value, min, max,input, myID){
		$(sliderDiv).slider({
			value: value,
			min: min,
			max: max,
			slide: function(event, ui){
				$(input).val(ui.value);
				calcMortgage(myID);
			}
	    });
	    $(input).val($(sliderDiv).slider("value"));
	    $(input).change(function(){
			var inputValue = parseInt($(input).val());
			if(inputValue >= min && inputValue <= max){
				$(sliderDiv).slider('value',inputValue);
				calcMortgage(myID);
            } else {
                alert("Please pick a value within the range");
                return false;
            }
        });
	},
				
	init : function(id) {
		this.id = id;
		this.selector = "#id_" + this.id +"-";
		$(this.selector).ready(this.createSlider.bind(this));
    }
});

		

function isNumber(num){
	filter = /(^\d+\.?$)|(^\d*\.\d+$)/;
	if (filter.test(num)) {
		return true;
	} else {
		return false;
	}
}

function calcMortgage(form_id){
    var form_selector = form_id;
    var flag = false;
                    
	var amortization = $(form_selector +"amortization").val();  
	if(!isNumber(amortization)){  
        flag = true; 
    }
                    
    var annualRate = parseFloat(($(form_selector +"rate").val()/100));
	if(!isNumber(annualRate)){ 
		flag = true; 
	}
                        
	var mortgageAmount = $(form_selector +"mortgage").val();
	if(!isNumber(mortgageAmount)){ 
		flag = true;
	} 
                                           
	if (flag) {
		return false; 
	} else { 
		var count = 1;
		nPayments = amortization * 12;
		exp = 2/12;
		var compoundedRate = 1 + annualRate/2;
		r = Math.pow(compoundedRate,exp) -1;
		fullInterest = r + 1; 
		interestExp = Math.pow(fullInterest,nPayments);
		
		var monthlyPayment = mortgageAmount * ((r * interestExp)/(interestExp-1));
		var roundedMonthly = monthlyPayment*100;
	    roundedMonthly = Math.round(roundedMonthly);
	    roundedMonthly = roundedMonthly/100;
		$(form_selector +"total-calculated").html("Monthly Payment: $" + roundedMonthly);
    }
}

     