﻿//PRICE TAG
//
//These functions handle showing the shopping tool's price tag, as well as setting its text
function ShowPricetag(){
    $("#priceTag").animate({marginTop: "0px"}, 1000, "easeOutBounce");
}

function RetractPricetag(){
    $("#priceTag").animate({marginTop: "-200px"}, 500);
}

function FormatCurrency(sNum) {
        sNum = sNum.toString().replace(/\$|\,/g,'');
    	
        if(isNaN(sNum))
	        sNum = "0";
    	
        var sTemp = sNum;
    	
        var bSign = (Number(sNum) == (sNum = Math.abs(sNum)));
        sNum = Math.floor(sNum*100+0.50000000001);
        var sCents = sNum%100;
        sNum = Math.floor(sNum/100).toString();
    	
        if(sCents<10)
	        sCents = "0" + sCents;

        for (var i = 0; i < Math.floor((sNum.length-(1+i))/3); i++)
	        sNum = sNum.substring(0,sNum.length-(4*i+3))+ ',' + sNum.substring(sNum.length-(4*i+3));

        return (((bSign)?'':'-') + '$' + sNum + '.' + sCents);
    }
    
function setPriceTag(msrp, dhCost, ModelYear, ModelName, Trim, Trans,modelid,enableLeasing){
    setTimeout(function(){
        var priceTagContent = '';
        
        var tmpTrans = Trans + " Transmission";
        // Trim off transmission for models that wrap to a 3rd line
        if (DedupeModelTrim(ModelName,Trim).length > 55) {
            tmpTrans = "";
        }


        priceTagContent += "<div id='priceTagContent'>";
        priceTagContent += "<div class='priceTagLeft'>";        
        priceTagContent += "<div class='priceTagTitle'>" + ModelYear + " " + ModelName + "&nbsp<span class='mname'>" + DedupeModelTrim(ModelName,Trim) + "</span></div>";
        priceTagContent += "<div class='priceTagTransmission'>" + tmpTrans + "</div>";
        priceTagContent += "<div class='priceTagStandardFeatures'><a href='javascript:standardFeatures(\"" + ModelName + "\", \"" + ModelYear + "\",\"" + modelid + "\");'>Standard Features</a></div>";
        priceTagContent += "</div>";
        
        priceTagContent += "<div class='priceTagRight'>";
        priceTagContent += "<div class='priceTagPrice' id='priceTagPrice'>" + removeDecimal(calcMsrp(msrp, dhCost)) + "</div>";
        priceTagContent += "<div class='priceTagMSRPLabel'>Total MSRP<sup id=\"msrpdisclaimer\">[ 2 ]</sup></div>";        
        priceTagContent += "</div>";
        
        priceTagContent += "<div class='clr'></div>";
        priceTagContent += "<div class='monthlyPaymentDiv'>Monthly Payments &nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:EstimatePayments(\"" + modelid + "\", \"" + msrp + "\", \"" + "testing" + "\", \"" + dhCost + "\");'>Calculate</a> | <a id='showLink' href='javascript:priceTagInfoToggle();'>Show</a></div>";
        priceTagContent += "<div class='monthlyPaymentDiv' style='margin-left:190px;margin-top:5px;'><a href='javascript:priceTagInfoToggle();'><img id='imgToggle' src='/images/tools/finance-tools/arrow-show.gif' /></a></div>";
        
        priceTagContent += "<div class='priceTagCalculateField'>";
        priceTagContent += "<div class='tit'>Lease It</div>";        
        priceTagContent += "<div class='sub'>Estimated Monthly Payment</div>";        
        priceTagContent += "<div id='priceTagLeaseMonthly' class='calcPrice'>$---.--</div>";        
        priceTagContent += "</div>";
        
        priceTagContent += "<div class='priceTagCalculateField' style='margin-left:15px;'>";
        priceTagContent += "<div class='tit'>Finance It</div>";        
        priceTagContent += "<div class='sub'>Estimated Monthly Payment</div>";        
        priceTagContent += "<div id='priceTagFinanceMonthly' class='calcPrice'>$---.--</div>";        
        priceTagContent += "</div><div id='CompareResults'></div>";
        
        priceTagContent += "</div>";
        priceTagContent += "<div><img src='/images/tools/shopping/pricetag-bottom.gif'></div>";
        
        $("#priceTag").html(priceTagContent);
        EstimatePayments(modelid,msrp,"",dhCost,ModelName);
    }, 100);
    
}


//PAYMENT ESTIMATOR
function EstimatePayments(modelid,price,title,dhCost,mGroup){
    if ($("#OfferPrint")) {
        $("#OfferPrint").attr({href : "/css/offerpopup-print.css"});
    } 
    if ( title == "" ) {
        var CVars = new CalcVars(mGroup);
        CVars.load();

        $("#CompareResults").load('/handlers/tools/shopping/comparecalculator.ashx?msrp='+ price +'&fterm='+ CVars.FTerm +'&lterm='+CVars.LTerm+'&downpayment='+CVars.DownPayment+'&mileage='+CVars.Mileage+'&apr='+CVars.APR+'&modelid='+modelid+'&tradein='+ CVars.TradeInVal +'&owed='+CVars.TradeInOwed + '&dc=' + dhCost, function(data) {
            if (CalResult[0][0] == '0') { 
                $("#priceTagLeaseMonthly").html( "$" + CalResult[0][2]);
                $("#priceTagFinanceMonthly").html( "$" + CalResult[0][1]);
                if ( CalResult[0][1] == '0' ) parent.$(".priceTagFinanceMonthly").html("$--");
                if ( CalResult[0][2] == '0' ) parent.$("#priceTagLeaseMonthly").html("$--");                
            } else {
                $("#ErrorMsg").html(CalResult[0][1]);
            }
        });
    }
    else {
            tb_show("","/tools/finance-tools/payment-estimator-pop-up.aspx?title=" + title.replace(/\ /g,'%20') + "&price=" + price + "&modelid=" + modelid + "&dc=" + dhCost + "&width=750&amp;TB_iframe=true&amp;height=650&amp;modal=true","");
    }
}

