// JavaScript Document

//Settings
var Path = "http://www.hoofjaw.com/";
var CHECK_INTERVAL = 500;


var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};


function GetBrowserInfo() {
	BrowserDetect.init();
}


var PlayingWith;
var LastId = null;
var FlashPlayState = 0;
var LastPlayState;

function ToggleSong(FileName, Id) {
	if (LastId==null) { //Playing
		PlaySong(FileName, Id);
	} else {
		if (LastId==Id)
			StopSong();
		else {
			StopSong();
			PlaySong(FileName, Id);			
		}
			
	}
}


function PlaySong(FileName, Id) {
	var ext = FileName.substring(FileName.length-4).toLowerCase();
	var pluginsOrder = null; //Array
	if (BrowserDetect.browser!="Explorer") { //Firefox has problems interactiing with ActiveX, so, give priority to flash
		if (ext == ".mp3")
			pluginsOrder = new Array("Flash", "Windows Media Player", "QuickTime");
		else if (ext ==".mid")
			pluginsOrder = new Array("Windows Media Player", "QuickTime");
	} else {
		if (ext == ".mp3")
			pluginsOrder = new Array("Windows Media Player", "QuickTime", "Flash");
		else if (ext ==".mid")
			pluginsOrder = new Array("Windows Media Player", "QuickTime");
	}
	
	var i;
	PlayingWith = "";
	ok = false;
	for (i=0;i<pluginsOrder.length;i++) {
		if (pluginlist.indexOf(pluginsOrder[i])!=-1) {
			PlayingWith = pluginsOrder[i];
			ok = true; 
			i = 100; //break
		}
	}
	
	if (ok) {
		//Write the selected plugin
		if (PlayingWith=="Windows Media Player")
			WriteMediaPlayer(FileName);
		else if (PlayingWith=="QuickTime")
			WriteQuickTimePlayer(FileName);
		else if (PlayingWith=="Flash")
			WriteFlashPlayer(FileName);		
		LastId = Id;
		SwitchIcon("wait");
		setTimeout("UpdatePlayState()",CHECK_INTERVAL);
	}


}

function StopSong() {
	if (BrowserDetect.browser=="Explorer") {
		try {
			document.getElementById("MediaPlayer").Stop();
			document.getElementById("divPlayer").innerHTML = "";
		} catch (e) {}
	} else {
		try {
			document.getElementById("divPlayer").innerHTML = "";
		} catch (e) {}
	
	}

	
	SwitchIcon("play");
	LastId = null;
	PlayingWith = "";
}


function WriteMediaPlayer(FileName) {

	document.getElementById("divPlayer").innerHTML = '<OBJECT ID="MediaPlayer" CLASSID="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"'+
		' CODEBASE="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab# Version=5,1,52,701" STANDBY="Loading Microsoft Windows® Media Player components..." TYPE="application/x-oleobject" width="0" height="0" >'+
	'<param name="fileName" value="'+Path+FileName+'"> '+
	'<param name="autoStart" value="true">'+
	'<param name="showControls" value="true">'+
	'<param name="Volume" value="-300">'+
	'<embed type="application/x-mplayer2" pluginspage="http://www.microsoft.com/Windows/MediaPlayer/" src="'+Path+FileName+'" name="MediaPlayer" autostart=1 showcontrols=1 volume=-300  width="0" height="0"></OBJECT> ';
}

function WriteQuickTimePlayer(FileName) {
	document.getElementById("divPlayer").innerHTML = QT_WriteOBJECT(Path+FileName,'0','0','', 'ID', 'MediaPlayer', 'EnableJavaScript', 'true');
}

function WriteFlashPlayer(FileName) {
	document.getElementById("divPlayer").innerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="0" height="0" id="MediaPlayer"> '+
'  <param name="movie" value="player.swf?fileName='+Path+FileName+'" />'+
'  <param name="quality" value="high" />'+
'  <embed src="player.swf?fileName='+Path+FileName+'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="0" height="0"></embed>'+
'</object>';
}

function SwitchIcon(status) {
	var playState;
	switch (status) {
		case "wait":
			playState = GetPlayerState();
			if (playState==-1)  //Playstate is not available, must put directly on playing state
				MM_swapImage('Image'+LastId,'','images/music_stop.gif',1);
			else
				MM_swapImage('Image'+LastId,'','images/music_load.gif',1);
			break;
		case "play":
			MM_swapImage('Image'+LastId,'','images/music_play.gif',1);
			break;
		case "stop":
			MM_swapImage('Image'+LastId,'','images/music_stop.gif',1);
			break;
	}

}

//Homogenic playstates
// -1 Play state not available
// 0 stopped
// 1 loading
// 2 playing
function GetPlayerState() {
	var objPlayer;
	objPlayer = document.getElementById("MediaPlayer");
	var playState = 0;
	switch (PlayingWith) {
		case "Windows Media Player":
			if (BrowserDetect.browser=="Explorer") {
				if ((objPlayer.playState==2) && (objPlayer.currentPosition<=0))
					playState = 1;//loading
				else if ((objPlayer.playState==2) && (objPlayer.currentPosition>0))
					playState = 2;//playing
				else if ((objPlayer.playState==0) && (LastPlayState==2)) {
					playState = 3;//finished
				}
			} else {
				playState = -1;
			}
		break;
		case "QuickTime":
			try {
				if (BrowserDetect.browser=="Explorer")
					if (objPlayer.GetRate()==1) {
						playState = 2;
					} else {
						if (LastPlayState!=2)
							playState = 1;
						else
							playState = 3;
					}
				else
					playState = -1;
			} catch (e) {}
		break;
		case "Flash":
			playState = FlashPlayState;
			break;
	}
	
	return playState;
}

function UpdatePlayState() {
	var playerState;
	var cont = false;
	playerState = GetPlayerState();
	if (playerState==-1) //not available
		return;		
	if (playerState==2) //playing
	{
	  SwitchIcon("stop");
	  cont = true
	} else if (playerState==3) {//finished 
		SwitchIcon("play");
		cont = false;
	} else if ((playerState==1) || (playerState==0)) {//loading
		cont = true;
	}
	LastPlayState = playerState;
	if (cont)
		setTimeout("UpdatePlayState()",CHECK_INTERVAL);
	
}
function FlashPlayingAlert(stat) {
	FlashPlayState = stat;
}