/**
 *	eSpeakers Video Player for consumer website.
 *
 *	This file starts playing silently, and requires the user to click
 *	the special 'listen' control to hear it.
 *
 *	version 2.02 2011-8-30
 *
 *
 *  (c) 2011 eSpeakers.com / all rights reserved
 */

/*jslint devel: true, browser: true, nomen: true, maxerr: 50, indent: 4 */
/*global jQuery, MediaElementPlayer */


/** stub in console.log for ie browsers that choke on it */
if (typeof console === "undefined" || typeof console.log === "undefined") {
	console = {};
	console.log = function () {"use strict";};
}

var esVideoPlayerSilent;

if (typeof esVideoPlayerSilent === "undefined") {


	var esVideoPlayerSilent = (function () {
		"use strict";

		// private properties
		var width = 640,
			height = 360,
			meplayer, //easy variable reference to the player (IE has trouble getting it via jq selection)
			muted = true,
			firstlisten = true,
			unmuteFn = null,
			targetid = '',
			debugging = false; //log to the console or not


		//methods
		return {

			/**
			 *Write a message to the console.
			 *Used for debugging
			 *
			 */
			logit: function (logmessage) {
				if (debugging) {
					console.log(logmessage);
				}
			},


			/**
			 *Create the media player (once)
			 *
			 */
			createPlayer: function (_targetid, _url, _unmuteFn, _debugging) {

				debugging = Boolean(_debugging);
				unmuteFn = _unmuteFn; //the function that gets called when the video is first unmuted

				esVideoPlayerSilent.logit('createPlayer');

				//check for ie 64-bit, which doesn't work
				if (navigator.userAgent.indexOf("MSIE 8.0") !== -1 && navigator.userAgent.indexOf("x64") !== -1) {
					throw "Looks like you're using 64-bit Internet Explorer, which cannot display this video. My we suggest an upgrade to Firefox or Chrome?";
				}
				targetid = '#' + _targetid;
				
				meplayer = new MediaElementPlayer(targetid, {
					defaultVideoWidth: width,
					defaultVideoHeight: height,
					loop: false,
					enableAutosize: false,
					features: [],
					translationSelector: false,
					startVolume: 0.5, //start silent

					error: function () {
						esVideoPlayerSilent.logit('MediaElementPlayer ERROR');
						throw "This web browser is not able to view video. May we suggest an upgrade to Firefox or Chrome?";
					},

					success: function (player, node) {
						esVideoPlayerSilent.logit('  success');

						meplayer = player; //reference for the outside
						meplayer.setMuted(true);

						//now that we know we have a mediaplayer fully instantiated, go ahead and load in the video
						esVideoPlayerSilent.loadVideo(_url);

						player.addEventListener('play', function () {
							esVideoPlayerSilent.logit('play');
						});

						player.addEventListener('canplay', function () {
							esVideoPlayerSilent.logit('canplay');
							meplayer.play();
						});

						player.addEventListener('ended', function () {
							esVideoPlayerSilent.logit('ended');
							//loop the video if we're still muted
							if (muted) {
								meplayer.setCurrentTime(0);
								meplayer.play();
							} else {
								//wait 2 seconds then reply on silent.
								setTimeout(function() {
									meplayer.setCurrentTime(0);
									meplayer.setMuted(true);
									muted = true;
									meplayer.play();
								}, 5000);
							}
						}, false);
					}
				});
			},


			/**
			 *User has clicked the volume button to mute/unmute the video.
			 *
			 */
			toggleVolume: function () {
				if (meplayer === null) {
					throw "This web browser is not able to view video. May we suggest an upgrade to Firefox or Chrome?";
				}
				if (muted) {
					muted = false;
					esVideoPlayerSilent.logit('volume up');

					//meplayer = jQuery('#videoPlayer')[0];
					meplayer.setMuted(false);

					if (firstlisten) {
						//if it's our first time to unmute, then rewind the video to the start
						//console.dir(meplayer);
						console.log(typeof meplayer);
						meplayer.setVolume(1.0);
						meplayer.setCurrentTime(0);
						unmuteFn();
						firstlisten = false;
					}
				} else {
					meplayer.setMuted(true);
					muted = true;
				}
			},

			/**
			 *SET THE VIDEO ELEMENT WITH DATA
			 *
			 *This is the function that gets called from the enclosing page
			 *
			 */
			loadVideo: function (_url) {
				esVideoPlayerSilent.logit('loadVideo for ' + _url);

				var nakedUrl = esVideoPlayerSilent.stripper(_url);  //remove the file extension from the url

				if (meplayer === null) {
					throw "This web browser is not able to view video. May we suggest an upgrade to Firefox or Chrome?";
				}

				//stop the player (if it's already playing this causes some probs in iOS)
				//meplayer.pause();


				meplayer.setSrc([
					{
						src: nakedUrl + '.mp4',
						type: 'video/mp4'
					},
					{
						src: nakedUrl + '.webm',
						type: 'video/webm'
					}
				]);


				esVideoPlayerSilent.logit('setSrc to ' + nakedUrl + ' and play');
				//meplayer.load();
				//meplayer.play();
			},


			/**
			*Remove the file extension from a URL
			*
			*/
			stripper: function (_url) {
				return _url.substr(0, _url.lastIndexOf('.')) || _url;
			}

		};
	}());
}

