// 
//  mediaplayer_inline.js
//  Mediplayer Inline (MPI) Plugin
//  
//  Created by Victor Nguyen on 2009-09-30.
//  Copyright 2009 igloo digital. All rights reserved.
// 

if (typeof mediaplayer == 'undefined') { alert('mediaplayer.js is not installed'); }

mediaplayer.inline = {
	
	TRIGGER_CLASS: 'mpi-trigger',
	CONTAINER_ID: 'body', // element[id] to search for TRIGGER_CLASS
	
	IsAnimating: false, // is mpi animating into place
	CurrentMode: null, // current mode ('t', 'p', 'i', 'a'.)
	
	init: function () {
		// console.log(_getTriggers());
		if (_getTriggers().length == 0) { return; }
		$(this.CONTAINER_ID).addEvent('click', this.handleClick);
		
		function _getTriggers () {
			return $(mediaplayer.inline.CONTAINER_ID).getElementsBySelector('a.' + mediaplayer.inline.TRIGGER_CLASS);
		}
	},
	
	handleClick: function (e) {
		var event = new Event(e);
		var trigger = _getTrigger(event);
		if (!trigger.hasClass(mediaplayer.inline.TRIGGER_CLASS)) { return; }
		
		if (_getParamString(trigger) && !mediaplayer.inline.IsAnimating) {
			mediaplayer.inline.setPlayerVars(_getParamString(trigger));
			if (mediaplayer.inline.Player.isActive()) {
				mediaplayer.inline.Player.playMedia(mediaplayer.inline.CurrentMode);
				if (mediaplayer.inline.CurrentMode) { event.stop(); }
			} else {
				mediaplayer.inline.Player.init();
				event.stop();
			}
		}
		
		function _getTrigger (event) {
			var trigger = $(event.target);
			if (trigger.getTag() == 'img') { trigger = trigger.getParent(); }
			return trigger;
		}
		
		function _getParamString (trigger) {
			var param = trigger.href.split('?')[1];
			if (!param) { return false; }
			return param;
		}
	},
	
	setPlayerVars: function (param_string) {
		// reset player mode, will be set from vars
		mediaplayer.inline.CurrentMode = null;
		
		var params = _getIndividualParams(param_string);
		for (var i=0; i < params.length; i++) {
			_applyVarsFromParam(params[i]);
		};
		
		function _applyVarsFromParam (param) {
			var mode = _getMediaMode(param);
			// mediaplayer.inline.CurrentMode = (mode.length == 1) ? mode : null; // only set current mode if the param is a single-letter e.g. 't' and not 'searchTerm'
			var values = _getMediaValues(param);
			// console.log('values', values);
			
			var custom_var = mediaplayer.inline.Player.vars;
			switch (mode) {
				case 't':
				case 'movideo_m':
					// console.log('its a track!');
					custom_var.mediaId = values[0];
					// custom_var.mediaType = values[1];
					mediaplayer.inline.CurrentMode = mode;
					break;
				case 'i':
					// console.log('its an interview!');
					custom_var.playlistId = values[0];
					custom_var.playlistIndex = values[1];
					mediaplayer.inline.CurrentMode = mode;
					break;
				case 'p':
					custom_var.playlistIndex = values[1];
				case 'movideo_p':
					// console.log('its a playlist!');
					custom_var.playlistId = values[0];
					// custom_var.countdownToggle = values[2];
					mediaplayer.inline.CurrentMode = mode;
					break;
				case 'a':
					// console.log('its an artist!');
					custom_var.artistId = values[0];
					// custom_var.mediaType = values[1];
					mediaplayer.inline.CurrentMode = mode;
					break;
				case 'movideo_pi':
					custom_var.playlistIndex = values[0];
					break;
				default:
					return false;
			}
		}
		
		function _getIndividualParams (param_string) {
			return param_string.split('&');
		}
		
		function _getMediaMode (param) {
			return param.split('=')[0];
		}
		
		function _getMediaValues (param) {
			return (param.split('=')[1]).split('.');
		}
		
	},
	
	
	Player: {
		
		// markup from media_player.jsp
		WRAPPER_ID: 'mediaplayer_wrapper',
		MARKUP_HTML: '<div id="mpLoading" class="clearfix"><div id="mpWrap" class="clearfix"><div id="mpLeft"><div id="mediaPlayerHolder"><div id="mediaPlayer"><div class="priContentBox" id="flashAltContentWrap"><div class="priContentNoHeader"></div><div class="textualContent" id="flashAltContent"><a href="http://www.adobe.com/go/getflashplayer" target="_blank"><img class="flashGraphic" src="/images/global/logo_flashplayer_100x100.jpg" alt=""></a><p>The Hot Hits Media Player requires the latest Adobe Flash Player.</p><p>It shouldn\'t take long to install, just click the button below and you\'re there!</p><a href="http://www.adobe.com/go/getflashplayer" target="_blank"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" border="0" alt="Get Adobe Flash player" /></a></div></div></div></div><div id="artistPanelHolder"><div id="artistPanel"></div></div></div><div id="mpRight"><div id="mpIsland"></div><div id="playlistPanelHolder"><div id="playlistPanel"></div></div></div></div><img src="http://ad.au.doubleclick.net/ad/N799.MCM/B3956627.5;sz=1x1;ord=' + Math.floor((Math.random()*13756)*345) + '?" width="1" height="1" border="0" />',
		
		vars: {
			// mediaId: 0,
			// mediaType: null,
			// suggestedTrackListSize: null,
			// interviewId: 0,
			// playlistIndex: null,
			// playlistId: 0,
			// countdownToggle: null,
			// artistId: 0
		},
		
		init: function () {
			this.applyCustomVars(this.vars, mediaplayer.Vars);
			this.animate();
		},
		
		animate: function () {
			this.setupMarkup();
			
			var slide = new Fx.Slide($(this.WRAPPER_ID), {
				duration: 500,
				onStart: function () {
					mediaplayer.inline.IsAnimating = true;
					mediaplayer.inline.Player.scrollTo();
				},
				onComplete: function () {
					mediaplayer.inline.IsAnimating = false;
					mediaplayer.embed();
				}
			});
			slide.hide();
			slide.slideIn('vertical');
		},
		
		setupMarkup: function () {
			var wrapper = $(this.WRAPPER_ID);
			wrapper.innerHTML = this.MARKUP_HTML;
			wrapper.style.marginBottom = '15px';
		},
		
		playMedia: function (type) {
			var mp = movideoplayer.getPlayer(mediaplayer.MediaPlayer.ID); //$(mediaplayer.MediaPlayer.ID);
			switch (type) {
				case 't':
				case 'movideo_m':
					mp.playMedia(mediaplayer.inline.Player.vars.mediaId);
					break; 
				case 'i':
					mp.playPlaylist(mediaplayer.inline.Player.vars.playlistId, mediaplayer.inline.Player.vars.playlistIndex);
					break;
				case 'p':
				case 'movideo_p':
					mp.playPlaylist(mediaplayer.inline.Player.vars.playlistId, mediaplayer.inline.Player.vars.playlistIndex);
					break;
				case 'a':
					mp.playArtist(mediaplayer.inline.Player.vars.MediaPlayer.artistId);
					break;
				default:
					return false;
			}
			
			mediaplayer.inline.Player.scrollTo();
		},
		
		applyCustomVars: function (custom_vars, default_vars) {
			for (var key in custom_vars) {
				default_vars[key] = custom_vars[key];
			}
		},
		
		scrollTo: function () {
			// modify this per site, uses mootools Fx.Scroll for slide action here
			var scroll = new Fx.Scroll(window, {
				offset: { x:0, y:_getOffset(), duration:500 }
			});
			scroll.toElement('titleHolder');
			
			function _getOffset() {
				return ($('titleHolder').getSize().size.y) -55;
			}
		},
		
		isActive: function () {
			return mediaplayer.MediaPlayer.Active;
		}
		
	}
	
};


window.addEvents({ 'domready': function () { mediaplayer.inline.init(); } });