// setup plugin information


navigator.plugins.refresh(false);
sm_plugin_debug = false;
sm_pluginVersion = new Array();
sm_pluginVersion['flash'] = 0;
sm_pluginVersion['shockwave'] = 0;
sm_pluginVersion['quicktime'] = 0;
sm_pluginVersion['flipmac'] = 0;
sm_pluginVersion['windowsmedia'] = 0;
sm_pluginVersion['adobereader'] = 0;
sm_pluginVersion['pdfbrowser'] = 0;
sm_pluginVersion["java_runtime"] = 0;

//call this straight away, as it seems the VB script needs to be written ASAP
sm_gatherWinPluginInfo();
function sm_gatherWinPluginInfo(){
	// check PC IE way
			
	// check PC IE way
	document.write('<SCRIPT LANGUAGE=VBScript\> \n');
	document.write('on error resume next \n');

	// check for shockwave version
	document.write('sm_success = false \n');
	document.write('sm_success = (IsObject(CreateObject("SWCtl.SWCtl")))\n');
	document.write('sm_swVersion = (CreateObject("SWCtl.SWCtl")).ShockwaveVersion("")\n');
	document.write('If sm_success Then \n sm_pluginVersion.shockwave = sm_swVersion \n  End If\n');
	
	// check for flash version
	document.write('sm_TestVersions = Array("3","4","5","6","7","8",9,10) \n');
	document.write('For Each sm_Version in sm_TestVersions \n');
	document.write('sm_success = false \n');
	document.write('sm_success = (IsObject(CreateObject("ShockWaveFlash.ShockWaveFlash."&sm_Version)))\n');
	document.write('If sm_success Then \n sm_pluginVersion.flash = sm_Version \n End If\n');
	document.write('Next \n');
	
	// check for quicktime version
    document.write('    detectQuickTimeActiveXControl = False \n');
    document.write('    hasQuickTimeChecker = false \n');
    document.write('    Set hasQuickTimeChecker = CreateObject("QuickTimeCheckObject.QuickTimeCheck.1") \n');
    document.write('    If IsObject(hasQuickTimeChecker) Then \n');
    document.write('      If hasQuickTimeChecker.IsQuickTimeAvailable(0) Then  \n');
    document.write('        sm_pluginVersion.quicktime = hasQuickTimeChecker.QuickTimeVersion \n');
    document.write('      End If \n');
    document.write('    End If \n');

	// check for pdf viewer version
    document.write('    detectAdobePDFActiveXControl = False \n');
    document.write('    hasAdobePDFChecker = false \n');
    document.write('    Set hasAdobePDFChecker = CreateObject("AcroPDF.PDF") \n');
    document.write('    If IsObject(hasAdobePDFChecker) Then \n');
	document.write('		sm_TestVersions = Array("3","4","5","6","7","8","9") \n');
    document.write('        versions = hasAdobePDFChecker.GetVersions() \n');
	document.write('		For Each sm_Version in sm_TestVersions \n');
    document.write('        	If (InStr(versions,"=" & sm_Version) > 0) Then \n');
    document.write('        		sm_pluginVersion.adobereader = sm_Version \n');
    document.write('        	End If \n');
    document.write('        Next \n');
    document.write('    End If \n');

	//check for Java plug in version
	document.write('	If Not(IsObject(CreateObject("JavaWebStart.isInstalled"))) Then \n');
	document.write('		sm_pluginVersion.java_runtime = "0" \n');
	document.write('	End If \n');
	document.write('	If (IsObject(CreateObject("JavaWebStart.isInstalled.1.4.2.0"))) Then \n ');
	document.write('		sm_pluginVersion.java_runtime = "1.4.2.0" \n');
	document.write('	End If \n');
	document.write('	If (IsObject(CreateObject("JavaWebStart.isInstalled.1.5.0.0"))) Then \n');
	document.write('		sm_pluginVersion.java_runtime = "1.5.0.0" \n');
	document.write('	End If \n');
	document.write('	If (IsObject(CreateObject("JavaWebStart.isInstalled.1.6.0.0"))) Then \n');
	document.write('		sm_pluginVersion.java_runtime = "1.6.0.0" \n');
	document.write('	End If \n');
	
	
	
	document.write('</SCR'+'IPT\> \n');
}
//call this later, once the user.whatever information has been generated
function sm_gatherPluginInfo(){
	
	// check standard way
	if (navigator.plugins){
		for (var i=0; i<navigator.plugins.length; i++){
			var name = navigator.plugins[i].name
			var desc = navigator.plugins[i].description
			//flash
			if (desc.indexOf("Flash")!=-1){
				sm_pluginVersion['flash'] = desc.substring(desc.indexOf("Shockwave Flash ")+16, desc.length)	
			//shockwave
			} else if (desc.indexOf("Director")!=-1){
				sm_pluginVersion['shockwave'] = trim(desc.substring(desc.indexOf(".")-2, desc.length))
			//quicktime
			} else if (name.indexOf("QuickTime")!=-1){
				//bug fix - sometimes, different versions of quicktime plugins appear within the plugins array only take the highest
				var newVersion = trim(name.substring(name.lastIndexOf(' '),name.length));
					
				if(versionOK(sm_pluginVersion['quicktime'], newVersion)){
					sm_pluginVersion['quicktime'] = newVersion;
				}
			//flip4mac
			} else if (name.indexOf("Flip4Mac")!=-1){
				sm_pluginVersion['flipmac'] = trim(name.substring(name.lastIndexOf(' '),name.length));
			//adobe reader	
			} else if (name.indexOf("Adobe")!=-1 && (name.indexOf("Reader")!=-1 || name.indexOf("Acrobat")!=-1 )){
				
				switch(sm_user.os) {
					case "win" :
						switch(sm_user.browser) {
							case "firefox" :
							case "netscape" :
								sm_pluginVersion["adobereader"] = 1;
							break;
						}
					break;	
					case "mac" :
							case "safari":		
								sm_pluginVersion['adobereader'] = trim(desc.substring(desc.lastIndexOf(' '),desc.length));			
							break;
					break;
				}
			//pdf browser for mac firefox - adobe reader is unsupported
			} else if(name.indexOf("PDF Browser")!=-1 && sm_user.os == "mac" && sm_user.browser == "firefox") {
				
				sm_pluginVersion['pdfbrowser'] = trim(name.substring(name.lastIndexOf(' '),name.length))
				
			//java runtime
			} else if (name.indexOf("Java")!=-1) {
				
				switch(sm_user.os) {
					case "win" :
						switch(sm_user.browser) {
							case "firefox" :
								sm_pluginVersion["java_runtime"] = trim(desc.substr(desc.indexOf('Java Plug-in ')+13,3));
							break;
						}
					break;
					case "mac" :
							sm_pluginVersion["java_runtime"] = trim(desc.substring(desc.indexOf(' '),desc.length).substring(0,desc.indexOf(' ')+2));
					break;
				}
				
			}
		}
	} else {
		
	}
	//for ie & navigator.plugins browsers
	detectWindowsMedia();
	
}

