
function savedvehiclesLoad() {
	try {
	    var carousel = $("#savedvehicles_carousel");
	    if(carousel.length > 0) {
	        $("#savedvehicles").ready(function() { 
	            carousel.jcarousel({size:carousel.children("li").length, scroll:1});
	            // Not sure why this happens
	            var width = eval(carousel.css("width").replace(/[^\d]/g, ""));
	            if (width < 100) carousel.css("width", "672px");
	            // Not sure why this happens
	            var height = eval(carousel.css("height").replace(/[^\d]/g, ""));
	            if (height < 100) carousel.css("height", "240px");
	        });
	     }
	}
	catch(e) {
		//alert("savedvehiclesLoad() exception = " + e);
	}
	finally {
	    hideLoader();
	}
     // No longer needed
     //if(!suggestionsLoaded) tryWhenAvailable("loadSuggestionPayments");
}
// No longer needed
function loadSuggestionPayments() {
    var acode = document.forms["savedvehicles_estimator_form"].aCode.value;
    var url = root+"/garage/suggestionPayments.do?acodes=" + acode;
    var divs = $("#savedvehicles_carousel .price");
    var prefix = "sug_";
    divs.each(function() {
        url += "&acodes=" + this.id.substring(prefix.length);
    });
    $.getJSON(url, function(obj) {
        var pay = obj[acode];
        for(var a in obj) {
            var sug = $("#" + prefix + a);
            if (sug.length > 0) {
                var str;
                if (lang == "fr") str = "FIXME: Need French {0} $";
                else str = "for only ${0} more per month";
                sug.html(stringReplacement(str, (obj[a] - pay)));
            }
        }
    });
}

function changeSavedVehiclesTab(link, contentClass) {
    var item = $(link);
    var inactiveItems = item.siblings();
    inactiveItems.removeClass("on");
    item.addClass("on");
    
    $("." + contentClass).removeClass("on");
    $("#" + link.id.replace(/_tab\d*/, "")).addClass("on");
    return false;
}

function selectSavedVehicle(link, vhclId) {
    showLoader();
    var url = link.href + "&ajax=true";
    $("#savedvehicles").load(url, null, savedvehiclesLoad);
    return false;
}

function deleteSavedVehicle(link, vhclId) {
	// TODO Confirm delete
	return selectSavedVehicle(link, vhclId);
}

function toggleSummarySlider(slider) {
    var elem = $(slider);
    var content = $(slider).children("ul");
    if (elem.hasClass("on")) {
        content.slideUp("slow");
    } else {
        content.slideDown("slow");
    }
    elem.toggleClass('on');
}
// TBD Delete
function updateRetailBalance(form) {
    //var defDownPayment = getTypedFormElementValue(form["retailDownPayment"], form["retailDownPayment"].defaultValue);
    var downPayment = getTypedFormElementValue(form["retailDownPayment"]);
    //if (defDownPayment != downPayment) {
    	var msrp = getTypedFormElementValue(form["retailSellingPrice"]);
    	var allowance = getTypedFormElementValue(form["dealerAllowance"]);
    	//form["retailBalance"].value = msrp - allowance - downPayment;
        $("#retailBalance").html(msrp - allowance - downPayment);
    //}
}

function resetPaymentEstimate(form) {
	form.reset();
    return paymentEstimate(form, true);
}

function savedVehiclesPrint(modelYearId, form) {
	printVehicle(modelYearId, getTypedFormElementValue(form["aCode"]), getTypedFormElementValue(form["current.state.string"]), getTypedFormElementValue(form["accessoriesTotal"]), getTypedFormElementValue(form["retailDownPayment"]), getTypedFormElementValue(form["leaseDownPayment"]), getTypedFormElementValue(form["retailTerm"]), getTypedFormElementValue(form["leaseTerm"]), getTypedFormElementValue(form["retailAPR"]), null, null, null, getTypedFormElementValue(form["incentivesSelected"]));
	return false;
}

