/* This file was compressed using MbCompression library. http://blog.mironabramson.com */ 
$.createClass('X.calculator.UpdateMSRPEvent', function(data)
{
	this.base('updateMSRP');
	this.data = data;
	return this;
}, null, $.Event);

$.createClass('X.calculator.CalculateEvent', function(type, data, params)
{	
	this.base(type);
	this.data = data;
	this.params = params;
	return this;
}, null, $.Event);

/***********************************************
	Controllers */

/**
 * Application Controller Singleton
 */
$.createSingleton(
// Namespace
'X.calculator.controller.Application',
// Constructor
function()
{
	this.base();
	
	this.trim = null;
},
// Prototype
{
	onStart: function()
	{
		// Initialize the controllers
		this._initControllers();
		
		// Initialize the views
		this._initViews();
		
		// Bind Dom Event Listeners
		this._bindDomEventListeners();
	},
	
	resetAll: function()
	{
		this.setTrim({ price: 0, modelId: null });
		$('.msrp .price-input').attr('value', '');
	},
	
	// Called only from X.calculator.controller.ModelSelector, or from the page init
	setTrim: function(data)
	{
		X.JsonRequestManager.abortAll();
		
		X.calculator.view.Lease.reset();
		X.calculator.view.Finance.reset();
		X.calculator.view.Reverse.reset();
		X.calculator.view.Compare.reset();
		
		this.trim = data.modelId;
		
		this.updateMSRP([data]);
	},
	
	updateMSRP: function(data)
	{
		this.dispatchEvent(new X.calculator.UpdateMSRPEvent(data));
	},
	
	setLoadingState: function(isLoading)
	{
		if (isLoading === true)
		{
			X.LoadingManager.start('loading-calculator');
		}
		else
		{
			X.LoadingManager.stop('loading-calculator');
		}
	},
	
	calculateLease: function(data)
	{
		this.setLoadingState(true);
		
		X.calculator.view.Lease.reset();
		this.dispatchEvent(new X.calculator.CalculateEvent('resetLease'));		
		
		X.JsonRequestManager.call('calculator-lease',
		{
			url: configUrlTemplate(serviceUrls.calculatorHandlerLease, 'lease', data.mid, data.lt, data.m, data.esp, data.etv, data.b, data.dp),
			cache: false,
			success: this.onCalculateLease.delegate(this),
			error: function(textStatus, msg) { alert(msg); }
		});
	},
	
	calculateFinance: function(data)
	{
		this.setLoadingState(true);
		
		X.calculator.view.Finance.reset();
		this.dispatchEvent(new X.calculator.CalculateEvent('resetFinance'));
		
		X.JsonRequestManager.call('calculator-finance',
		{
			url: configUrlTemplate(serviceUrls.calculatorHandlerFinance, 'finance', data.apr, data.ft, data.esp, data.etv, data.b, data.dp),
			cache: false,
			success: this.onCalculateFinance.proxy(this, data),
			error: function(textStatus, msg) { alert(msg); }
		});			
	},
	
	calculateReverse: function(data)
	{
		this.setLoadingState(true);
		
		X.calculator.view.Reverse.reset();
		X.JsonRequestManager.call('calculator-reverse',
		{
			url: configUrlTemplate(serviceUrls.calculatorHandlerReverse, 'reverse', data.mp, data.lt, data.dp, data.nc, data.mg),
			cache: false,
			success: this.onCalculateReverse.proxy(this, data),
			error: function(textStatus, msg) { alert(msg); }
		});
	},
	
	onCalculateLease: function(data, params)
	{		
		var data2 = (data[0]) ? data[0] : data;
		
		this.dispatchEvent(new X.calculator.CalculateEvent('calculateLease', data2, params));		
		this.setLoadingState(false);
	},
	onCalculateFinance: function(data, params)
	{
	    var data2 = (data[0]) ? data[0] : data;
	    
	    this.dispatchEvent(new X.calculator.CalculateEvent('calculateFinance', data2, params));
		this.setLoadingState(false);
	},
	onCalculateReverse: function(data)
	{
		X.calculator.view.Reverse.update(data);
		
		this.setLoadingState(false);
	},
	
	_initControllers: function()
	{
		X.calculator.controller.ModelSelector.onStart(this);
	},
	
	_initViews: function()
	{	
		// Bind event listeners to the Lease View
		this.addEventListener('updateMSRP', X.calculator.view.Lease.onUpdateMSRP.delegate(X.calculator.view.Lease));
		this.addEventListener('calculateLease', X.calculator.view.Lease.onCalculate.delegate(X.calculator.view.Lease));
		
		// Bind event listeners to the Finance View
		this.addEventListener('updateMSRP', X.calculator.view.Finance.onUpdateMSRP.delegate(X.calculator.view.Finance));
		this.addEventListener('calculateFinance', X.calculator.view.Finance.onCalculate.delegate(X.calculator.view.Finance));
		
		// Bind event listeners to the Reverse View
		this.addEventListener('updateMSRP', X.calculator.view.Compare.onUpdateMSRP.delegate(X.calculator.view.Compare));
	},
	
	_bindDomEventListeners: function()
	{
		var app = this;
		
		var containerElm = $('#global-financial-calculator');
		var reverseContainerElm = $('#reverse-calculator');
		var options =
		{
			triggerHandler: function(result)
			{
				$('.err-container').removeClass('err-container');
				$('.err-field').removeClass('err-field');
				$('.err-message').remove();
			},
			failureHandler: function(result)
			{
				var namesHash = {};

				result.container.containerElm.addClass('err-container');
				
				for (var idx = 0, len = result.errors.length, err, srcElm, name; idx < len; idx++)
				{
					err = result.errors[idx];
					srcElm = err.srcElement.get(0);

					name = srcElm.name;
					if (namesHash[name]) { continue; }
					namesHash[name] = true;

					err.srcElement.parent().addClass('err-field');
				}
			}
		};
		
		// Standard
		if (containerElm.length > 0)
		{
			// Lease
			var leaseResetHandler = X.calculator.view.Lease.reset.delegate(X.calculator.view.Lease);
			var leaseContainerElm = $('.lease', containerElm);
			$('select', leaseContainerElm).change(leaseResetHandler);
			$(':text', leaseContainerElm).keypress(leaseResetHandler);
		
			// Finance
			var financeResetHandler = X.calculator.view.Finance.reset.delegate(X.calculator.view.Finance);
			var financeContainerElm = $('.finance', containerElm);
			$('select', financeContainerElm).change(financeResetHandler);
			$(':text', financeContainerElm).keypress(financeResetHandler);						
		}
		// Reverse
		else if (reverseContainerElm.length > 0)
		{
			var reserseResetHandler = X.calculator.view.Reverse.reset.delegate(X.calculator.view.Reverse);
			$('select', reverseContainerElm).change(reserseResetHandler);
			$(':text', reverseContainerElm).keypress(reserseResetHandler);
			
			/*options.containerQuery = '#reverse-calculator';
			options.triggerQuery = '#reverse-calculator a.calculate-btn';	
			options.successHandler = function(result)
			{
				app.onReverseCalculateClick();
			};
			new $.validation.Group(options);*/
		}
		
		
		if ($('input.price').length > 0)
		{
		    $('input.price').change(function() {
		        
		         $(this).attr('name', X.calculator.controller.Application.formatCalc($(this).val()));
		    });   
		}
		
	},
	
	formatCalc : function(num)
	{ //accepts numbers and always returns a string with no commas
	
	    num = ''+num;
	    num = num.replace(/\,/,'');	   
	    return num;	
	},
	
	onLeaseCalculateClick: function()
	{	
		var containerElm = $('#global-financial-calculator .lease');
		
		var data =
		{
			lt: $('#lease-term').val(),
			m: $('#lease-mileage').val(),
			esp: $('.msrp .price', containerElm).attr('name'),
			mid: X.calculator.controller.Application.trim,
			etv: $('.trade-in :text', containerElm).val(),
			b: $('#lease-trade-in-balance').val(),
			dp: $('#lease-down-payment').val()
		};	
		
		X.calculator.controller.Application.calculateLease(data);
	},
	
	onFinanceCalculateClick: function()
	{			
		var containerElm = $('#global-financial-calculator .finance');
		var data =
		{
			ft: $('#finance-term').val(),
			apr: $('#finance-apr').val(),
			esp: $('.msrp .price', containerElm).attr('name'),
			mid: X.calculator.controller.Application.trim,
			etv: $('.trade-in :text', containerElm).val(),
			b: $('#finance-trade-in-balance').val(),
			dp: $('#finance-down-payment').val()
		};
		
		X.calculator.controller.Application.calculateFinance(data);
	},
	
	onReverseCalculateClick: function()
	{
		var data =
		{
			mp: $('#reverse-monthly-payment').val(),
			lt: $('#reverse-term option:selected').val(),
			dp: $('#reverse-down-payment').val(),
			nc: $('#nc').val(),
			mg: window.model
		};
		X.calculator.controller.Application.calculateReverse(data);
	}
},
// Base Class
$.EventDispatcher);

