/*

Copyright 2008 Tor-Einar Jarnbjo

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

*/
   
var OMTK_C = {};

function OMTK_C_init() {
	OMTK_C.java = null;
	OMTK_C.flash = null;
	OMTK_C.isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
	OMTK_C.isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
	OMTK_C.isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
}


function OMTK_C_detect(preferred) {

	if(preferred == "java") {
		OMTK_C_detectFlash();
		if(OMTK_C.flashCompatible) {
			return "flash";	
		}
		OMTK_C_detectJava();
		if(OMTK_C.javaCompatible) {
			return "java";	
		}
	}
	else {
		OMTK_C_detectJava();
		if(OMTK_C.javaCompatible) {
			return "java";	
		}
		OMTK_C_detectFlash();
		if(OMTK_C.flashCompatible) {
			return "flash";	
		}		
	}
		
	return null;
}

function OMTK_C_detectJava() {

	if(!navigator.javaEnabled()) {
		return;
	}

	document.write("<applet id='omtk_capp' code='org.omtk.js.VersionApplet' archive='omtkc.jar' style='width: 1px; height: 1px;'></applet>");

	var app = document.getElementById('omtk_capp');

	OMTK_C.javaCompatible = false;

	if(app != null) {
		
		// workaround, in case tha applet needs some time to initialize
		var initialized = false;
		while(!initialized) {
			try {
				initialized = app.isInitialized();
			}
			catch(e) {
			}
		}
		
		var majv = app.getMajorVersion();
		var minv = app.getMinorVersion();
		var vstr = app.getVersionString();
		var comp = app.isCompatible();
		OMTK_C.java = {majorVersion: majv, minorVersion: minv, versionString: vstr};
		OMTK_C.javaCompatible = comp;
	}

	return OMTK_C.javaCompatible;
}

function OMTK_C_detectFlash() {

	OMTK_C.flashCompatible = false;

	var version = OMTK_C_getSwfVer();
	var installed = version != null && version != '-1';
	
	if(installed) {
		
		var varr = OMTK_C_splitFlashVersion(version);
		var comp = varr[0] >= 10;
		var vstr = "";
		
		if(version.split(" ")[0] == "WIN") {
			vstr = varr[0] + "." + varr[1] + "." + varr[2];
		}
		else {
			vstr = version;	
		}

		OMTK_C.flash = {majorVersion: varr[0], minorVersion: varr[1], revision: varr[2], versionString: vstr};
		OMTK_C.flashCompatible = comp;
	}

	return OMTK_C.flashComatible = comp;
}

// private
function OMTK_C_getSwfVer() {
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;			
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			if ( descArray[3] != "" ) {
				tempArrayMinor = descArray[3].split("r");
			} else {
				tempArrayMinor = descArray[4].split("r");
			}
			var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( OMTK_C.isIE && OMTK_C.isWin && !OMTK_C.isOpera ) {
		flashVer = OMTK_C_controlVersion();
	}	
	return flashVer;
}

//private
function OMTK_C_controlVersion() {
	
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version) {
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version) {
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version) {
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version) {
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}


// private
function OMTK_C_splitFlashVersion(version) {

	if (version == -1 ) {
		return false;
	} else if (version != 0) {
		if(OMTK_C.isIE && OMTK_C.isWin && !OMTK_C.isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = version.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = version.split(".");
		}
		return versionArray;
	}
}

