/**
 * IMediaPlayer interface
 * abstracts the player from the web page.
 *
 */ 
 
function IMediaPlayer_insertWMP(strMediaUrl, uWidth, uHeight, bInvokeURLs, bAutoStart, bShowStatus, bShowControls)
{
	var strInvokeURLs = bInvokeURLs ? '1' : '0';
	var strAutoStart = bAutoStart ? '1' : '0';
	var strShowStatus = bShowStatus ? '1' : '0';
	var strShowControls = bShowControls ? '1' : '0';
	strMediaUrl = strMediaUrl + '&ext=.asx';
	document.write('  <object id="WCMediaPlayer"');
	document.write('          width="' + uWidth +'"');
	document.write('          height="' + uHeight +'"');
	document.write('          classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"');
	document.write('          codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"');
	document.write('          standby="Henter Microsoft Windows Media Player..."');
	document.write('          type="application/x-oleobject"');
	document.write('          align="middle" VIEWASTEXT>');
	document.write('    <param name="FileName" value="' + strMediaUrl +'">');
	document.write('    <param name="ShowControls" value="' + strShowControls + '">');
	document.write('    <param name="ShowDisplay" value="0">');
	document.write('    <param name="AutoSize" value="0">');
	document.write('    <param name="AutoStart" value="' + strAutoStart + '">');
	document.write('    <param name="VideoBorderWidth" value="0">');
	document.write('    <param name="VideoBorderColor" value="#E0E7CF0">');
	document.write('    <param name="VideoBorder3D" value="1">');
	document.write('    <param name="AnimationatStart" value="false">');
	document.write('    <param name="TransparentatStart" value="1">');
	document.write('    <param name="AutoStart" value="true">');
	document.write('    <param name="ShowStatusBar" value="' + strShowStatus +'">');
	document.write('    <param name="InvokeURLs" VALUE="0">');
	document.write('    <PARAM NAME="DefaultFrame" VALUE="">');

	document.write('    <embed  name="WCMediaPlayer"');
	document.write('			width="' + uWidth +'"');
	document.write('            height="' + uHeight +'"');
	document.write('            align="middle"');
	document.write('            filename="' + strMediaUrl +'"');
	document.write('            showcontrols="' + strShowControls + '" ');
	document.write('            showdisplay="0"');
	document.write('            showstatusbar="' + strShowStatus +'"');
	document.write('            autosize="0"');
	document.write('            autostart="' + strAutoStart + '"');
	document.write('            src="' + strMediaUrl +'"');
	document.write('			InvokeURLs="' + strInvokeURLs + '"');
	document.write('			defaultframe="power">');
	document.write('    </embed>');
	document.write('    </object>');
	document.write('');

}
 