/**
 * Model Selector Controller Singleton
 */
$.createSingleton(
// Namespace
'X.calculator.controller.ModelSelector',
// Constructor
function()
{
	this.application = null;
	this.currentSelection = null;
},
// Prototype
{
	onStart: function(application)
	{
		var modelSelectElm = $('#model-select');
		if (X.bap || modelSelectElm.length === 0) { return; }
		
		this.application = application;
		
		this._bindDomEventListeners();
		
		var modeI = modelSelectElm.val();
		if (modeI)
		{
			this.getProductLineDetails(modeI);
		}
	},
	
	setTrim: function(evt)
	{
		var elm = $(this);
		var data = { price: elm.val(), modelId: elm.next().attr('name') };
		
		X.calculator.controller.Application.setTrim(data);
	},
	
	getProductLineDetails: function(modelId)
	{
		this.application.setLoadingState(true);
		
		// Dispatch the reset event
		X.calculator.view.ModelSelector.reset();
		
		this.application.resetAll();
		
		if (!modelId) {
		    
		    $('.vehicle-selection fieldset').append('<div class="err-message">Please select a model and trim.</div>');
		    
		    // reset the loading state
		    this.application.setLoadingState(false);
		    
		    return;
		}
		
		X.JsonRequestManager.call('calculator-model-selector',
		{
			cache: false,
			url: configUrlTemplate(serviceUrls.getProductLineDetails, modelId),
			success: this.onGetProductLineDetails.delegate(this),
			error: function(textStatus, msg) { alert(msg); }
		});
	},
	
	onGetProductLineDetails: function(data)
	{
		// Dispatch the update event
		X.calculator.view.ModelSelector.update(data);
		
		//alert($.toJSON(data));
		
		//set value for omniture
		this.currentSelection = data.Models[0].Description.split(' ');
		
		//alert(this.currentSelection);
		
		// Bind events to the input elements, and fire off the first element's click
        $($('.vehicle-selection .trim-selection ul :radio').click(this.setTrim).get(0)).click();
		
		// reset the loading state
		this.application.setLoadingState(false);
	},
	
	onModelSelect : function(evt)
	{		
		X.calculator.controller.ModelSelector.getProductLineDetails($(this).val()); //$('option:selected', this).val()
	},
	
	onCompareModelsClick: function(evt)
	{
		evt.preventDefault();
		
	},
	
	_bindDomEventListeners: function()
	{
		$('#model-select').change(this.onModelSelect);
		
		$('a.compare-models').click(this.onCompareModelsClick);
	}
});