//for windows media player
function detectWindowsMedia()
{
	var wmp64 = "MediaPlayer.MediaPlayer.1";
	var wmp7 = "WMPlayer.OCX.7";
	
	if(sm_user.browser == "msie") {
		var player = new ActiveXObject(wmp7)
		if(player) 	{
			sm_pluginVersion['windowsmedia'] = player.versionInfo;
		} else {
			var player = new ActiveXObject(wmp64)
			if(player) {
				sm_pluginVersion['windowsmedia'] = "6.4";
			} else {
				sm_pluginVersion['windowsmedia'] = 0;
			}
		}
	} else if(navigator.mimeTypes) {
		var player = navigator.mimeTypes['application/x-mplayer2'].enabledPlugin;
		if(player){	
			sm_pluginVersion['windowsmedia'] = 1;
		}
	}
}
	

function sm_checkPlugins(details){
	// split details into parts
	var dArray = details.split(';')
	
	// trim values
	for (var i=0; i<dArray.length; i++){
		dArray[i] = trim(dArray[i])
	}
	
	// create array for details
	var commands = new Array();
	for (var i=0; i<dArray.length; i++){
		var tempArray = dArray[i].split('=')
		var key = (trim(tempArray[0])).toLowerCase()
		var value = (trim(tempArray[1])).toLowerCase()
		if (key=='require'){
			var pluginArray = value.split(',')
			var requireValue = new Array()
			for (var j=0; j<pluginArray.length; j++){
				var pluginData = new Array()
				var dataArray = (trim(pluginArray[j])).split(':')	
				pluginData['plugin'] = (trim(dataArray[0])).toLowerCase()
				pluginData['version'] = trim(dataArray[1])
				requireValue[requireValue.length] = pluginData
			}
			value = requireValue
		}
		commands[key] = value
	}
	
	// check for all valid syntax
	if (commands.failpage+''!='undefined' && commands.successpage+''!='undefined' && commands.require+''!='undefined'){
		var requireInfo = ""
		for (var i=0; i<commands.require.length; i++){
			requireInfo += commands.require[i].plugin+" version "+commands.require[i].version+"\n"
		}
		if (sm_plugin_debug) alert('Requires:\n' +requireInfo+ '\nSuccessPage:\n' +commands.successpage+ '\n\nFailPage:\n' +commands.failpage)
		if (sm_plugin_debug) alert('Detected\nFlash version: '+sm_pluginVersion['flash'] +"\nShockwave version: "+ sm_pluginVersion['shockwave'])
		
		// compare required plugins with actual plugins
		var pluginsOK = true
		
		for (var i=0; i<commands.require.length; i++){
			if (!versionOK(commands.require[i].version, sm_pluginVersion[commands.require[i].plugin])){
				if (sm_plugin_debug) alert(commands.require[i].plugin+" is too old")
				pluginsOK = false
				break
			} else {
				if (sm_plugin_debug) alert(commands.require[i].plugin+" is good")
			}
		}	
		if (sm_plugin_debug) alert('Plugins OK:'+pluginsOK)
		
		if (!sm_plugin_debug){
			if (pluginsOK){
				commands.successpage = commands.successpage.replace(/\%3d/,"=")
				document.location.replace(commands.successpage)
			} else {
				commands.failpage = commands.failpage.replace(/\%3d/,"=")
				document.location.replace(commands.failpage)
			}
		}
	}
}

