var previusMsrp = 0;

function init() {
	sendLoadModelYearSelectorRequest();
	YAHOO.util.Event.addListener(["accessories", "downpayment", "tradeInValue", "msrp"], "keyup", checkValues);
	// YAHOO.util.Event.addListener("trimTranIdContainer", "change", sendLoadMsrpRequest);
	// YAHOO.util.Event.addListener("trimIdContainer", "change", calculate);
	// YAHOO.util.Event.addListener("tranId", "change", changeName);
	YAHOO.util.Event.addListener(["apr", "msrp", "numberOfMonths"], "change", calculate);
	// YAHOO.util.Event.addListener(["accessories", "downpayment", "tradeInValue"], "change", calculate);
}

function sendLoadModelYearSelectorRequest() { 
	YAHOO.util.Connect.asyncRequest('GET', '/selectYear.do', { success:loadModelYearSelector }, null);
}

function loadModelYearSelector(response) {
	dwr.util.setValue('modelYearContainer', response.responseText, { escapeHtml:false });
	var modelYearSelect = document.getElementById("modelYear")
	for(i=0; i<modelYearSelect.length; i++) {
		document.getElementById("modelYear").options[i].id = modelYearSelect.options[i].value;
	}
	// alert("first model year id=" + document.getElementById("modelYear").options[0].id);
	YAHOO.util.Event.addListener("modelYear", "change", sendLoadProductModelSelectorRequest);
	sendLoadProductModelSelectorRequest();
}

function sendLoadProductModelSelectorRequest() {
	var modelYear = getSelectedModelYear();
	YAHOO.util.Connect.asyncRequest('POST', '/selectModel.do', { success:loadProductModelSelector }, 'selectedYear=' + modelYear);
}

function loadProductModelSelector(response) {
	dwr.util.setValue('productModelIdContainer', response.responseText, { escapeHtml:false });
	YAHOO.util.Event.addListener("productModelId", "change", sendLoadTrimRequest);
	sendLoadTrimRequest();
}

function sendLoadTrimRequest() {
	var productModelId = getSelectedProductId();
	YAHOO.util.Connect.asyncRequest('POST', '/selectTrim.do', { success:loadTrimSelector }, 'selectedModelId=' + productModelId);
}

function loadTrimSelector(response) {
	dwr.util.setValue('trimIdContainer', response.responseText, {escapeHtml:false});
	YAHOO.util.Event.addListener("marketingNamesId", "change", sendLoadTranRequest);
	sendLoadTranRequest();
}

function sendLoadTranRequest(){

	
	
	var marketingNameId = getSelectedMarketingNameId();
	var modelId = getSelectedProductId();
	var modelYear = getSelectedModelYear();

	YAHOO.util.Connect.asyncRequest('POST', '/selectTrans.do', { success:loadTranSelector }, 'selectedMarketingNameId=' + marketingNameId + '&selectedYear=' + modelYear);
}

function loadTranSelector(response){
	dwr.util.setValue('trimTranIdContainer', response.responseText, {escapeHtml:false});
	
	dwr.util.setValue('year', getSelectedModelYear());
	dwr.util.setValue('name', getSelectedTrimLevel() + " " + getSelectTran());
	YAHOO.util.Event.addListener("tranId", "change", sendLoadMsrpRequest);
	
	sendLoadMsrpRequest();
}	

function sendLoadMsrpRequest(e) {
	//suzukiAutoProductModelTrimTranRepository.findMsrpByModelTrimTranId(getSelectedTrimTranId(), loadMsrp);
	vehicleService.getMsrpForMarketingNameIdAndTransId("Suzuki", getSelectedMarketingNameId(), getSelectedTrimTranId(), loadMsrp);
}

function loadMsrp(msrp) {
	dwr.util.setValue('msrp', msrp);
	dwr.util.setValue('name', getSelectedTrimLevel() + " " + getSelectTran());
	if (msrp == "$0.00") {
		document.getElementById("calcfinance").style.display = "none";
		document.getElementById("msrp").firstChild.nodeValue = "Please Contact Dealer";
	} else {
		document.getElementById("calcfinance").style.display = "block";
		calculate();
	}
}