/***********************************************
	Views */

/**
 * Model Selector View Singleton
 */
$.createSingleton(
// Namespace
'X.calculator.view.ModelSelector',
// Constructor
null,
// Prototype
{
	reset: function()
	{
		$('.vehicle-selection .trim-selection').hide().find('ul').empty();
	},
	
	update: function(data)
	{
		if (data.Models.length === 0) { return; }
		
		//alert($.toJSON(data));
		var destinationCharge = parseInt(data.Destination);
		
		var html = [];
		for (var idx = 0, len = data.Models.length, model; idx < len; idx++)
		{
			model = data.Models[idx];
			trimIdx = (idx+1);
            
            var totalMSRP = parseInt(model.MSRP)+destinationCharge;
            
			html[html.length] = '<li class="'
			html[html.length] = (idx%2)? 'even' : 'odd';
			html[html.length] = '">';
			html[html.length] = '<input id="trim-';
			html[html.length] = trimIdx;
			html[html.length] = '" type="radio" name="vehicle-select" value="';
			html[html.length] = totalMSRP;
			html[html.length] = '" />';
			html[html.length] = '<label for="trim-';
			html[html.length] = trimIdx;
			html[html.length] = '" name="';
			html[html.length] = model.ID;
			html[html.length] = '"><span class="trim">';
			html[html.length] = model.Description;
			html[html.length] = '</span></label>';
			html[html.length] = '<span class="price"><span>From<sup><a class="info tooltip-hover-click-opener" name="price-tip" href="#">1</a></sup></span> ';
			html[html.length] = Math.ceil(totalMSRP).toUSD();
			html[html.length] = '</span>';
			html[html.length] = '</li>';
		}
		var trimSelection = $('.vehicle-selection .trim-selection');
		
		$('ul', trimSelection).html(html.join(''));
		
		X.TooltipFactory.init();
						
		trimSelection.show('fast');
	}
});

