var MobilePromoManager = function() {
	var _currentPromos = [ 
		{ 
			'name' : 'mobile_buick',
			'franchises' : 'Buick', 
			'url' : 'VehicleSearchResults?search=new&make=Buick&minYear=2009&maxYear=2009', 
			'campaign' : 'buickhol09_mobile', 
			'group' : '' 
		}, {
			'name' : 'mobile_gmc',
			'franchises' : 'GMC',
			'url' : 'AboutSpecials?promo=mobile_gmc', 
			'campaign' : 'gmchol09_mobile', 
			'group' : '' 
		}, {
			'name' : 'mobile_cadillac',
			'franchises' : 'Cadillac',
			'url' : 'AboutSpecials?promo=mobile_cadillac', 
			'campaign' : 'cadseas09_mobile', 
			'group' : '' 
		}, {	
			'name' : 'mobile_chevy2',
			'franchises' : 'Chevrolet',
			'url' : 'AboutSpecials?promo=mobile_chevy2', 
			'campaign' : 'chevyred09_mobile', 
			'group' : '' 
		}, {
			'name' : 'mobile_chevy',
			'franchises' : 'Chevrolet', 
			'url' : 'AboutSpecials?promo=mobile_chevy', 
			'campaign' : 'gm_mobile_chevyas', 
			'group' : 'Promo_GM_ChevyLAShow_show' 
		}
	];
	return {
		getPromo:function(name) {
			for (var i = _currentPromos.length; i--;) {
				if (_currentPromos[i].name === name) {
					return _currentPromos[i];
				}
			}
			return {};
		},
		selectPromo:function() {
			var dealerFranchises = mobilePromo.franchises;
			var filteredPromos = [];
			var promoHolder = {};
			for (var i = _currentPromos.length; i--;) {
				promoHolder = _currentPromos[i];
				for (var j = dealerFranchises.length; j--;) {
					/* Check for a franchise match. */
					if (promoHolder.franchises.indexOf(dealerFranchises[j]) > -1) {
						/* Check for a group match. */
						if (this.groupMatch(promoHolder.group, mobilePromo.groups)) {
							filteredPromos.push(promoHolder);
						}
						break;
					}
				}
			}
			var numPromos = filteredPromos.length;
			if (numPromos === 0) {
				return;
			} else if (numPromos === 1) {
				promoHolder = filteredPromos[0];
			} else {
				var date = new Date();
				var millis = date.getTime();
				promoHolder = filteredPromos[millis % numPromos];
			}
			return promoHolder;
		},
		groupMatch:function(promoGroup, dealerGroups) {
			/* Return a match if the promo does not belong to any groups. */
			if ((promoGroup === '') || !promoGroup) {
				return true;
			}
			/* Return NO match if the promo requires a group and the dealer has none. */
			if (!dealerGroups) {
				return false;
			}
			/* Test for promo group matching dealer group. */
			for (var i = dealerGroups.length; i--;) {
				if (dealerGroups[i] === promoGroup) {
					return true;
				}
			}
			return false;
		}
	};
}();

jQuery(function() {
	/* Check for no mobilePromo object, to see if mobile promotions are disabled and if there are no franchises. */
	if ((typeof(mobilePromo) === "undefined") || !mobilePromo.isEnabled || (mobilePromo.franchises === undefined)) {
		return;
	}
	/* Check for promo already set, in this case we just need to set the banner URL and return. */
	if ((mobilePromo.promo !== undefined) && (mobilePromo.promo !== '')) {
		mobilePromo.bannerURL = MobilePromoManager.getPromo(mobilePromo.promo).url;
		return;
	}	
	/* Pass relevant info into mobilePromo object. */
	var selectedPromo = MobilePromoManager.selectPromo();
	mobilePromo.promo = selectedPromo.name;
	if ((selectedPromo.url === '') || (selectedPromo.url === undefined)) {
		/* When no banner URL injectMobilePromoBanner() (inside mobileCommon.js) will build URL to AboutSpecials. */
		mobilePromo.campaignCode = selectedPromo.campaign;
	} else if ((selectedPromo.campaign !== '') && (selectedPromo.campaign !== undefined)) {
		/* When there is banner URL and campaign then ensure properly built URL. */
		var connector = (selectedPromo.url.indexOf("?") > -1) ? "&" : "?";
		mobilePromo.bannerURL = selectedPromo.url + connector + "cs:a=" + selectedPromo.campaign;
	} else {
		mobilePromo.bannerURL = selectedPromo.url;
	}
});