/**
 * @description Singleton to control the population of the overlay
 */

nikefootball.global.OverlayController = (function () {
	var _DEFAULTS = {
		overlayName					: '',
		drillName					: '',
		difficultyLevel				: 'basic',
		weekIndex					: 0,
		dayIndex					: 0,
		drillIndex					: 0,
		pageSection					: 'content',
		guid						: null,
		locale						: (nikefootball.GLOBAL_VARIABLES.locale) ? nikefootball.GLOBAL_VARIABLES.locale : JQ.getURLParam("locale"),
		onShowCompleteCallback		: function () {},
		onHideCompleteCallback		: function () {}
	};

	var _overlayMappings = (nikefootball.GLOBAL_VARIABLES.overlayMappings === undefined)
			? {}
			: nikefootball.GLOBAL_VARIABLES.overlayMappings;

	var _selectorForElementToOverlay = (nikefootball.GLOBAL_VARIABLES.selectorForElementToOverlay === undefined)
			? '#content-inner'
			: nikefootball.GLOBAL_VARIABLES.selectorForElementToOverlay;

	var _selectorForOverlayTrigger = (nikefootball.GLOBAL_VARIABLES.selectorForOverlayTrigger === undefined)
			? ''
			: nikefootball.GLOBAL_VARIABLES.selectorForOverlayTrigger;

	var _objectToOverlay = null;

	var _overlayParams = null;

	var _overlay = null;

	// PRIVATE METHODS

	function _addDispatchers() {
		JQ(_selectorForOverlayTrigger).click(
			function(e) {
				e.target = JQ(e.target);
				JQ.each(_overlayMappings,
					function (className, overlayName) {
						if (e.target.hasClass(className)) {
							e.preventDefault();
							show({overlayName: overlayName});
							return;
						}
					}
				);
			}
		);
	};
	
	function _initVars() {
		_objectToOverlay = JQ(_selectorForElementToOverlay);
		_overlayParams = {
			objectToOverlay		: _objectToOverlay,
			content				: ' '
		};
		_overlay = new nikefootball.global.Overlay(_overlayParams);
	};

	function _init() {
		_initVars();
		_addDispatchers();
	};

	// PUBLIC METHODS

	function show(params) {
		if (!params.overlayName) {
			return;
		}
		params.overlayName = params.overlayName || _DEFAULTS.overlayName;
		params.drillName = params.drillName || _DEFAULTS.drillName;
		params.difficultyLevel = params.difficultyLevel || _DEFAULTS.difficultyLevel;
		params.guid = params.guid || _DEFAULTS.guid;
		params.weekIndex = params.weekIndex || _DEFAULTS.weekIndex;
		params.dayIndex = params.dayIndex || _DEFAULTS.dayIndex;
		params.drillIndex = params.drillIndex || _DEFAULTS.drillIndex;
		params.pageSection = params.pageSection || _DEFAULTS.pageSection;
		params.locale = params.locale || _DEFAULTS.locale;
		params.onShowCompleteCallback = params.onShowCompleteCallback || _DEFAULTS.onShowCompleteCallback;
console.log('    params modified ', params);

		var overlayMessageURL = "";
		if (params.overlayName == "overlayvideo") {
			//overlayMessageURL = "/nikefootball/templates/training/modules/overlayvideo.ftl?view=" + nikefootball.GLOBAL_VARIABLES.view + "&drillName=" + params.drillName
            overlayMessageURL = "/nikefootball/training/overlayvideo?view=" + nikefootball.GLOBAL_VARIABLES.view + "&drillName=" + params.drillName
				+ "&difficultyLevel=" + params.difficultyLevel
				+ "&weekIndex=" + params.weekIndex
				+ "&dayIndex=" + params.dayIndex
				+ "&drillIndex=" + params.drillIndex
				+ "&pageSection=" + params.pageSection
				+ "&locale=" + params.locale
			;
		} else {
			//overlayMessageURL = "/nikefootball/templates/training/modules/overlaymessage.ftl?view=" + nikefootball.GLOBAL_VARIABLES.view + "&overlayName=" + params.overlayName + "&locale=" + params.locale;
            overlayMessageURL = "/nikefootball/training/overlaymessage?view=" + nikefootball.GLOBAL_VARIABLES.view + "&overlayName=" + params.overlayName + "&locale=" + params.locale;
		}
		JQ.get(overlayMessageURL,
			function(content) {
console.log('--- JQ.get callback ', params);
				_overlay.setContent(content);
				_overlay.showOverlay(
					true,
					function () {
console.log('--- showOverlay callback ', overlayMessageURL, params);
						if (params.guid !== _DEFAULTS.guid) {
							new nikefootball.training.insertFlashModules("videoModule", "videoplaceholder", params.guid);
						}
						nikefootball.training.btnFactoryWrapThemAll();
						nikefootball.training.btnFactoryCleanNoScriptCSS();
						nikefootball.training.btnFactoryStyleThemAll();

						var cufonDataRhode = [
							{selector: 'a.fctBtn', options: {hover: !JQ.browser.msie}},
							{selector: 'div.overlayvid-content-col-left h2'},
							{selector: 'div.overlayvid-content-col-left-upper-left h3'},
							{selector: 'ul.overlayvid-sets-reps-rest li span.overlayvid-sets-reps-rest-title'},
							{selector: 'div.overlayvid-equipment h3'},
							{selector: 'div.overlaymsg-content-inner-left h2'},
							{selector: 'div.overlaymsg-content-inner-left h3'},
							{selector: 'ul.overlayvid-sets-reps-rest li span.overlayvid-sets-reps-rest-value'}
						];
						nikefootball.training.cufonise(cufonDataRhode, 'Rhode-MediumCondensed', 'HelveticaNeueLTProBoldCondensed');

						var cufonDataHelvetica = [
							{selector: 'div.overlayvid-content-col-left-upper-left p'},
							{selector: 'div.overlayvid-equipment p'},
							{selector: 'div.overlaymsg-content-inner-left p'},
							{selector: 'div.overlaymsg-content-inner-right h4'}
						];
						nikefootball.training.cufonise(cufonDataHelvetica, 'HelveticaNeueCondensed', 'HelveticaNeueLTProMediumCondensed');
						
						params.onShowCompleteCallback();
						JQ('html,body').animate({scrollTop: 87});
						if (JQ.browser.msie && JQ.browser.version<7) { 
							JQ('body').ie6pngfixes(); //IE6 fix
						}
					}
				);
			}
		);
	};

	function hide() {
		if (params == undefined) {
			params = {};
		}
		params.onHideCompleteCallback = params.onHideCompleteCallback || _DEFAULTS.onHideCompleteCallback;
		_overlay.hideOverlay(undefined, params.onHideCompleteCallback);
	};

	// Constructor code
	JQ(document).ready(_init);

	// Export public methods
	return {
		show	: show,
		hide	: hide
	};

}) ();

/* EOF */