/**
 * Lease View Singleton
 */
$.createSingleton(
// Namespace
'X.calculator.view.Lease',
// Constructor
null,/*function()
{
	this.isAvailable = true;
},*/
// Prototype
{
	onUpdateMSRP: function(evt)
	{
		if (evt.data.length > 1) { return; }
		
		this.updateMSRP(evt.data[0]);
	},
	
	reset: function()
	{
		var containerElm = ('#global-financial-calculator .lease .results');
		$('.results-content, .error, .field, .disclaimer', containerElm).hide();		
	    $('.price', containerElm).text('$0');	    
	},
	
	update: function(data)
	{		
		if (!data)
		{
			alert('There was a problem. Please try again.');
			return;
		}
		
		var containerElm = $('#global-financial-calculator .lease .results');		
		
		if (data.Error) {
		   
		   containerElm.append('<p class="error">'+data.Error+'</p>');
		   
		   // Show error
		   containerElm.show(); 
		} else {
		
		    //alert($.toJSON(data));
		
		    X.Omniture.trigger({data: {
		        pageName: omniData['pageName'],
		        prop16: 'NEW VEHICLES LEASE CALCULATE BUTTON',
		        prop1: X.calculator.controller.ModelSelector.currentSelection[1],
		        prop2: X.calculator.controller.ModelSelector.currentSelection[0],
		        channel: omniData['channel']
		    }});
		
		    var firstPayment = data.FirstMonthlyPayment.toUSD();
		    var securityDeposit = data.SecurityDeposit.toUSD();
		    var totalDue = data.TotalDueAtLeaseSigning.toUSD();
		    var costReduction = data.CapitalizedCostReduction.toUSD();
		    var disclaimer = 'Lease Summary: Required Refundable Security Deposit '+securityDeposit+', 1st Monthly Payment '+firstPayment+', Capitalized Cost Reduction '+costReduction+' to equal an estimate total of '+totalDue+' due at lease signing.';
    		
		    // Update data		
		    $('.lease-monthly-payment span', containerElm).text(data.MonthlyPayment.toUSD());
		    $('.lease-net-cost span', containerElm).text(data.NetCapitalizedCost.toUSD());
		    $('.lease .disclaimer').html(disclaimer);		
    		
		    // Show results
		    $('.results-content .field, .results-content .disclaimer', containerElm).show();		
		}
		// Show view
		$('.results-content', containerElm).show('fast');
	},

	updateMSRP: function(data)
	{
		var containerElm = $('#global-financial-calculator .lease');

		$('.model-id', containerElm).attr('value', data.modelId);
		$('.msrp .price', containerElm)
			.attr('name', data.price)
			.text(Math.ceil(data.price).toUSD());
	    $('.msrp .price-input', containerElm)
			.attr('value', data.price);
	},
	
	/*//data.isAvailable
	//data.message
	setAvailable: function(data)
	{
		if (this.isAvailable === data.isAvailable) { return; }
		this.isAvailable = data.isAvailable;
		if (this.isAvailable)
		{
			
		}
		else
		{
			
		}
	},*/
	
	onCalculate: function(evt)
	{
		this.update(evt.data);
	}
});

/**
 * Finance View Singleton
 */
