EEPlayer = function (target_element) {
	var element = (typeof target_element == "string") ? document.getElementById(target_element) : target_element;
	this.instance = EEPlayer.COUNT++;
	this.addChildren(element);
	this.queue = {};
	
	this.player = new nebulaplayer.Nebula('player_target' + this.instance);
	if (this.player.htmlLayer.addEventListener) {
		this.player.htmlLayer.addEventListener('click', this.delegate(this, this.onOverLayClick), false);
	} else if (this.player.htmlLayer.attachEvent) {
		this.player.htmlLayer.attachEvent('onclick', this.delegate(this, this.onOverLayClick));
	}
	this.player.addEventListener(nebulaplayer.event.LOAD, this.delegate(this, this.onLoad));
	this.player.addEventListener(nebulaplayer.event.PLAY, this.delegate(this, this.onPlay));
	this.player.addEventListener(nebulaplayer.event.ADVANCE, this.delegate(this, this.onAdvance));
	this.player.addEventListener(nebulaplayer.event.MUTE, this.delegate(this, this.onMute));
	this.player.addEventListener(nebulaplayer.event.BUFFER, this.delegate(this, this.onBuffer));
	this.player.addEventListener(nebulaplayer.event.SUCCESS, this.delegate(this, this.onSuccess));
	this.player.addEventListener(nebulaplayer.event.COMPLETE, this.delegate(this, this.onComplete));
	this.player.addEventListener(nebulaplayer.event.STREAM_ERROR, this.delegate(this, this.onStreamError));
	
	var scopeRewind = document.getElementById('rewindButton'+this.instance);
	scopeRewind.handler = this;
	scopeRewind.onclick = function (event)  {
		this.handler.handleControl(event, "seek", [0]);
	};
	var scopePlay = document.getElementById('playButton' + this.instance);
	scopePlay.handler = this;
	scopePlay.onclick = function (event)  {
		if (this.handler.queue.length != "") {
			this.handler.handleControl(event, "play");
		}
	};
	var scopeMute = document.getElementById('muteButton' + this.instance);
	scopeMute.handler = this;
	scopeMute.onclick = function (event) {
		this.handler.handleControl(event, "mute");
	};
	this.slider = new mediageneral.components.Slider('slider' + this.instance, 0, 100, 100);
	this.slider.addEventListener("start", this.delegate(this, this.onSliderStart));
	this.slider.addEventListener("change", this.delegate(this, this.onSliderEnd));
}
if (typeof EEPlayer.COUNT == "undefined") EEPlayer.COUNT = 0;
EEPlayer.prototype = {
	delegate: function(obj, func) {
		var f = function () {
			var target = arguments.callee.target;
			var func0 = arguments.callee.func;
			return func0.apply(target, arguments);
		};
		f.target = obj;
		f.func = func;
		
		return f;
	},
	onOverLayClick: function (event) {
		this.handleControl(event, "play");
		if (event.preventDefault) {
			event.preventDefault();
			event.stopPropagation();
		} else {
			event.returnValue = false;
			event.cancelBubble = true;
		}
	},
	onSliderStart: function (event) {
		/*console.log('slider.start');
		this.player.pause();*/
	},
	onSliderEnd: function (event) {
		this.player.seek((event.target.value / 100) * this.player.duration);
	},
	onStreamError: function (event) {
		this.message('Requested video was not found');
	},
	onLoad: function (event) {
		var target = event.target;
		this.onMute(event);
		this.message('Ready');
	},
	onPlay: function (event) {
		this.message('Playing');
		this.player.htmlLayer.innerHTML = "";
	},
	onSuccess: function (event) {
		this.message('Connected');
	},
	onBuffer: function (event) {
		this.message('Buffering...');
	},
	onComplete: function (evt) {
		var target = evt.target;
		this.slider.setPosition(0, 0);
		document.getElementById('playButton'+this.instance).src = 'http://media.mgnetwork.com/mgvp/components/play_button.gif';
		this.message('Stopped');
		this.player.htmlLayer.innerHTML = '<img src="' + this.queue.preview + '" />';
	},
	onAdvance: function (evt) {
		var target = evt.target;
		var timeBox = document.getElementById('time' + this.instance);
		if (!this.slider.active) this.slider.setPosition(0, (target.time / target.duration) * 100);
		
		var lengthInSecs = Math.round(target.duration) - Math.round(target.time);
		var lengthInMins = Math.floor(lengthInSecs / 60);
		lengthInSecs = lengthInSecs%60;
		
		timeBox.innerHTML = ((lengthInMins < 10) ? "0" + Math.max(0, lengthInMins) : lengthInMins) + ":" + ((lengthInSecs < 10) ? "0" + Math.max(0, lengthInSecs) : lengthInSecs);
	},
	onMute: function (event) {
		var target = event.target;
		var muteButton = document.getElementById('muteButton'+this.instance);
		if (target.muted) {
			muteButton.src = 'http://media.mgnetwork.com/mgvp/components/volume_button_off.gif';
		} else {
			muteButton.src = 'http://media.mgnetwork.com/mgvp/components/volume_button.gif';
		}
	},
	handleControl: function (event, action, params) {
		switch (action) {
			case 'seek':
				this.player.seek.apply(this.player, params);
				break;
			case 'play':
				if (this.player.enabled) {
					if (arguments.length > 2) {
						if (this.player.playing) this.player.stop();
						this.queue.stream = params[0];
						this.queue.preview = params[1];
					}
					var target = document.getElementById('playButton'+this.instance);
					if (this.player.playing) {
						if (!this.player.paused) {
							target.src = 'http://media.mgnetwork.com/mgvp/components/play_button.gif';
						} else {
							target.src = 'http://media.mgnetwork.com/mgvp/components/pause_button.gif';
						}
						this.player.pause();
					} else {
						target.src = 'http://media.mgnetwork.com/mgvp/components/pause_button.gif';
						this.player.play(this.queue.stream);
					}
				}
				break;
			case 'mute':
				this.player.mute();
				break;
		}
	},
	message: function (msg) {
		document.getElementById('messageDisplay'+this.instance).innerHTML = msg;
	},
	addToQueue: function (src, prv) {
		this.queue = {stream:src, preview:prv};
		this.player.htmlLayer.innerHTML = '<img src="' + this.queue.preview + '" />';
	},
	addChildren: function (element) {
		element.innerHTML = '<div id="player_target' + this.instance + '"></div> \
							<table width="320" border="0" cellpadding="5" cellspacing="0" class="playerControls"> \
							<tr> \
							<td align="center" valign="middle"><img width="25" height="25" alt="Play" id="playButton' + this.instance + '" src="http://media.mgnetwork.com/mgvp/components/play_button.gif" /></td> \
							<td align="left" valign="middle"><img width="20" height="20" alt="Rewind" src="http://media.mgnetwork.com/mgvp/components/rewind_button.gif" id="rewindButton'+ this.instance +'" /></td> \
							<td width="120"> \
							<div class="horizontal_track" id="slider'+ this.instance + '"> \
							<div class="horizontal_slit" >&nbsp;</div> \
							<div class="horizontal_slider" name="slider_thumb" id="your_slider_id" style="left: 0px;">&nbsp;</div> \
							</div> \
							</td> \
							<td><div class="time" id="time' + this.instance +'">00:00</div></td> \
							<td><img width="24" height="24" alt="Mute" src="http://media.mgnetwork.com/mgvp/components/volume_button_off.gif" id="muteButton'+this.instance+'" onclick="newNeb.mute();" /></td> \
							</tr><tr> \
							<td colspan="5"><span id="messageDisplay' + this.instance + '" class="message">Loading...</span></td> \
							</tr></table>';
	}
}
