//
// Initialization script for Unreal Media Player 6.0
// Compatible with IE, Mozilla, FF, Safari, Chrome, Opera
//

//
// First of all, lets detect the browser, for that we use:
// http://www.quirksmode.org/js/detect.html
// Many thanks to QuirksMode.org!
//
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: "Chrome",
			identity: "Chrome"
		},
		{ string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			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.userAgent,
			subString: "iPhone",
			identity: "iPhone/iPod"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

//
// Create a few precalculated values to quickly check 
//

var isIE = BrowserDetect.browser == "Explorer";
var isSupportedBrowser =
	BrowserDetect.browser == "Explorer" ||
	BrowserDetect.browser == "Firefox" ||
	BrowserDetect.browser == "Netscape" ||
	BrowserDetect.browser == "Mozilla" ||
	BrowserDetect.browser == "Safari" ||
	BrowserDetect.browser == "Opera" ||
	BrowserDetect.browser == "Chrome";
var isSupportedOS =
	BrowserDetect.OS == "Windows";

var players = new Array();

function EventHandler()
{
    // Default event handlers - can be overridden
	this.OnResize = function OnResize(width, height) { }
	this.OnStart = function OnStart() { }
	this.OnPause = function OnPause(state) { }
	this.OnStop = function OnStop(toBeContinued) { }
	this.OnError = function OnError(errorType, errorID) { }
}

function PlayerObject(id)
{
    this.object = null;
    this.id = id;
    this.eventHandler = new EventHandler();

	this.getId = function getId()
	{
		return this.id;
	}

	this.getDivId = function getDivId()
	{
		return "div" + this.id;
	}

	this.createPlayer = function createPlayer(width, height) {
		var divTag = document.getElementById(this.getDivId());
		if (divTag == null) {
			document.write("<div id=\"" + this.getDivId() + "\"></div>");
			divTag = document.getElementById(this.getDivId());
		}

		var objectHTML = "";
		if (isSupportedOS && isSupportedBrowser) {
			if (isIE) {
				objectHTML = "<obj" + "ect id=\"" + this.getId() + "\" width=\"" + width + "\" height=\"" + height + "\" ";
				objectHTML += " classid=\"clsid:200C064B-066D-4d6f-93E8-044231273490\" ";
				objectHTML += " codebase=\"http://www.umediaserver.net/bin/UMediaControl6.cab#version=6,0,0,150\"> ";
				objectHTML += " </obj" + "ect>";
			}
			else {
				objectHTML = "<emb" + "ed id=\"" + this.getId() + "\" pluginspage=\"http://umediaserver.net/umediaserver/BrowsersPlugin.html\" width=\"" + width + "\" height=\"" + height + "\" "
				objectHTML += " type=\"application/x-umediaplayer6\" /> ";
			}
		}
		else {
			objectHTML += "<h1>Sorry, UMediaPlayer 6.0 runs only on Windows in the following browsers: IE, FF, Mozilla, " +
				"Safari, Chrome, Opera. You use " + BrowserDetect.browser + " on " + BrowserDetect.OS + "</h1>";
		}

		divTag.innerHTML = objectHTML;
		this.object = isIE ? document.getElementById(this.getId()) : document.embeds[this.getId()];
	}

	this.testObject = function testObject() {
		try {
			if (isIE) {
				var test = this.object.MediaName;
				return (test != null);
			}

			this.object.Ping();
			return true;
		}
		catch (e) {
			var divTag = document.getElementById(this.getDivId());
			divTag.innerHTML = "<h3>This web page needs Unreal Media Player plugin.<br><br><a href=\"http://umediaserver.net/umediaserver/BrowsersPlugin.html\">Click here to download and install the Unreal Media Player plugin.</a><br>Reopen your browser after the installation.</h3>";
		}
		return false;
	}

	this.attachEvents = function attachEvents() {
		if (isIE) {
			this.object.attachEvent("onresize", this.eventHandler.OnResize);
			this.object.attachEvent("onstart", this.eventHandler.OnStart);
			this.object.attachEvent("onpause", this.eventHandler.OnPause);
			this.object.attachEvent("onstop", this.eventHandler.OnStop);
			this.object.attachEvent("onerror", this.eventHandler.OnError);
		}
	}

	this.initPlayer = function initPlayer() {
		if (this.testObject()) {
			this.attachEvents();
		}
		players[this.getId()] = this;
	}
}


