// constants
jQuery.VWFinanceCalculatorConstants = {
    // Slider Constants
    SLIDER_GRADIENT: 'sliderGradient',
    SLIDER_TRACK: 'sliderTrack',
    SLIDER_HANDLE: 'sliderHandle',
    SLIDER_DISPLAY: 'sliderDisplay',
    SLIDER_INPUT: 'parameter_',

    // id/name constants
    MODAL_WRAPPER_DIV: 'modalWrapper',
    CALC_DIV: 'calculator',
    CALC_BODY_DIV: 'calculatorBody',
    CALC_STATUS_DIV: 'calcStatus',
    CALC_HEADER_DIV: 'quoteHeader',
    CALC_FOOTER_DIV: 'calcFooter',

    RANGE_SELECT_DIV: 'quoteRangeSelect',
    RANGE_SELECT_LINK: 'rangeSelectLink',

    PRODUCT_DIV: 'quoteProducts',
    PRODUCT_SUMMARY_DIV: 'quoteProductsSummary',
    PRODUCT_DISPLAY_NAME: 'quoteProductName',
    PRODUCT_CAMPAIGN_CODE: 'quoteCampaignCode',

    DEFAULTS_DIV: 'quoteDefaults',
    JSON_CONTROLS_XPATH: '/div[@id=quoteControlsJSON]',

    RESULT_DIV: 'quoteResult',
    RESULT_CALC_QUOTE_DIV: 'calculatedQuote',

    CALC_LOADING_CONTENT: 'calcLoadingContent',
    CALC_ERROR_CONTENT: 'calcErrorContent',

    DERIV_HEADER_FIELDS: 'derivativeHeaderFields',
    DERIV_NAME_HEADER: 'derivativeNameHeader',
    DERIV_PRICE_HEADER: 'derivativePriceHeader',
    DERIV_PRICE_HEADING: 'derivativePriceHeading',
    DERIV_NO_PRODUCTS_MESSAGE: 'noProductsMessage',
    DERIV_DISCLAIMER_HEADER: 'disclaimerHeader',

    QUOTE_DISCLAIMER: 'quoteDisclaimer',
    QUOTE_DISCLAIMER_TEXT: 'quoteDisclaimerText',
    QUOTE_DEFAULTS_OPTIONS: 'quoteDefaultOptions',

    MODEL_SELECT: 'modelName',
    MODEL_SELECT_BOX: 'modelNameSelect',

    TRIM_SELECT: 'trimName',
    TRIM_SELECT_BOX: 'trimNameSelect',

    NUM_DOORS_SELECT: 'numDoorsValue',
    NUM_DOORS_SELECT_BOX: 'numDoorsValueSelect',

    ENGINE_SELECT: 'derivativeId',
    ENGINE_SELECT_BOX: 'derivativeIdSelect',

    GO_BUTTON: 'goButton',

    PRODUCT_SELECT: 'productId',
    PRODUCT_SELECT_BOX: 'productIdSelect',
    PRODUCT_SELECT_DISPLAY: 'productIdDisplay',
    PRODUCT_HELP: 'quoteProductHelp',

    QUOTE_DEFAULT_OPTIONS: 'quoteDefaultOptions',
    QUOTE_DEFAULT_SUMMARY: 'quoteDefaultSummary',
    QUOTE_DEFAULT_EDIT_LINK: 'quoteDefaultEditLink',

    //CALC_FORM: 'calculatorForm',
	CALC_FORM: 'calculatorBody',

    REVISION_YEAR: 'revisionYear',
    DERIV_DH_ID: 'dhId',
    DERIV_PRICE: 'derivativePrice',
    SUBSIDY_AMOUNT: 'subsidyAmount',
    SUBSIDY_PERCENT: 'subsidyPercent',

    // url constants
    YEAR_KEY: '{YEAR}',
    DERIVATIVE_KEY: '{DERIVATIVE_ID}',

    PING_URL: '/finance/quote/ping',
    RANGE_DETAILS_URL: '/finance/quote/range-details',
    PRODUCTS_URL: '/finance/quote/products/year/{YEAR}/derivative/{DERIVATIVE_ID}',
    DEFAULTS_URL: '/finance/quote/defaults',
    CALCULATE_URL: '/finance/quote/calculate',

    //PDF Constants
    DEPOSIT: 'summary_2',
    MONTHS: 'summary_5',
    MILES_PER_ANNUM: 'summary_6',
    APR: 'APR',
    FINAL_PAYMENT: 'FinalPayment',
    OPTION_TO_PURCHASE: 'OptionToPurchaseFee',
    ACCEPTANCE_FEE: 'AcceptanceFee',
    AMOUNT_OF_CREDIT: 'parameter_4',
    EXCESS_MILEAGE: 'parameter_8',

    FADEOUT_TEMPLATE: '<div id="modalWrapper"></div>',

    CALCULATOR_TEMPLATE: '<div id="calculator">' +
                         '    <div id="quoteHeader">' +
                         '        <h1>' + jQuery.VWLang.FinCalc.TITLE + '</h1>' +
                         '        <div id="modalCloseLink"></div>' +
                         '        <div id="calcStatus">' +
                         '            <span id="calcLoadingContent">' + jQuery.VWLang.FinCalc.LOADING + '</span>' +
                         '            <span id="calcErrorContent">' + jQuery.VWLang.FinCalc.ERROR + '</span>' +
                         '        </div>' +
						 '        <div id="rangeDisplay">' +
                         '            <div id="rangeSelectLink"><a href="#" onclick="jQuery.VWFinanceCalculator.showRangeSelect">' + jQuery.VWLang.FinCalc.EDIT + '</a></div>' +
                         '            <ul id="derivativeHeaderFields">' +
                         '                <li id="derivativeNameHeader"></li>' +
                         '                <li>' +
						 '                    <span id="derivativePriceHeading"></span>' +
                         '                    <span id="derivativePriceHeader"></span>' +
                         '                </li>' +
                         '                <li id="disclaimerHeader">woo</li>' +
                         '            </ul>' +
						 '        </div>' +
                         '    </div>' +
                         '    <div id="calculatorBody">' +
						 '        <div id="quoteRangeSelect">' +
						 '            <input type="hidden" id="revisionYear" value="" />' +
						 '            <input type="hidden" id="dhId" value=""/>'/*  */ +
						 '            <input type="hidden" id="derivativePrice" value="" />' +
						 '            <ul>' +
						 '                <li id="modelNameSelect">' +
						 '                    <label>' + jQuery.VWLang.FinCalc.MODEL_SELECT_LABEL + '</label>' +
						 '                </li>' +
						 '                <li id="trimNameSelect">' +
						 '                    <label>' + jQuery.VWLang.FinCalc.TRIM_SELECT_LABEL + '</label>' +
						 '                </li>' +
						 '                <li id="numDoorsValueSelect">' +
						 '                    <label>' + jQuery.VWLang.FinCalc.NUM_DOORS_SELECT_LABEL + '</label>' +
						 '                </li>' +
						 '                <li id="derivativeIdSelect">' +
						 '                    <label>' + jQuery.VWLang.FinCalc.ENGINE_SELECT_LABEL + '</label>' +
						 '                </li>' +
						 '            </ul>' +
						 '            <div id="goButton"></div>' +
						 '        </div>' +
                         '			<div id="quoteProductsSummary">' +
                         '                <span id="quoteProductName"></span>' +
                         '                <span id="quoteCampaignCode"></span>' +
                         '                <div id="quoteProductHelp"></div>' +
                         '                <a href="javascript:jQuery.VWFinanceCalculator.showProducts()" id="quoteProductEdit">' + jQuery.VWLang.FinCalc.EDIT + '</a>' +
                         '                <div class="hr"><hr></div>' +
                         '            </div>' +
                         '            <div id="quoteProducts">' +
                         '                <fieldset>' +
                         '                    <legend>' + jQuery.VWLang.FinCalc.PRODUCT_LEGEND + '</legend>' +
                         '                    <input type="hidden" id="subsidyAmount" value="" />' +
                         '                    <input type="hidden" id="subsidyPercent" value="" />' +
                         '                    <ul>' +
                         '                        <li id="productIdSelect">' +
                         '                            <label>' + jQuery.VWLang.FinCalc.PRODUCT_SELECT_LABEL + '</label>' +
                         '                        </li>' +
                         '                    </ul>' +
                         '                </fieldset>' +
                         				// Added go button
						 '          	 <div id="goFinanceButton"></div>' +
                         '            </div>' +
                         '            <div id="quoteDefaults"></div>' +
                         '    </div>' +
                         '    <div id="calcFooter"></div>' +
                         '</div>'
}