function versionOK(requireStr, actualStr){
//	document.write(requireStr + " - " + actualStr + " </br>");
	if (actualStr==0) return false
	var reqV = convertToVersion(requireStr)
	var actV = convertToVersion(actualStr)

	var vOK = false
	
	if (actV.major > reqV.major){
		vOK = true
	} else if (actV.major == reqV.major){
		if (actV.minor > reqV.minor){
			vOK = true
		} else if (actV.minor == reqV.minor){
			if (actV.revision > reqV.revision){
				vOK = true
			} else if (actV.revision == reqV.revision){
				if (actV.release >= reqV.release){
					vOK = true
				} 
			} 
		} 
	} 		
	return vOK
}

function convertToVersion(str){
	str = str+''
	var version = new Array()
	
	// strip out release if there is one
	rIndex = str.indexOf("r")
	if (rIndex!=-1){
		version["release"] = parseInt(str.substring(rIndex+1,str.length))
		str = str.substring(0,rIndex)
	} else {
		version["release"]= 0
	}

	var sections = str.split(/\s|\./)
	var partNames = new Array('major','minor','revision')
	
	for (var i=0; i<partNames.length; i++){
		if (sections.length>i){
			version[partNames[i]] = parseInt(sections[i])
			if (isNaN(version[partNames[i]])) version[partNames[i]] = 0
		} else {
			version[partNames[i]] = 0
		}
	}
	return version
}

function trim(str){
	// force to string
	str = str+''
	
	// trim from start
	while (str.charAt(0)==' '){
		str = str.substring(1,str.length)
	}
	// trim from end
	while (str.charAt(str.length-1)==' '){
		str = str.substring(0,str.length-1)
	}	
	return str
}

///////////////////////////
/*
	checks a string for all the strings in an array, and returns the first it finds
*/
function findString(s,searchFor) {
	for(i=0;i<searchFor.length;i++) {
		var found = s.indexOf(searchFor[i]);
		if(found != -1) {
			break;
		}
	}
	if(found == -1) { 
		return "Unknown";
	} else {
		return searchFor[i];
	}
}
	
function get_os() {
	return findString(nav, new Array("win","mac"));
}
function get_os_version() {
	
	switch(sm_user.os) {
		case "win" :
			var versions = new Array("win95","windows 95","win98","windows 98","winnt","windows nt 5.0","windows nt 5.1");
			break;
		case "mac" :
			var versions = new Array("os x")
			break;
	}
	var version = findString(nav, versions);
	if(version == "windows nt 5.0") {
		return "win2000";
	} else if(version == "windows nt 5.1") {
		return "winXP";
	} else if(version == "windows 95"){
		return "win95";
	} else if(version == "windows 98"){
		return "win98"
	} else {
		return version;
	}
}
function get_browser() {
	return findString(nav, new Array("firefox","safari","msie","opera","netscape"));
}
function get_browser_version() {
	//search for version number differently on IE
	if(sm_user.browser == "msie") {
		var startPos = nav.indexOf("msie")+5;
		return nav.substring(startPos,nav.indexOf(";",startPos));
	} else {
		return nav.substring(nav.lastIndexOf("/")+1);
	}
}


function check_cookies() {
	document.cookie = 'test' + escape('cookie')
	if (document.cookie == "") {
		return false;
	} else {
		return true;
	}
}


