 var amountTip = 'Total amount investing';
 var stratDateTip = 'Month and year investment period begins';
 var endDateTip = 'Month and year investment period ends';
 var monthlyPercentageWithdrawTip = 'Monthly percentage withdrawn from original US $ Amount investment';
 var monthlyAmountWithdrawTip = 'Monthly US $ amount withdrawn from original US $ Amount investment';
 var monthlyReturnTip = 'Monthly percentage rate of return on Withdrawal Amount';
 var gainTip = 'US $ value gained or lost on investment';
 var termTip = 'Duration of investment, in months';
 var roiTip = 'US $ earned, as a result of investing with Treadstone';
 var returnTip = 'Compounded profit gained, in US $ and percentage';
 
 var chart;
 
 
 function calculateCompunded(principal, rate, percentage, amount, month) {
 	
 	var result = {};
 	
 	var total = principal;
 	
 	var interest = total * rate;
 	var withdraw = interest - (percentage * interest) - (interest  - amount);
 	var profitReinvest = interest + withdraw;
 	var totalGain = interest;
 	
 	result[1] = totalGain / principal;
 	
 	for(i = 2; i <= month; ++i) {
 		total = total + profitReinvest;
 		
 		interest = total * rate;
 		
 		totalGain += interest;
 		
 		result[i] = totalGain / principal;
 		
 		withdraw = interest - (percentage * interest) - (interest  - amount);
 		profitReinvest = interest + withdraw;
 	}
 	
 	result['TotalGain'] = totalGain;
 	result['ROI'] = totalGain / principal;
 	
 	return result;
 }
 
 function calculateNormal(principal, rate, month) {
	
	var result = {};
	var totalGain = 0;
	
	for(i = 1; i <= month; ++i) {
		totalGain += (principal * rate);
		result[i] = totalGain / principal;
	}
	
	result['TotalGain'] = totalGain;
 	result['ROI'] = totalGain / principal;
 	
 	return result;
 	
 }
 
 
 function drawChart(cresult, nresult, month, startMonth) {                                                                        
 	
        var monthMap = {0:'DEC', 1:'JAN', 2:'FEB',3:'MAR',4:'APR',5:'MAY',6:'JUN',7:'JUL',8:'AUG',9:'SEP',10:'OCT',11:'NOV',12:'DEC'};  	
 	 
        var data = new google.visualization.DataTable();                                            
        data.addColumn('string', 'Month');                                                           
        data.addColumn('number', 'Compounded');                                                          
        data.addColumn('number', 'Non-Compounded');                                                       
        data.addRows(month);                                                                            
        
        for(i = 1; i <= month; ++i) {
        	data.setValue(i-1, 0, monthMap[ (startMonth + (i-1)%12)%12]);
        	data.setValue(i-1, 1, cresult[i] * 100);
        	data.setValue(i-1, 2, nresult[i] * 100);
        }
        
        var formatter = new google.visualization.NumberFormat({suffix: '%'});
  		formatter.format(data, 1);
  		formatter.format(data, 2);
                                                                                                          
        chart = new google.visualization.LineChart(document.getElementById('graphPlaceholder'));       
        chart.draw(data, {width: 465, height: 200, legend: 'bottom', title: 'Gain Estimate', backgroundColor: '#D3D3D3',  
        	axisColor : '#8A8A8A', legend:'none', tooltipWidth:'90px', tooltipHeight:'45px'});
        
        google.visualization.events.addListener(chart, 'onmouseover', tipOver);
    	google.visualization.events.addListener(chart, 'onmouseout', tipOut);
        
      }        

 function tipOver(e) {
    chart.setSelection([e]);
  }
  
  function tipOut(e) {
    chart.setSelection([{'row': null, 'column': null}]);
  }