$.createSingleton(
// Namespace
'X.calculator.view.Finance',
// Constructor
null,
// Prototype
{
	onUpdateMSRP: function(evt)
	{
		if (evt.data.length > 1) { return; }
		
		this.updateMSRP(evt.data[0]);
	},
	
	reset: function()
	{
		var containerElm = ('#global-financial-calculator .finance .results');
		$('.results-content, .error, .field', containerElm).hide();
	    $('.price', containerElm).text('$0');
	},
	
	update: function(data)
	{
		if (!data)
		{
			alert('There was a problem. Please try again.');
			return;
		}
		var containerElm = $('#global-financial-calculator .finance .results');
        
        if (data.Error) {
		   
		   containerElm.append('<p class="error">'+data.Error+'</p>');
		   
		   // Show error
		   containerElm.show(); 
		    
		} else {
        
		    if (X.calculator.controller.ModelSelector.currentSelection) {
		    
		    X.Omniture.trigger({data: {
		        pageName: omniData['pageName'],
		        prop16: 'NEW VEHICLES FINANCE CALCULATE BUTTON',
		        prop1: X.calculator.controller.ModelSelector.currentSelection[1],
		        prop2: X.calculator.controller.ModelSelector.currentSelection[0],
		        channel: omniData['channel']
		    }});
		    
		    } else {
		        X.Omniture.trigger({data: {
		        pageName: omniData['pageName'],
		        prop16: 'CPO FINANCE CALCULATE BUTTON',
		        prop11: omniData['prop11'],		       
		        channel: omniData['channel']
		    }});
		    }
		    
		    // Update data
		    $('.payment-amount span', containerElm).text(data.MonthlyPayment.toUSD());
	        $('.finance-amount span', containerElm).text(data.AmountFinanced.toUSD());
	        
	        // Show results
		    $('.results-content .field', containerElm).show();
		}
		
		// Show view
		$('.results-content', containerElm).show('fast');
	},
	
	updateMSRP: function(data)
	{
		//alert($.toJSON(data));
		
		var containerElm = $('#global-financial-calculator .finance');
		
		$('.model-id', containerElm).attr('value', data.modelId);
		$('.msrp .price', containerElm)
			.attr('name', data.price)
			.text(Math.ceil(data.price).toUSD());
	    
	    $('.msrp .price-input', containerElm)
			.attr('value', data.price);
	},
	
	onCalculate: function(evt)
	{
		this.update(evt.data);
	}
});

/**
 * Reverse View Singleton
 */
$.createSingleton(
// Namespace
'X.calculator.view.Reverse',
// Constructor
null,
// Prototype
{
	reset: function()
	{
		var containerElm = $('#reverse-calculator .results .results-content').hide();
		
		var vehiclesElm = $('.vehicles', containerElm);
		
		$('.lease .price', containerElm).text('$0');
		$('.finance .price', containerElm).text('$0');
		
		$('.lease ul,.finance ul', vehiclesElm).empty();
		
		$('.amounts, .vehicles, .error', containerElm).hide(); 
	},
	
	update: function(data)
	{
		if (!data)
		{
			alert('There was a problem. Please try again.');
			return;
		}
		
		if(omniData['pageName'] === 'CPO REVERSE CALCULATOR') {
		
		X.Omniture.trigger({data: {
	        pageName: omniData['pageName'],
	        prop16: 'CPO REVERSE CALCULATE BUTTON',	        
	        prop11: omniData['prop11'],
	        channel: omniData['channel']
	    }});
	    
	    } else {
	        X.Omniture.trigger({data: {
	            pageName: omniData['pageName'],
	            prop16: 'NEW VEHICLES REVERSE CALCULATE BUTTON',	        
	            prop11: omniData['prop11'],
	            channel: omniData['channel']
	        }});
	    }
		
		var containerElm = $('#reverse-calculator .results .results-content');
		var vehiclesElm = $('.vehicles', containerElm);
		
		if (data.Error) {
		    
		   $(containerElm).append('<p class="error">'+data.Error+'</p>');
		   
		   // Show error
		   $(containerElm).show();
		    
		} else {    		
    		
		    $('.lease .price', containerElm).text(data.AdjustedLeaseBudget.toUSD());
		    $('.finance .price', containerElm).text(data.AdjustedFinanceBudget.toUSD());

		    var leaseHTML = [];
		    var financeHTML = [];
		    var len = 0;
		    if (data !=null && data.Models !=null)
		    {
		        len = data.Models.length;
		    }
		    if (data.Models && len > 0)
		    {
			    for (var idx = 0, model, result; idx < len; idx++)
			    {
				    model = data.Models[idx];
    				
                    //AT 56290
                    result = '<li><a onclick="X.Omniture.trigger({data: {prop25:\'ACURA.COM\',prop24:window.omniData[\'pageName\'],prop1:\''+ model.ModelGroupName +'\',prop2:\''+ model.ModelYear +'\'}},this,\'e\')" href="http://www.acura.com/ModelLanding.aspx?model='+model.ModelGroupName+'&amp;modelYear=' + model.ModelYear + '">' + model.ModelYear + ' ' + model.ModelMarketingName
                    if (model.Transmission && model.Transmission.toLowerCase() === "manual") {  result += ' (MT)'; }
                    result += '</a></li>';

				    if (model.Lease)
				    {
					    leaseHTML[leaseHTML.length] = result;
				    }

				    if (model.Finance)
				    {
					    financeHTML[financeHTML.length] = result;
				    }
			    }			    
		    }
		    else
		    {
			    leaseHTML[leaseHTML.length] = '<li>Sorry, but no vehicles match the criteria you entered. Increasing your monthly payment and/or down payment may broaden the number of vehicles within your price range.</li>';
			    financeHTML[financeHTML.length] = '<li>Sorry, but no vehicles match the criteria you entered. Increasing your monthly payment and/or down payment may broaden the number of vehicles within your price range.</li>';
		    }
    		
		    // Set the data
		    $('.lease ul', vehiclesElm).html(leaseHTML.join(''));
		    $('.finance ul', vehiclesElm).html(financeHTML.join(''));
		    
		    // Show results
		    $('.amounts, .vehicles', containerElm).show();        
		}
		// Show the results
		containerElm.show('fast');
	}
});