function IMediaPlayer_insertWMP64(strMediaUrl, uWidth, uHeight, 
					bShowControls, bShowTracker, 
					bAutoStart, bAutoSize)
{
					
	var strShowTracker = bShowTracker ? 'true' : 'false';
	var strShowControls = bShowControls ? 'true' : 'false';
	var strAutoStart = bAutoStart ? 'true' : 'false';
	var strAutoSize = bAutoSize ? 'true' : 'false';
	var WMP7;
	strMediaUrl = strMediaUrl + '&ext=.asx';
	
	var agt=navigator.userAgent.toLowerCase();
	var appVer = navigator.appVersion.toLowerCase();
	var is_ie = (agt.indexOf("msie")!=-1);
	var is_win   = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );

	var userAgent = IMediaPlayer_checkBrowser();
	if ( is_win && is_ie ){   
		var v = "";
		if (v != "") {
			WMP7 = true;
		} else {
			// WM 6.4
			WMP7 = false;
		}
	} else {
		WMP7 = false;
	}

	if (userAgent == 'ff') {
		/*
		document.write ('<object id="WCMediaPlayer" data="' + strMediaUrl +'" type="application/x-oleobject" width="320" height="320">');
		document.write ('  <param name="autostart" value="' + strAutoStart + '" />');
		document.write ('  <param name="volume" value="100" />');
		document.write ('  </object>');
		*/
		document.write ('<object id="WCMediaPlayer" data="' + strMediaUrl +'" type="application/x-ms-asf" width="' +uWidth+ '" height="' +uHeight+ '">');
		document.write ('  <param name="autostart" value="' + strAutoStart + '" />');
		document.write ('  <param name="volume" value="100" />');
		document.write ('		<embed type="application/x-ms-asf" name="WCMediaPlayer" src="' +strMediaUrl+ '" autostart="' +strAutoStart+ '" width="' +uWidth+'" height="' +uHeight+ '" volume="100">');
		document.write ('		</embed>');
		document.write ('  </object>');

	}else if ( WMP7 ) {
		// Windows Media Player 7 Code
		document.write ('<OBJECT ID="WCMediaPlayer" ');
		document.write (' CLASSID=CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6');
		document.write (' standby="Loading Microsoft Windows Media Player components..."');
		document.write (' TYPE="video/x-ms-asf-plugin"');
		if (!bAutoSize)
		{
			document.write (' width="' + uWidth + '" height="' + uHeight + '"');
		}
		document.write ('>');
		document.write ('<param name="url" VALUE="'+ strMediaUrl + '">');
		if (bShowControls)
		{
			if (bShowTracker)
			{
				document.write ('<param name="uiMode" VALUE="full">');
			}else{
				document.write ('<param name="uiMode" VALUE="mini">');
			}
		}else{
			document.write ('<param name="uiMode" VALUE="none">');		
		}
		document.write ('<param name="VideoBorder3D" VALUE="false">');				
		document.write ('<param name="VideoBorderWidth" VALUE="false">');
		document.write ('<param name="autoStart" value="true">');	
		document.write ('<param name="AnimationAtStart" value="true">');	
		document.write ('<param name="TransparentAtStart" value="true">');			
		document.write ('<param name="stretchToFit" value="' + strAutoSize + '">');	
		document.write ('</OBJECT>');
	} else {
		// Windows Media Player 6.4 Code
		//IE Code
		document.write ('<OBJECT ID="WCMediaPlayer"');
		document.write (' CLASSID=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95');
		document.write (' CODEBASE=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715');
		document.write (' standby="Loading Microsoft Windows Media Player components..."');
		document.write (' TYPE="video/x-ms-asf-plugin"');
		if (!bAutoSize)
		{
			document.write (' width="' + uWidth + '" height="' + uHeight + '"');
		}
		document.write ('>');
		document.write ('<param name="FileName" VALUE="'+ strMediaUrl + '">');
		document.write ('<param name="ShowControls" VALUE="' + strShowControls + '">');
		document.write ('<param name="ShowTracker" VALUE="' + strShowTracker + '">');						
		document.write ('<param name="ShowStatusBar" VALUE="false">');	
		document.write ('<param name="VideoBorder3D" VALUE="false">');				
		document.write ('<param name="VideoBorderWidth" VALUE="false">');										
		document.write ('<param name="AutoStart" value="' + strAutoStart + '">');	
		document.write ('<param name="AnimationAtStart" value="true">');	
		document.write ('<param name="TransparentAtStart" value="true">');
		document.write ('<param name="AutoSize" value="' + strAutoSize + '">');	

		//Netscape code
		//document.write ('    <embed type="video/x-ms-asf-plugin"');
		document.write ('    <embed type="video/x-ms-asf-plugin"');
		document.write ('        pluginspage="http://www.microsoft.com/windows/windowsmedia/"');
		document.write ('        filename="'+ strMediaUrl + '"');
		document.write ('        src="'+ strMediaUrl + '"');
		document.write ('        Name="WCMediaPlayer"');
		document.write ('        ShowControls="' + (bShowControls ? 1 : 0) + '"');
		document.write ('        ShowTracker="' + (bShowTracker ? 1 : 0) + '"');			
		document.write ('        ShowStatusBar="0"');     
		document.write ('        VideoBorder3D="0"');
		document.write ('        VideoBorderWidth="0"');    
		if (!bAutoSize)
		{
			document.write ('        width="' + uWidth + '"');
			document.write ('        height="' + uHeight + '"');
		}
		document.write ('        AutoStart="' + (bAutoStart ? 1 : 0) + '"'); 
		document.write ('        AnimationAtStart="0"');
		document.write ('        TransparentAtStart="1"');		    
		document.write ('        AutoSize="' + (bAutoSize ? 1 : 0) + '"'); 
		document.write ('    >');	
		document.write ('    </embed>');
		document.write ('</OBJECT>');
	}
}


function IMediaPlayer_getPlayState() {
	var playstate = 0;
	switch ( this.m_browser) {
		case 'ie':
			playstate = this.m_player.PlayState;
		break;
		case 'ff':
			playstate = this.m_player.playState;		
		break;
		default:
			playstate = this.m_player.GetPlayState();
		break;
	}
	return playstate;
}

function IMediaPlayer_getOpenState() {
	return this.m_player.OpenState;
}

