if ( typeof(window.mb)=="undefined"){ mb={}; }

String.prototype.format = function() {
	var args = arguments;
	return this.replace(/{(\d+)}/g, function(match, number) {
		return typeof args[number] != 'undefined' ? args[number] : '{' + number + '}';
	});
}; 

mb.socialMedia = {
        title : "Mercedes-Benz Special Offers"
        ,description : "For your consideration: the special offers from Mercedes-Benz."
        ,shortDescription : "Check out the special offers from Mercedes-Benz."
        ,emailDescription : ""
        ,image : "http://www.mbusa.com/vcm/MB/DigitalAssets/Vehicles/ClassLanding/2011/E/E-Sedan/Gallery/10-Esedan-gallery-ext-003-1_ft.jpg"
        ,url : "http://www.mbusa.com/mercedes/special_offers/current"
        ,assetTitle : "Page"
};

function CarOffer(sourceObject) {

	this.carModel = '';
	this.carOffer = '';
	this.index='';
	var href=$(sourceObject).attr("href");
	var hrefArr = href.split(".");
	if (hrefArr != null && hrefArr.length == 3) {
		this.carModel = hrefArr[0].replace(new RegExp("#","g"),"");
		this.index = hrefArr[1];
		this.carOffer = hrefArr[2];
	}
};

/**
 * MB special_offers js
 */
