var allChecksOk = true;
var brw = window.navigator;
var Player = null;

var G_needToCheckPlayer = true;

var isDOM, isOpera, isOpera6, isOpera7, isMSIE, isMSIE5, isNetscape4, isMozilla, playerChecking = true;
var debugDiv;
var gotRealLicense = false;
var openState8 = false;
var openState12Amount = 0;
var checkText;
var lastOpenState = 0;

function OpenStates()
{
	this.Undefined = 0;
	this.PlaylistChanging = 1;
	this.PlaylistLocating = 2;
	this.PlaylistConnecting = 4;
	this.PlaylistLoading = 5;
	this.PlaylistOpenNoMedia = 6;
	this.PlaylistChanged = 7;
	this.MediaChanging = 8;
	this.MediaLocating = 9;
	this.MediaConnecting = 10;
	this.MediaLoading = 11;
	this.MediaOpening = 12;
	this.MediaOpen = 13;
	this.BeginCodecAcquisition = 14;
	this.EndCodedAcquisition = 15;
	this.BeginLicenseAcquisition = 16;
	this.EndLicenseAcquisition = 17;
	this.BeginIndividualization = 18;
	this.EndIndividualization = 19;
	this.MediaWaiting = 20;
	this.OpeningUnknownURL = 21;
}

function PlayStates()
{
	this.Undefined = 0;
	this.Stopped = 1;
	this.Paused = 2;
	this.Playing = 3;
	this.ScanForward = 4;
	this.ScanReverse = 5;
	this.Buffering = 6;
	this.Waiting = 7;
	this.MediaEnded = 8;
	this.Transitioning = 9;
	this.Ready = 10;
	this.Reconnecting = 11;
}

var playStates = new PlayStates();
var openStates = new OpenStates();


function showDebugMessage(msg)
{
/*
	if( debugDiv )
	{
		debugDiv.innerHTML += "<div>debug:" + msg + "</div>";
	}
*/
}

function initVars()
{
	isDOM = document.getElementById //DOM1 browser (MSIE 5+, Netscape 6, Opera 5+)
	isOpera = isOpera5 = window.opera && isDOM //Opera 5+
	isOpera6 = isOpera && window.print //Opera 6+
	isOpera7 = isOpera && document.readyState //Opera 7+
	isMSIE = document.all && document.all.item && !isOpera //Microsoft Internet Explorer 4+
	isMSIE5 = isDOM && isMSIE //MSIE 5+
	isNetscape4 = document.layers //Netscape 4.*
	isMozilla = isDOM && navigator.appName=="Netscape" //Mozilla или Netscape 6.*
	debugDiv = document.getElementById("debuginfo");
	checkText = document.getElementById("checktext");
}

function checkBrowser()
{
	var bVersionOK = false;
	if( isMSIE5 ) {
		var MSIEindx = brw.userAgent.indexOf("MSIE"); 
		var version =  MSIEindx == -1 ? "0.0" : brw.userAgent.substring(MSIEindx + 5, MSIEindx + 8);
		var intVersion = 0;
		try {
			var intVersion = new Number(version);
			if( intVersion > 5.5 ) {
				bVersionOK = true;
			}
		} catch(e) {
		}
	}
   
	if( bVersionOK ) {
		SetCheckOk("browser");
	} else {
		allChecksOk = false;
	}
}

function checkPlatform()
{
	if( brw.platform.toUpperCase() == "WIN32" ) {
		SetCheckOk("os");
	} else {
		allChecksOk = false;
	}
}

function checkCookies()
{
	if( brw.cookieEnabled ) {
		SetCheckOk("cookies");
	} else {
		allChecksOk = false;
	}
}

function checkMPVersion()
{
	Player = document.getElementById("MediaPlayer");
	
	if( !Player || !Player.versionInfo ) 
	{
		allChecksOk = false;
	}
	else
	{
		var numbers = Player.versionInfo.split(".");
		var vers = new Number(numbers[0]);
		if( vers < 9 ) 
		{
			allChecksOk = false;
		}
		else 
		{
			SetCheckOk("mp");
			if( allChecksOk )
			{
				//-- debug
				//setPassedOk();
				playerChecking = true;
				Player.URL = playListUrl;
				//alert(Player.URL);
				Player.controls.play();
				//-- debug
			}
		}
	}
}