function IMediaPlayer_getCanSeek()
{
	var bCanSeek = 0;
	if (this.m_os == 'mac') {
		bCanSeek = false;
	} else {
		switch ( this.m_browser) {
			case 'ie':
				bCanSeek = this.m_player.CanSeek;
			break;
			case 'ff':
				bCanSeek = true;
			break;
			default:
				bCanSeek = this.m_player.GetCanSeek();
			break;
		}
	}
	return bCanSeek;
}

function IMediaPlayer_isOpen() 
{
	var uIsOpen = 0;
	switch ( this.m_browser) {
		case 'ie':
			uIsOpen = this.m_player.OpenState;
		break;
		case 'ff':
			uIsOpen = this.m_player.openState;
			return (uIsOpen == 13 ? true : false);			
		break;
		default:
			uIsOpen = this.m_player.GetOpenState();
		break;
	}
	return (uIsOpen == 6 ? true : false);
}

function IMediaPlayer_getBufferingProgress() {
	return this.m_player.BufferingProgress;
}

 
function IMediaPlayer_getBandwidth() {
	return this.m_player.Bandwidth;
}

function IMediaPlayer_setVolume(dVolume) {
	if (dVolume > 1.0) dVolume = 1.0;
	else if (dVolume < 0) dVolume = 0.0;
	
	if (this.getPlayState()== 2) {
		if (this.m_player) {
			this.m_player.volume = (dVolume*4000) - 4000;
		}
	}
}

function IMediaPlayer_Pause() {
	switch ( this.m_version) {
		case 6:
			this.m_player.Pause();
		break;
		case 9:
			this.m_player.controls.Pause();
		break;
		default:
		break;
	}
}

function IMediaPlayer_Stop() {
	switch ( this.m_version) {
		case 6:
			this.m_player.Stop();
		break;
		case 9:
			this.m_player.controls.Stop();	
		break;
		default:
		break;
	}
}

function IMediaPlayer_TogglePlay() {
	var playstate = this.getPlayState();
	switch (playstate)
	{
		case 2:	// Playing
			this.Pause();
			break;
		default:
			this.Play();
			break;
	}
}

function IMediaPlayer_Play() {
	switch ( this.m_version) {
		case 6:
			this.m_player.Play();
		break;
		case 9:
			this.setVisible(true);
			this.m_player.controls.Play();
		break;
		default:
		break;
	}
}

function IMediaPlayer_setFullScreen(bEnable)
{
	if (bEnable) {
		this.m_player.DisplaySize = 3;
	}else{
		this.m_player.DisplaySize = 0;	
	}
}

function IMediaPlayer_setAutoStart(bEnable)
{
	switch ( this.m_version) {
		case 6:
			this.m_player.AutoStart = bEnable;
		break;
		case 9:

		break;
		default:
		break;
	}

}


function IMediaPlayer_setVisible(bVisible)
{
	var strMode = "none";
	if (bVisible == false) strMode = "invisible";
	this.m_player.uiMode = strMode;
}


function IMediaPlayer_getCurrentPosition()
{
	var pos;
	if ( this.m_os == 'mac') {
		switch (this.m_browser) {
			case 'sa':
			pos = this.m_player.GetTime()/1000.0;
			break;
			default:
			break;
		}
	} else {
		switch ( this.m_version) {
			case 6:	
			switch ( this.m_browser) {
				case 'ie':
				case 'ns':
				pos = this.m_player.CurrentPosition;
				break;
				case 'ff':
				pos = this.m_player.controls.currentPosition;
				break;
				default:
				pos = this.m_player.GetCurrentPosition();
				break;
			}
			break;
			
			case 9:
			switch ( this.m_browser) {
				case 'ie':
				pos = this.m_player.controls.CurrentPosition;
				break;
				default:
				pos = this.m_player.controls.GetCurrentPosition();
				break;
			}		
			break;
		}
	}

	
	return pos;
}


function IMediaPlayer_setURL(strURL)
{
	switch (this.m_version) {
		case 6:
			this.m_player.Filename = strURL;
		break;
		case 6:
			this.m_player.URL = strURL;
		break;
		default:
			break;
	}
}

/**
 * setCurrentPosition
 * 
 * 
 * 
 *
 * @param pos		Floating point number in seconds.
 * @return			true if seek was successful
 *					false is operation was not available
 */