function CalcVars(ModelGroup,Certified) {

    this.ModelGroup = ModelGroup;
    this.APR = '5';
    this.CertifiedAPR = '12';
    this.FTerm = '60';
    this.LTerm = '36';
    this.DownPayment = '0';
    this.Mileage = "12,000";
    this.TradeInVal = '0';
    this.TradeInOwed = '0';
    this.TradeInMileage = '0';
    this.TradeInMake = '';
    this.TradeInModel = '';
    this.TradeInYear = '';
    this.Certified = Certified;
    
    this.load = function() {
        if ( GetCookie("calculatorVars") ) {
            var arr = GetCookie("calculatorVars").split(";");
            if(this.ModelGroup == arr[0].split("=")[1]) {
                if( arr[1].split("=")[1] != "") this.APR = arr[1].split("=")[1];
                if( arr[2].split("=")[1] != "") this.FTerm = arr[2].split("=")[1];
                if( arr[3].split("=")[1] != "") this.LTerm = arr[3].split("=")[1];
                if( arr[4].split("=")[1] != "") this.DownPayment = arr[4].split("=")[1];
                if( arr[5].split("=")[1] != "") this.Mileage = arr[5].split("=")[1];
                if( arr[6].split("=")[1] != "") this.TradeInVal = arr[6].split("=")[1];
                if( arr[7].split("=")[1] != "") this.TradeInOwed = arr[7].split("=")[1];
                if( arr[8].split("=")[1] != "") this.TradeInMileage = arr[8].split("=")[1];
                if( arr[9].split("=")[1] != "") this.TradeInMake = arr[9].split("=")[1];
                if( arr[10].split("=")[1] != "") this.TradeInModel = arr[10].split("=")[1];
                if( arr[11].split("=")[1] != "") this.TradeInYear = arr[11].split("=")[1];
                if( arr[12].split("=")[1] != "") this.CertifiedAPR = arr[12].split("=")[1];
                if( this.Certified = true ) { this.APR == this.CertifiedAPR }
            }
        }
    }
    
    this.save = function() {
        var CookieTxt = "";
        CookieTxt += "ModelID=" + this.ModelGroup + ";";
        CookieTxt += "APR=" + this.APR + ";";
        CookieTxt += "FTerm=" + this.FTerm + ";";
        CookieTxt += "LTerm=" + this.LTerm + ";";
        CookieTxt += "DownPayment=" + this.DownPayment + ";";
        CookieTxt += "Mileage=" + this.Mileage + ";";
        CookieTxt += "TradeInVal=" + this.TradeInVal + ";";
        CookieTxt += "TradeInOwed=" + this.TradeInOwed + ";";
        CookieTxt += "TradeInMileage=" + this.TradeInMileage + ";";
        CookieTxt += "TradeInMake=" + this.TradeInMake + ";";   
        CookieTxt += "TradeInModel=" + this.TradeInModel + ";";
        CookieTxt += "TradeInYear=" + this.TradeInYear + ";";                
        CookieTxt += "CertifiedAPR=" + this.CertifiedAPR;
        
        SetCookie("calculatorVars", CookieTxt);
    }
}

function priceTagInfoToggle() {
    if ( $("#imgToggle")[0].src.indexOf("-show.gif") != -1 ) {
        $("#imgToggle")[0].src = $("#imgToggle")[0].src.replace("-show.gif","-hide.gif");
        $("#priceTagContent").animate({height:"135px"},500);
        $("#showLink").text("Hide");
    }
    else {
        $("#imgToggle")[0].src = $("#imgToggle")[0].src.replace("-hide.gif","-show.gif");
        $("#priceTagContent").animate({height:"90px"},500);
        $("#showLink").text("Show");
    }
}

//STANDARD FEATURES
function standardFeatures(modelname, year, modelid) {

    modelname = (!modelname || modelname == "") ? sModelName : modelname;
    year = (!year || year == "") ? sModelYear : year;
    modelid = (!modelid || modelid == "") ? sModelID : modelid;
    tb_show("","/tools/standard-features-pop-up.aspx?name=" + modelname.replace(/\ /g,'%20') + "&year=" + year + "&id=" + modelid + "&width=801&amp;TB_iframe=true&amp;height=490&amp;modal=true","")
    
    // Tracking
    var sTempPageName = s.pageName;
    var sTempChannel = s.channel;
    var sTempProp26 = s.prop26;
    var sTempProp27 = s.prop27;
    var sTempProp37 = s.prop37;
    var sTempEvents = s.events;
    s.pageName = 'STANDARD FEATURES';
    s.channel = 'FEATURES';
    s.prop26 = 'STANDARD';
    s.prop27 = 'DEFAULT';
    s.prop37 = 'FEATURES:STANDARD:DEFAULT:STANDARD FEATURES';
    s.events = '';
    CallSDotT(s);
    // Put old variables back for links
    s.pageName = sTempPageName;
    s.channel = sTempChannel;
    s.prop26 = sTempProp26;
    s.prop27 = sTempProp27;
    s.prop37 = sTempProp37;
    s.events = sTempEvents;

}

//DETAIL BUBBLE
//
//These functions handle the detail panel that slides out from behind the shopping tools menu
var canvasMenuSlideSpeed = 400;

//detailHTML is the HTML to be placed inside the detail bubble
function SlideDetailBubble(detailHTML){
    if (!$("#detail-bubble").is(":visible")){
        $("#detail-bubble").html(detailHTML);
        setTimeout(function(){$("#detail-bubble").css({display: "block"}).animate({left: "363px"}, canvasMenuSlideSpeed);}, 25);
    }
}

function ExpandDetailBubble(detailHTML){
    if (!$("#detail-bubble").is(":visible")){
        $("#detail-bubble").css({left: "363px"}).html(detailHTML).show(canvasMenuSlideSpeed);
    }
}

