
// YAHOO.ext.Tejas.VideoPlayer.add(5468, 'Title 1');

YAHOO.namespace('YAHOO.ext.Tejas.VideoPlayer');

YAHOO.ext.Tejas.VideoPlayer = function () {

    var h_player = [],
        h_menu = [], 
        h_reverseAnim = [], 
        h_anim = [], 
        $ = YAHOO.util.Dom.get,
        D = YAHOO.util.Dom,
        E = YAHOO.util.Event,
        videoId  = [],
        videoTitle = [],
        p_width  = 500,
        p_height = 409,
		currentVideo = -1,
		animDuration = 0.5;

	var hideCurrentVideoPlayer = function () {
		var rootPos = D.getRegion('smg-player-0');
		D.setStyle('smg-player-' + currentVideo, 'visibility', 'hidden');
		if (currentVideo !== 0) {
			D.setStyle('smg-player-' + currentVideo, 'top', '-1000px');
			D.setStyle('smg-player-' + currentVideo, 'left', '-1000px');
		}
	};

	var showCurrentVideoPlayer = function () {
		var rootPos = YAHOO.util.Dom.getRegion('smg-player-0');
		D.setStyle('smg-player-' + currentVideo, 'visibility', 'visible');
		if (currentVideo !== 0) {
			D.setStyle('smg-player-' + currentVideo, 'top', rootPos.top + 'px');
			D.setStyle('smg-player-' + currentVideo, 'left', rootPos.left + 'px');
		}
	};

	var showMenuBarLayers = function () {
		for (var i = 0; i < 4; i++) {
			D.setStyle('video-player-menu-' + i, 'display', '');
		}
		D.setStyle('base', 'display', '');
	};

	var hideMenuBarLayers = function () {
		for (var i = 0; i < 4; i++) {
			D.setStyle('video-player-menu-' + i, 'display', 'none');
		}
		D.setStyle('base', 'display', 'none');
	};

    this.add = function (id, title) {
        videoId[videoId.length] = id;
        videoTitle[videoTitle.length] = title;
    };

	var initPlayerForVideo = function (index) {
        h_player[index] = new SMGPlayer(103, 0);
		h_player[index].SetWmode('window');
		h_player[index].Write(videoId[index], p_width, p_height, 'smg-player-' + index);
	};

    var initVideos = function () {
        for (var i = 0; i < videoId.length; i++) {
            initPlayerForVideo(i);
        }
    };

	var initAnimObjects = function () {

		var rootPos = YAHOO.util.Dom.getRegion('smg-player-0');

        h_anim[0] = new YAHOO.util.Anim('video-player-menu-0', {
                        bottom : { to : rootPos.bottom },
						right  : { to : rootPos.right  },
						height : { by : p_height / 2   },
						width  : { by : p_width / 2    }
					}, animDuration, YAHOO.util.Easing.easeOut);

        h_anim[1] = new YAHOO.util.Anim('video-player-menu-1', {
                        bottom : { to : rootPos.bottom },
						left   : { to : rootPos.left   },
						height : { by : p_height / 2   },
						width  : { by : p_width / 2    }
					}, animDuration, YAHOO.util.Easing.easeOut);

        h_anim[2] = new YAHOO.util.Anim('video-player-menu-2', {
                        top    : { to : rootPos.top    },
						right  : { to : rootPos.right  },
						height : { by : p_height / 2   },
						width  : { by : p_width / 2    }
					}, animDuration, YAHOO.util.Easing.easeOut);

        h_anim[3] = new YAHOO.util.Anim('video-player-menu-3', {
                        top    : { to : rootPos.top    },
						left   : { to : rootPos.left   },
						height : { by : p_height / 2   },
						width  : { by : p_width / 2    }
					}, animDuration, YAHOO.util.Easing.easeOut);

		for (var i = 0; i < 4; i++) {
			h_anim[i].onComplete.subscribe(function (e, animDetails, i) {
				D.setStyle('top-menu-bar-close', 'display', 'inline');
				hideMenuBarLayers();
				showCurrentVideoPlayer();
				playCurrentVideo();
			}, i);
		}

		h_reverseAnim[0] = new YAHOO.util.Anim('video-player-menu-0', {
						       bottom : { to : rootPos.top + p_height / 2 },
							   right  : { to : rootPos.left + p_width / 2 },
							   width  : { by : -p_width / 2  },
							   height : { by : -p_height / 2 }
						   }, animDuration, YAHOO.util.Easing.easeOut);

		h_reverseAnim[1] = new YAHOO.util.Anim('video-player-menu-1', {
						       bottom : { to : rootPos.top + p_height / 2 },
							   left   : { to : rootPos.left + p_width / 2 },
							   width  : { by : -p_width / 2  },
							   height : { by : -p_height / 2 }
						   }, animDuration, YAHOO.util.Easing.easeOut);

		h_reverseAnim[2] = new YAHOO.util.Anim('video-player-menu-2', {
						       top    : { to : rootPos.top + p_height / 2 },
							   right  : { to : rootPos.left + p_width / 2 },
							   width  : { by : -p_width / 2  },
							   height : { by : -p_height / 2 }
						   }, animDuration, YAHOO.util.Easing.easeOut);

		h_reverseAnim[3] = new YAHOO.util.Anim('video-player-menu-3', {
						       top    : { to : rootPos.top + p_height / 2 },
							   left   : { to : rootPos.left + p_width / 2 },
							   width  : { by : -p_width / 2  },
							   height : { by : -p_height / 2 }
						   }, animDuration, YAHOO.util.Easing.easeOut);

		for (var i = 0; i < 4; i++) {
			h_reverseAnim[i].onComplete.subscribe(function (e, animDetails, i) {
			    for (var j = 0; j < 4; j++) {
				    D.setStyle(h_menu[j], 'z-index', 3);
			    }
				currentVideo = -1;
				D.setStyle('top-menu-bar-close', 'display', 'none');
			}, i);
		}
    };

	var initTopMenuBar = function () {
	    var rootPos = YAHOO.util.Dom.getRegion('smg-player-0');
		topMenuBar = document.createElement('div');
		topMenuBar.id = 'top-menu-bar';
		topMenuBar = document.body.insertBefore(topMenuBar, document.body.firstChild);
		D.setStyle(topMenuBar, 'width', p_width + 'px');
		D.setStyle(topMenuBar, 'height', '20px');
		D.setStyle(topMenuBar, 'position', 'absolute');
		D.setStyle(topMenuBar, 'font-weight', 'bold');
		D.setStyle(topMenuBar, 'text-decoration', 'underline');
		D.setStyle(topMenuBar, 'top', (rootPos.top - 20) + 'px');
		D.setStyle(topMenuBar, 'left', rootPos.left  + 'px');
		topMenuBar.innerHTML = '<span id="top-menu-bar-close">Back to Video Menu</span>';

		E.addListener('top-menu-bar-close', 'click', function (e) {
			stopCurrentVideo();
			hideCurrentVideoPlayer();
			showMenuBarLayers();
			h_reverseAnim[currentVideo].animate();
			return false;
		});

		var baseLayer = document.createElement('div');
		baseLayer.id  = 'base';
		baseLayer = document.body.insertBefore(baseLayer, document.body.firstChild);
		D.setStyle(baseLayer, 'width', p_width + 'px');
		D.setStyle(baseLayer, 'height', p_height + 'px');
		D.setStyle(baseLayer, 'position', 'absolute');
		D.setStyle(baseLayer, 'top', rootPos.top + 'px');
		D.setStyle(baseLayer, 'left', rootPos.left  + 'px');
	};

	var initMenus = function () {

		var rootPos = YAHOO.util.Dom.getRegion('smg-player-0');

        for (var i = 0; i < 4; i++) {
            h_menu[i] = document.createElement('div');
			h_menu[i].id = 'video-player-menu-' + i;
			h_menu[i] = document.body.insertBefore(h_menu[i], document.body.firstChild);
			D.setStyle(h_menu[i], 'width', (p_width / 2) + 'px');
			D.setStyle(h_menu[i], 'height', (p_height / 2) + 'px');
			D.setStyle(h_menu[i], 'position', 'absolute');
			D.setStyle(h_menu[i], 'top', (rootPos.top + ((i >= 2) ? 1 : 0) * p_height / 2) + 'px');
			D.setStyle(h_menu[i], 'left', (rootPos.left + ((i % 2) * p_width / 2) + 'px'));
			h_menu[i].innerHTML = '<table><tr><td><a href="#" id="menu-link-' + i + '">' + videoTitle[i] + '</a></td></tr></table>';
        }
    };

	var initMenuClicks = function () {
		for (var i = 0; i < 4; i++) {
			E.addListener('video-player-menu-' + i, 'click', function (e, i) {
				for (var j = 0; j < 4; j++) {
				    D.setStyle(h_menu[j], 'z-index', 3);
				}
				D.setStyle(h_menu[i], 'z-index', 4);
				h_anim[i].animate();
				currentVideo = i;
			}, i);

			E.addListener('video-player-menu-' + i, 'mouseover', function (e, i) {
				D.setStyle(h_menu[i], 'opacity', '0.75');
				D.setStyle('menu-link-' + i, 'color', '#ff0');
			}, i);

			E.addListener('video-player-menu-' + i, 'mouseout', function (e, i) {
				D.setStyle(h_menu[i], 'opacity', '0.80');
				D.setStyle('menu-link-' + i, 'color', '#def');
			}, i);
		}
	};

    var init = function () {
        initVideos();
		initTopMenuBar();
		initMenus();
		initAnimObjects();
		initMenuClicks();
	if (window.printing == true) {
		var el = document.getElementById('base');
		el.parentNode.removeChild(el);
		for (var l = 0; l <= 3; l++) {
			var el = document.getElementById('video-player-menu-' + l);
			el.parentNode.removeChild(el);
			var el = document.getElementById('smg-player-' + l);
			el.parentNode.removeChild(el);
		}
	}
    };

	var playCurrentVideo = function () {
		h_player[currentVideo].Play();
	};

	var stopCurrentVideo = function () {
		h_player[currentVideo].Stop();
	};

    E.onDOMReady(init);

	this.debug = function () {
		var str = '';
		for (var key in h_player[0]) {
			str += key + ':' + typeof h_player[0][key] + '; ';
		}
		alert(str);
	};

    return this;

}();