function paymentEstimate(form, clear) {
    try {
		var retDefVal = getTypedFormElementValue(form.retailAPR, form.retailAPR.defaultValue);
	    var retVal = getTypedFormElementValue(form.retailAPR);
	    //var leaseDefVal = getTypedFormElementValue(form.leaseAPR, form.leaseAPR.defaultValue);
	    //var leaseVal = getTypedFormElementValue(form.leaseAPR);
	    if(!clear && retDefVal != retVal) {
	        form.incentivesSelected.value = "UER";
	    } else if(clear || form.incentivesSelected.value != "UER") {
	        //form.leaseAPR.value = 0;
	        form.retailAPR.value = 0;
	        form.incentivesSelected.value = "APR";
	    }
	    var url = form.action + "?" + serializeTypedForm(form);
	    //alert("retDefVal = " + retDefVal + "\nretVal = " + retVal + "\nleaseDefVal = " + leaseDefVal + "\nleaseVal = " + leaseVal + "\nurl = " + url);
	    showLoader();
	    //$(".savedvehicles_calc").load(url, null, function() {hideLoader();});
	    $.post(url, null, function(resp) {
	    	var xml = $(resp);
	    	var priceModel = xml.find("VehiclePricingModel");
	    	var financeError = priceModel.attr("hasRetailError") == "true";
	    	var leaseError = priceModel.attr("hasLeaseError") == "true";
	    	var financeAprAttr = (financeError) ? null : priceModel.attr("retailAPR");
	    	var leaseAprAttr = (leaseError) ? null : priceModel.attr("leaseAPR");
	    	
	    	var finance, financeApr;
	    	if(financeError || financeAprAttr == null || financeAprAttr == "") {
	    		finance = "--";
	    		financeApr = "--";
	    	} else {
	    		finance = "$" + formatNumber(priceModel.attr("retailMonthlyPayment"));
	    		financeApr = financeAprAttr + "%";
	    	}
	    	
	    	var price = priceModel.attr("totalPrice");
	    	var retailDiscount = priceModel.attr("totalRetailDiscount");
	    	var retailDownPayment = priceModel.attr("retailDownPayment");
	    	var totalRetail= "$" + formatNumber(price - retailDiscount - retailDownPayment);
	    	
	    	var leaseDiscount = priceModel.attr("totalLeaseDiscount");
	    	var leaseDownPayment = priceModel.attr("leaseDownPayment");
	    	var totalLeased = "$" + formatNumber(price - leaseDiscount - leaseDownPayment);
	    	var lease, leaseApr;
	    	if(leaseError || leaseAprAttr == null || leaseAprAttr == "") {
	    		lease = "--";
	    		leaseApr = "--";
	    	} else {
	    		lease = "$" + formatNumber(priceModel.attr("leaseMonthlyPayment"));
	    		leaseApr = leaseAprAttr + "%";
	    	}
	    	var goodThrough = priceModel.attr("goodThruDate");
	    	
	    	$("#financePay").html(finance);
	    	$("#leasePay").html(lease);
	    	$("#retailApr").attr("value", financeApr);
	    	$("#leaseApr").html(leaseApr);
	    	$("#retailBalance").html(totalRetail);
	    	$("#leaseBalance").html(totalLeased);
	    	$(".savedvehicles_calc_goodthru").html(goodThrough);
	    	hideLoader();
	    }, "xml");
	    return false;
    }
    catch(e) {
    	alert("paymentEstimate(form, clear) exception - " + e);
    }
}

function serializeTypedForm(form) {
    var str = "";
    for(var i=0; i<form.elements.length; i++) {
        var val = getTypedFormElementValue(form.elements[i]);
        str += "&" + form.elements[i].name + "=" + escape(val);
    }
    if(str.length > 0) {
        return str.substring(1);
    } else {
        return str;
    }
}

function getTypedFormElementValue(elem, value) {
    if (arguments.length < 2) {
        value = getFormElementValue(elem);
    } 
    var el = $(elem);
    if(value) {
        if(el.hasClass("dec") || el.hasClass("num")) {
            value = value.replace(/[^\d\.]/g, "");
            if(value) {
                if(el.hasClass("num")) {
                    value = Math.round(value);
                }
            } else {
                value = 0;
            }
        }
    } else if(el.hasClass("dec") || el.hasClass("num")) {
        value = 0;
    }
    
    return value;
}

function showSavedVehicleDisclaimer(elem, event) {
    var titleElem = document.getElementById("savedvehicles_disclaimer_title");
    var contentElem = document.getElementById("savedvehicles_disclaimer_content");
    showGlossaryWindow(titleElem.innerHTML, contentElem.innerHTML, event);
	var output = document.getElementById("glossaryTerm");
	output.style.top = "10px"; 
}

function hideSavedVehicleDisclaimer(elem, event) {
    hideGlossaryWindow(event); 
}

function formatNumber(num)  {
	if(!num) num = "0";
	else 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 );
}