function AdjustDetailBubble(detailHTML, autoAdjustSize){
    if (autoAdjustSize == null){ autoAdjustSize = true; }
    
    if ($("#detail-bubble").is(":visible")){
        $("#pre-detail-change").html(detailHTML);
        setTimeout(function(){
            if (autoAdjustSize){
                $("#detail-bubble").animate({height: ($("#pre-detail-change")[0].offsetHeight - 20) + "px"}, canvasMenuSlideSpeed).html($("#pre-detail-change").html());
            }else{
                 $("#detail-bubble").html($("#pre-detail-change").html());
            }
        }, 25);
    }
}

function ShowDetailBubble(detailHTML, forceShow){
    if (!$("#detail-bubble").is(":visible") || forceShow){
        $("#detail-bubble").html(detailHTML);
        setTimeout(function(){ $("#detail-bubble").css({display: "block", left: "363px"}); }, 25);
    }
}

function HideDetailBubble(){
    if ($("#detail-bubble").is(":visible")){
        $("#detail-bubble").stop(true, true).css({display: "none", left: "0px", height: ""}).html("");
    }
}

//To animate hiding the detail bubble - companion to SlideDetailBubble
function SlideOutDetailBubble(){
    if ($("#detail-bubble").is(":visible")){
        setTimeout(HideDetailBubble, canvasMenuSlideSpeed - 100);
        $("#detail-bubble").animate({left: "0px"}, canvasMenuSlideSpeed);
    }
}

//To animate hiding the detail bubble - companion to ExpandDetailBubble
function ShrinkOutDetailBubble(){
    if ($("#detail-bubble").is(":visible")){
        setTimeout(HideDetailBubble, canvasMenuSlideSpeed + 25);
        $("#detail-bubble").hide(canvasMenuSlideSpeed);
    }
}

//CHECKBOX LIST
//
//This function handles the task of adding functionality to listitems with checkboxes as children
//
//matchStr is the jquery selector to use to find the listitems on the page (ie ".side-nav > li")
//listType is a string used to distinguish what happens when the li is clicked
function SetListItems(matchStr, listType){
    $(matchStr).each(function(){
        $(this).mouseover(function(){
            $(this).addClass('select');
        }).mouseout(function(){
            if (!this.firstChild.checked){
                $(this).removeClass('select');
            }
        }).click(function(){
            if (!$(this).is(".inactiveCbLi")){
                $(this).addClass('select');
                this.firstChild.checked = !this.firstChild.checked;
                if (listType == "modelFilters"){
                    FilterModels(this.firstChild);
                }
                if (listType == "accList"){
                    SwapAccSelection($(this.firstChild).val(), this.firstChild.checked);
                }
            }
        }).children().click(function(){
            this.checked = !this.checked;
        });
    });
}

//The checkbox in a Checkbox List has the id on it - so if you find that you need to select a list item
//in a Checkbox List dynamically, you can do so with this function
//
//checkboxId - the id of the checkbox who's parent list-item you need to set as selected
function SwitchListItemFromCheckbox(checkboxId){
    if ($("#" + checkboxId).length > 0){
        if (!$("#" + checkboxId)[0].checked){
            $("#" + checkboxId).parent().addClass('select');
            $("#" + checkboxId)[0].checked = true;
        }else{
            $("#" + checkboxId).parent().removeClass('select');
            $("#" + checkboxId)[0].checked = false;
        }
    }
}

//In some cases it may be necessary to prevent a checkbox list item from being selectable - this function toggles
//an item's selectability
//
//checkboxId - the id of the checkbox who's parent list-item you need to set as inactive
function SwitchListItemActive(checkboxId){
    if ($("#" + checkboxId).length > 0){
        if ($("#" + checkboxId)[0].disabled){
            $("#" + checkboxId).attr("disabled", "");
            $("#" + checkboxId).parent().removeClass('inactiveCbLi');
        }else{
            $("#" + checkboxId).attr("disabled", "disabled");
            $("#" + checkboxId).parent().addClass('inactiveCbLi');
        }
    }
}

//BASE CAR PHOTO
//
//This function builds the base car photo, as well as the front/rear buttons
//
//exColorId is a string value of the exterior color id, if known - Optional
//inColorId is a string value of the interior color id, if known - Optional
//givenModelId is a string value of model id, if it's not apart of the query string yet (ie on the trims page) - Optional
function ShowCarPhoto(givenModelId, exColorId, inColorId, smallerSize){
    var modelId = "";
    if (givenModelId && givenModelId != ""){
        modelId = givenModelId;
    }else{
        modelId = (sModelID == "null") ? "" : sModelID;
    }
    
    var modelListIndex = (modelId == "") ? (modelList.length - 1) : -1;
    if (modelListIndex == -1){
        for(var i=0;i<modelList.length;++i){
            if (modelList[i][1] == modelId){
                modelListIndex = i;
            }
        }
    }

    if (modelListIndex > -1) {
        var frontPhotoPath = GetBaseCarPhotoPath(modelListIndex, exColorId, inColorId, "FRONT");
        var rearPhotoPath = GetBaseCarPhotoPath(modelListIndex, exColorId, inColorId, "REAR");
        
        var tempFrontImg = new Image();
        var tempRearImg = new Image();
        tempFrontImg.src = frontPhotoPath;
        tempRearImg.src = rearPhotoPath;
        
        setTimeout(function(){
            AddPhotoDivs(frontPhotoPath, rearPhotoPath, smallerSize);
            
            $("#frontViewBtn").unbind();
            $("#rearViewBtn").unbind();
            $("#frontViewBtn").click(function(){ SwitchCarPhoto("FRONT"); });
            $("#rearViewBtn").click(function(){ SwitchCarPhoto("REAR"); });
        }, 100);
    }
}