function checkValues() {
	var access = document.getElementById("accessories").value;
	var tradein = document.getElementById("tradeInValue").value;	
	var downpay = document.getElementById("downpayment").value;	
	var msrp = parseFloat(unFormatCurrency(document.getElementById("msrp").firstChild.nodeValue));
	
	
	if(isNaN(tradein)||(tradein==''))	tradein=0;
	if(isNaN(downpay)||(downpay==''))	downpay=0;
	
	var sum = parseFloat(downpay) + parseFloat(tradein);	
	var dollarformat = /^\d+(\.)?(\d{0,2})?$/;
	
		
	if(parseFloat(access) >= msrp) {
		alert("Accessories amount must be lower than the Model MSRP.");
		document.getElementById("accessories").value = '0';
	/*} else if ((parseFloat(downpay) >= msrp)) {
		alert("Down payment amount must be lower than the Model MSRP.");
		document.getElementById("downpayment").value = '0';*/
	/*} else if (parseFloat(tradein) >= msrp) {
		alert("Trade-in amount must be lower than the Model MSRP.");
		document.getElementById("tradeInValue").value = '0';*/
	} else if(sum >= msrp + parseFloat(access) || (sum >= msrp && (access == "" || access <= 0 || access == null))) {
		alert("The sum of trade-in and down-payment must be lower than the total of MSRP and Accessories.");
		document.getElementById("downpayment").value = '0';
		document.getElementById("tradeInValue").value = '0';	
	}
	
	if (!access.match(dollarformat) && access != '') {
		alert("Please enter the accessories amount in format of XXXX.XX");
		document.getElementById("accessories").value = '0';
	} else if (!downpay.match(dollarformat) && downpay != '') {
		alert("Please enter the down payment amount in format of XXXX.XX");
		document.getElementById("downpayment").value = '0';
	} else if (!tradein.match(dollarformat) && tradein != '') {
		alert("Please enter the trade-in amount in format of XXXX.XX");
		document.getElementById("tradeInValue").value = '0';		
	}
	
	calculate();
}

function calculate(e) {
	var request = {
		msrp : document.getElementById("msrp").firstChild.nodeValue,
		accessories : document.getElementById("accessories").value,
		downpayment : document.getElementById("downpayment").value,
		tradeInValue : document.getElementById("tradeInValue").value,
		warrantyIndex : getCheckedValue(document.theForm.special),
		apr : getSelectedApr(), // document.getElementById("apr").value,
		numberOfMonths : getSelectedMonths() // document.getElementById("numberOfMonths").value
	}
	
	financeCalculator.calculateAutoPayments(request, onCalculateComplete);
}

function onCalculateComplete(result) {
	if (result != null && typeof result == 'object') {
		dwr.util.setValue('amountFinanced', formatCurrency(result.amountFinanced));
		dwr.util.setValue('estimatedMonthlyPayment', formatCurrency(result.estimatedMonthlyPayment));
		// dwr.util.setValue('estimatedMonthlyPayment', dwr.util.toDescriptiveString(result.estimatedMonthlyPayment, 1));
	}
}

function getSelectedProductId() {
	var productIdSelectBox = document.getElementById("productModelId");
	return productIdSelectBox.options[productIdSelectBox.selectedIndex].value;
}

function getSelectProductModel() {
	var productIdSelectBox = document.getElementById("productModelId");
	return productIdSelectBox.options[productIdSelectBox.selectedIndex].innerHTML;
}

function getSelectedModelYear() {
	var modelYearSelectBox = document.getElementById("modelYear");
	return modelYearSelectBox.options[modelYearSelectBox.selectedIndex].value;
}

function getSelectedApr() {
	var modelYearSelectBox = document.getElementById("apr");
	return modelYearSelectBox.options[modelYearSelectBox.selectedIndex].value;
}

function getSelectedMonths() {
	var modelYearSelectBox = document.getElementById("numberOfMonths");
	return modelYearSelectBox.options[modelYearSelectBox.selectedIndex].value;
}

function getSelectedMarketingNameId(){
	var trimIdSelectBox = document.getElementById("marketingNamesId");
	return trimIdSelectBox.options[trimIdSelectBox.selectedIndex].value;
}

function getSelectedTrimTranId(){
	var trimTranIdSelectBox = document.getElementById("tranId");
	return trimTranIdSelectBox.options[trimTranIdSelectBox.selectedIndex].value;
}

function getSelectedTrimLevel(){
	var trimIdSelectBox = document.getElementById("marketingNamesId");
	return trimIdSelectBox.options[trimIdSelectBox.selectedIndex].innerHTML;
}

function getSelectTran(){
	var trimTranIdSelectBox = document.getElementById("tranId");
	return trimTranIdSelectBox.options[trimTranIdSelectBox.selectedIndex].innerHTML;
}

YAHOO.util.Event.onDOMReady(init);

// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	}
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num)){
		num = "0";
	}
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10){
		cents = "0" + cents;
	}
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++){
		num = num.substring(0,num.length-(4*i+3))+','+
		num.substring(num.length-(4*i+3));
	}
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function unFormatCurrency(money){	
	return money.toString().replace(/\$|\,/g,'');
}