var MobilePromoManager = function() {
	var _specials = ContextManager.getPromotions();
	var specialNames = [];
	if (_specials) {
		for(var i = _specials.length; i--;) {
			specialNames.push(_specials[i].title);
		}
	}
	var _currentPromos = [
		/* { 
			'name' : 'hyundai_assurance_feb2010_form',
			'franchises' : 'Hyundai', 
			'url' : '/AboutSpecials_D?promo=hyundai_assurance_feb2010_form',
			'campaign' : 'hyundai_assurance_feb2010_form',
			'group' : 'Promo_Hyundai_Assurance_hide',
			'special' : '',
			'startDate' : '7/12/2010',
			'endDate' : '8/12/2010'
		} */					  
		

	];
	return {
		getPromo:function(name) {
			for (var i = _currentPromos.length; i--;) {
				if (_currentPromos[i].name === name) {
					return _currentPromos[i];
				}
			}
			return {};
		},
		selectPromo:function() {
			var filteredPromos = [];
			var promoHolder = {};
			var specialHolder = {};
			for (var i = _currentPromos.length; i--;) {
				promoHolder = _currentPromos[i];
				if (this.findMatch(promoHolder.group, mobilePromo.groups) && this.findMatch(promoHolder.special, specialNames) && (this.dateCheck(promoHolder.startDate, promoHolder.endDate))) {
					filteredPromos.push(promoHolder);
				}
			}
			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;
		},
		findMatch:function(single, list) { 
			
			/* Return a match if defined group or special is empty. */
			if ((single === '') || !single) {
				return true;
			}
			
			/* Return NO match if there are no groups and no specials. */
			if (!list) {
				return false;
			}
			/* Test for defined group or special matching the groups or specials list. */
			for (var i = list.length; i--;) {
				if (list[i] === single) {
					return true;
				}
			}
			return false;
		},
		dateCheck:function(sDate, eDate) {
			var dateToday = new Date();
			dateToday.setHours(0,0,0,0);
			/*If there's no start date, set the start date to today */
			if ((sDate === '') || !sDate) {
				startDate=dateToday;
			} else {
				startDate = this.scrubDate(sDate);
			}
			/*If there's no end date, let the promo run "forever" */
			if ((eDate === '') || !eDate) {
				endDate=new Date ("December 31, 3575");
			} else {
				endDate = this.scrubDate(eDate);
			}
			if ((dateToday < startDate) || (dateToday > endDate)) {
				/*Start date hasn't happened yet or end date already happened - fail */
				return (false);
			}
			return (true);
		},
		scrubDate:function(d) {
			var year=d.split("/");
			if (year[2].length<4) {
				year[2]="20"+year[2];
			}
            var date=new Date(Number(year[2]), Number(year[0])-1, Number(year[1]));
			return (date);	
		}
	};
}();

function injectMobilePromoBanner() {
	if (typeof(mobilePromo) == "undefined" || !mobilePromo.isEnabled || mobilePromo.promo === undefined || mobilePromo.promo === '') {
		return;
	}
	if (pageName == 'HomePage' || pageName == 'Splash') {
		mQuery.findById('mobilePromo_banner').html('<a href="AboutSpecials_D?promo=' +  mobilePromo.bannerURL + '"><img src="promos/'+ mobilePromo.promo + '/mobilePromo_banner.jpg"/></a>');
	}
}

jQuery(function() {
	/* Uncomment for qa environment->	mobilePromo.isEnabled=true; */
	/* Check for no mobilePromo object, to see if mobile promotions are disabled and if there are no franchises. */
	if ((typeof(mobilePromo) === "undefined") || !mobilePromo.isEnabled) {
		return;
	}
	/* Pass relevant info into mobilePromo object. */
	var selectedPromo = MobilePromoManager.selectPromo();
	if (selectedPromo) {
		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.campaignCode = selectedPromo.campaign;
			mobilePromo.bannerURL = selectedPromo.url + connector + "cs:a:i=" + selectedPromo.campaign;
		} else {
			mobilePromo.campaignCode="";
			mobilePromo.bannerURL = selectedPromo.url;
		}
	} else {
			mobilePromo.promo="";
	}
});