function performTest() {
	window.resizeTo(windowWidth, windowSmallHeight);
	try {
		initVars();
	}
	catch (e) {
	}
	// first test the browser version
	checkBrowser();
	// check operating system
	checkPlatform();
	// check cookies enabled
	checkCookies();
	// scripting should be On to access this page
	SetCheckOk("script");
	// now try to check media player
	checkMPVersion();
	if( !allChecksOk ) 
	{
		setHidden("CheckingDiv");
		setVisible("error");
		setVisible("results");
	}

}

function SetCheckOk(checkname) {

	var img = document.getElementById( checkname + "checkimg" );
	var msg = document.getElementById( checkname + "checkmsg" );
	if( img ) {
		img.src = passimg;
		img.alt = "Test passed";
	}
	if( msg ) {
		msg.style.visibility = "hidden";
	}
}
function setVisible(id) {
	try {
		var obj = document.getElementById(id);
		if( obj ) {
			obj.style.display = "block";
			obj.style.visibility = "visible";
		}
	}
	catch (e) {
//		alert(e.message);
	}
}
function setHidden(id) {
	try {
		var obj = document.getElementById(id);
		if( obj ) {
			obj.style.display = "none";
		}
	}
	catch (e) {
//		alert(e.message);
	}
}

function showObject() {
	document.write("<div style=\"height: 1px; width: 1px; visibility: hidden;\">");
	document.write("<OBJECT ID=\"MediaPlayer\" width=\"1\" height=\"1\" ");
	document.write(" CLASSID=\"CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6\" VIEWASTEXT>");
	document.write("<PARAM NAME=\"AutoStart\" VALUE=\"false\">");
	document.write("<PARAM NAME=\"uiMode\" VALUE=\"none\">");
	document.write("</OBJECT>");
	document.write("</div>");
}


//Init Variables
stateLog = new Array();
stateLog[0] = "Checking your PC for latest version of Windows Media...";
stateLog[14] = "Starting codec acquisition....";
stateLog[15] = "Codec acquisition is complete....";
stateLog[16] = "Beginning License Acquisition...";
stateLog[17] = "License Acquisition Success...";
stateLog[18] = "Beginning Security Component Upgrade...";
stateLog[19] = "Security Component Upgrade Success...";
stateLog[22] = "Errors found. Security Update Aborted....";

var bPassed;
var bDebug;
var bgotWM8;

bPassed = false;			
bDebug = false;
bgotWM8 = false;

function setPassedOk()
{
	Player.controls.stop();
	SetCheckOk("id");
	setCookie("indiState", "Success", expDate());
	setVisible("continuediv");
	setVisible("status");
	setHidden("CheckingDiv");
	setVisible("results");
}

function setTestFailed()
{
	setVisible("error");
	setHidden("CheckingDiv");
	setVisible("results");
}

var licenseBegan = false;
function showState(x) 
{
	if(playerChecking)
	{
		try
		{
			if( !bPassed ) 
			{
				var tmp = stateLog[x];
				if( !tmp )
					tmp = stateLog[0];
				if( checkText )
					checkText.innerHTML = tmp;
			}
		} 
		catch(e) 
		{
//			alert('exception:' + e.message);
		}
	}
}

function ev_playStateChange(newState) 
{
	showDebugMessage("ev_playStateChange:PlayState: " + newState);

	if( newState == playStates.MediaEnded )
		bgotWM8 = true;
	else if( newState == playStates.Ready && bgotWM8 )
	{
		if( gotRealLicense )
			setPassedOk( );
		else
			setTestFailed( );

	}
}

function ev_openStateChange(newState) 
{
	showDebugMessage("ev_openStateChange:OpenState: " + newState);
	showState(newState);

	if
	( 
		lastOpenState == openStates.BeginLicenseAcquisition &&
		newState != openStates.EndLicenseAcquisition )
	{
		ev_error( );
		setTestFailed( );
	}

	if( newState == openStates.EndLicenseAcquisition && !gotRealLicense )
		gotRealLicense = true;

	lastOpenState = newState;
}

function ev_error() 
{
	try
	{
		var error = Player.error;
		var errorItem;
		var index;	//index into the error queue.
		var tmp = "";

		for(index = 0; index < error.errorCount; index++) 
		{
			errorItem = error.item(index);
			tmp += "Error:" + errorItem.errorDescription + "\n";
		}
		error.clearErrorQueue();	//clear the errors.

		//Lets just die here if we have errors.  How to report them is TBD.
		Player.controls.stop();
		Player.close();
		bPassed = false;
		showState(22);
	}
	catch(e)
	{
	}
}

