/**
 * @author chris deemer
 * 
 * @dependencies jQuery, jQuery.money
 */
$(function() {
	
	$('.money').money();

	initFields();
	
	$('#totYearCost').change(function() {
		setTotalCost(this.value);
		calcSavings();
		
		/*ajax for award-pull from award field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateTotalYearlyCostOfCollege(this.value);
	});
	$('#awardAmt_famContr').change(function() {
		setFam();
		setTotalFreeA();
		setTotalFreeT();
		setTotalAidA();
		setTotalAidT();
		calcSavings();

		/*ajax for award-pull from award field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateExpectedFamilyContribution(this.value);
	});
	
	
	$('#awardAmt_Scholarships').change(function() {
		checkTaken(this.value, $('#amtTaken_Scholarships'));
		setTotalFreeA();
		setTotalFreeT();
		setTotalAidA();
		calcSavings();
		if(this.value=="0"){
			$('#slider_scholarship').slider('moveTo',0,0).slider('disable');
		}
		else{
			$('#slider_scholarship').slider('enable');
			$('#slider_scholarship').slider('moveTo',percent($('#amtTaken_Scholarships').val(),this.value)*100,0);
		}
		/*ajax for award-pull from award field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateScholarships(this.value);
	});
	$('#amtTaken_Scholarships').change(function() {
		$('#slider_scholarship').slider('moveTo',percent(this.value,$('#awardAmt_Scholarships').val())*100,0);
	});
	$('#awardAmt_Grants').change(function() {
		checkTaken(this.value, $('#amtTaken_Grants'));
		setTotalFreeA();
		setTotalFreeT();
		setTotalAidA();
		calcSavings();
		if(this.value=="0"){
			$('#slider_grant').slider('moveTo',0,0).slider('disable');
		}
		else{
			$('#slider_grant').slider('enable');
			$('#slider_grant').slider('moveTo',percent($('#amtTaken_Grants').val(),this.value)*100,0);
		}
		/*ajax for award-pull from award field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateGrants(this.value);
	});
	$('#amtTaken_Grants').change(function() {
		$('#slider_grant').slider('moveTo',percent(this.value,$('#awardAmt_Grants').val())*100,0);
	});
	$('#awardAmt_workStudy').change(function() {
		checkTaken(this.value, $('#amtTaken_workStudy'));
		setTotalWorkA();
		setTotalWorkT();
		setTotalAidA();
		calcSavings();
		if(this.value=="0"){
			$('#slider_workstudy').slider('moveTo',0,0).slider('disable');
		}
		else{
			$('#slider_workstudy').slider('enable');
			$('#slider_workstudy').slider('moveTo',percent($('#amtTaken_workStudy').val(),this.value)*100,0);
		}
		/*ajax for award-pull from award field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateWorkStudy(this.value);
	});
	$('#amtTaken_workStudy').change(function() {
		$('#slider_workstudy').slider('moveTo',percent(this.value,$('#awardAmt_workStudy').val())*100,0);
	});
	$('#awardAmt_sp').change(function() {
		checkTaken(this.value, $('#amtTaken_sp'));
		setTotalLowA();
		setTotalLowT();
		setTotalAidA();
		calcSavings();
		if(this.value=="0"){
			$('#slider_sp').slider('moveTo',0,0).slider('disable');
		}
		else{
			$('#slider_sp').slider('enable');
			$('#slider_sp').slider('moveTo',percent($('#amtTaken_sp').val(),this.value)*100,0);
		}
		/*ajax for award-pull from award field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateStaffordPerkinsLoans(this.value);
	});
	$('#amtTaken_sp').change(function() {
		$('#slider_sp').slider('moveTo',percent(this.value,$('#awardAmt_sp').val())*100,0);
	});
	$('#awardAmt_PLUS').change(function() {
		checkTaken(this.value, $('#amtTaken_PLUS'));
		setTotalAddLoanA();
		setTotalAddLoanT();
		setTotalAidA();
		calcSavings();
		if(this.value=="0"){
			$('#slider_plus').slider('moveTo',0,0).slider('disable');
		}
		else{
			$('#slider_plus').slider('enable');
			$('#slider_plus').slider('moveTo',percent($('#amtTaken_PLUS').val(),this.value)*100,0);
		}
		/*ajax for award-pull from award field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdatePlusLoans(this.value);
	});
	$('#amtTaken_PLUS').change(function() {
		$('#slider_plus').slider('moveTo',percent(this.value,$('#awardAmt_PLUS').val())*100,0);
	});
	$('#awardAmt_schoolLoans').change(function() {
		checkTaken(this.value, $('#amtTaken_schoolLoans'));
		setTotalAddLoanA();
		setTotalAddLoanT();
		setTotalAidA();
		calcSavings();
		if(this.value=="0"){
			$('#slider_school').slider('moveTo',0,0).slider('disable');
		}
		else{
			$('#slider_school').slider('enable');
			$('#slider_school').slider('moveTo',percent($('#amtTaken_schoolLoans').val(),this.value)*100,0);
		}
		/*ajax for award-pull from award field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateSchoolLoans(this.value);
	});
	$('#amtTaken_schoolLoans').change(function() {
		$('#slider_school').slider('moveTo',percent(this.value,$('#awardAmt_schoolLoans').val())*100,0);
	});
	$('#awardAmt_bankLoans').change(function() {
		checkTaken(this.value, $('#amtTaken_bankLoans'));
		setTotalAddLoanA();
		setTotalAddLoanT();
		setTotalAidA();
		calcSavings();
		if(this.value=="0"){
			$('#slider_bank').slider('moveTo',0,0).slider('disable');
		}
		else{
			$('#slider_bank').slider('enable');
			$('#slider_bank').slider('moveTo',percent($('#amtTaken_bankLoans').val(),this.value)*100,0);
		}
		/*ajax for award-pull from award field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateBankLoans(this.value);
	});
	$('#amtTaken_bankLoans').change(function() {
		$('#slider_bank').slider('moveTo',percent(this.value,$('#awardAmt_bankLoans').val())*100,0);
	});

	initSliders();
});



function initFields() {
	setTotalCost($('#totYearCost').val());
	setTotalAidA();
	setTotalAidT();
	setFam();
	setTotalFreeA();
	setTotalFreeT();
	setTotalWorkA();
	setTotalWorkT();
	setTotalLowA();
	setTotalLowT();
	setTotalAddLoanA();
	setTotalAddLoanT();
	calcSavings();
}

function initSliders(){
	setupSlider($('#slider_scholarship'),$('#amtTaken_Scholarships'),$('#awardAmt_Scholarships'), change_scholarshipT);
	setupSlider($('#slider_grant'),$('#amtTaken_Grants'),$('#awardAmt_Grants'), change_grantT);
	setupSlider($('#slider_workstudy'),$('#amtTaken_workStudy'),$('#awardAmt_workStudy'), change_workT);
	setupSlider($('#slider_sp'),$('#amtTaken_sp'),$('#awardAmt_sp'), change_spT);
	setupSlider($('#slider_plus'),$('#amtTaken_PLUS'),$('#awardAmt_PLUS'), change_plusT);
	setupSlider($('#slider_school'),$('#amtTaken_schoolLoans'),$('#awardAmt_schoolLoans'), change_schoolT);
	setupSlider($('#slider_bank'),$('#amtTaken_bankLoans'),$('#awardAmt_bankLoans'), change_bankT);
}

function setupSlider($slider, $taken, $max, change_fn){
	$slider.slider({
		change: function(e, ui){
				if(e){ /*triggered by slider*/
					$taken.val(Math.round((ui.value / 100) * parseInt($max.val())));
					change_fn($taken.val());
				}
				else{ /*triggered by moveTo function from change event on field*/
					change_fn($taken.val())
				}
		}
	});
	$slider.slider('moveTo',percent($taken.val(),$max.val())*100,0);
	if($max.val()=="0"){	
		$slider.slider("disable");
	}
}

