/*
:: Script Information ::
Title       : JavaScript Player
Author      : livibetter
Created date: 09/13/2006
Updated date: 23:57 10/26/2006
Version     : 0.0.4.3
Credit      : lbmenu 0.2.1.2
License     : GNU General Public License
Copyright   : 2006 livibetter

:: Contact Information ::
eMail		: web@livibetter.com
MSN			: livibetter@gmail.com
Website		: http://www.livibetter.com
*/
// ********
// Settings
var lb_JSPlayer_pathIMG = '/player/';

// ***********
// Main script
var lb_JSPlayer_count = 0;
// Preload images
var lb_JSPlayer_img_note = new Image();
var lb_JSPlayer_img_play = new Image();
var lb_JSPlayer_img_pause = new Image();
var lb_JSPlayer_img_stop = new Image();
lb_JSPlayer_img_note.src = lb_JSPlayer_pathIMG + 'btn-play.png';
lb_JSPlayer_img_play.src = lb_JSPlayer_pathIMG + 'btn-play.png';
lb_JSPlayer_img_pause.src = lb_JSPlayer_pathIMG + 'btn-pause.png';
lb_JSPlayer_img_stop.src = lb_JSPlayer_pathIMG + 'btn-stop.png';

function clb_JSPlayer(sAudioURL, sCore, sBlankMP3URL){
	var core;
	if(sCore.length == 0)sCore = 'QTP';
	if(sCore=='QTP' && haveqt){
		if(sBlankMP3URL.length > 0)
			core = new clb_JSPlayer_core('QTP', sBlankMP3URL);
		else{
			alert('Need blank MP3 URL');
			return;
			}
		}
	else{
		core = new clb_JSPlayer_core('WMP');
		}
	this.core = core;

	// Create Controls
	document.write('<div class="lb_JSPlayer_div" id="lb_JSPlayer_' + lb_JSPlayer_count.toString() + '">');

	// Set div for later using
	this.div = document.getElementById('lb_JSPlayer_' + lb_JSPlayer_count.toString());
	this.div.parent = this;

	document.write(	'<div class="lb_JSPlayer_ctrl1" id="'+ this.div.id + '_ctrl1">' +
						'<img class="lb_JSPlayer_ctrl1_i" id="' + this.div.id + '_ctrl1_i" src="' + lb_JSPlayer_pathIMG + 'btn-play.png" ' +
							'onclick="document.getElementById(\'' + this.div.id + '\').parent.loadAudio(\'' + sAudioURL + '\')"/>' +
					'</div>');
	document.write(	'<div class="lb_JSPlayer_ctrl2" id="' + this.div.id + '_ctrl2">' +
						'<img class="lb_JSPlayer_ctrl2_i" id="' + this.div.id + '_ctrl2_i" src="' + lb_JSPlayer_pathIMG + 'btn-stop.png" ' +
							'onclick="document.getElementById(\'' + this.div.id + '\').parent.stop()"/>' +
					'</div>');
	document.write('<div class="lb_JSPlayer_status" id="' + this.div.id + '_status">00:00.0</div>');
	document.write('</div>');
	
	this.ctrl1 = document.getElementById(this.div.id + '_ctrl1');
	this.ctrl2 = document.getElementById(this.div.id + '_ctrl2');
	this.ctrl1.i = document.getElementById(this.div.id + '_ctrl1_i');
	this.ctrl2.i = document.getElementById(this.div.id + '_ctrl2_i');
	this.status = document.getElementById(this.div.id + '_status');

	new clb_menu(this.ctrl2, false, new clb_menu_method(0,0,0), new clb_size(0,16));
	new clb_menu(this.status, false, new clb_menu_method(0,0,0), new clb_size(0,16));
	this.ctrl2.menu.toggle('collapse');
	this.status.menu.toggle('collapse');
	this.ctrl2.menu.methodDefault = new clb_menu_method(1000, 10, 10);
	this.status.menu.methodDefault = new clb_menu_method(1000, 10, 10);

	// Increase counter
	lb_JSPlayer_count++;

	/*	Method: loadAudio
		Parameters:
			sAudioURL:
				string
					URL of audio file.
	*/
	this.loadAudio = function (sAudioURL){
		// Set status
		this.core.prevState = 'loading';
		this.status.innerHTML = 'loading';
		this.status.menu.toggle('expand');
		// Set prevState for detecting loading complete
		// Ask load Audio file
		this.core.loadAudio(sAudioURL);
		// Set timer
		this.timerUpdate = setTimeout('document.getElementById("' + this.div.id + '").parent.update()', 100);
		}
	/*
		Method: playPause
			Play audio or pause it
	*/
	this.playPause = function (){
		this.core.playPause();
		}
	/*
		Method: stop
			stop audio
	*/
	this.stop = function (){
		this.core.stop();
		}
	/*	Method: update
		Update status text, current position and JSPlayer display
	*/
	this.update = function (){
		var state = this.core.getState();
		switch(state){
			case 'unload':
				// Keep trying load audio file.
				this.loadAudio(this.core.URL);
				break;
			case 'loading':
				// Set status
				this.status.innerHTML = 'loading';
				this.status.menu.toggle('expand');
				break;
			case 'stopped':
				// Check for loading complete
				if(this.core.prevState == 'unload' || this.core.prevState == 'loading'){
					this.ctrl1.i.onclick = new Function('document.getElementById("' + this.div.id + '").parent.playPause()');
					state = 'loading'; // Keep running this block until the audio is really played
					// Play it
					this.playPause();
					}
				else{
					// Set ctrl1 as play button
					this.ctrl1.i.src = lb_JSPlayer_pathIMG + 'btn-play.png';
					// Hide ctrl2
					this.ctrl2.menu.toggle('collapse');
					// Set status
					this.status.innerHTML = '';
					this.status.menu.toggle('collapse');
					}
				break;
			case 'playing':
				// Set ctrl1 as pause button
				this.ctrl1.i.src = lb_JSPlayer_pathIMG + 'btn-pause.png';
				// Show ctrl2
				this.ctrl2.menu.toggle('expand');
				// Show status
				this.status.menu.toggle('expand');
				// Update position
				var position = this.core.getPosition();
				var currMin = Math.floor(position / 60);
				var currSec = position - currMin * 60;
				var padMin = (currMin < 10)?'0':'';
				var padSec = (currSec < 10)?'0':'';
				this.status.innerHTML = padMin + currMin.toString() + ':' + padSec + currSec.toFixed(1).toString();
				break;
			case 'paused':
				// Set ctrl1 as play button
				this.ctrl1.i.src = lb_JSPlayer_pathIMG + 'btn-play.png';
				break;
			default: //'error'
				// Set ctrl to note again
				this.ctrl1.i.src = lb_JSPlayer_pathIMG + 'btn-note.png';
				this.ctrl1.i.onclick = new Function('document.getElementById("' + this.div.id + '").parent.loadAudio("' + this.core.URL + '")');
				// Hide ctrl2
				this.ctrl2.menu.toggle('collapse');
				// Display error
				this.status.innerHTML = 'ERROR!';
				this.status.menu.toggle('expand');
				break
			}
		this.core.prevState = state;
		if(state != 'error')
			this.timerUpdate = setTimeout('document.getElementById("' + this.div.id + '").parent.update()', 100);
		}
	}