//switchTo - either "FRONT" or "REAR"
function SwitchCarPhoto(switchTo){
    switchTo = (switchTo && switchTo != "") ? switchTo.toUpperCase() : "FRONT";
    var currentPhotoType = $("#rearPhotosDiv").is(":visible") ? "REAR" : "FRONT";
    var doSwitch = true;
    
    if (currentPhotoType != switchTo){
        if (currentPhotoType == "FRONT"){
            currentPhotoType = "REAR";
            $("#frontViewBtn").attr("src", "/images/tools/build-price/btn-frontview.gif");
            $("#frontViewBtn").css({cursor: "pointer"});
            $("#rearViewBtn").attr("src", "/images/tools/build-price/btn-rearview-select.gif");
            $("#rearViewBtn").css({cursor: "default"});
        }else if (currentPhotoType == "REAR"){
            currentPhotoType = "FRONT";
            $("#frontViewBtn").attr("src", "/images/tools/build-price/btn-frontview-select.gif");
            $("#frontViewBtn").css({cursor: "default"});
            $("#rearViewBtn").attr("src", "/images/tools/build-price/btn-rearview.gif");
            $("#rearViewBtn").css({cursor: "pointer"});
        }
    }else{
        doSwitch = false;
    }
    
    if (doSwitch){
        $("#frontPhotosDiv").animate({opacity: "toggle"}, 600);
        $("#rearPhotosDiv").animate({opacity: "toggle"}, 600);
    }
}

//type is a string: either "FRONT" or "REAR" - defaults to "FRONT"
function GetBaseCarPhotoPath(modelListIndex, exColorId, inColorId, type){
    var path = "";
    type = (type == null || type == "") ? "FRONT" : type.toUpperCase();
    
    if (!exColorId || exColorId == "" || modelList[modelListIndex][6].indexOf(exColorId) == -1){
        for(var i=0;i<exColorList.length;++i){
            if (modelList[modelListIndex][6].indexOf(exColorList[i][6]) > -1){
                exColorId = exColorList[i][6];
                break;
            }
        }
    }
    
    var exInColors = "";
    $.each(exColorList, function(){
        if(this[6] == exColorId){
            exInColors = this[5];
            return false;
        }
    });
    
    var modelStartIndex = exInColors.indexOf(modelList[modelListIndex][1] + "~");
    var modelEndIndex = exInColors.substr(modelStartIndex).indexOf("/");
    
    var modelExInColors = "";
    if (modelEndIndex == -1){
        modelExInColors = exInColors.substr(modelStartIndex);
    }else{
        modelExInColors = exInColors.substr(modelStartIndex, (modelEndIndex - modelStartIndex));
    }
    
    if (exInColors != "" && (!inColorId || inColorId == "" || modelExInColors.indexOf(inColorId) == -1)){
        var indexStartInColors = modelExInColors.indexOf("~")+1;
        var endFirstInColor = modelExInColors.indexOf("|");
        
        if (endFirstInColor == -1){
            inColorId = modelExInColors.substr(indexStartInColors);
        }else{
            inColorId = modelExInColors.substr(indexStartInColors, (endFirstInColor - indexStartInColors));
        }
    }
    
    $.each(baseCarPhotoList, function(){
        if (modelList[modelListIndex][5].indexOf($(this)[0]) > -1){                
            if ($(this)[2].indexOf(exColorId) > -1 && $(this)[2].indexOf(inColorId) > -1){            
                if ($(this)[1].indexOf(type) > -1){
                    path = $(this)[1];
                }
            }
        }
    });
    
    return path;
}