/**
 * Compare View Singleton
 */
$.createSingleton(
// Namespace
'X.calculator.view.Compare',
// Constructor
null,
// Prototype
{
	onUpdateMSRP: function(evt)
	{
		if (evt.data.length <= 1) { return; }
		
		this.updateMSRP(evt.data);
	},
	
	reset: function()
	{
		
	},
	
	update: function(data)
	{
		
	},
	
	updateMSRP: function(data)
	{
		// This will update the page - used in the pricing page
	}
});

X.calculator.controller.Application.onStart();

$('.vehicle-selection .trim-selection ul :radio').click(function() {
    
    var data = {};
    
    data.price = $(this).val();
    data.modelId = $(this).next().attr('name');
    
    X.calculator.view.Lease.updateMSRP(data);
    X.calculator.view.Finance.updateMSRP(data);
    X.calculator.controller.Application.setTrim(data);

});

//valication rules
jQuery.validation.Rules.add(new jQuery.validation.rule.BetweenCheck("val-currency", {min: 0, max: 99999.99}));
jQuery.validation.Rules.add(new jQuery.validation.rule.BetweenCheck("finance-apr", {min: 0.01, max: 20}));
jQuery.validation.Rules.add(new jQuery.validation.rule.BetweenCheck("cpo-esp", {min: 5000, max: 99999}));
jQuery.validation.Rules.add(new jQuery.validation.rule.BetweenCheck("rev-mp", { min: 1, max: 9999.99 }));

//lease validation
var options =
{
    containerQuery: '#global-financial-calculator .lease fieldset',
    triggerQuery: '#global-financial-calculator .lease .btn-orange',	
    triggerHandler: function(result)
    {
	    //result.container.containerElm
	    $('.err-container').removeClass('err-container');
	    $('.err-field').removeClass('err-field');
	    $('.err-message').remove();
	    $('.results .results-content .error').remove();
    },
    failureHandler: function(result)
    {	   
	    result.container.containerElm.addClass('err-container');
	    $('.legend:first', result.container.containerElm).after('<div class="err-message">There was a problem submitting your request</div>');
		if (result.errors) { result.errors.reverse(); }
	    for (var idx = 0, len = result.errors.length, err, srcElm, name; idx < len; idx++)
	    {
		    err = result.errors[idx];			   
		    srcElm = err.srcElement.get(0); 
		    
		    err.srcElement.parent().addClass('err-field');
		    
		    if ($(srcElm).hasClass('price-input')) {
		       
		        $('.vehicle-selection fieldset').append('<div class="err-message">Please select a model and trim.</div>');
		    }
		    
		    if (result.errors[idx].id == 'val-currency') {
                $('.lease .results .results-content').append('<div class="error">Please enter a value between $0 and $99,999.99.</div>');
                $('.lease .results .results-content').show();
            }
	    }
    },
    successHandler: function(result)
    {
        X.calculator.controller.Application.onLeaseCalculateClick();              
    }
};
new $.validation.Group(options);

