/*
 * ChorusCall/Browser.js
 * Defines the object ChorusCall.Browser to provide web browser detection
 * ChorusCall.Browser.fixTransparency is run automatically on page load to fix
 * 24-bit PNG transparency in Internet Explorer 6 and earlier.
*/
//ChorusCall.Browser contains browser detection info
if(typeof(ChorusCall)=="undefined") ChorusCall = {};
(function(){
	var ua = navigator.userAgent;
	var browser ={
		isInternetExplorer: ((document.all)&&(document.getElementById))?true:false,
		isInternetExplorer8CompatibilityMode: false,
		isInternetExplorer8InternetExplorer7Mode: false,
		isGecko: ((!document.all) && (document.getElementById) && (window.XMLDocument))?true:false,
		isOpera8: ((ua.indexOf("Opera") > -1) && (document.implementation.createLSParser) && (document.implementation.createLSSerializer))?true:false,
		isKonqueror: false,
		isWebkit: false,
		isSafari: false,
		isWindows: ua.match(/Windows/)?true:false,
		isWindows9x: ua.match(/Windows (?:9\d)|(?:ME)/)?true:false,
		isWindowsNT: ua.match(/Windows NT(?: [34].\d)/)?true:false,
		isWindowsXP: ua.match(/Windows NT 5\.1/)?true:false,
		isWindows2000: ua.match(/Windows NT 5\.0/)?true:false,
		isWindowsVista: ua.match(/Windows NT 6\.0/)?true:false,
		isWindows2003: ua.match(/Windows NT 5\.2/)?true:false,
		isMacOSX: (ua.match(/Mac OS X/)&&!ua.match(/iPhone/))?true:false,
		isMacOS: (ua.match(/Mac/)&&!ua.match(/Mac OS X/))?true:false,
		isIPhoneOS: ua.match(/iPhone/)?true:false,
		isConsoleAvailable:typeof console != "undefined",
		fixtransparency: function(){}
	};
	var xs=null;
	try {xs=new XMLSerializer();}catch(e){};
	var ixs = typeof(xs)=="object";
	browser.isKonqueror = ((ua.indexOf('KHTML')>-1)&&(document.loadXML)&&(ixs))?true:false;
	browser.isWebkit =((ua.indexOf('AppleWebKit') > -1)  && (ixs))?true:false;
	browser.isSafari = browser.isWebkit&&(ua.indexOf('Safari')>-1)&&(ua.indexOf('Chrome')==-1);
	browser.isChrome = browser.isWebkit&&(ua.indexOf('Chrome')>-1);
	browser.isGecko = browser.isGecko&&!browser.isWebkit&&!browser.isOpera8;
	browser.isFirefox = browser.isGecko&&(ua.indexOf('Firefox')>-1);
	browser.isSeaMonkey = browser.isGecko&&(ua.indexOf('SeaMonkey')>-1);
	browser.version = "undefined";
	if(browser.isInternetExplorer){
		browser.version = ua.match(/MSIE\s(\d+\.\d+)/)[1];
		if((typeof console != "undefined")&&!("dir" in console)){
			browser.isInternetExplorer8InternetExplorer7Mode=true
			console.dir = function(obj){
				for (var i in obj){
					console.log("DIR >> "+i+": "+obj[i]);
				}
			}
		}
	}else{
		try{
			if(browser.isFirefox){
				browser.version = ua.match(/Firefox\/(\d+\.\d+(?:\.\d+)?)/)[1];
			}else{
				if(browser.isSafari){
					browser.version = ua.match(/Version\/(\d+\.\d+(?:\.\d+)?)/)[1];
				}else{
					if(browser.isChrome){
						browser.version = ua.match(/Chrome\/(\d+\.\d+\.\d+\.\d+)/)[1];
					}else{
						if(browser.isSeaMonkey){
							browser.version = ua.match(/SeaMonkey\/(\d+\.\d+\.\d+)/)[1];
						}else{
							if(browser.isOpera8){
								browser.version = ua.match(/Opera\/(\d+\.\d+)/)[1];
							}
						}
					}
				}
			}
		}catch(e){
			if(typeof console != "undefined"){
				console.error("Browser version could not be determined");
				browser.version=null;
			}
		}
	}
	if(browser.version){
		var va = browser.version.split(".");
		if(va.length){
			browser.majorVersion = parseInt(va[0]);
			browser.minorVersion = parseInt(va[1]);
			if(isNaN(browser.majorVersion))
				browser.majorVersion = -1;
			else{
				if(browser.isInternetExplorer&&browser.majorVersion==7&&ua.match(/Trident\/\d+.\d+/)){
					browser.isInternetExplorer8CompatibilityMode=true;
				}
			}
			if(isNaN(browser.minorVersion))
				browser.minorVersion = -1;
		}
	}
	//plugin detection
	var windowsMedia;
	var flash;
	var realPlayer;
	var quickTime;
	function detectPlugin(pluginName) {
		if (navigator.plugins && navigator.plugins.length > 0) {
			var pluginCount = navigator.plugins.length;
			for (var i=0; i < pluginCount; i++ ) {
				if(navigator.plugins[i].name.match(pluginName))
					return navigator.plugins[i];
			}
		}
		return false;
	}
	var plugins;
	if(browser.isInternetExplorer && window.ActiveXObject){
		plugins = {
			Flash: function(){
				if(flash){
					return flash;
				}else{
					flash = {
						installed: false,
						version: -1
					}
				}
				var control = null;
				try {
					control = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
				} catch (e) {}

				if (control) {
					flash.installed = true;
					try{
						var version = control.GetVariable('$version').substring(4);
						version = version.split(',');
						version = parseFloat(version[0] + '.' + version[1]);
						flash.version = version;
					}catch(e){}
				}
				return flash;
			},
			WindowsMediaPlayer: function(){
				if(windowsMedia){
					return windowsMedia;
				}else{
					windowsMedia = {
						installed: false,
						version: -1
					}
				}
				var control = null;
				try {
					control = new ActiveXObject('WMPlayer.OCX');
					if (control) {
						windowsMedia.installed = true;
						windowsMedia.version = parseFloat(control.versionInfo);
					}
				} catch (e) {}
				return windowsMedia;
			},
			QuickTime: function(){
				if(quickTime){
					return quickTime;
				}else{
					quickTime = {
						installed: false,
						version: -1
					}
				}
				var control = null;
				try {
					control = new ActiveXObject('QuickTime.QuickTime');
				} catch (e) {
					// QuickTimeCheckObject is another option, keep going.
				}
				if (control) {
					// In case QuickTimeCheckObject.QuickTimeCheck does not exist
					quickTime.installed = true;
				}
				try {
					// This generates a user prompt in Internet Explorer 7
					control = new ActiveXObject('QuickTimeCheckObject.QuickTimeCheck');
					if (control) {
						// In case QuickTime.QuickTime does not exist
						quickTime.installed = true;
						try{
							version = control.QuickTimeVersion.toString(16); // Convert to hex
							version = version.substring(0, 1) + '.' + version.substring(1, 3);
							quickTime.version = version = parseFloat(version);
						}catch(e){}

					}
				} catch (e) {}
				return quickTime;
			},
			RealPlayer: function(){
				if(realPlayer)
					return realPlayer;
				realPlayer = {
					installed: false,
					version: -1
				}
				var definedControls = [
					'rmocx.RealPlayer G2 Control',
					'rmocx.RealPlayer G2 Control.1',
					'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)',
					'RealVideo.RealVideo(tm) ActiveX Control (32-bit)',
					'RealPlayer'
				];
				var control = null;
				for (var i = 0; i < definedControls.length; i++) {
					try {
						control = new ActiveXObject(definedControls[i]);
					} catch (e) {
						continue;
					}
					if (control) {
						break;
					}
				}
				if (control) {
					realPlayer.installed = true;
					try{
						var version = control.GetVersionInfo();
						realPlayer.version = parseFloat(version);
					}catch(e){}
				}
				return realPlayer;
			}
		}
	}else{
		if( navigator.plugins && navigator.plugins.length > 0 ) {
			plugins={
				Flash: function(){
					if(flash){
						return flash;
					}
					flash = {
						installed: false,
						version: -1
					}
					var plugin = detectPlugin('Shockwave Flash');
					if(plugin){
						flash.installed = true;
						flash.version = plugin.description.match(/\d+(?:\.\d+)*/)[0];
					}
					return flash;
				},
				RealPlayer: function(){
					if(realPlayer){
						return realPlayer;
					}
					realPlayer = {
						installed: false,
						version: -1
					};
					var plugin = detectPlugin('RealPlayer');
					if(plugin){
						realPlayer.installed = true;
						var version = plugin.description.match(/\d+\.\d+/);
						realPlayer.version = version?version[1]:-1;
						if(!version){
							var plugin2 = detectPlugin('RealPlayer Version');
							if(plugin2){
								realPlayer.version = plugin2.description;
							}
						}
					}
					return realPlayer;
				},
				WindowsMediaPlayer: function(){
					if(windowsMedia){
						return windowsMedia;
					}
					windowsMedia = {
						installed: false,
						version: -1
					};
					var plugin = detectPlugin('Microsoft® Windows Media Player Firefox Plugin');
					if(plugin&&plugin.description.match(/np-mswmp|Windows Media Player/)){
						windowsMedia.installed = true;
						windowsMedia.version = 10;
					}else{
						plugin = detectPlugin('Windows Media Player Plug-in Dynamic Link Library');
						if(plugin&&plugin.description.match(/Npdsplay dll/)){
							windowsMedia.installed = true;
							windowsMedia.version = 9;
						}
					}
					return windowsMedia;
				},
				QuickTime: function(){
					if(quickTime){
						return quickTime;
					}
					quickTime = {
						installed: false,
						version: -1
					};
					var plugin = detectPlugin('QuickTime');
					if(plugin){
						quickTime.installed = true;
						var version = plugin["name"].match(/\d(?:\.\d+)+/);
						quickTime.version = version?version[0]:-1;
					}
					return quickTime;
				}
			}
		}
	}
	browser.Plugins = plugins;
	ChorusCall.Browser = browser;
})();