mb.specialOffer = new ( function($) 
{
    var me = this;
    var OFFER_DETAIL_HEIGHT=360;
    mb.broadcaster.addListener( mb.events.INITED, function() { mb.specialOffer.init(); });

    /**
     * must be call by application
     */
    me.init = function()
    {
        mb.logger.info("special_offers.init()");
        mb.broadcaster.addListener( mb.events.PAGE_LOADED, function(e,args) {
            mb.specialOffer.onPageLoaded(e);
        });
    };
    
    /**
     * handles the page load event to complete initializing/setup
     */
    me.onPageLoaded = function( d )
    {
        mb.logger.info("special_offers.onPageLoaded("+typeof(d)+")");
        initPageStyles( d );
        me.setupInitialDisplay();
        mb.rollover.initRollover($('.feature-highlight'));
        if (typeof mb.siteshare != 'undefined'	&& $('.share-widget-container').length > 0 && typeof mb.socialMedia != 'undefined') {
        	/*Setup social media related to the current offer*/
        	$('.share-widget-container').each( function(i) {
        		var shareInfo=$(this).closest('.vehicle-offer-actions').find('#share-info');
        		var model=$(shareInfo).find('.vehicle-offer-model').text();
        		var year=$(shareInfo).find('.vehicle-offer-year').text();
        		var title=$(shareInfo).find('.vehicle-offer-title').text();
        		var shortDesc=$(shareInfo).find('.vehicle-offer-short-description').text();
        		var emailDesc=$(shareInfo).find('.vehicle-offer-email-description').text();
        		var longDesc=$(shareInfo).find('.vehicle-offer-description').text();
        		var imageUrl=$(shareInfo).find('.vehicle-offer-image-url').text();
        		var pageUrl=$(shareInfo).find('.vehicle-offer-page-url').text();
	        	
	        	mb.socialMedia = {
	        	        title : title
	        	        ,description : longDesc
	        	        ,shortDescription : shortDesc
	        	        ,emailDescription : emailDesc
	        	        ,image : imageUrl
	        	        ,url : pageUrl
	        	        ,assetTitle : "Page"
	        	};
	        	mb.socialMedia.element = $(this);
	        	mb.siteshare.setContent(mb.socialMedia);
        	});
			
			/*Register callback for siteshare widget click*/
	        mb.broadcaster.addListener(mb.siteshare.events.WIDGET_CLICKED, function(e,args) { 
	        		var shareInfo=$(args).closest('.vehicle-offer-actions').find('#share-info');
	        		var model=$(shareInfo).find('.vehicle-offer-model').text();
	        		var year=$(shareInfo).find('.vehicle-offer-year').text();
		        	var params = {};
		        	
		        	/*Fire GA tagging on siteshare click*/
		    		params.type='GA';
		    		params.trackType = "_trackEvent";
		    		params.category = "SPO";
		    		params.action = "SPO:Share";
		    		params.label = "SPO:" + year + ":" + model;
		        	if(params.action != null && params.action.length>0){
						mb.metrics.trackInteraction(params);
					}
                }
            );
        }
    };

   
    /**
     * initialize page styles
     */
    var initPageStyles = function( d )
    {
    	/*click on the class links on the nav bar*/
    	$('.subnav-class-link').bind('click', function(e) {
    		var href = $(this).attr('href');
    		return(me.switchClassView(href));
        });
    	
    	/*click on the class links on the nav bar*/
    	$('.nav-item').bind('click', function(e) {
    		var href = $(this).find('.subnav-class-link').attr('href');
    		return(me.switchClassView(href));
        });
    	
    	/*Helper method for switching class*/
    	me.switchClassView = function(href){
    		var actionClass=href.substring(href.indexOf('class-'));
    		var query='.vehicle-class.' + actionClass;
    		if($('.vehicle-offers').length==0)return true;
    		if($(query).hasClass('.displayed'))return false;
    		
    		$('.content-body .vehicle-class.displayed').addClass('hidden').removeClass('displayed');
    		$(query).removeClass('hidden').addClass('displayed');
    		$('.subnav-group .nav-item.selected').removeClass('selected');
    		$('.subnav-group .nav-item.' + actionClass).addClass('selected');
    		/*Add class to recently viewed class*/
    		var targetClass=actionClass.substring(actionClass.indexOf('-')+1);
			mb.addToRecentlyViewedClasses(targetClass);
			
			/*Fire GA tagging on navigation*/
			var params = {};
    		params.type='GA';
    		params.trackType = "_trackEvent";
    		params.category = "SPO";
    		params.action = "SPO:Nav:" + targetClass;        	
    		params.label = "SPO";
    		mb.metrics.trackInteraction(params);
    		var docTitle= $(document).attr('title');
    		if(docTitle.indexOf('-Class')>0){
    			docTitle = docTitle.substring(docTitle.indexOf('-Class') + 7);
    		}
    		docTitle=targetClass + '-Class ' + docTitle;
    		$(document).attr('title',docTitle);
    		return false;
    	};
    	
    	/*click on the VIEW DETAILS button*/
    	$('.special-offers.current-offers .content-body .option-actions .view-details-link').bind('click', function(e) {
    		
    		var carOffer = new CarOffer(this);
  		
    		var sourceLink=$(this);
    		var queryTarget='.vehicle-offer.model-{0}-{1} .offer-detail-{2}-description .offer-detail-{2}-description-text'.format(carOffer.carModel, carOffer.index, carOffer.carOffer);
    		var querySource = '.vehicle-offers-description .vehicle-offer-description.model-{0}-{1} .{2}-description'.format(carOffer.carModel, carOffer.index, carOffer.carOffer);
    		if ($(queryTarget).parent().hasClass("hidden")) {
    			$(queryTarget).html($(querySource).html()).parent().removeClass("hidden");
    			$(querySource).addClass("hidden");
    			
    			$(this).text("Hide Details");
    			/*Update the tracking link*/
    			me.updateTrackingLinkForShowHideDetails($(this),"Hide_Details");
    		}
    		else {
    			$(queryTarget).html("").parent().addClass("hidden");
    			$(querySource).removeClass("hidden");
    			$(this).text("View Details");
    			/*Update the tracking link*/
    			me.updateTrackingLinkForShowHideDetails($(this),"View_Details");
    		}
    		
    		/*Adjust height of vehicle offer*/
    		var vehicleFinanceDiscHeight=0;
    		var vehicleLeaseDiscHeight=0;
    		var vehicleLeaseDisc=$(queryTarget).parent().parent().find('.offer-detail-lease-description');
    		var vehicleFinanceDisc=$(queryTarget).parent().parent().find('.offer-detail-finance-description')
    		vehicleLeaseDiscHeight = $(vehicleLeaseDisc).hasClass('hidden') ? 0:$(vehicleLeaseDisc).height();
    		vehicleFinanceDiscHeight = $(vehicleFinanceDisc).hasClass('hidden') ? 0:$(vehicleFinanceDisc).height();
    		$(queryTarget).parent().parent().height(OFFER_DETAIL_HEIGHT + vehicleLeaseDiscHeight + vehicleFinanceDiscHeight);
    		
    		var queryLeaseSource = '.vehicle-offers-description .vehicle-offer-description.model-{0}-{1} .{2}-description'.format(carOffer.carModel, carOffer.index, 'lease');
    		var queryFinanceSource = '.vehicle-offers-description .vehicle-offer-description.model-{0}-{1} .{2}-description'.format(carOffer.carModel, carOffer.index, 'finance');
    		// If both lease and finance sections are hidden or pulled out from below descriptions
    		// Hide the title (car model) as well
    		var queryTitleSource = '.vehicle-offers-description .vehicle-offer-description.model-{0}-{1}'.format(carOffer.carModel, carOffer.index);
    		if (($(queryLeaseSource).length==0 || $(queryLeaseSource).hasClass("hidden"))
    				&& ($(queryFinanceSource).length==0 || $(queryFinanceSource).hasClass("hidden"))) {

    			$(queryTitleSource).addClass("hidden");
    		}
    		else {
    			
    			$(queryTitleSource).removeClass("hidden");
    		}
    		return false;
    	});
    	
    	/* Click on Lease Details Button */
    	$('.offer-detail-lease-description .lease-description-action .btn-grey').bind('click', function(e) {
    		
    		var carOffer = new CarOffer(this);
    		var targetButton = '.vehicle-offer.model-{0}-{1} .vehicle-offer-detail .vehicle-offer-detail-right .vehicle-offer-{2}-option .option-actions .view-details-link.btn-grey'
    			.format(carOffer.carModel, carOffer.index, carOffer.carOffer);
    		
    		$(targetButton).trigger('click');
    		return false;
    	});
    	
    	/* Click on Finance Details Button */
    	$('.offer-detail-finance-description .finance-description-action .btn-grey').bind('click', function(e) {
    		
    		var carOffer = new CarOffer(this);
    		var targetButton = '.vehicle-offer.model-{0}-{1} .vehicle-offer-detail .vehicle-offer-detail-right .vehicle-offer-{2}-option .option-actions .view-details-link.btn-grey'
    			.format(carOffer.carModel, carOffer.index, carOffer.carOffer);
    		
    		$(targetButton).trigger('click');
    		return false;
    	});
    	
    	/* Click on Print Button */
    	$('.vehicle-offer-print .print-details-link').bind('click', function(e) {
    		
    		var webContext = $('.print-offer-header #logo img').attr('src').split('/')[1];
    		var href = $(this).attr('href');
    		var mbModel = href.replace('#','');
    		mbModel = mbModel.replace('.','-');
    		
    		var contentQuery = '.vehicle-offer.model-{0}'.format(mbModel);
    		var contentWrapper =  '<div class="content-body">{0}</div>'.format($(contentQuery).html());
    		var windowTitle = $(document).attr('title');
    		var contentDetails = $('.vehicle-offers-description .vehicle-offer-description.model-{0}'.format(mbModel)).html();
    		
    		var header = '<LINK rel=stylesheet type=text/css href="/{0}/css/framework/mb.css">'.format(webContext)
    				   + '<LINK rel=stylesheet type=text/css href="/{0}/css/global.css">'.format(webContext)
    				   + '<LINK rel=stylesheet type=text/css href="/{0}/css/special_offers.css">'.format(webContext)
    				   + '<title>{0}</title>'.format(windowTitle);
    		
    		var html = '<html><head>{0}</head><body class="{1}">{2}{3}{4}</body></html>'
    			.format(  header
    					, 'special-offers current-offers print'
    					, $('.print-offer-header').html()
    					, contentWrapper
    					, contentDetails);

    		var printWindow = window.open('', 'sop');
    		printWindow.document.open();
    		printWindow.document.write(html);
    		printWindow.document.close();
    		return false;
    	});
    };
    
    /*Helper method for setting up the initial display*/
    me.setupInitialDisplay = function(){
    	var paramName='class';
    	var cookieName = 'recentClasses';
		var recentClasses='';
		var separator='-';
		var classValue='';
		var targetClass='';
		var query='';
		
		/*initialize targetClass with the first set of offers*/
		if($('.content-body .vehicle-class').length>0){
			query=$('.content-body .vehicle-class').first().attr('id');
			targetClass=query.split('-')[2];
		}
    	/*Check whether the url contains class parameter*/
		var url=window.location.href;
		/*Get the value of class param*/
		classValue=mb.getParamValueFromUrl(url,paramName);
		/*get the recently visited class (if any) from cookie*/
		recentClasses=mb.getRecentlyViewedClasses();
		if(classValue!=null && classValue!=undefined && classValue.length>0){
			/*check if we have any offers available for this class, if yes, display them and return*/
			query='.content-body #vehicle-class-{0}.vehicle-class.class-{1}'.format(classValue,classValue);
			if($(query).length>0){
				targetClass=classValue;
			}
		}
		/*set targetClass to the most recently visited class that has special offers*/
		else if(recentClasses!=null && recentClasses!=undefined && recentClasses.length>0){
			var tempArray=recentClasses.split('-');
			for( var s in tempArray){
				query='.content-body #vehicle-class-{0}.vehicle-class.class-{1}'.format(tempArray[s],tempArray[s]);
				if($(query).length>0){
					targetClass=tempArray[s];
					break;
				}
    		}
		}
		/*display offers pointed by targetClass*/
		if(targetClass!=null && targetClass.length>0){
			/*Add class to recently viewed class*/
			mb.addToRecentlyViewedClasses(targetClass);
			var targetButton = '.special-offers.current-offers .subnavigation .nav-item.class-{0} a.subnav-class-link'.format(targetClass);
			$(targetButton).trigger('click');
			return false;
		}
    };
    
    /*Helper method for updating the tracking link on show/hide details*/
    me.updateTrackingLinkForShowHideDetails = function(link, action){
    	var trackParam = "rel";
    	var strReplace="action-SPO:" + action;
    	var trackLink=$(link).attr(trackParam);
    	trackLink=trackLink.replace(/action-SPO:\S{4}_Details/i, strReplace);
    	$(link).attr(trackParam,trackLink);
    };
})(jQuery);