//finance validation

var options =
{
    containerQuery: '#global-financial-calculator .finance fieldset',
    triggerQuery: '#global-financial-calculator .finance .btn-orange',	
    triggerHandler: function(result)
    {
	    //result.container.containerElm
	    $('.err-container').removeClass('err-container');
	    $('.err-field').removeClass('err-field');
	    $('.err-message').remove();
	    $('.results .error').remove();
    },
    failureHandler: function(result)
    {
	    result.container.containerElm.addClass('err-container');
	    $('.legend:first', result.container.containerElm).after('<div class="err-message">There was a problem submitting your request</div>');
		if (result.errors) { result.errors.reverse(); }
	    for (var idx = 0, len = result.errors.length, err, srcElm, name; idx < len; idx++)
	    {
		    err = result.errors[idx];			   
		    srcElm = err.srcElement.get(0);			
		   
		    err.srcElement.parent().addClass('err-field');
		    
		    if ($(srcElm).hasClass('price-input')) {
		       
		        $('.vehicle-selection fieldset').append('<div class="err-message">Please select a model and trim.</div>');
		    }
		    
            if (result.errors[idx].id == 'cpo-esp') {
                $('.finance .results').append('<div class="error">Please enter an Estimated Selling Price between $5000 and $99,999.</div>');
                $('.finance .results').show();
            }

		    if (result.errors[idx].id == 'val-currency' && result.errors[idx].srcElement.hasClass('cpo-esp') == false) {
                $('.finance .results').append('<div class="error">Please enter a value between $0 and $99,999.99.</div>');
                $('.finance .results').show();
            }

            if (result.errors[idx].id == 'finance-apr' && result.errors[idx].srcElement.attr('id') == 'finance-apr') {
                $('.finance .results').append('<div class="error">Please enter an APR between 0.01% and 20%</div>');
                $('.finance .results').show();
            }
            
	    }
    },
    successHandler: function(result)
    {  
        X.calculator.controller.Application.onFinanceCalculateClick();          
    }
};
new $.validation.Group(options);

//reverse validation
var options =
{
    containerQuery: '#reverse-calculator fieldset',
    triggerQuery: '#reverse-calculator fieldset .btn-orange',	
    triggerHandler: function(result)
    {
	    //result.container.containerElm
	    $('.err-container').removeClass('err-container');
	    $('.err-field').removeClass('err-field');
	    $('.err-message').remove();
	    $('.results .error').remove();
    },
    failureHandler: function(result) {

        result.container.containerElm.addClass('err-container');
        $('.legend:first', result.container.containerElm).after('<div class="err-message">There was a problem submitting your request</div>');
        if (result.errors) { result.errors.reverse(); }
        for (var idx = 0, len = result.errors.length, err, srcElm, name; idx < len; idx++) {
            err = result.errors[idx];
            srcElm = err.srcElement.get(0);

            err.srcElement.parent().addClass('err-field');

            if (result.errors[idx].srcElement.attr('id') == 'reverse-monthly-payment' && result.errors[idx].id == 'rev-mp') {
                $('.results').append('<div class="error">Please enter a monthly payment between $1 and $9,999.99.</div>');                
            }

            if (result.errors[idx].srcElement.attr('id') == 'reverse-down-payment' && result.errors[idx].id == 'val-currency') {
                $('.results').append('<div class="error">Please enter a down payment between $0 and $99,999.99.</div>');
            }
        }
    },    
    successHandler: function(result)
    {
         X.calculator.controller.Application.onReverseCalculateClick();             
    }
};
new $.validation.Group(options);

//set default on model pages
$('#trim-1').click();

$('.kbb a').click(function(evt)
{
    //linkCode(this,"KELLEY BLUE BOOK");
    X.Omniture.trigger({data: {prop25:'KELLEY BLUE BOOK',prop24:window.omniData['pageName']}},this,'e');
});