function percent(v,max){
	var taken=parseInt(v);
	var award=parseInt(max);
	return award==0?award:taken/award;
}

/*amount taken change functions: append ajax to end of each function*/
function change_scholarshipT(v){
		var boundVal=checkMax(v, $('#awardAmt_Scholarships').val());
		$('#amtTaken_Scholarships').val(boundVal);
		setTotalFreeT();
		setTotalAidT();
		calcSavings();
		/*ajax for amtTaken field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateScholarshipsUsed(boundVal);
}
function change_grantT(v){
		var boundVal= checkMax(v, $('#awardAmt_Grants').val());
		$('#amtTaken_Grants').val(boundVal);
		setTotalFreeT();
		setTotalAidT();
		calcSavings();
		/*ajax for amtTaken field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateGrantsUsed(boundVal);
}

function change_workT(v){
		var boundVal = checkMax(v, $('#awardAmt_workStudy').val());
		$('#amtTaken_workStudy').val(boundVal);
		setTotalWorkT();
		setTotalAidT();
		calcSavings();
		/*ajax for amtTaken field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateWorkStudyUsed(boundVal);
}
function change_spT(v){
		var boundVal = checkMax(v, $('#awardAmt_sp').val());
		$('#amtTaken_sp').val(boundVal);
		setTotalLowT();
		setTotalAidT();
		calcSavings();
		/*ajax for amtTaken field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateStaffordPerkinsLoansUsed(boundVal);
}
function change_plusT(v){
		var boundVal = checkMax(v, $('#awardAmt_PLUS').val());
		$('#amtTaken_PLUS').val(boundVal);
		setTotalAddLoanT();
		setTotalAidT();
		calcSavings();
		/*ajax for amtTaken field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdatePlusLoansUsed(boundVal);
}
function change_schoolT(v){
		var boundVal = checkMax(v, $('#awardAmt_schoolLoans').val());
		$('#amtTaken_schoolLoans').val(boundVal);
		setTotalAddLoanT();
		setTotalAidT();
		calcSavings();
		/*ajax for amtTaken field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateSchoolLoansUsed(boundVal);
}
function change_bankT(v){
		var boundVal = checkMax(v, $('#awardAmt_bankLoans').val());
		$('#amtTaken_bankLoans').val(boundVal);
		setTotalAddLoanT();
		setTotalAidT();
		calcSavings();
		/*ajax for amtTaken field*/
		NationalCity.StudentLender.Web.PNCSite.XmlService.AwardLetter.UpdateBankLoansUsed(boundVal);
}