var photoCount = 0;
function AddPhotoDivs(frontPhotoPath, rearPhotoPath, smallerSize){
    if (smallerSize){
        frontPhotoPath = GetCarImageSize(frontPhotoPath, 300, 200);
        rearPhotoPath = GetCarImageSize(rearPhotoPath, 300, 200);
    }
    
    var frontSRC = $.browser.msie ? "/images/trans.gif" : escape(frontPhotoPath);
    var rearSRC = $.browser.msie ? "/images/trans.gif" : escape(rearPhotoPath);
    var imageSizeStyle = smallerSize ? "height: 200px; width: 300px;" : "height: 450px; width: 550px;";
    
    if ($("#threeQuartFrontImg").length == 0){
        var frontPhoto = "<div id=\"threeQuartFrontImg\"><div id=\"front" + photoCount + "\" style=\"position: absolute;\"><img id=\"frontImg\" src=\"" + frontSRC + "\" style=\"" + imageSizeStyle + " filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + escape(frontPhotoPath) + "',sizingMethod='scale');\" /></div></div>";
        var rearPhoto = "<div id=\"threeQuartRearImg\"><div id=\"rear" + photoCount + "\" style=\"position: absolute;\"><img id=\"rearImg\" src=\"" + rearSRC + "\" style=\"" + imageSizeStyle + " filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + escape(rearPhotoPath) + "',sizingMethod='scale');\" /></div></div>";
        var frBtns = "<img id=\"frontViewBtn\" style=\"cursor: default;\" alt=\"FRONT\" title=\"FRONT\" src=\"/images/tools/build-price/btn-frontview-select.gif\" /><img id=\"rearViewBtn\" alt=\"REAR\" title=\"REAR\" src=\"/images/tools/build-price/btn-rearview.gif\" />";
        
        if ($("#frontPhotosDiv").length > 0){ $("#frontPhotosDiv").html(frontPhoto); }
        if ($("#rearPhotosDiv").length > 0){ $("#rearPhotosDiv").html(rearPhoto); }
        if ($("#photoBtnsDiv").length > 0){ $("#photoBtnsDiv").html(frBtns); }
    }else{
    
        
            var existPhotoNum = photoCount;
            ++photoCount;
            var newPhotoNum = photoCount;
            
            var frontHTML = $("#threeQuartFrontImg").html();
            $("#threeQuartFrontImg").html(frontHTML + "<div id=\"front" + newPhotoNum + "\" style=\"display: none; position: absolute;\"><img id=\"frontImg\" src=\"" + frontSRC + "\" style=\"" + imageSizeStyle + " filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + escape(frontPhotoPath) + "',sizingMethod='scale');\" /></div>");
            $("#front" + newPhotoNum).fadeIn(600);
            setTimeout(function(){
                $("#front" + existPhotoNum).fadeOut(700, function(){
                    $("#front" + existPhotoNum).remove();
                });
            }, 150);
            
            var rearHTML = $("#threeQuartRearImg").html();
            $("#threeQuartRearImg").html(rearHTML + "<div id=\"rear" + newPhotoNum + "\" style=\"display: none; position: absolute;\"><img id=\"rearImg\" src=\"" + rearSRC + "\" style=\"" + imageSizeStyle + " filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + escape(rearPhotoPath) + "',sizingMethod='scale');\" /></div>");
            $("#rear" + newPhotoNum).fadeIn(600);
            setTimeout(function(){
                $("#rear" + existPhotoNum).fadeOut(700, function(){
                    $("#rear" + existPhotoNum).remove();
                });
            }, 150);
        
        
        //$("#threeQuartFrontImg > img").attr("src", frontSRC);
        //$("#threeQuartRearImg > img").attr("src", rearSRC);
        //$("#threeQuartFrontImg > img").attr("style", "" + imageSizeStyle + " filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + escape(frontPhotoPath) + "',sizingMethod='scale');");
        //$("#threeQuartRearImg > img").attr("style", "" + imageSizeStyle + " filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + escape(rearPhotoPath) + "',sizingMethod='scale');");
    }
}

//FORWARD/BACKWARD BUTTONS
//
//Since the shopping controls are shared between Build and Price, Request a Quote, etc.
//we needed a way to get their back/next buttons to go to different places.  The solution was to put javascript variables
//on each page that the controls would assume were there.  Those variables are called:
//ForwardPage
//BackwardPage
//QueryStringsToAdd
//QueryStringsToRemove
//So a call to this function from one of the shopping controls might be:  GoForwardBack(ForwardPage, QueryStringsToAdd) or GoForwardBack(BackwardPage, "", QueryStringsToRemove)
//
//newPage is the name of the page you're going to (ie ForwardPage or BackwardPage) - example: "models.aspx"
//queryStringsToAdd is a pipe separated string of the name/value pairs (separated by a forward-slash just like that) of query strings to add, if any - example: "modelId/1234R|modelYear/1900"
//queryStringsToRemove is a pipe separated string of the names of query strings to remove, if any - example: "modelId|modelYear"
function GoForwardBack(newPage, queryStringsToAdd, queryStringsToRemove, source){
    var tempQueryStr = window.location.search;
    var winLoc = window.location.toString().replace(tempQueryStr, "");
    
    if (queryStringsToAdd && queryStringsToAdd != "" && tempQueryStr != ""){
        //First, check for their existence in the current url
        var pairs = queryStringsToAdd.split("|");
        $.each(pairs, function(){
            var pair = this.split("/");
            if (tempQueryStr.indexOf(pair[0]) > -1){
                queryStringsToRemove += "|" + pair[0];
            }
        });
    }
    if (queryStringsToRemove && tempQueryStr != ""){
        //Next, remove all query strings to be removed
        var names = queryStringsToRemove.split("|");
        $.each(names, function(){
            if (tempQueryStr.indexOf(this) > -1){
                var removeVal = $.getQueryString({id:this});
                var removeStr = this + "=" + removeVal;
                tempQueryStr = tempQueryStr.replace(removeStr, "").replace(removeStr.replace(/ /g, "%20"), "");
                tempQueryStr = tempQueryStr.replace(removeStr, "").replace(removeStr.replace(/ /g, "+"), "");   // sometimes a space can be a '+'
                tempQueryStr = tempQueryStr.replace("&&", "&").replace("?&", "?");
            }
        });
    }
    if (queryStringsToAdd && queryStringsToAdd != ""){
        //Last, add all query strings to be added
        var pairs = queryStringsToAdd.split("|");
        $.each(pairs, function(){
            var pair = this.split("/");
            if (pair.length == 2){
                if (tempQueryStr.length == 0){
                    tempQueryStr += "?" + pair[0] + "=" + pair[1];
                }else{
                    tempQueryStr += "&" + pair[0] + "=" + pair[1];
                }
            }
        });
    }
    
    tempQueryStr = tempQueryStr.length > 1 ? tempQueryStr.replace("&&", "&").replace("?&", "?") : "";
    tempQueryStr = tempQueryStr.lastIndexOf("&") == tempQueryStr.length-1 ? tempQueryStr.substr(0,tempQueryStr.length-1) : tempQueryStr;
    
    TrackNavigationChange(source);
    
    documentDotLocation(newPage + tempQueryStr);
}

function TrackNavigationChange(source) {

    // Tracking based on source
    s.linkTrackVars = 'prop26,prop27,prop37,eVar26,eVar27';
    switch (source) {
        case 'raq_1_vehandzip':
            s.prop26 = 'COLORS';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'RAQ:COLORS:DEFAULT:RAQ - SELECT COLORS';
            CallSDotTL(s , true , 'RAQ:COLORS:BACKWARD:VEHICLE & ZIP CODE TOP NAV LINK' , 'o');
            break;
        case 'raq_2_vehandzip':
            s.prop26 = 'DEALER';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'RAQ:DEALER:DEFAULT:RAQ - SELECT A DEALER';
            CallSDotTL(s , true , 'RAQ:DEALER:BACKWARD:VEHICLE & ZIP CODE TOP NAV LINK' , 'o');
            break;
        case 'raq_3_vehandzip':
            s.prop26 = 'CONTACT';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'RAQ:CONTACT:DEFAULT:RAQ - ENTER CONTACT INFORMATION';
            CallSDotTL(s , true , 'RAQ:CONTACT:BACKWARD:VEHICLE & ZIP CODE TOP NAV LINK' , 'o');
            break;
        case 'raq_2_colors':
            s.prop26 = 'DEALER';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'RAQ:DEALER:DEFAULT:RAQ - SELECT A DEALER';
            CallSDotTL(s , true , 'RAQ:DEALER:BACKWARD:COLORS TOP NAV LINK' , 'o');
            break;
        case 'raq_3_colors':
            s.prop26 = 'CONTACT';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'RAQ:CONTACT:DEFAULT:RAQ - ENTER CONTACT INFORMATION';
            CallSDotTL(s , true , 'RAQ:CONTACT:BACKWARD:COLORS TOP NAV LINK' , 'o');
            break;
        case 'raq_1_dealer':
            s.prop26 = 'COLORS';
            s.prop27 = 'FORWARD';
            s.prop37 = 'RAQ:COLORS:DEFAULT:RAQ - SELECT COLORS';
            CallSDotTL(s , true , 'RAQ:COLORS:FORWARD:DEALER TOP NAV LINK' , 'o');
            break;
        case 'raq_3_dealer':
            s.prop26 = 'CONTACT';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'RAQ:CONTACT:DEFAULT:RAQ - ENTER CONTACT INFORMATION';
            CallSDotTL(s , true , 'RAQ:CONTACT:BACKWARD:DEALER TOP NAV LINK' , 'o');
            break;
        case 'raq_colors_back':
            s.prop26 = 'COLORS';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'RAQ:COLORS:DEFAULT:RAQ - SELECT COLORS';
            CallSDotTL(s , true , 'RAQ:COLORS:BACKWARD:BACK LINK' , 'o');
            break;
        case 'raq_colors_nextbtn':
            s.prop26 = 'COLORS';
            s.prop27 = 'FORWARD';
            s.prop37 = 'RAQ:COLORS:DEFAULT:RAQ - SELECT COLORS';
            //modified for RAQ test 2
            //CallSDotTL(s , true , 'RAQ:COLORS:FORWARD:NEXT:SELECT A DEALER LINK' , 'o');
            CallSDotTL(s, true, 'RAQ:NEXT CONTACT INFORMATION LINK 1 OF 2 ON BOTTOM', 'o');
            break;
        case 'bnp_colors_back':
            s.prop26 = 'COLORS';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:COLORS:DEFAULT:B&P - SELECT COLORS';
            CallSDotTL(s , true , 'BUILD & PRICE:COLORS:BACKWARD:BACK LINK' , 'o');
            break;
        case 'bnp_colors_nextbtn':
            s.prop26 = 'COLORS';
            s.prop27 = 'FORWARD';
            s.prop37 = 'BUILD & PRICE:COLORS:DEFAULT:B&P - SELECT COLORS';
            CallSDotTL(s , true , 'BUILD & PRICE:COLORS:FORWARD:NEXT:ACCESSORIES LINK' , 'o');
            break;
        case 'bnp_accessories_back':
            s.prop26 = 'ACCESSORIES';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:ACCESSORIES:DEFAULT:B&P - SELECT ACCESSORIES';
            CallSDotTL(s , true , 'BUILD & PRICE:ACCESSORIES:BACKWARD:BACK LINK' , 'o');
            break;
        case 'bnp_accessories_nextbtn':
            s.prop26 = 'ACCESSORIES';
            s.prop27 = 'FORWARD';
            s.prop37 = 'BUILD & PRICE:ACCESSORIES:DEFAULT:B&P - SELECT ACCESSORIES';
            CallSDotTL(s , true , 'BUILD & PRICE:COLORS:FORWARD:NEXT:SUMMARY LINK' , 'o');
            break;
        case 'bnp_summary_startover':
            s.prop26 = 'BUILD & PRICE:SUMMARY';
            s.prop27 = 'BUILD & PRICE:SUMMARY:RESET';
            s.prop37 = 'BUILD & PRICE:SUMMARY:B&P - SUMMARY';
            CallSDotTL(s , true , 'BUILD & PRICE:START OVER LINK' , 'o');
            break;
        case 'bnp_confirm_startover':
            s.prop26 = 'QUOTE';
            s.prop27 = 'RESET';
            s.prop37 = 'BUILD & PRICE:QUOTE:DEFAULT:B&P - QUOTE REQUEST CONFIRMATION';
            CallSDotTL(s , true , 'BUILD & PRICE:QUOTE:RESET:START OVER LINK' , 'o');
            break;
        case 'bnp_2_hondatab':
            s.prop26 = 'MODEL';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:MODEL:DEFAULT:B&P - SELECT A MODEL';
            CallSDotTL(s , true , 'BUILD & PRICE:MODEL:BACKWARD:HONDA NAV LINK' , 'o');
            break;
        case 'bnp_2_colortab':
            s.prop26 = 'MODEL';
            s.prop27 = 'FORWARD';
            s.prop37 = 'BUILD & PRICE:MODEL:DEFAULT:B&P - SELECT A MODEL';
            CallSDotTL(s , true , 'BUILD & PRICE:MODEL:FORWARD:COLORS NAV LINK' , 'o');
            break;
        case 'bnp_3_hondatab':
            s.prop26 = 'COLORS';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:COLORS:DEFAULT:B&P - SELECT COLORS';
            CallSDotTL(s , true , 'BUILD & PRICE:COLORS:BACKWARD:HONDA NAV LINK' , 'o');
            break;
        case 'bnp_3_modeltab':
            s.prop26 = 'COLORS';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:COLORS:DEFAULT:B&P - SELECT COLORS';
            CallSDotTL(s , true , 'BUILD & PRICE:COLORS:BACKWARD:MODEL NAV LINK' , 'o');
            break;
        case 'bnp_3_acctab':
            s.prop26 = 'COLORS';
            s.prop27 = 'FORWARD';
            s.prop37 = 'BUILD & PRICE:COLORS:DEFAULT:B&P - SELECT COLORS';
            CallSDotTL(s , true , 'BUILD & PRICE:COLORS:FORWARD:ACCESSORIES NAV LINK' , 'o');
            break;
        case 'bnp_3_summarytab':
            s.prop26 = 'COLORS';
            s.prop27 = 'FORWARD';
            s.prop37 = 'BUILD & PRICE:COLORS:DEFAULT:B&P - SELECT COLORS';
            CallSDotTL(s , true , 'BUILD & PRICE:COLORS:FORWARD:SUMMARY NAV LINK' , 'o');
            break;
        case 'bnp_4_hondatab':
            s.prop26 = 'ACCESSORIES';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:ACCESSORIES:DEFAULT:B&P - SELECT ACCESSORIES';
            CallSDotTL(s , true , 'BUILD & PRICE:ACCESSORIES:BACKWARD:HONDA NAV LINK' , 'o');
            break;
        case 'bnp_4_modeltab':
            s.prop26 = 'ACCESSORIES';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:ACCESSORIES:DEFAULT:B&P - SELECT ACCESSORIES';
            CallSDotTL(s , true , 'BUILD & PRICE:ACCESSORIES:BACKWARD:MODEL NAV LINK' , 'o');
            break;
        case 'bnp_4_colortab':
            s.prop26 = 'MODEL';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:MODEL:DEFAULT:B&P - SELECT ACCESSORIES';
            CallSDotTL(s , true , 'BUILD & PRICE:MODEL:BACKWARD:COLORS NAV LINK' , 'o');
            break;
        case 'bnp_4_summarytab':
            s.prop26 = 'ACCESSORIES';
            s.prop27 = 'FORWARD';
            s.prop37 = 'BUILD & PRICE:ACCESSORIES:DEFAULT:B&P - SELECT ACCESSORIES';
            CallSDotTL(s , true , 'BUILD & PRICE:ACCESSORIES:FORWARD:SUMMARY NAV LINK' , 'o');
            break;
        case 'bnp_5_hondatab':
            s.prop26 = 'SUMMARY';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:SUMMARY:DEFAULT:B&P - SUMMARY';
            CallSDotTL(s , true , 'BUILD & PRICE:SUMMARY:BACKWARD:HONDA NAV LINK' , 'o');
            break;
        case 'bnp_5_modeltab':
            s.prop26 = 'SUMMARY';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:SUMMARY:DEFAULT:B&P - SUMMARY';
            CallSDotTL(s , true , 'BUILD & PRICE:SUMMARY:BACKWARD:MODEL NAV LINK' , 'o');
            break;
        case 'bnp_5_colortab':
            s.prop26 = 'SUMMARY';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:SUMMARY:DEFAULT:B&P - SUMMARY';
            CallSDotTL(s , true , 'BUILD & PRICE:SUMMARY:BACKWARD:COLORS NAV LINK' , 'o');
            break;
        case 'bnp_5_acctab':
            s.prop26 = 'SUMMARY';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:SUMMARY:DEFAULT:B&P - SUMMARY';
            CallSDotTL(s , true , 'BUILD & PRICE:SUMMARY:BACKWARD:ACCESSORIES NAV LINK' , 'o');
            break;
        case 'raq_trims_accordionback':
            s.prop26 = 'VEHICLE';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'RAQ:VEHICLE:HELP:RAQ - HELP ME SELECT A TRIM';
            CallSDotTL(s , true , 'RAQ:VEHICLE:BACKWARD:BACK LINK' , 'o');
            break;
        case 'bnp_trims_accordionback':
            s.prop26 = 'MODEL';
            s.prop27 = 'BACKWARD';
            s.prop37 = 'BUILD & PRICE:MODEL:DEFAULT:B&P - SELECT A MODEL';
            CallSDotTL(s , true , 'BUILD & PRICE:MODEL:BACKWARD:BACK LINK' , 'o');
            break;
        case 'bnp_trims_accordioncolors':
            s.prop26 = 'MODEL';
            s.prop27 = 'FORWARD';
            s.prop37 = 'BUILD & PRICE:FORWARD:DEFAULT:B&P - SELECT A MODEL';
            CallSDotTL(s , true , 'BUILD & PRICE:MODEL:FORWARD:NEXT:COLORS LINK' , 'o');
            break;
        case 'raq_trims_accordioncolors':
            s.prop26 = 'VEHICLE';
            s.prop27 = 'FORWARD';
            s.prop37 = 'RAQ:VEHICLE:HELP:RAQ - HELP ME SELECT A TRIM';
            //modified for RAQ test 2
            CallSDotTL(s, true, 'RAQ:NEXT SELECT COLORS LINK 1 OF 2 ON BOTTOM', 'o');
            break;
        //added for RAQ test 2 
        case 'raq_trims_accordioncontact':
            s.prop26 = 'VEHICLE';
            s.prop27 = 'FORWARD';
            s.prop37 = 'RAQ:VEHICLE:HELP:RAQ - HELP ME SELECT A TRIM';
            CallSDotTL(s, true, 'RAQ:NEXT CONTACT INFORMATION LINK 1 OF 2 ON BOTTOM', 'o');
            break;
        case 'raq_bnplink':
            s.prop26 = 'COLORS';
            s.prop27 = 'FORWARD';
            s.prop37 = 'RAQ:COLORS:FORWARD:RAQ - SELECT A COLOR';
            CallSDotTL(s, true, 'RAQ:ADD ACCESSORIES GO TO B&P LINK', 'o');
            break;    

    }

}


//GENERAL
function calcMsrp(msrp, dhCost){
    var cleanMsrp = parseFloat(msrp.replace("$", "").replace(",", ""));
    var cleanDh = parseFloat(dhCost.replace("$", "").replace(",", ""));
    var sumStr = (cleanMsrp + cleanDh).toFixed(2).toString();
    var indexOfComma = sumStr.length - 6; //instead of sub-stringing forward 2 I'm working my way back from the hundredths place, in the off-chance the MSRP's over $100,000.00
    return "$" + sumStr.substr(0, indexOfComma) + "," + sumStr.substr(indexOfComma);
}

function removeDecimal(price){
    //return price.toString().replace(".00", "");
    var numStr = Math.round(parseFloat(price.toString().replace("$", "").replace(",", ""))).toString();
    var indexOfComma = numStr.length - 3;
    if (numStr.length > 3){
        return "$" + numStr.substr(0, indexOfComma) + "," + numStr.substr(indexOfComma);
    }else{
        return "$" + numStr;
    }
}

// Process tracking information from querystring and page variables
function ProcessTrackingInformation(s) {

    var sModelName = $.getQueryString({id:"ModelName"});
    var sModelYear = $.getQueryString({id:"ModelYear"});
    var sModelID = $.getQueryString({id:"ModelID"});
    var sSelected = $.getQueryString({id:"Selected"});
    var sExtColor = $.getQueryString({id:"EColor"});
    var sIntColor = $.getQueryString({id:"IColor"});

    if (sModelName != 'null') {

        // Model    
        if (typeof(trimList) != 'undefined') {
            s.prop1 = trimList[0][3].toUpperCase();
        }

        // Year
        var sModelYear = sModelYear;
        if (sModelYear != 'null') {
            s.prop2 = sModelYear;
        }

        // Product
        if (s.prop1) {
            s.products = GetModelProductType(s.prop1) + ';' + s.prop1;
        }

    }

    if (sModelID != 'null') {

        // Transmission and trim name
        if (typeof(modelList) != 'undefined') {
            var stTransmissionName = modelList[0][4].toUpperCase();
            var stWheelDrive = '';
            
            stTransmissionName = ExtractTransmissionInfo(stTransmissionName , stWheelDrive);
            stWheelDrive = stTransmissionName.split('|')[1];
            stTransmissionName = stTransmissionName.split('|')[0];            

            s.prop5 = stWheelDrive + trimList[0][0].toUpperCase();
            s.prop33 = stTransmissionName;
        }
        
    }
            
    if ( (sExtColor != 'null') && (sIntColor != 'null') ) {

        if ( (typeof(exColorList) != 'undefined') && (typeof(inColorList) != 'undefined') ) {
            var stExteriorColorName = '';
            var stInteriorColorName = '';

            for (var iCount = 0; iCount< exColorList.length; iCount++) {
                if (exColorList[iCount][6] == $.getQueryString({id:"EColor"})) {
                    stExteriorColorName = exColorList[iCount][0].toUpperCase();
                }
            }
            for (var iCount = 0; iCount< inColorList.length; iCount++) {
                if (inColorList[iCount][1] == $.getQueryString({id:"IColor"})) {
                    stInteriorColorName = inColorList[iCount][0].toUpperCase();
                }
            }

            s.prop3 = stExteriorColorName;
            s.prop4 = stInteriorColorName;
        }
    }
            
    if (sSelected != 'null') {
        sSelected = sSelected.replace(/,/g , ':');
        if (sSelected != 'null') {
            s.prop7 = sSelected;
            s.prop6 = sSelected.split(':').length;
        }
    }

    return s;

}

// This function is being broken out so that it can be used by other functions.
// It returns a pipe delimited list of values since it has to return 2 pieces of information.
function ExtractTransmissionInfo(stTransmissionName , stWheelDrive) {

    if (stTransmissionName.indexOf('2WD') >= 0) {
        stWheelDrive = '2WD ';
        stTransmissionName = stTransmissionName.replace(/2WD/ , '');
    }
    if (stTransmissionName.indexOf('4WD') >= 0) {
        stWheelDrive = '4WD ';
        stTransmissionName = stTransmissionName.replace(/4WD/ , '');
    }
    if (stTransmissionName.indexOf('AWD') >= 0) {
        stWheelDrive = 'AWD ';
        stTransmissionName = stTransmissionName.replace(/AWD/ , '');
    }
    
    return stTransmissionName + "|" + stWheelDrive;

}

// This is a generic function used to track click events through the build and price tool
function TrackBNPClick(s , sLinkName , prop26 , prop27 , sAdditionalLinkTrackVars , sLinkType) {

    if (sAdditionalLinkTrackVars != '') {
        sAdditionalLinkTrackVars = ',' + sAdditionalLinkTrackVars;
    }
    
    if (!sLinkType) {
        sLinkType = 'o'
    }

    s.linkTrackVars = 'prop26,prop27,prop37,eVar26,eVar27' + sAdditionalLinkTrackVars;
    s.prop26 = prop26;
    s.prop27 = prop27;
    CallSDotTL(s , true , sLinkName , sLinkType);

}

//function ShowCurrentOffer(modelName, modelYear, modelId, trimName, offerID){
//    modelId = (modelId == null) ? "" : modelId;
//    trimName = (trimName == null) ? "" : trimName;
//    if ( typeof(tb_show) === 'function') {
//        tb_show("" , "/tools/current-offers-pop-up.aspx?modelName=" + modelName + "&modelYear=" + modelYear + "&modelId=" + modelId + "&trimName=" + trimName + "&offerID=" + offerID + "&width=740&height=550&modal=true&TB_iframe=true", "");
//    } else {
//        window.open("/tools/current-offers-pop-up.aspx?modelName=" + modelName + "&modelYear=" + modelYear + "&modelId=" + modelId + "&trimName=" + trimName + "&offerID=" + offerID,"Current_Offers","menubar=no,width=740,height=550,toolbar=no");
//    }
//}


// We need to round up the price of all accessories.
function AdjustBnPAccessoryPrice(sPrice) {

    sPrice = sPrice.toString();
    
    sPrice = sPrice.replace(',' , '');
    
    sPrice = sPrice.replace('$' , '');
    
    sPrice = Math.ceil(sPrice);
    
    sPrice = removeDecimal(sPrice);
    
    return sPrice;

}