// globals
var VWFinanceCalculatorRangeDetails = null;
var VWFinanceCalculatorFinancialProducts = null;
var VWFinanceCalculatorSettings = null;
var VWFinanceCalculatorControls = null;

// static methods
jQuery.VWFinanceCalculator = {

    /******** utils *******/
    validateDepositValue: function(inputElement,type,min,max) {

        var valid = true;
        var value = inputElement.value;

        // check for invalid characters
        var index = value.search(/^[0-9]+(.[0-9][0-9])?$/);

        if (index != 0) {
            valid = false;
        }

        // check min/max range
        var tempMin = 0;
        var tempMax = $('#' + jQuery.VWFinanceCalculatorConstants.DERIV_PRICE).get(0).value;

        // strip out possible ccy formatting from min/max values
        if (min && min.length > 0) {
            tempMin = min.replace(/\ï¿½/g,'').replace(/,/g,'');
        }

        if (max && max.length > 0) {
            tempMax = max.replace(/\ï¿½/g,'').replace(/,/g,'');
        }

        if (value - tempMin < 0) {
            valid = false;
        }

        if (tempMax - value < 0) {
            valid = false;
        }

        if (valid) {
            $('#calculateQuoteSubmit').get(0).disabled = false;
            inputElement.className = '';
        } else {
            $('#calculateQuoteSubmit').get(0).disabled = true;
            inputElement.className = 'inputError';
        }
    },

    changeSlider: function(sliderHandle,updateInput,x) {
        // get slider id
        var sliderId = sliderHandle.id.substring(12);

        var TRACK_WIDTH = 164;
        var GRADIENT_WIDTH = 163;

        // get current value
        var value = 0;
        var width = 0;

        for (var i = 0; i < VWFinanceCalculatorControls.length; i++) {
            if (VWFinanceCalculatorControls[i].sliderId == sliderId) {

                var fractions = VWFinanceCalculatorControls[i].values.length - 1;
                if (fractions == 0) {
                	value = VWFinanceCalculatorControls[i].values[0];
                	break;
                }

                var valueIndex = Math.round(fractions * x / TRACK_WIDTH);
                value = VWFinanceCalculatorControls[i].values[valueIndex];

                // find new gradient width
                var incr = GRADIENT_WIDTH / fractions;
                width = GRADIENT_WIDTH - incr * valueIndex;
                break;
            }
        }

        // set gradient
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.SLIDER_GRADIENT + sliderId).get(0).style.width = '' + width + 'px';

        // set display value
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.SLIDER_DISPLAY + sliderId).get(0).innerHTML = value;
        // set hidden input value
        if (updateInput) {
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.SLIDER_INPUT + sliderId).get(0).value = value;
        }
    },

    /******* display methods *******/
    showCalculator: function() {
        // show background and calc
		$('#' + jQuery.VWFinanceCalculatorConstants.MODAL_WRAPPER_DIV).show();
		$('#' + jQuery.VWFinanceCalculatorConstants.CALC_DIV).show();
    },

    showError: function() {
        // hide range display
        if (jQuery.browser.msie) {
			jQuery('#rangeDisplay').hide();
		} else {
			jQuery('#rangeDisplay').fadeOut('normal');
		}
		// hide loading
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_LOADING_CONTENT).hide();
		// show error
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_STATUS_DIV).show();
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_ERROR_CONTENT).show();
    },

    showLoading: function() {
		// hide range display
		if (jQuery.browser.msie) {
			jQuery('#rangeDisplay').hide();
		} else {
			jQuery('#rangeDisplay').fadeOut('normal');
		}
        // hide error
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_ERROR_CONTENT).hide();
        // show loading
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_STATUS_DIV).show();
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_LOADING_CONTENT).show();
    },

    hideLoading: function() {
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_LOADING_CONTENT).hide();
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_STATUS_DIV).hide();
		jQuery('#rangeDisplay').show();
    },

    showRangeSelectLink: function() {


        if (!VWFinanceCalculatorSettings.price) {

		
	   
		
            if (VWFinanceCalculatorSettings.mode == 'MODEL_SELECT') {

                if (jQuery.browser.msie) {
                    jQuery('#' + jQuery.VWFinanceCalculatorConstants.RANGE_SELECT_LINK).show();
                } else {
                    jQuery('#' + jQuery.VWFinanceCalculatorConstants.RANGE_SELECT_LINK).fadeIn('fast');
                }
            }

         }


    },

    hideRangeSelectLink: function() {
        if (jQuery('#' + jQuery.VWFinanceCalculatorConstants.RANGE_SELECT_LINK).get(0).style.display == 'block') {
			if (jQuery.browser.msie) {
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.RANGE_SELECT_LINK).hide();
			} else {
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.RANGE_SELECT_LINK).fadeOut('fast');
			}
        }
    },

    showRangeSelect: function() {
       
	// hide links
	
        //jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SELECT).setOptions([{value: 0, label: jQuery.VWLang.FinCalc.PRODUCT_NO_PLANS_LABEL, selected: true}]);
	//jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_NO_PRODUCTS_MESSAGE).append(jQuery.VWLang.FinCalc.NO_PRODUCTS_AVAILABLE_MESSAGE);
	//jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_NO_PRODUCTS_MESSAGE).addClass("noProductsMessage")

	//jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_NO_PRODUCTS_MESSAGE).html('');
	//jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_NO_PRODUCTS_MESSAGE).removeClass("noProductsMessage");
	//jQuery('#quoteRangeSelect ul').show();
	//jQuery('#quoteRangeSelect #goButton').show();
	    
	    
        jQuery.VWFinanceCalculator.hideRangeSelectLink();

        // products summary and defaults showing
        if (jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).length > 0 &&
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).get(0).style.display == 'block'
		) {
			jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).slideUp(1000, function() {
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SUMMARY_DIV).slideUp(500, function() {
					jQuery('#' + jQuery.VWFinanceCalculatorConstants.RANGE_SELECT_DIV).slideDown(1000);
				});
			});
        // products select showing
        } else {
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DIV).slideUp(500,function() {
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.RANGE_SELECT_DIV).slideDown(1000);
            });
        }
    },

    showProducts: function() {
        // hide defaults and hide product summary then show product select
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).slideUp(1000,function() {
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SUMMARY_DIV).slideUp(500,function() {
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DIV).slideDown(500);
            });
        });
    },

    hideDefaultsDiv: function() {
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).hide();
    },

    showDefaults: function() {

		//alert("showDefaults");

        jQuery.VWFinanceCalculator.hideLoading();

        if (jQuery('li/span[@class=error]', jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULTS_OPTIONS)).length > 0) {
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_SUMMARY).hide();
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_OPTIONS).show();
        } else {
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_OPTIONS).hide();
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_SUMMARY).show();
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.RESULT_DIV).show();
        }

	jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).slideDown(1000);

    },

   showDefaultOptions: function() {

        //alert("show default options");

        if (jQuery.browser.msie && jQuery.VWFinanceCalculator.defaultOptions) { // if we've captured the form DOM, re-add it now
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).append(jQuery.VWFinanceCalculator.defaultOptions);
        }

        // slide up defaults div
        if (jQuery.browser.msie) { // don't do slide in IE, breaks sliders
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_SUMMARY).hide();
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.RESULT_DIV).hide();
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_OPTIONS).show();
        } else {
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).slideUp(1000,function() {
                // display defaults form, hide defaults summary and hide results
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_SUMMARY).hide();
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.RESULT_DIV).hide();
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_OPTIONS).show();
                // slide defaults div back down
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).slideDown(1000);
            });
        }
       	/** Remove old 'quoteDefaultOptions' that may be hanging around - msie only */
        if (jQuery.browser.msie && jQuery.VWFinanceCalculator.defaultOptions) {

        	 var qd = $('#quoteDefaults');

        	 var kids = qd.children();
        	 var kidsLen = qd.children().length;
        	 var foundOne = false;
             if (kidsLen > 1){
               	var fieldSet = kids[0];
               	var fsKids = fieldSet.childNodes;
     			for (var i = 0; i < fsKids.length; i++) {
     				if (fsKids[i].id == 'quoteDefaultOptions'){
     					//alert(fsKids[i].id);
     					foundOne = true;
     					break;
     				}
     			}

     			 if(foundOne && qd.children()[1].id == 'quoteDefaultOptions'){
     			   //alert('removing ' + qd.children()[1].id);
             		var qdo = qd.children()[1];
             		$(qdo).remove();
             	}

             }
         }
    },

    /******* logic methods *******/

    close: function() {

		 // hide wrapper, logo and calculator divs
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_DIV).fadeOut('normal',function() {
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODAL_WRAPPER_DIV).fadeOut('normal');
        });

        // delete wrapper, logo and calculator divs
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_DIV).remove();
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODAL_WRAPPER_DIV).remove();

        // destroy draggable
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_DIV).DraggableDestroy();

        // reset globals
        VWFinanceCalculatorFinancialProducts = null;

        parent.window.close();
    },

    matchModel: function(models,modelId) {
        if (models.length) {
            for (var i=0;i<models.length;i++) {
                if (models[i].id == modelId) {
                    return models[i];
                }
            }
        } else if (models.id == modelId) {
            return models;
        }
        return null;
    },

    matchTrim: function(trims,trimId) {
        if (trims.length) {
            for (var i=0;i<trims.length;i++) {
                if (trims[i].id == trimId) {
                    return trims[i];
                }
            }
        } else if (trims.id == trimId) {
            return trims;
        }
        return null;
    },

    matchNumDoors: function(numDoors,value) {
        if (numDoors.length) {
            for (var i=0;i<numDoors.length;i++) {
                if (numDoors[i].number_of_doors == value) {
                    return numDoors[i];
                }
            }
        } else if (numDoors.number_of_doors == value) {
            return numDoors;
        }
        return null;
    },

    matchDerivative: function(derivatives,id) {
        if (derivatives.length) {
            for (var i=0;i<derivatives.length;i++) {
                if (derivatives[i].id == id) {
                    return derivatives[i];
                }
            }
        } else if (derivatives.id == id) {
            return derivatives;
        }
        return null;
    },



    updateCalcHeader: function(model,trim,numDoors,derivativeId) {

        // hide header
        if (jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_HEADER_FIELDS).get(0).style.display == 'block') {
			//if (jQuery.browser.msie) {
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_HEADER_FIELDS).hide();
			/*} else {
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_HEADER_FIELDS).fadeOut(1000);
			}*/
		}
		//clear any 'no products...' message
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_NO_PRODUCTS_MESSAGE).empty();

        // if any of the required fields are missing then hide the header
        if (model == 0 || trim == 0 || numDoors == 0 || derivativeId == 0) {
		
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_NAME_HEADER).empty();
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_PRICE_HEADER).empty();
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_PRICE_HEADING).empty();
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_PRICE).val('');
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_DISCLAIMER_HEADER).hide()
	    
        } else {
            var vwModel = jQuery.VWFinanceCalculator.matchModel(VWFinanceCalculatorRangeDetails.vwPacket.vwModelCollection.vwModel,model);
            var vwTrim = jQuery.VWFinanceCalculator.matchTrim(vwModel.vwTrimCollection.vwTrim,trim);
            var vwDoors = jQuery.VWFinanceCalculator.matchNumDoors(vwTrim.vwDoorsCollection.vwDoors,numDoors);
            var vwDerivative = jQuery.VWFinanceCalculator.matchDerivative(vwDoors.vwDerivativeCollection.vwDerivative,derivativeId);

            var price = '';
            var includesOffers = false;
            var includesOptions = false;

            // add/remove offer price class
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_PRICE_HEADER).removeClass('offerPrice');

            // override price and style with the price/style passed in
            if (VWFinanceCalculatorSettings.price) {
                price = VWFinanceCalculatorSettings.price;
                includesOffers = VWFinanceCalculatorSettings.includesOffers;
                includesOptions = VWFinanceCalculatorSettings.includesOptions;
            } else {
                price = vwDerivative.price;
                includesOffers = vwDerivative.includesOffers;
            }

            var headerPrice = jQuery.VWUtils.numberFormat(price,{ccySymbol: jQuery.VWLang.FinCalc.CCY_SYMBOL, ccyPosition: jQuery.VWLang.FinCalc.CCY_POSITION});
            if (includesOffers && includesOptions) {
                headerPrice += '*';
            }

            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_NAME_HEADER).empty().append(vwModel.name + ' ' + vwDerivative.name);
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_PRICE_HEADING).empty().append(jQuery.VWLang.FinCalc.PRICE_HEADER);
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_PRICE_HEADER).empty().append(headerPrice);
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_PRICE).val(price);

            // add disclaimer
            if (includesOffers && includesOptions) {
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_DISCLAIMER_HEADER).empty().append(jQuery.VWLang.FinCalc.DISCLAIMER_HEADER_BOTH).show();
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_PRICE_HEADER).addClass('offerPrice');
            } else if (VWFinanceCalculatorSettings.includesOffers) {
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_DISCLAIMER_HEADER).empty().append(jQuery.VWLang.FinCalc.DISCLAIMER_HEADER_OFFER).show();
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_PRICE_HEADER).addClass('offerPrice');
            } else if (VWFinanceCalculatorSettings.includesOptions) {
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_DISCLAIMER_HEADER).empty().append(jQuery.VWLang.FinCalc.DISCLAIMER_HEADER_OPTIONS).show();
            }

            // display header
			//if (jQuery.browser.msie) {
				$('#rangeDisplay').show();
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_HEADER_FIELDS).show();
			/*} else {
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_HEADER_FIELDS).fadeIn(1000);
			}*/
        }
    },

    getQuoteDisclaimer: function() {
        // get disclaimer from products list
        var productId = jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SELECT).val();
		if (VWFinanceCalculatorFinancialProducts.length) {
	        for (var i=0;i<VWFinanceCalculatorFinancialProducts.length;i++) {
	            if (VWFinanceCalculatorFinancialProducts[i].id == productId) {
	                return VWFinanceCalculatorFinancialProducts[i].disclaimer;
	                break;
	            }
	        }

	    } else {
           if (VWFinanceCalculatorFinancialProducts.id == productId) {
                return VWFinanceCalculatorFinancialProducts.disclaimer;
            }

	    }
        return '';
    },

    populateModel: function(vwModel) {

        var options =[];
        options[0] = {value: 0, label: jQuery.VWLang.FinCalc.MODEL_OPTION_LABEL, disabled: true};

        if (vwModel.length) {
            for (var i=0;i<vwModel.length;i++) {
                // add option
                options[i+1] = {value: vwModel[i].id,label: vwModel[i].name};
            }
        } else {
            options[1] = {value: vwModel.id,label: vwModel.name};
        }

        jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT).setOptions(options);

        // reset child drop downs
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).setOptions([{value: 0, label: jQuery.VWLang.FinCalc.TRIM_OPTION_LABEL}]);
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).disableSelectControl();
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).setOptions([{value: 0, label: jQuery.VWLang.FinCalc.NUM_DOORS_OPTION_LABEL}]);
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).disableSelectControl();
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).setOptions([{value: 0, label: jQuery.VWLang.FinCalc.ENGINE_OPTION_LABEL}]);
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).disableSelectControl();
        // update headers
        jQuery.VWFinanceCalculator.updateCalcHeader(0,0,0,0);
        // reset year
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.REVISION_YEAR).val('');

        jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT).enableSelectControl();
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.GO_BUTTON).get(0).disabled = true;

        // simulate selecting option if modelId is passed in
        if (VWFinanceCalculatorSettings.modelId) {
            // select option
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT).selectOption(VWFinanceCalculatorSettings.modelId);

        }
    },

    populateProducts: function(products) {

	
        var options = '';

           if (
			products &&
			products.vwPacket &&
			products.vwPacket.vwProductCollection &&
			products.vwPacket.vwProductCollection.vwProduct
		) {
            // set dhId
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_DH_ID).val(products.vwPacket.dhId);

            var vwProduct = products.vwPacket.vwProductCollection.vwProduct;

            var options = [];
	 	    
            if (vwProduct.length) {
                for (var i = 0; i < vwProduct.length; i++) {
                    // add option
                    options[i] = {
                        value: vwProduct[i].id,
                        label: vwProduct[i].description,
                        selected: (vwProduct[i].isDefault ? true : false)
                    };
                    if (vwProduct[i].isOffer == 'true') {
                        options[i].style = 'offerPlan';
                    }
                }
            } else {
                options[0] = {
                    value: vwProduct.id,
                    label: vwProduct.description,
                    selected: true
                };
                if (vwProduct.isOffer == 'true') {
                    options[0].style = 'offerPlan';
                }
            }

            jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SELECT).setOptions(options);
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SELECT).enableSelectControl();

        } else {

	    alert('Currently we have no finance offer available for this particular model. Please contact your local retailer');
	    window.close();
	    
	    jQuery('#' + jQuery.VWFinanceCalculatorConstants.RANGE_SELECT_DIV).slideDown(1000);
	    jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_DISCLAIMER_HEADER).hide();
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SELECT).disableSelectControl();
	    

        }
    },

    onSelectModel: function() {
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).closeSelectControl();
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).closeSelectControl()
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).closeSelectControl();
		
        // get parent model
        var model = jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT).val();

        jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).enableSelectControl();
        // reset child drop downs
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).setOptions([{value: 0, label: jQuery.VWLang.FinCalc.NUM_DOORS_OPTION_LABEL}]);
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).disableSelectControl();
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).setOptions([{value: 0, label: jQuery.VWLang.FinCalc.ENGINE_OPTION_LABEL}]);
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).disableSelectControl();

        // update headers
        jQuery.VWFinanceCalculator.updateCalcHeader(0,0,0,0);

        // reset year
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.REVISION_YEAR).val('');
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.GO_BUTTON).get(0).disabled = true;

        if (model != 0) {
            var vwModel = jQuery.VWFinanceCalculator.matchModel(VWFinanceCalculatorRangeDetails.vwPacket.vwModelCollection.vwModel,model);
            var vwTrim = vwModel.vwTrimCollection.vwTrim;

            var options = [];
            options[0] = {value: 0, label: jQuery.VWLang.FinCalc.TRIM_OPTION_LABEL, disabled: true};

            if (vwTrim.length) {
                for (var i=0;i<vwTrim.length;i++) {
                    // add option
                    options[i+1] = {value: vwTrim[i].id, label: vwTrim[i].name};
                }
            } else {
                options[1] = {value: vwTrim.id, label: vwTrim.name};
            }

            jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).setOptions(options);

            // simulate selecting option if trimId is passed in
            if (VWFinanceCalculatorSettings.trimId) {
                // select option
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).selectOption(VWFinanceCalculatorSettings.trimId);
            }
        }
    },

    onSelectTrim: function() {
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).closeSelectControl()
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).closeSelectControl();
		
        // get parents
        var model = jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT).val();
        var trim = jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).val();

        // reset child drop downs
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).enableSelectControl();
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).setOptions([{value: 0, label: jQuery.VWLang.FinCalc.ENGINE_OPTION_LABEL}]);
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).disableSelectControl();
        // update headers
        jQuery.VWFinanceCalculator.updateCalcHeader(0,0,0,0);
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.GO_BUTTON).get(0).disabled = true;

        if (trim != 0) {
            var vwModel = jQuery.VWFinanceCalculator.matchModel(VWFinanceCalculatorRangeDetails.vwPacket.vwModelCollection.vwModel,model);
            var vwTrim = jQuery.VWFinanceCalculator.matchTrim(vwModel.vwTrimCollection.vwTrim,trim);
            var vwDoors = vwTrim.vwDoorsCollection.vwDoors;

            var options = [];
            options[0] = {value: 0, label: jQuery.VWLang.FinCalc.NUM_DOORS_OPTION_LABEL, disabled: true};

            if (vwDoors.length) {
                for (var i=0;i<vwDoors.length;i++) {
                    // add option
                    options[i+1] = {value: vwDoors[i].number_of_doors,label: vwDoors[i].number_of_doors};
                }
            } else {
                options[1] = {value: vwDoors.number_of_doors,label: vwDoors.number_of_doors};
            }

            jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).setOptions(options);

            // set hidden year value
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.REVISION_YEAR).val(vwTrim.year);

            // simulate selecting option if numberOfDoors is passed in
            if (VWFinanceCalculatorSettings.numberOfDoors) {
                // select option
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).selectOption(VWFinanceCalculatorSettings.numberOfDoors);
            } else if( !vwDoors.length ) {
            	// Select number of doors automaticall if there is only one option available
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).selectOption(vwDoors.number_of_doors);
            }
        }
    },

    onSelectNumDoors: function() {
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).closeSelectControl();

        // get parents
        var model = jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT).val();
        var trim = jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).val();
        var numDoors = jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).val();

        // disable go button
        jQuery.VWFinanceCalculator.updateCalcHeader(0,0,0,0);
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.GO_BUTTON).get(0).disabled = true;

        jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).enableSelectControl();

        if ( numDoors != 0 ) {

	    var vwModel = jQuery.VWFinanceCalculator.matchModel(VWFinanceCalculatorRangeDetails.vwPacket.vwModelCollection.vwModel,model);
            var vwTrim = jQuery.VWFinanceCalculator.matchTrim(vwModel.vwTrimCollection.vwTrim,trim);
            var vwDoors = jQuery.VWFinanceCalculator.matchNumDoors(vwTrim.vwDoorsCollection.vwDoors,numDoors);
            var vwDerivative = vwDoors.vwDerivativeCollection.vwDerivative;

            var options = [];
            options[0] = {value: 0, label: jQuery.VWLang.FinCalc.ENGINE_OPTION_LABEL, disabled: true};

            if (vwDerivative.length) {
                for (var i=0;i<vwDerivative.length;i++) {
                    options[i+1] = {value: vwDerivative[i].id,label: vwDerivative[i].name};
                }
            } else {
                options[1] = {value: vwDerivative.id,label: vwDerivative.name};
            }

            jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).setOptions(options);

            // simulate selecting option if derivativeId is passed in
            if (VWFinanceCalculatorSettings.derivativeId) {
                // select option
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).selectOption(VWFinanceCalculatorSettings.derivativeId);

                // click go button
                jQuery.VWFinanceCalculator.onClickGo();
            }
        }
    },

    onSelectEngine: function() {
		//jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT).closeSelectControl();
		//jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).closeSelectControl();
		//jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).closeSelectControl();

		var derivativeId = jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).val();

        if (derivativeId != 0) {

            var modelId = jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT).val();
            var trimId = jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).val();
            var numDoors = jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).val();

            // update Model and Price header
            jQuery.VWFinanceCalculator.updateCalcHeader(modelId,trimId,numDoors,derivativeId);

            // lookup dhCode in model object and set it
            var vwModel = jQuery.VWFinanceCalculator.matchModel(VWFinanceCalculatorRangeDetails.vwPacket.vwModelCollection.vwModel,modelId);
            var vwTrim = jQuery.VWFinanceCalculator.matchTrim(vwModel.vwTrimCollection.vwTrim,trimId);
            var vwDoors = jQuery.VWFinanceCalculator.matchNumDoors(vwTrim.vwDoorsCollection.vwDoors,numDoors);
            var vwDerivative = jQuery.VWFinanceCalculator.matchDerivative(vwDoors.vwDerivativeCollection.vwDerivative,derivativeId);

            jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_DH_ID).val(vwDerivative.dhId);
            jQuery('#' + jQuery.VWFinanceCalculatorConstants.GO_BUTTON).get(0).disabled = false;

        } else {

            jQuery.VWFinanceCalculator.updateCalcHeader(0,0,0,0);

        }
    },

    initDropDowns: function() {

        // model DDL
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT_BOX).SelectControl(jQuery.VWFinanceCalculatorConstants.MODEL_SELECT,{
            disabled: true,
            options: [{value: 0, label: jQuery.VWLang.FinCalc.MODEL_OPTION_LABEL, disabled: true, selected: true}],
            onchange: function() {
                jQuery.VWFinanceCalculator.onSelectModel();
            }
        });

        // trim DDL
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT_BOX).SelectControl(jQuery.VWFinanceCalculatorConstants.TRIM_SELECT,{
            disabled: true,
            options: [{value: 0, label: jQuery.VWLang.FinCalc.TRIM_OPTION_LABEL, disabled: true, selected: true}],
            onchange: function() {
                jQuery.VWFinanceCalculator.onSelectTrim();
            }
        });

        // num doors DDL
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT_BOX).SelectControl(jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT,{
            disabled: true,
            options: [{value: 0, label: jQuery.VWLang.FinCalc.NUM_DOORS_OPTION_LABEL, disabled: true, selected: true}],
            onchange: function() {
                jQuery.VWFinanceCalculator.onSelectNumDoors();
            }
        });

        // engine DDL
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT_BOX).SelectControl(jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT,{
            disabled: true,
            options: [{value: 0, label: jQuery.VWLang.FinCalc.ENGINE_OPTION_LABEL, disabled: true, selected: true}],
            onchange: function() {
                jQuery.VWFinanceCalculator.onSelectEngine();
            }
        });

        // products DDL
        jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SELECT_BOX).SelectControl(jQuery.VWFinanceCalculatorConstants.PRODUCT_SELECT,{
            disabled: true,
            options: [{value: 0, label: jQuery.VWLang.FinCalc.PRODUCT_OPTION_LABEL, disabled: true, selected: true}],
            onchange: function() {
            	// Moved to using a close button instead of onchange
               // jQuery.VWFinanceCalculator.onSelectProduct();
            }
        });

    },

    ajaxError: function() {
        //alert('ajaxError');
        
        // hide loading
        jQuery.VWFinanceCalculator.hideLoading();
        // show error
        jQuery.VWFinanceCalculator.showError();
    },

    ping: function() {



        // set loading
        jQuery.VWFinanceCalculator.showLoading();

        jQuery.getJSON(
			jQuery.VWFinanceCalculatorConstants.PING_URL,
            {},
            function(ping) {
                if (ping) {

                    if (ping.vwPacket.vwError || ping.vwPacket.vwPing.status != 'ok') {
                        // show error
                        jQuery.VWFinanceCalculator.showError();

                    } else {
                        // init drop downs


                        jQuery.VWFinanceCalculator.initDropDowns();

                        // load range details
                        jQuery.VWFinanceCalculator.loadRangeDetails();

                    }
                } else {
                    // show error
                    jQuery.VWFinanceCalculator.showError();
                }
            }
		);
    },

    loadRangeDetails: function() {

	  
	    
        jQuery.getJSON(jQuery.VWFinanceCalculatorConstants.RANGE_DETAILS_URL,
            {},
            function(rangeDetails) {

                if (rangeDetails) {

			if (rangeDetails.vwPacket && !rangeDetails.vwPacket.vwError) {

                
                        VWFinanceCalculatorRangeDetails = rangeDetails;

                        // populate top level drop down list
                        jQuery.VWFinanceCalculator.populateModel(rangeDetails.vwPacket.vwModelCollection.vwModel);

                        // hide loading
                        jQuery.VWFinanceCalculator.hideLoading();

                        if (VWFinanceCalculatorSettings.mode == 'MODEL_SELECT' && !VWFinanceCalculatorSettings.price) {
				            jQuery('#' + jQuery.VWFinanceCalculatorConstants.RANGE_SELECT_DIV).slideDown(1000);
                        }

                    } else {
                        jQuery.VWFinanceCalculator.showError();
                    }
                } else {
                    jQuery.VWFinanceCalculator.showError();
                }
            });

    },

    // load products
    loadFinancialProducts: function() {
	
	
	
        var dhId = jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_DH_ID).val();
        var url = jQuery.VWFinanceCalculatorConstants.PRODUCTS_URL
			.replace(jQuery.VWFinanceCalculatorConstants.DERIVATIVE_KEY, dhId)
			.replace(jQuery.VWFinanceCalculatorConstants.YEAR_KEY, jQuery('#' + jQuery.VWFinanceCalculatorConstants.REVISION_YEAR).val()
		);

		jQuery.ajax({
			cache: false,
			success: function(financialProducts) {
				// check for errors
				if (financialProducts) {
					if (!financialProducts.vwPacket.vwError) {
						// populate product links
						VWFinanceCalculatorFinancialProducts = financialProducts.vwPacket.vwProductCollection.vwProduct;
						jQuery.VWFinanceCalculator.populateProducts(financialProducts);
						jQuery.VWFinanceCalculator.hideLoading();
						jQuery.VWFinanceCalculator.onSelectProduct();
					} else {
						jQuery.VWFinanceCalculator.populateProducts(null);
					}
				} else {
					jQuery.VWFinanceCalculator.populateProducts(null);
				}
			},
			dataType: 'json',
			error: jQuery.VWFinanceCalculator.showError,
			url: url
		});
    },

    onClickGo: function(e) {
    	// If we have physically clicked the go button
		s.eVar28 = jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT).val();
    	if (e != undefined) {
    		var model = jQuery('#' + jQuery.VWFinanceCalculatorConstants.MODEL_SELECT).val();
    		var trim = jQuery('#' + jQuery.VWFinanceCalculatorConstants.TRIM_SELECT).val();
    		var doors = jQuery('#' + jQuery.VWFinanceCalculatorConstants.NUM_DOORS_SELECT).val();
    		var engine = jQuery('#' + jQuery.VWFinanceCalculatorConstants.ENGINE_SELECT).val();
    		
    		//VW.trackEvent('Finance Go Button', {prop50:'/finance/calculator/go/' + model + '/' + trim + '/' + doors + '/' + engine});
    	}
		
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.RANGE_SELECT_DIV).slideUp(1000, function () {
			jQuery.VWFinanceCalculator.showRangeSelectLink();
			jQuery.VWFinanceCalculator.showLoading();
			jQuery.VWFinanceCalculator.loadFinancialProducts();
		});
    },

	// Click handler for finance go button
    onClickFinanceGo: function() {
			jQuery.VWFinanceCalculator.showLoading();
		jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DIV).slideUp(1000, function () {
			//jQuery.showRangeSelectLink();
			//jQuery('#' + jQuery.VWFinanceCalculatorConstants.DERIV_HEADER_FIELDS).hide();
			jQuery.VWFinanceCalculator.onSelectProduct();
		});
    },

    // load defaults
    loadDefaults: function() {



        var params = jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_FORM).VWUtilsSerializeForm();

        jQuery.ajax({
            url: jQuery.VWFinanceCalculatorConstants.DEFAULTS_URL,
            async: false,
            type: 'GET',
            data: params,
            dataType: 'html',
            success: function(defaults) {
				defaults = defaults.replace("-onTheRoadPrice-",$("#derivativePriceHeader").text());
                var defaultsObj = jQuery(defaults);

				// extract JSON data
				var jsonControls = jQuery.parseJSON(
					jQuery(jQuery.VWFinanceCalculatorConstants.JSON_CONTROLS_XPATH, defaultsObj).text()	//.replace('},]', '}]')
				);

				// remove that node
				jQuery(jQuery.VWFinanceCalculatorConstants.JSON_CONTROLS_XPATH, defaultsObj).remove();

				// inject disclaimer
				var disclaimer = jQuery.VWFinanceCalculator.getQuoteDisclaimer();
				if (disclaimer) {
					jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DISCLAIMER_TEXT,defaultsObj).append(disclaimer);
				}

				// empty then add defaults form
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).get(0).innerHTML = '';
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).append(jQuery('..', defaultsObj).html());

				/*
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_OPTIONS).show();
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_SUMMARY).show();
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).slideDown(1000);
				*/

				if (jsonControls) {
					// store in global

					VWFinanceCalculatorControls = jsonControls.controls.control;
					jQuery.VWFinanceCalculator.initFormControls();
					jQuery.VWFinanceCalculator.showDefaults();

                } else {
					jQuery.VWFinanceCalculator.showError();
				}
            }});



    },

	initFormControls: function () {
		//alert('initFormControls');
		
		var controls = VWFinanceCalculatorControls;

		// generate controls and add to page
		for (var i = 0; i < controls.length; i++) {

			if (controls[i]) {

				var control = controls[i];

				if (control.type == 'select') {
					jQuery('#' + control.parent).SelectControl(control.id,{
						disabled: false,
						options: control.values
					});

				} else if (control.type == 'slider') {

					var defaultIndex = 0;

					for (var j = 0; j < control.values.length; j++) {
						if (control.values[j] && control.values[j] == control.defaultValue) {
							defaultIndex = j;
							break;
						}
					}

					jQuery('#' + jQuery.VWFinanceCalculatorConstants.SLIDER_TRACK + control.sliderId).Slider({

						accept: jQuery('#' + jQuery.VWFinanceCalculatorConstants.SLIDER_HANDLE + control.sliderId),

						onChange: function(cordx, cordy, x, y) {
							jQuery.VWFinanceCalculator.changeSlider(this, true, x);
						},

						onSlide: function(cordx, cordy, x, y) {
							jQuery.VWFinanceCalculator.changeSlider(this, false, x);
						},

						fractions: control.values.length - 1

					});

					// set initial value and offset the slider handle
					var GRADIENT_WIDTH = 163;
					if (control.values.length == 1) {
						var incr = GRADIENT_WIDTH / 1;
					} else {
						var incr = GRADIENT_WIDTH / (control.values.length - 1);
					}
					var startWidth = Math.round(incr * defaultIndex);
					// accounting for width of handle too
					var handleOffset = startWidth + 2;

					jQuery.VWFinanceCalculator.changeSlider(jQuery('#' + jQuery.VWFinanceCalculatorConstants.SLIDER_HANDLE + control.sliderId).get(0), true, startWidth);
					jQuery('#' + jQuery.VWFinanceCalculatorConstants.SLIDER_HANDLE + control.sliderId).get(0).style.left = '' + handleOffset + 'px';

				}
			}
		}

		// setup tooltips
		//jQuery('.info',jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULTS_OPTIONS)).Tooltip('tooltipLeft');

	},

    onSelectProduct: function() {
	    
	
	
        var productId = jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SELECT).val();

        // lookup subsidy Amount/Percent
        if (VWFinanceCalculatorFinancialProducts) {
		
		if (VWFinanceCalculatorFinancialProducts.length) {
				
			for (var i = 0; i < VWFinanceCalculatorFinancialProducts.length; i++) {
                  
				if (productId == VWFinanceCalculatorFinancialProducts[i].id) {
	
					// set products display value and set help text
					jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DISPLAY_NAME).empty().append(jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SELECT_DISPLAY).text());
					
					if (VWFinanceCalculatorFinancialProducts[i].help) {
					    jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_HELP).empty().append(VWFinanceCalculatorFinancialProducts[i].help);
					} else {
					    jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_HELP).empty().append('&nbsp;');
					}
		
					jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_CAMPAIGN_CODE).empty().append(VWFinanceCalculatorFinancialProducts[i].campaignCode);
								jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_CAMPAIGN_CODE).hide();
		
					// set offer style
					jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DISPLAY_NAME).removeClass('planOffer');
					if (VWFinanceCalculatorFinancialProducts[i].isOffer == 'true') {
					    jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DISPLAY_NAME).addClass('planOffer');
					}
		
					// set subsidy amount and percent
					jQuery('#' + jQuery.VWFinanceCalculatorConstants.SUBSIDY_AMOUNT).val(VWFinanceCalculatorFinancialProducts[i].subsidyAmount);
					jQuery('#' + jQuery.VWFinanceCalculatorConstants.SUBSIDY_PERCENT).val(VWFinanceCalculatorFinancialProducts[i].subsidyPercent);
		
					//alert("hide products select and show summary");
		
					// hide products select and show summary
					if (jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DIV).get(0).style.display == 'block') {
					    $('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DIV).hide();
					    $('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SUMMARY_DIV).show();
					    jQuery.VWFinanceCalculator.loadDefaults();
					} else {
					    $('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SUMMARY_DIV).show();
					    jQuery.VWFinanceCalculator.loadDefaults();
					}
					break;
				}
			}
            // only one Product returned
            } else {
                // set products display value and set help text
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DISPLAY_NAME).empty().append(jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SELECT_DISPLAY).text());
                if (VWFinanceCalculatorFinancialProducts.help) {
                    jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_HELP).empty().append(VWFinanceCalculatorFinancialProducts.help);
                } else {
                    jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_HELP).empty().append('&nbsp;');
                }

				jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_CAMPAIGN_CODE)
					.empty()
					.append(VWFinanceCalculatorFinancialProducts.campaignCode);
				jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_CAMPAIGN_CODE).hide();

                // set offer style
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DISPLAY_NAME).removeClass('planOffer');
                if (VWFinanceCalculatorFinancialProducts.isOffer == 'true') {
                    jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DISPLAY_NAME).addClass('planOffer');
                }

                // set subsidy amount and percent
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.SUBSIDY_AMOUNT).val(VWFinanceCalculatorFinancialProducts.subsidyAmount);
                jQuery('#' + jQuery.VWFinanceCalculatorConstants.SUBSIDY_PERCENT).val(VWFinanceCalculatorFinancialProducts.subsidyPercent);

                //alert("hide products select and show summary");

                // hide products select and show summary
                if (jQuery('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DIV).get(0).style.display == 'block') {
                    $('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_DIV).hide();
                    $('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SUMMARY_DIV).show();
                    jQuery.VWFinanceCalculator.loadDefaults();
                } else {
                    $('#' + jQuery.VWFinanceCalculatorConstants.PRODUCT_SUMMARY_DIV).show();
                    jQuery.VWFinanceCalculator.loadDefaults();
                }
            }
        }

    },

    calculateQuote: function() {



        // get parameter string
		var params = jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_FORM).VWUtilsSerializeForm();

        // set default summary values
        jQuery('ul/li',jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_SUMMARY)).each(function() {            
			var paramId = this.id.substring(8);
			if(this.id == 'summary_2'){
				jQuery('span',jQuery(this)).text('£' + jQuery('#parameter_' + paramId).get(0).value);
			}else{
				jQuery('span',jQuery(this)).text(jQuery('#parameter_' + paramId).get(0).value);
			}			            
        });

        	// set loading and hide defaults
		jQuery.VWFinanceCalculator.showLoading();

		jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).slideUp(1000, function() {

			if (jQuery.browser.msie) {
				jQuery.VWFinanceCalculator.defaultOptions = jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULTS_OPTIONS).remove();
			}

			jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_SUMMARY).slideDown('fast');

			
			
			jQuery.ajax({
				url: jQuery.VWFinanceCalculatorConstants.CALCULATE_URL,
				async: false,
				type: 'GET',
				data: params,
				dataType: 'html',
				success: function(result) {
				
					result = result.replace("-onTheRoadPrice-",$("#derivativePriceHeader").text());

					var resultObj = jQuery(result);				

					// check for data errors
					if (jQuery('/li/span[@class=error]',resultObj).length > 0) { // errors
						var error = result.replace('<ul>','').replace('</ul>','');
					} else if (result.match(/<vwError/)) {
						var error = '<span class="error">' + result.match(/<message>(.+)<\/message>/)[1] + '</span>';
					} else {
						var error = false;
					}

					if (error) {

						// remove current errors
						jQuery('/li/span[@class=error]/..',jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_OPTIONS)).remove();

						// add new errors to defaults form (removing ul wrapper)
						jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_OPTIONS).prepend(error);

						// hide loading and show default form
						jQuery.VWFinanceCalculator.hideLoading();
						// show default form
						jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_SUMMARY).hide();
						jQuery('#' + jQuery.VWFinanceCalculatorConstants.RESULT_DIV).hide();
						jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_OPTIONS).show();
						if (jQuery.browser.msie) {
							jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).show();
						} else {
							jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).slideDown(1000);
						}
					} else {
						// inject results
						jQuery('#' + jQuery.VWFinanceCalculatorConstants.RESULT_CALC_QUOTE_DIV).empty().append(result);

						// hide loading and show results
						jQuery.VWFinanceCalculator.hideLoading();
						// show default summary
						jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_SUMMARY).show();
						jQuery('#' + jQuery.VWFinanceCalculatorConstants.RESULT_DIV).show();
						jQuery('#' + jQuery.VWFinanceCalculatorConstants.QUOTE_DEFAULT_OPTIONS).hide();
						if (jQuery.browser.msie) {
							jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).show();
						} else {
							jQuery('#' + jQuery.VWFinanceCalculatorConstants.DEFAULTS_DIV).slideDown(1000);
						}
					}
				}
			});
		});
    },

	attachEvents: function() {
		$("#modalCloseLink").click(jQuery.VWFinanceCalculator.close);
		$("#rangeSelectLink").click(jQuery.VWFinanceCalculator.showRangeSelect);
		$("#goButton").click(jQuery.VWFinanceCalculator.onClickGo);
		$("#goFinanceButton").click(jQuery.VWFinanceCalculator.onClickFinanceGo);
	}
}