function setTotalCost(total) {
	sumSet([total], [$('#awardAmt_totalCost'), $('#amtTaken_totalCost')]);
}
function setTotalAidA() {
	sumSet([$('#awardAmt_famContr').val(), $('#awardAmt_Scholarships').val(),
			$('#awardAmt_Grants').val(), $('#awardAmt_workStudy').val(),
			$('#awardAmt_sp').val(), $('#awardAmt_PLUS').val(),
			$('#awardAmt_schoolLoans').val(), $('#awardAmt_bankLoans').val()],
			[$('#awardAmt_totalAid')]);
}
function setTotalAidT() {
	sumSet([$('#awardAmt_famContr').val(), $('#amtTaken_Scholarships').val(),
			$('#amtTaken_Grants').val(), $('#amtTaken_workStudy').val(),
			$('#amtTaken_sp').val(), $('#amtTaken_PLUS').val(),
			$('#amtTaken_schoolLoans').val(), $('#amtTaken_bankLoans').val()],
			[$('#amtTaken_totalAid')]);
}
function setFam() {
	sumSet([$('#awardAmt_famContr').val()], [$('#amtTaken_famContr')]);
}
function setTotalFreeA() {
	sumSet([$('#awardAmt_famContr').val(), $('#awardAmt_Scholarships').val(),
			$('#awardAmt_Grants').val()], [$('#awardAmt_totalFree')]);
}
function setTotalFreeT() {
	sumSet([$('#amtTaken_famContr').text(), $('#amtTaken_Scholarships').val(),
			$('#amtTaken_Grants').val()], [$('#amtTaken_totalFree')]);
}
function setTotalWorkA() {
	sumSet([$('#awardAmt_workStudy').val()], [$('#awardAmt_totalWorkStudy')]);
}
function setTotalWorkT() {
	sumSet([$('#amtTaken_workStudy').val()], [$('#amtTaken_totalWorkStudy')]);
}
function setTotalLowA() {
	sumSet([$('#awardAmt_sp').val()], [$('#awardAmt_totalLowInterest')]);
}
function setTotalLowT() {
	sumSet([$('#amtTaken_sp').val()], [$('#amtTaken_totalLowInterest')]);
}
function setTotalAddLoanA() {
	sumSet([$('#awardAmt_PLUS').val(), $('#awardAmt_schoolLoans').val(),
			$('#awardAmt_bankLoans').val()], [$('#awardAmt_additional')]);
}
function setTotalAddLoanT() {
	sumSet([$('#amtTaken_PLUS').val(), $('#amtTaken_schoolLoans').val(),
			$('#amtTaken_bankLoans').val()], [$('#amtTaken_additional')]);
}
function calcSavings() {
	var fam = parseInt($('#awardAmt_famContr').val());
	var schol = parseInt($('#amtTaken_Scholarships').val());
	var grant = parseInt($('#amtTaken_Grants').val());
	var work = parseInt($('#amtTaken_workStudy').val());
	var sp = parseInt($('#amtTaken_sp').val());
	var plus= parseInt($('#amtTaken_PLUS').val());
	var school = parseInt($('#amtTaken_schoolLoans').val());
	var bank = parseInt($('#amtTaken_bankLoans').val());
	var cost = parseInt($('#totYearCost').val());
	var savings = cost - (fam + schol + grant + work + sp + plus + school + bank);
	savings = savings < 0 ? 0 : savings;
	$('#amtTaken_totalAddSavings').text($.fn.money.format(savings.toString(), {comma : true}));	
	fam = parseInt($('#awardAmt_famContr').val());
	schol = parseInt($('#awardAmt_Scholarships').val());
	grant = parseInt($('#awardAmt_Grants').val());
	work = parseInt($('#awardAmt_workStudy').val());
	sp = parseInt($('#awardAmt_sp').val());
	plus = parseInt($('#awardAmt_PLUS').val());
	school = parseInt($('#awardAmt_schoolLoans').val());
	bank = parseInt($('#awardAmt_bankLoans').val());
	cost = parseInt($('#totYearCost').val());
	var savingsT = cost - (fam + schol + grant + work + sp + plus + school + bank);
	savingsT = savingsT < 0 ? 0 : savingsT;
	$('#awardAmt_totalAddSavings').text($.fn.money.format(savingsT.toString(), {comma : true}));
}

/**
 * @param {String[]}
 *            sumThis
 * @param {jObject[]}
 *            setThis
 */
function sumSet(sumThis, setThis) {
	var total = 0;
	var i;
	var j;
	for (i in sumThis) {
		total += parseInt($.fn.money.unformat(sumThis[i]));
	}
	for (j in setThis) {
		if (setThis[j].val()) {
			setThis[j].val(total);
		} 
		else if (setThis[j].text()) {
			setThis[j].text($.fn.money.format(total.toString(), {comma : true}));
		}
	}
	return false;
}

/**
 * @descr when awarded amount is updated the taken field should be updated if
 *        greater than new maximum(awarded amount)
 *        UPDATE:  sets taken amount to max if taken is zero
 * @param {String}
 *            max
 * @param {jObject}
 *            takenField
 */
function checkTaken(max, takenField) {
	var iMax=parseInt(max);
	var iTaken=parseInt(takenField.val());
	if (iMax < iTaken || iTaken==0) {
		takenField.val(max);
	}
}

function checkMax(taken, max) {
	var t=parseInt(taken);
	var m=parseInt(max);
	if (t > m) {
		return max;
	} else {
		return taken;
	}
}