//Fix 24-bit transparency in Internet Explorer 5 - 6
//any images written in the page html will be fixed automatically on load
//others can be corrected later using ChorusCall.Browser.fixTransparency(img);
if(ChorusCall.Browser.isInternetExplorer&&ChorusCall.Browser.majorVersion<7){
	ChorusCall.Browser.fixTransparency=function(){
		function applyTransparency(ele){
			if(ele.src&&ele.src.match(/\.png$/)){
				ele.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+ele.src+'\', sizingMethod=\'scale\')';
			}else{
				ele.style.filter = '';
			}
		}
		function eventWrapper(ele){
			ele.attachEvent("onload",function(){applyTransparency(ele)});
		}
		var ele=null,imgs=null,i=0;
		if(arguments.length){
			for (i=0;i<arguments.length;i++){
				ele = arguments[i];
				if(typeof(ele)=='string'){
					ele=document.getElementById(ele);
				}
				if(ele){
					if(ele.nodeName.toLowerCase()=='img'){
						applyTransparency(ele);
						eventWrapper(ele);
					}
				}
			}
		}else{
			var imgs=document.getElementsByTagName('img');
			for(i=0;i<imgs.length;i++){
				applyTransparency(imgs[i]);
				eventWrapper(imgs[i]);
			}
		}
	}
	window.attachEvent('onload',function(){ChorusCall.Browser.fixTransparency()});
};
