// Constructor
function MediaPlayerClass(objId, objName, objHeight, objWidth){
	this.objId = objId;
	this.objName = objName;
	this.objHeight = objHeight;
	this.objWidth = objWidth;
	
	// general function
	this.getPlayerObj = getPlayerObj;
	this.isPlayerInstall = isPlayerInstall;
	
	// functions for showing the script
	this.showPlayerScript = showPlayerScript;
	this.getPlayerScript = getPlayerScript;
	this.showScriptCommandHandler = showScriptCommandHandler;
	
	// functions for playback control
	this.playerStart = playerStart;
	this.playerPause = playerPause;
	this.playerStop = playerStop;
	this.changeCurrentPosition = changeCurrentPosition;
	
	// functions for player settings
	this.setUrl = setUrl;
	this.setUIModeInvisible = setUIModeInvisible;
	this.setUIModeNone = setUIModeNone;
	this.setUIModeMini = setUIModeMini;
	this.setUIModeFull = setUIModeFull;
	this.setSoundDisable = setSoundDisable;
	this.setSoundRevise = setSoundRevise;
	this.setInvokeURLs = setInvokeURLs;
	this.setAutoStart = setAutoStart;
	
	// function packaging (e.g. group of functions)
	this.initPlayerForFunctionSync = initPlayerForFunctionSync;
}

function getPlayerObj(){
	return document.getElementById(this.objId);
}

function isPlayerInstall(){
	var playerString = "";
	if (navigator.userAgent.indexOf("MSIE")<0 || mUserAgent.indexOf("Win") != -1 ) {
		numPlugins = navigator.plugins.length; 
		for (i= 0; i<numPlugins; i++){
			currentPlugin = navigator.plugins[i];			
			if (currentPlugin.name.substring(0,20)=="Windows Media Player"){
				playerString+="WMP"+","
			}
		}
	}
	if (playerString != "")
		return true;
	else
		return false;
}

// player control

function playerStart(){
	this.getPlayerObj().controls.play();
}

function playerPause(){
	this.getPlayerObj().controls.pause();
}

function playerStop(){
	this.getPlayerObj().controls.stop();
}

function changeCurrentPosition(pos){
	this.getPlayerObj().controls.currentPosition = pos;
}

// player settings

function setUrl(url){
	this.getPlayerObj().url = url;
}

function setUIModeInvisible(){
	this.getPlayerObj().uiMode = "invisible";
}

function setUIModeNone(){
	this.getPlayerObj().uiMode = "none";
}

function setUIModeMini(){
	this.getPlayerObj().uiMode = "mini";
}

function setUIModeFull(){
	this.getPlayerObj().uiMode = "full";
}

function setSoundDisable(isDisable){
	this.getPlayerObj().settings.mute = isDisable;
}

function setSoundRevise(){
	var resultSound = !this.getPlayerObj().settings.mute;
	this.getPlayerObj().settings.mute = resultSound;
	return resultSound;
}

function setInvokeURLs(isInvoke){
	this.getPlayerObj().settings.invokeURLs = isInvoke;
}

function setAutoStart(autoStart){
	this.getPlayerObj().settings.autoStart = autoStart;
}

function initPlayerForFunctionSync(){
	this.setAutoStart(false);
	this.setInvokeURLs(false);
}

function showPlayerScript(){
	var scriptText;
	
	scriptText = "";
	scriptText += "<object id='" + this.objId + "' name='" + this.objName + "' height='" + this.objHeight + "' width='" + this.objWidth + "' classid='CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6'>";
	scriptText += "</object>";
	
	document.write(scriptText);
}

function getPlayerScript(){
	var scriptText;
	
	scriptText = "";
	scriptText += "<object id='" + this.objId + "' name='" + this.objName + "' height='" + this.objHeight + "' width='" + this.objWidth + "' classid='CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6'>";
	scriptText += "</object>";
	
	return scriptText;
}

function showScriptCommandHandler(handlerFunctionName){
	// The handler Function should have the same signature of the Event
	var eventHandlerArg = "(sType, sParam)";
	showEventHandlerScript(this.objId, "ScriptCommand" + eventHandlerArg, handlerFunctionName + eventHandlerArg);
}


// external function (not include in the class

function showEventHandlerScript(playerId, eventSignature, handlerFunction){
	var scriptText;
	
	scriptText = "";
	scriptText += "<script for='" + playerId + "' event='" + eventSignature + "' language='javascript'>";
	scriptText += handlerFunction + ";";
	scriptText += "</script>";
	
	document.write(scriptText);
}

function isWindowsPlatform(){
	return navigator.userAgent.toLowerCase().indexOf("win") != -1;
}
function isMSBrowser(){
	return navigator.userAgent.toLowerCase().indexOf("msie") != -1;
}
function getWMPVersion(){
	try{
		if (isMSBrowser()){
			// for I.E. only
			if (window.ActiveXObject){
				player = new ActiveXObject("WMPlayer.OCX.7");
				if (player){
					// player 7, 9 or 10
					return player.versionInfo;
				}
				else{
					return "0";
				}
			}
		}
		else {
			// for browser other than I.E (e.g. Firefox)
			if (window.GeckoActiveXObject){
				player = new GeckoActiveXObject("WMPlayer.OCX.7");
				if (player){
					// player 7, 9 or 10
					return player.versionInfo;
				}
				else{
					return "0";
				}
			}
		}
	}
	catch(e){
		// no player 7,9 nor 10
		return "0";
	}				
}
function isWMP7OrHigher(){
	if (getWMPVersion() != "0"){
		return true;
	}
	else{
		return false;
	}
}


