﻿$.console.log('begin loading current-offers.js');

$.createSingleton('X.CurrentOffers', function()
{
	this.model = null;
	this.modelTrim = null;
},
{
	init: function()
	{
		$('.model-current-offers-link').bind("click",X.CurrentOffers.onModelModalOpenerLinkClick);
		$('.model-trim-current-offers-link').bind("click",X.CurrentOffers.onModelTrimModalOpenerLinkClick);
		
		// Add form validation for the global zipcode search
		var options =
		{
			containerQuery: '.modal .offers-local-search',
			triggerQuery: '.modal .offers-local-search .btn',
			triggerHandler: function(result)
			{   
			    $('.err-field').removeClass('err-field');
			},
			failureHandler: function(result)
			{	
				result.errors[0].srcElement.parent().addClass('err-field');				
			},
			successHandler: function(result)
			{  
			    var zip = $(':text.search-zip', result.container.containerElm).val();
				window.setGlobalZip(zip);
				X.Omniture.trigger({ data: {prop8:zip, prop9:'CURRENT OFFERS' } }); 
				X.CurrentOffers.load({ zip: zip });
			}
		};
		new $.validation.Group(options);

        options.containerQuery = '#bap-options-summary .offers-local-search';
        options.triggerQuery = '#bap-options-summary .offers-local-search .btn';
        new $.validation.Group(options);
        
        // Moved from underneath the document ready
        options.containerQuery = '#current-offers-go';
	    options.triggerQuery = '#current-offers-go .submit';
	    options.failureHandler = function(result)
        {	   
            result.container.containerElm.addClass('err-container');
        };
	    options.successHandler = function(result)
        {    
             $.cookie('zipcode', $('#offers-local-search-inline').val(), { expires: 30  , path: '/' });
             $('#current-offers-form').submit();
        };
        new $.validation.Group(options);
	},
	
	reset: function()
	{
		$('#modal-current-offers').addClass('wait-available');

		$('.lease-offers').html('<h5>Lease Offers</h5><p>Loading, please wait...</p>');
		$('.finance-offers').html('<h5>Finance Offers</h5><p>Loading, please wait...</p>');
	},
	
	load: function(data)
	{
		this.reset();
		
		if (!data) { data = {}; }
		
		if (!data.zip)
		{
			data.zip = '';
		}
		
		var url;
		if (data.modelTrim)
		{
			this.model = null;
			this.modelTrim = data.modelTrim;
		}
		else if (data.model)
		{
			this.model = data.model;
			this.modelTrim = null;
		}
		else if (this.modelTrim)
		{
			data.modelTrim = this.modelTrim;
		}
		else if (this.model)
		{
			data.model = this.model;
		}
		else
		{
			data.model = window.model;
		}
		
		if (data.modelTrim)
		{
			url = configUrlTemplate(serviceUrls.currentOffersModelTrim, data.modelTrim, data.zip);
		}
		else
		{
			url = configUrlTemplate(serviceUrls.currentOffersModel, data.model, data.zip);	
		}
		
		X.JsonRequestManager.call('current-offers',
		{
			cache: false,
			url: url,
			success: this.onLoad.delegate(this),
			error: function(textStatus, msg) { alert('Error loading current offers data. Reason: ' + msg); }
		});
	},
	
	onLoad: function(offers)
	{
		// Split the offer types into their own arrays
		var leaseOffers = [];
		var financeOffers = [];
		for (var idx = 0, len = offers.length, offer; idx < len; idx++)
		{
			offer = offers[idx];
			if (offer.Type === 'lease' || offer.Type === 'featuredlease')
			{
				leaseOffers[leaseOffers.length] = offer;
			}
			else
			{
				financeOffers[financeOffers.length] = offer;
			}
		}
		
		// Loop through the lease offers first
		var leaseHtml = ['<h5>Lease Offers</h5>'];
		var leaseOffersLen = leaseOffers.length;
		if (leaseOffersLen > 0)
		{
			for (var idx = 0, offer; idx < leaseOffersLen; idx++)
			{
				offer = leaseOffers[idx];
			
				leaseHtml[leaseHtml.length] = '<div class="offer';
				if (idx === 0)
				{
					leaseHtml[leaseHtml.length] = ' first';
				}
				if ((idx+1) === leaseOffersLen)
				{
					leaseHtml[leaseHtml.length] = ' last';
				}
				leaseHtml[leaseHtml.length] = '">';
				leaseHtml[leaseHtml.length] = this._getOfferHtml(offer);
				leaseHtml[leaseHtml.length] = '</div>';
			}
		}
		else
		{
			leaseHtml[leaseHtml.length] = '<p>Please see your local Acura dealer for available offers.</p>';
		}
		$('.lease-offers').html(leaseHtml.join(''));
		
		// Next through the finance offers
		var financeHtml = ['<h5>Finance Offers</h5>'];
		var financeOffersLen = financeOffers.length;
		if (financeOffersLen > 0)
		{
			for (var idx = 0, offer; idx < financeOffersLen; idx++)
			{
				offer = financeOffers[idx];
			
				financeHtml[financeHtml.length] = '<div class="offer';
				if (idx === 0)
				{
					financeHtml[financeHtml.length] = ' first';
				}
				if ((idx+1) === financeOffersLen)
				{
					financeHtml[financeHtml.length] = ' last';
				}
				financeHtml[financeHtml.length] = '">';
				financeHtml[financeHtml.length] = this._getOfferHtml(offer);
				financeHtml[financeHtml.length] = '</div>';
			}
		}
		else
		{
			financeHtml[financeHtml.length] = '<p>Please see your local Acura dealer for available offers.</p>';
		}
		$('.finance-offers').html(financeHtml.join(''));
		
		$('a.full-desc-link').click(function(evt)
		{
			evt.preventDefault();
			var linkElm = $(this);
			var descElm = $('.offer-description-terms', linkElm.parent());
			if (!linkElm.hasClass('selected-contrast-content'))
			{
				linkElm.addClass('selected-contrast-content');
				descElm.slideDown('slow');
			}
			else
			{
				linkElm.removeClass('selected-contrast-content');
				descElm.slideUp('fast');
			}
		}); 
		
	    $('.offer-printable-link > a').click(X.PopupFactory._onClick);
		
		$('#modal-current-offers').removeClass('wait-available');
	},
	
	// Called in the scope of the link
	onModelModalOpenerLinkClick: function(evt)
	{
		evt.preventDefault();
		X.CurrentOffers.load({ model: this.rel });
	},
	
	onModelTrimModalOpenerLinkClick: function(evt)
	{
		evt.preventDefault();
		X.CurrentOffers.load({ modelTrim: this.rel });
	},
	
	_getOfferHtml: function(offer)
	{
		if (!offer) { return ''; }
		
		var html = [];
		
		html[html.length] = '<div class="offer-container">';
		
		// Offer Name
		html[html.length] = '<h6>' + offer.Name + '</h6>';
		
		// Short Description
		html[html.length] = '<div class="offer-deal">';
		html[html.length] = offer.ShortDescription;
		html[html.length] = '</div>';
		html[html.length] = '<div class="offer-deal">';
		html[html.length] = offer.ShortDisclaimer;
		html[html.length] = '</div>';
		
		// Full Description and Terms
		html[html.length] = '<div class="offer-link offer-terms-link">';
		html[html.length] = '<a href="#" class="full-desc-link contrast-content">Full Description and Terms</a>';
		
		// Hidden Full Details & Terms
		html[html.length] = '<div class="offer-description-terms" style="display:none;">';
		html[html.length] = '<p class="offer-description">';
		html[html.length] = offer.Description;
		html[html.length] = '</p>';
		html[html.length] = '<p class="offer-terms">';
		html[html.length] = offer.TermsAndConditions;
		html[html.length] = '</p>';
		html[html.length] = '</div>';
		
		html[html.length] = '</div>';
		
		// Printable Offer Cert
		html[html.length] = '<div class="offer-link offer-printable-link contrast-content">';
		if (offer.Type !== 'featuredlease')
		{
			html[html.length] = '<a href="#" rel="{id:\'certificate-' + offer.Id + '\',url:\'http://eshopping.honda.com/popNCertificateApplication.asp?SiteOrigin=acura&amp;ProductDivisionCode=B&amp;SpecialID=' + offer.Id + '&amp;ModelNumber=' + offer.ModelId + '\',width:510,height:540,scrollbars:1}" class="contrast-content popup-opener">Printable Offer Certificate</a>';
		}
		html[html.length] = '</div>';
		
		html[html.length] = '</div>';
		
		return html.join('');
	}
});

$(document).ready(X.CurrentOffers.init);

$.console.log('end loading curent-offers.js');