function IMediaPlayer_setCurrentPosition(pos) {
	if (this.getCanSeek())
	{
		if (this.isOpen() )
		{
			switch(this.m_browser)
			{
				case 'ie':
				switch (this.m_version) {
					case 6:
						this.m_player.CurrentPosition = pos;
						break;
					case 9:
						this.m_player.controls.CurrentPosition = pos;
						break;
					default:
						break;
				}
				break;
				case 'ff':
					this.m_player.controls.currentPosition = pos;
					break;				
				break;
				default:
				// Opera and netscape 4.7
				switch (this.m_version) {
					case 6:
						this.m_player.SetCurrentPosition(pos);
						break;
					case 9:
						this.m_player.controls.SetCurrentPosition(pos);
						break;
					default:
						break;
				}
				break;
			}
		}
	}else{
		return false;
	}
}

// We can't name a function getDuration. Maybe it conflicts with the activex object (?)
function IMediaPlayer_getMediaDuration()
{
	var duration = -1;
	switch (this.m_version) {
		case 6:
			switch ( this.m_browser) {
				case 'ie':
					duration = this.m_player.Duration;
					break;
				case 'ff':
					duration = this.m_player.currentMedia.duration;
					break;
				default:
					duration = this.m_player.GetDuration();
					break;
			}
			break;
		case 9:
			duration = this.m_player.currentMedia.duration;
			break;
		default:
			duration = -2;
			break;
	}
	return duration;
}

function IMediaPlayer_IterateInterval()
{
	if (IMediaPlayer_obj.OnProgress != null)
	{
		var pos = IMediaPlayer_obj.getCurrentPosition();
		IMediaPlayer_obj.OnProgress(pos);
	}
}

function IMediaPlayer_checkBrowser()
{
	var browser = '';
	var agt = navigator.userAgent.toLowerCase();
	if (agt.indexOf('msie') != -1) {
		browser = 'ie';
	}else if (agt.indexOf('firefox') != -1) {
		browser = 'ff';
	}else if (agt.indexOf('safari') != -1) {
		browser = 'sa';
	}else if (agt.indexOf('mozilla') != -1) {
		browser = 'ns';
	}else if (agt.indexOf('opera') != -1) {
		browser = 'op';
	}
	return browser;
}

function IMediaPlayer_checkOS()
{
	// DETECT OS
	var os = 'win';
	var agt = navigator.userAgent.toLowerCase();
	if (agt.indexOf('mac') != -1) os = 'mac';	
	return os;
}


function IMediaPlayer(oPlayer)
{
	this.m_player = oPlayer;
	this.m_version = 6;
	
	this.m_browser = IMediaPlayer_checkBrowser();
	this.m_os = IMediaPlayer_checkOS();

	// map functions
	this.Play = IMediaPlayer_Play;
	this.TogglePlay = IMediaPlayer_TogglePlay;
	this.Pause = IMediaPlayer_Pause;
	this.Stop = IMediaPlayer_Stop;
	this.getCurrentPosition = IMediaPlayer_getCurrentPosition;
	this.setCurrentPosition = IMediaPlayer_setCurrentPosition;
	this.getMediaDuration = IMediaPlayer_getMediaDuration;
	this.setURL = IMediaPlayer_setURL;
	this.setVisible = IMediaPlayer_setVisible;
	this.isOpen = IMediaPlayer_isOpen;
	this.setAutoStart = IMediaPlayer_setAutoStart;
	this.getPlayState = IMediaPlayer_getPlayState;
	this.getOpenState = IMediaPlayer_getOpenState;
	this.getCanSeek = IMediaPlayer_getCanSeek;

	this.getBufferingProgress = IMediaPlayer_getBufferingProgress;
	this.setVolume = IMediaPlayer_setVolume;
	this.getBandwidth = IMediaPlayer_getBandwidth;
	
	this.setFullScreen = IMediaPlayer_setFullScreen;
	this.IterateInterval = IMediaPlayer_IterateInterval;
		
	this.OnProgress = null;

	this.m_IterateIntervalID = setInterval(IMediaPlayer_IterateInterval, 500);
	IMediaPlayer_obj = this;
	
	// "Virtual" functions:
	// this.OnProgress 
	
}





var g_uWaitForVideoInterval=500;
var g_strCallFunc;
var g_WaitID;

// Wait for video and initialize variables.
function doIterateWaitForVideo() {
	if (WCMediaPlayer) {
		clearInterval(g_WaitID);
		eval(g_strCallFunc);
	}
}
		
function WaitForVideoToStart(strFunc) {
	g_strCallFunc = strFunc;
	g_WaitID = setInterval("doIterateWaitForVideo()", g_uWaitForVideoInterval);
}	


