﻿(function() {
	var _attemptInterval = 20;
	var _defaultAttemptDuration = 10000;

	$.extend(Vevo, {
		FreeWheel : {
			AdManager : null,

			getAdManager : function () {
				if (Vevo.FreeWheel.AdManager != null) {
					return Vevo.FreeWheel.AdManager;
				}
				if (swfobject.getObjectById('HeadlessAdManager') != null) {
					Vevo.FreeWheel.AdManager = swfobject.getObjectById('HeadlessAdManager');
				}
				else if (swfobject.getObjectById('thePlayer') != null) {
					Vevo.FreeWheel.AdManager = swfobject.getObjectById('thePlayer');
				}
				else if (swfobject.getObjectById('theShowcase') != null) {
					Vevo.FreeWheel.AdManager = swfobject.getObjectById('theShowcase');
				}
				return Vevo.FreeWheel.AdManager;
			},
			
			startHeadlessAdManager : function (attemptDuration) {
				var adManager = Vevo.FreeWheel.getAdManager();
				if (adManager != null) {
					if (typeof adManager.start === 'function') {
						try {
							adManager.start();
						} catch (e) {}
						return;
					}
					else if (typeof adManager.logImpression === 'function' && adManager.start == null) {
						// if the ad manager is not headless, do not need to call start
						//if (window.console && console.log) {
						//	console.log('FreeWheel Helper: Ad manager is not the Headless Ad Manager, we do not need to call start().');
						//}
						return;
					}
				}
				if (attemptDuration == null) {attemptDuration = _defaultAttemptDuration; }
				if (attemptDuration > 0) {
					var tmpFunc = (function (c) { 
						return function (){ 
							Vevo.FreeWheel.startHeadlessAdManager(c); 
						};
					 })(attemptDuration - _attemptInterval);
					setTimeout(tmpFunc, _attemptInterval); 
				}
				else {
					//if (window.console && console.log) {
					//	console.log("FreeWheel Helper: Giving up on trying to call start() on ad manager.");
					//}
				}
			},
			
			// used on pages with headless swf
			// https://crc.freewheel.tv/content/headless-admanager-integration-guide
			logImpression : function (id, attemptDuration) {
				var adManager = Vevo.FreeWheel.getAdManager();
				//console.log(id, attemptDuration, $('#_fw_container_' + id), $('#_fw_container_' + id).html());
				if (adManager != null && typeof adManager.logImpression === 'function' && $('#_fw_container_' + id).length > 0 && $.trim($('#_fw_container_' + id).html()) != '') {
					try {
						adManager.logImpression(id);
						//if (window.console && console.log) {
						//	console.log("FreeWheel Helper: Log Impression Success", id);
						//}
					} catch(e) {
						//if (window.console && console.log) {
						//	console.log("FreeWheel Helper: Log Impression Failure", id, e);
						//}
					}
					return;
				}
				if (attemptDuration == null){ attemptDuration = _defaultAttemptDuration; }
				if (attemptDuration > 0)
				{
					var tmpFunc = (function (id, c) { return function () { Vevo.FreeWheel.logImpression(id, c); }; })(id, attemptDuration - _attemptInterval);
					setTimeout(tmpFunc, _attemptInterval); 
				}
				else {
					//if (window.console && console.log) {
					//	if ($.trim($('#_fw_container_' + id).html()) == '')
					//	{
					//		console.log("FreeWheel Helper: Giving up on log impression for " + id + ' because it has not been loaded.');
					//	}
					//	else
					//	{
					//		console.log('FreeWheel Helper: Giving up on log impression for ' + id + ' because of unknown reason.');
					//	}
					//}
				}
			},

			init : function () {
				Vevo.FreeWheel.startHeadlessAdManager(10000);
			}
		}
	});

	(function (){
		window.mastHeadExpand = function () { setHeightAndContinue($('div#mastheadWrapper'), 418, 40); };
		window.mastHeadCollapse = function () { setHeightAndContinue($('div#mastheadWrapper'), 66, 80); };

		var timeoutID;
		
		function steppingFunction(/*jQ*/element)
		{
			var currHeight = $(element).height();
			var desireHeight = $.data(element, 'freewheel.pushdown.desireHeight');
			var stepSize = $.data(element, 'freewheel.pushdown.stepSize');
			var newHeight;

			if (desireHeight > currHeight)
			{
				newHeight = Math.min(desireHeight, currHeight + stepSize);
				$(element).height(newHeight);
			}
			else if (desireHeight < currHeight)
			{
				newHeight = Math.max(desireHeight, currHeight - stepSize);
				$(element).height(newHeight);
			}
			else
			{
				clearTimeout($.data(element, 'freewheel.pushdown.intervalID'));
				$.removeData(element, 'freewheel.pushdown.intervalID');
				$.removeData(element, 'freewheel.pushdown.desireHeight');
				$.removeData(element, 'freewheel.pushdown.stepSize');
			}
		}

		function setHeightAndContinue(/*jQuery elements*/elements, /*number*/desireHeight, /*number*/stepSize) {
			$.each(elements, function(k, element){
				$.data(element, 'freewheel.pushdown.desireHeight', desireHeight);
				$.data(element, 'freewheel.pushdown.stepSize', Math.max(Math.abs(stepSize), 1));

				var intervalID = $.data(element, 'freewheel.pushdown.intervalID');
				if (intervalID == null)
				{
					intervalID = setInterval(function (){ steppingFunction(element); }, 50);
					$.data(element, 'freewheel.pushdown.intervalID', intervalID);
				}
			})
		}
	})();

	$(document).ready(function () {
		Vevo.FreeWheel.init();
	});
})();