$(document).ready(function(){
	
	var amountInput = $("#us_amount");
	var startMonthInput = $("#invest_start_month");
	var startYearInput = $("#invest_start_year");
	var endMonthInput = $("#invest_end_month");
	var endYearInput = $("#invest_end_year");
	var monthAmountInput = $("#monthly_withdrawal_amount");
	var percentageInput = $("#monthly_withdrawal_percentage");
	var rateInput = $("monthly_percentage");
	
	$("#us_amount").focus(function() {	
		if(this.value == '$0,000,000') {
			this.value='';
		}
	});
	
	$("#monthly_withdrawal_amount").focus(function() {	
		if(this.value == '$0,000,000') {
			this.value='';
		}
	});
	
	$("#us_amount").blur(function() { validateTotalAmount(); $("#us_amount").formatCurrency();  });
	$("#monthly_withdrawal_amount").blur(function() { validateMonthAmount(); $("#monthly_withdrawal_amount").formatCurrency();  });
	
	$("#us_amount").keyup(validateTotalAmount);
	$("#monthly_withdrawal_amount").keyup(validateMonthAmount);
	$("#invest_end_year").keyup(validateDate);
	$("#invest_end_year").blur(validateDate);
	
	function validateTotalAmount() {
		var value = $("#us_amount").asNumber();
		
		if(value > 0) {
			$("#us_amount").removeClass("error");
			$("#us_amount_label").text("US $ Amount:");
			$("#us_amount_label").removeClass("error");
			return true;
		}
		
		$("#us_amount").addClass("error");
		$("#us_amount_label").addClass("error");
		$("#us_amount_label").text("Entered value is not valid:");
		return false;
	}
	
	function validateMonthAmount() {
		var value = $("#monthly_withdrawal_amount").asNumber();
		
		var total = $("#us_amount").asNumber();
		
		var sm = parseInt($("#invest_start_month").val());
		var sy = parseInt($("#invest_start_year").val());
		var em = parseInt($("#invest_end_month").val());
		var ey = parseInt($("#invest_end_year").val());
		
		var monthNumber = (ey - sy) * 12 + em - sm + 1;
		
		var check = true;
		
		if (total > 0 && value > 0 && monthNumber > 0) {
			
			if ( total / monthNumber < value) check = false;
		}
		
		
		if( $("#amount_div").hasClass('disabled') || value > 0) {
					
			$("#monthly_withdrawal_amount").removeClass("error");
			$("#monthly_withdrawal_amount_label").text("Monthly US $ Withdrawal Amount:");
			$("#monthly_withdrawal_amount_label").removeClass("error");
			
			if (!check) {
				$("#monthly_withdrawal_amount").addClass("error");
				$("#monthly_withdrawal_amount_label").addClass("error");
				$("#monthly_withdrawal_amount_label").text("Withdrawal amount exceeds Total:");
				return false;
			} 
			
			
			return true;
		}
		
		$("#monthly_withdrawal_amount").addClass("error");
		$("#monthly_withdrawal_amount_label").addClass("error");
		$("#monthly_withdrawal_amount_label").text("Entered value is not valid:");
		return false;
	}
	
	function validateDate() {
		var sm = parseInt($("#invest_start_month").val());
		var sy = parseInt($("#invest_start_year").val());
		var em = parseInt($("#invest_end_month").val());
		var ey = parseInt($("#invest_end_year").val());
	
		var result = true;
		
		if (sy > ey) result = false;
		
		if ((sy == ey) && (sm >= em)) result = false;
		
		if(result) {
			$("#invest_end_month").removeClass("error");
			$("#invest_end_year").removeClass("error");
			$("#invest_end_label").text("Investment End Date:");
			$("#invest_end_label").removeClass("error");
			return true;
		}
		
		$("#invest_end_month").addClass("error");
		$("#invest_end_year").addClass("error");
		$("#invest_end_label").addClass("error");
		$("#invest_end_label").text("End date must large than start:");
		return false;
	}
	
	/* ROI Calculator */
	$("#calculateAction").click(function(){
		
		if (!validateTotalAmount() || !validateMonthAmount() || !validateDate()) return false;
		
		var sm = parseInt($("#invest_start_month").val());
		var sy = parseInt($("#invest_start_year").val());
		var em = parseInt($("#invest_end_month").val());
		var ey = parseInt($("#invest_end_year").val());
		
		var monthNumber = (ey - sy) * 12 + em - sm + 1;
		
		var startMonth = sm;
		
		var p = $("#us_amount").asNumber();
		
		var r = parseFloat($("#monthly_percentage").val()) / 100.0;
		
		var mp = parseFloat($("#monthly_withdrawal_percentage").val()) / 100.0;
		
		var ma = $("#monthly_withdrawal_amount").asNumber();
		
		
		if ($("#amount_div").hasClass("disabled")) {
			ma = 0;
		} else mp = 0;
		
		$("#calculating").show();
		
		$(".progress").animate({ width: '100%'}, 1200, function(){
			$("#calcForm").hide();
			
			
			var cresult = calculateCompunded(p, r, mp, ma, monthNumber);
			var nresult = calculateNormal(p, r, monthNumber);                                
      		drawChart(cresult, nresult, monthNumber, startMonth);
      		
      		$("#gain_lost").text(cresult['TotalGain']);
      		$("#gain_lost").formatCurrency();
      		$("#invest_term").text(monthNumber + ' Months');
      		$("#roi").text( parseFloat(cresult['ROI']*100).toFixed(2) + "%");
      		
      		$("#result_title").text('Gain Estimate (' + (sy == ey ? sy : (sy + '-' + ey)) + ')');
      		
      		var diff = cresult['TotalGain'] - nresult['TotalGain'];
      		
      		$("#compound_return").text(diff);
      		$("#compound_return").formatCurrency();
      		$("#compound_return").append(' (' + parseFloat( (diff / 1000) * 100 ).toFixed(2) + "%)");
      									
			$("#calcResults").show();
		});
		return false;
	});
	
	$("#newCalculateAction").click(function(){
		
		
		$("#calcResults").hide();

		$("#calcForm").show();
		$(".progress").css("width","");
		$("#calculating").hide();	
			
      									
			
		
		return false;
	});
	
	
	$("#us_amount").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ amountTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#invest_start_month").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ stratDateTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#invest_start_year").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ stratDateTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#invest_end_month").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ endDateTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#invest_end_year").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ endDateTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#monthly_withdrawal_percentage").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ monthlyPercentageWithdrawTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#monthly_withdrawal_amount").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ monthlyAmountWithdrawTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#monthly_percentage").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ monthlyReturnTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#percentage_div").click(function(){
		$(this).removeClass('disabled');
		$("#amount_div").addClass('disabled');
		$("#monthly_withdrawal_amount").removeClass("error");
		$("#monthly_withdrawal_amount_label").text("Monthly US $ Withdrawal Amount:");
		$("#monthly_withdrawal_amount_label").removeClass("error");
	});
	
	$("#amount_div").click(function(){
		$(this).removeClass('disabled');
		$("#percentage_div").addClass('disabled');
	});
	
	$("#gain_lost").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ gainTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#invest_term").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ termTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#roi").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ roiTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	$("#compound_return").each(function(){
		$(this).after('<div class="fieldTip"><span>'+ returnTip +'</span></div>');
		$(this).attr('title', '');
	});
	
	
	
	$(".fieldTip span").css('opacity', 0.3);
	$(".fieldTip").hide();
	$(".calcBody .results span, .calcBody .row input, .calcBody .row select").hover(
		function(){
			$(this).next().show();
		},
		function(){
			$(this).next().hide();
		}
	);
	
	/*
	if ( $("#caseStudies").length>0 ) {
		$("#caseStudies .description p strong").hide();
		$("#caseStudies .description p em").hide();
		$("#caseStudies .description p br").hide();
		
		$(".theContent p strong").show();
		$(".theContent p em").show();
		$(".theContent p br").show();
	}
	*/
	
});