jQuery.VWFinanceCalculator.printQuote = function() {




        var carModel = $('#'+jQuery.VWFinanceCalculatorConstants.DERIV_NAME_HEADER).text();
       	var otrPrice = $('#'+jQuery.VWFinanceCalculatorConstants.DERIV_PRICE_HEADER).text()
        var deposit = $('#' + jQuery.VWFinanceCalculatorConstants.DEPOSIT + ' span:first').text();
        var months = $('#' + jQuery.VWFinanceCalculatorConstants.MONTHS + ' span:first').text()
        var milesPerAnnum = $('#' + jQuery.VWFinanceCalculatorConstants.MILES_PER_ANNUM + ' span:first').text()+',000';
        var apr = $('#' + jQuery.VWFinanceCalculatorConstants.APR).text().replace('%','');
        var termsAndConditions = $('#'+jQuery.VWFinanceCalculatorConstants.QUOTE_DISCLAIMER_TEXT).text().replace('&','replaceAmp');
        var financeType = $('#'+jQuery.VWFinanceCalculatorConstants.PRODUCT_DISPLAY_NAME).text().replace('&','replaceAmp').replace("%","replacePercent");
        var productCode = $('#'+jQuery.VWFinanceCalculatorConstants.PRODUCT_CAMPAIGN_CODE).text();


	var testo = $("label:contains('1 payment of')");


	var onePayment = "";
	
	if ($("label:contains('1 payment of')").length==2) {
		onePayment += $($("label:contains('1 payment of')")[0]).parent().find('span:first').text()
		onePayment += "A" + $($("label:contains('1 payment of')")[1]).parent().find('span:first').text()
	}else {
		onePayment += $("label:contains('1 payment of')").parent().find('span:first').text()
	}
	
	
        var paymentsLabelElem = $("label:contains('payments of')");
        var payments = paymentsLabelElem.text();
        var monthlyPaymentAmountParent = paymentsLabelElem.parent();
        var monthlyPaymentAmount = monthlyPaymentAmountParent.find('span:first').text()


        var totalPayableElem = $("label:contains('Total Amount Payable')");
        var totalPayable = totalPayableElem.text();
        var totalPayableAmountParent = totalPayableElem.parent();
        var totalPayableAmount = totalPayableAmountParent.find('span:first').text()


        var finalPaymentAmount = '0';
        if($('#' + jQuery.VWFinanceCalculatorConstants.FINAL_PAYMENT).val() != null) {
        	finalPaymentAmount = $('#' + jQuery.VWFinanceCalculatorConstants.FINAL_PAYMENT).val()
        }
	
        var optionToPurchaseFee = '0';
        if($('#' + jQuery.VWFinanceCalculatorConstants.OPTION_TO_PURCHASE).val()!=null){
        	optionToPurchaseFee = $('#' + jQuery.VWFinanceCalculatorConstants.OPTION_TO_PURCHASE).val()
        }
	
        var acceptanceFee = '0';
        if($('#' + jQuery.VWFinanceCalculatorConstants.ACCEPTANCE_FEE).val()!=null){
        	acceptanceFee = $('#' + jQuery.VWFinanceCalculatorConstants.ACCEPTANCE_FEE).val()
        }
	
        var amountOfCredit = '0';   
	if($('#' + jQuery.VWFinanceCalculatorConstants.AMOUNT_OF_CREDIT).val()!=null || $('#param_4').val() != null ){
        	amountOfCredit = $('#param_4').val() != null ? $('#param_4').val() :  $('#' + jQuery.VWFinanceCalculatorConstants.AMOUNT_OF_CREDIT).val() 
        }
	
        var excessMileage = '0';
        if($('#' + jQuery.VWFinanceCalculatorConstants.EXCESS_MILEAGE).val() != null || $('#param_8').val() != null ){
       			excessMileage = $('#param_8').val() != null ? $('#param_8').val() :  $('#' + jQuery.VWFinanceCalculatorConstants.EXCESS_MILEAGE).val() 
        }

        var strModelName = carModel.split(" ")[0] + '.pdf';

	
	
	
	
        var pdfUrl='/finance/quote/'+strModelName+'?carModel='+carModel+'&otrPrice='+otrPrice+'&deposit='+deposit+'&months='+months+
        			'&milesPerAnnum='+milesPerAnnum +'&apr='+apr+'&financeType='+financeType+'&productCode='+productCode+'&payments='+payments+
        			'&termsAndConditions='+escape(termsAndConditions)+'&monthlyPaymentAmount='+monthlyPaymentAmount+
        			'&finalPaymentAmount='+finalPaymentAmount+'&optionToPurchaseFee='+optionToPurchaseFee+'&acceptanceFee='+acceptanceFee+
        			'&amountOfCredit='+amountOfCredit+'&excessMileage='+excessMileage+'&totalPayableAmount='+totalPayableAmount +'&onePaymentAmount='+onePayment  ;
        			/*alert(pdfUrl);*/
        			pdfUrl = pdfUrl.replace(/\xa3/g,'');
      /* alert(pdfUrl);*/
       window.open(pdfUrl);

    }

