// 
//  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) {
		var params = _getIndividualParams(param_string);
		for (var i=0; i < params.length; i++) {
			_applyVarsFromParam(params[i]);
		};
			
		_setLocalConnectionIds();
		
		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.MediaPlayer;
			switch (mode) {
				case 't':
					// console.log('its a track!');
					custom_var.propertyId = values[0];
					custom_var.mediaType = values[1];
					// custom_var.suggestedTrackListSize = values[2]; // this never gets set in the site
					break;
				case 'i':
					// console.log('its an interview!');
					custom_var.interviewId = values[0];
					custom_var.startPosition = values[1];
					break;
				case 'p':
					// console.log('its a playlist!');
					custom_var.playlistId = values[0];
					custom_var.startPosition = values[1];
					custom_var.countdownToggle = values[2];
					break;
				case 'a':
					// console.log('its an artist!');
					custom_var.artistId = values[0];
					custom_var.mediaType = values[1];
					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('.');
		}
		
		function _setLocalConnectionIds () {
			var ran = Math.floor((Math.random()*50000)+500).toString();
			mediaplayer.inline.Player.vars.MediaPlayer.localConnectionIds = 'playlistPanel_' + ran + '|artistPanel_' + ran;
			mediaplayer.inline.Player.vars.ArtistPanel.localConnectionIds = 'artistPanel_' + ran;
			mediaplayer.inline.Player.vars.PlaylistPanel.localConnectionIds = 'playlistPanel_' + ran;
		}
		
	},
	
	
	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>',
		
		vars: {
			
			MediaPlayer: {
				propertyId: 0,
				mediaType: null,
				// suggestedTrackListSize: null,
				interviewId: 0,
				startPosition: null,
				playlistId: 0,
				countdownToggle: null,
				artistId: 0,
				localConnectionIds: null
			},
			
			ArtistPanel: {
				localConnectionIds: null
			},

			PlaylistPanel: {
				localConnectionIds: null
			}
		},
		
		init: function () {
			this.applyCustomVars(this.vars.MediaPlayer, mediaplayer.MediaPlayer.vars);
			this.applyCustomVars(this.vars.ArtistPanel, mediaplayer.ArtistPanel.vars);
			this.applyCustomVars(this.vars.PlaylistPanel, mediaplayer.PlaylistPanel.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 = $(mediaplayer.MediaPlayer.ID);
			switch (type) {
				case 't':
					mp.playTrack(mediaplayer.inline.Player.vars.MediaPlayer.propertyId, _convertMediaType(mediaplayer.inline.Player.vars.MediaPlayer.mediaType));
					break; 
				case 'i':
					mp.playInterview(mediaplayer.inline.Player.vars.MediaPlayer.interviewId, mediaplayer.inline.Player.vars.MediaPlayer.startPosition);
					break;
				case 'p':
					mp.playPlaylist(mediaplayer.inline.Player.vars.MediaPlayer.playlistId, mediaplayer.inline.Player.vars.MediaPlayer.startPosition /*, mediaplayer.inline.Player.vars.MediaPlayer.countdownToggle*/);
					break;
				case 'a':
					mp.playArtist(mediaplayer.inline.Player.vars.MediaPlayer.artistId, mediaplayer.inline.Player.vars.MediaPlayer.mediaType);
					break;
				default:
					return false;
			}
			
			mediaplayer.inline.Player.scrollTo();
			
			// convertion mediaType integers to strings for playPlaylist()
			function _convertMediaType(media_type) {
				switch (media_type) {
					case '3':
						return 'video';
						break;
					case '2':
						return 'audio';
						break;
					default:
						return 'video';
				}
			}
		},
		
		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.ID));
		}
		
	}
	
};


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