/* constructor
    jQuery([element]).VWFinanceCalculator(params) - initialise the calculator widget and append it to the content of [element].

    params - (ARRAY) parameters object required if mode="CONFIGURED". All parameters are optional.

    The parameters are as follows -
        mode: (STRING) calculator invocation mode. This can take the values "MODEL_SELECT" or "CONFIGURED". If mode is "MODEL_SELECT" then the user will be required to choose a vehicle, otherwise if the mode is "CONFIGURED" they will not be able to change the specified vehicle.
        modelId: (NUMBER) id of model
        trimId: (NUMBER) id of trim
        numberOfDoors: (NUMBER) the vehicle's number of doors
        derivativeId: (NUMBER) id of derivative
        price: (NUMBER) derivative price including any optional extras and special offers
        includesOptions: (BOOLEAN) true if the price includes any optional extras
        includesOffers: (BOOLEAN) true if the price includes any special offers
*/
jQuery.fn.VWFinanceCalculator = function(params) {


    var settings = {
        mode: 'MODEL_SELECT',
        modelId: '',
        trimId: '',
        numberOfDoors: '',
        derivativeId: '',
        price: '',
        includesOptions: false,
        includesOffers: false
    }

    if (params) {
        jQuery.extend(settings,params);
    }

    

    // make settings global
    VWFinanceCalculatorSettings = settings;

    // append fadeout wrapper to body
    jQuery('body').append(jQuery.VWFinanceCalculatorConstants.FADEOUT_TEMPLATE);


    // append template
    this.append(jQuery.VWFinanceCalculatorConstants.CALCULATOR_TEMPLATE);

	$("#" + jQuery.VWFinanceCalculatorConstants.CALC_DIV).css({
		left: $("body").width() / 2 - $("#" + jQuery.VWFinanceCalculatorConstants.CALC_DIV).width() / 2 + "px",
		top: "100px"
	});

	// add event handlers
	jQuery.VWFinanceCalculator.attachEvents();

    // add ajax error handler
    jQuery.ajaxSetup({
        error: jQuery.VWFinanceCalculator.ajaxError
    });

    // make draggable
    jQuery('#' + jQuery.VWFinanceCalculatorConstants.CALC_DIV).Draggable({
        handle: '#' + jQuery.VWFinanceCalculatorConstants.CALC_HEADER_DIV,
        zIndex: 1000,
		opacity: 0.7,
        insideParent: true
    });

    // show background
    jQuery.VWFinanceCalculator.showCalculator();


    //jQuery.VWFinanceCalculator.showLoading();

    // configure the data passed in...
   jQuery.VWFinanceCalculator.ping();

}

