
function isWindowsOS() {
	var platform = window.navigator.platform;
    var windowsOS = platform.toLowerCase().indexOf('win') >= 0;
    return windowsOS;    
}


// Check if windows XP Service Pack 2:
// string "SV1" indicates exsistance of SP2 at IE5.5 and IE6.
// SP2 is mandatory on IE7 and above.
function isWinXPSP2() {
/*
    var winXPSP2 = window.navigator.userAgent.indexOf("SV1") != -1;
    var IE55 = window.navigator.userAgent.toLowerCase().indexOf("msie 5.5") != -1;
    var IE60 = window.navigator.userAgent.toLowerCase().indexOf("msie 6.0") != -1;
    return (!IE55 && !IE60) || winXPSP2;
*/
}
function isWinXP_or_higher(){
	var array = window.navigator.userAgent.split(';');
	var winVersion = '';
	for( var i = 0 ; i < array.length ; i=i+1 ){
		if( array[i].indexOf("Windows NT") > -1 ){
			winVersion = array[i];
		}
	}

	if(winVersion.length === 0 ){
		return false;
	}
	
	winVersion = winVersion.substring(winVersion.indexOf("Windows NT") + "Windows NT".length + 1);
	if( winVersion > 5 ){
		return true;
	} else {
		return false;
	}
}


function isWin2000() {
	return window.navigator.userAgent.indexOf("NT 5.0") != -1;
}

function isLinuxOS() {
	var platform = window.navigator.platform;
	var linuxOS = platform.toLowerCase().indexOf('linux') >= 0;
    return linuxOS;    
}


function isMacOS() {
	var platform = window.navigator.platform;
    var macOS = platform.toLowerCase().indexOf('mac') >= 0;
    return macOS;    
}

function isInternetExplorer() {
    var userAgent = window.navigator.userAgent;
    var ie = userAgent.toLowerCase().indexOf('msie') >= 0;
    return ie;
}

// Detect for netscape browsers
// Returns FALSE for Netscape 4.7
function isNetscape() {
    var userAgent = window.navigator.userAgent;
    var netscape = userAgent.toLowerCase().indexOf('netscape') >= 0;
    return netscape;
}

function isFirefox() {
    var userAgent = window.navigator.userAgent;
    var firefox = userAgent.toLowerCase().indexOf('firefox') >= 0;
    return firefox;
}

function isFirefox3() {
	 var userAgent = window.navigator.userAgent;
  return (userAgent.toLowerCase().indexOf('firefox/3') >= 0);
}


// Every browser we support uses the string Mozilla so we detect
// Mozilla browsers by searching for the Mozilla string and checking
// it's not one of the other supported browsers
function isMozilla() {
    var userAgent = window.navigator.userAgent; 
    var mozilla = (userAgent.toLowerCase().indexOf('mozilla') >= 0 && !isFirefox() && !isNetscape() && !isNetscape47() && !isInternetExplorer() && !isSafari());
    return mozilla;
}

// Check for Netscape 4.7
function isNetscape47() {
    var userAgent = window.navigator.userAgent;
    var appName = window.navigator.appName;
    var NS47 = (appName.toLowerCase().indexOf('netscape') >= 0 && userAgent.indexOf('4.7') > 0);
    return NS47;
}

function isSafari() {
    var userAgent = window.navigator.userAgent;
    var safari = userAgent.toLowerCase().indexOf('safari') >= 0;
    return safari;
}

function getNetscapeVersion()	{
   var userAgent = navigator.userAgent;
   var NetVer;
   if(userAgent.indexOf("Netscape") >= 0)	 {
        NetVer = userAgent.substr(userAgent.indexOf("Netscape"));
    } else {
        NetVer = userAgent.substr(userAgent.indexOf("Mozilla"));
    }
    var endChar = (NetVer.indexOf(" ") < 0) ? NetVer.length : NetVer.indexOf(" ");
    NetVer = NetVer.substring(NetVer.lastIndexOf("/") + 1, endChar);
    return(NetVer - 0);
}

function getMozillaVersion() {
   var userAgent = navigator.userAgent;
   var start_index = userAgent.indexOf("rv:");
   var end_index = userAgent.indexOf(")", start_index);
   var moz_ver = userAgent.substring(start_index + 3, end_index);
   return strToNumber(moz_ver);
}

function detectPlugin(PluginName) {

    // consider pluginFound to be false until proven true
    var pluginFound = "Not Found";
    var pluginsArrayCounter;
    // if plugins array is there and not fake
    if (navigator.plugins && navigator.plugins.length > 0) {   	
    	var pluginsArrayLength = navigator.plugins.length;
    	for (pluginsArrayCounter=0; pluginsArrayCounter < pluginsArrayLength; pluginsArrayCounter=pluginsArrayCounter+1 ) {
        	// loop through all desired names and check each against the current plugin name
        	var numFound = 0;
        	if( (navigator.plugins[pluginsArrayCounter].name.indexOf(PluginName) >= 0) ||
            	(navigator.plugins[pluginsArrayCounter].description.indexOf(PluginName) >= 0) ) {
            	// this name was found
            	pluginFound=navigator.plugins[pluginsArrayCounter].name+" "+navigator.plugins[pluginsArrayCounter].description;
        		break;
        	}
    	}
    }
    
    if (pluginFound.length>100) { //Not allowing more than 100, this is the database limit
    	pluginFound = pluginFound.substr(0,100);
    }
    
    return pluginFound;
    
}

function strToNumber(str) {
   var validChars = "0123456789.";
   var chr;
   var ret = "";
   for (var i = 0; i < str.length; i=i+1) {
       chr = str.charAt(i);
       if (validChars.indexOf(chr) == -1) {
       		return ret;
   	   } else {
        	ret += chr;
       }
   }
   return ret;
}

// This function returns only after pauseTime milliseconds
function pause(pauseTime) {
    var done = false;
    var startTime = new Date();
    while (!done) {
        var now = new Date();
        var elapsedTime = now - startTime;
        if (elapsedTime >= pauseTime) {
            done = true;
        }
    }

}

function detectWindowsMediaPlugin() {
	return detectPlugin('Windows Media Player');
}


function isNPMSWMP(){
	var plugin = detectWindowsMediaPlugin();
	if( plugin.indexOf("np-mswmp") > -1 ){
		return true;
	} else {
		return false;
	}
}

function isFirefoxWMPlugin(){
	if( isFirefox() && isWinXP_or_higher() && isNPMSWMP() ){
		return true;
	} else {
		return false;
	}
}

function getFlashVersion() {

    var flashVersionNum = 0;
    if (isInternetExplorer() && !isMacOS()) {
    	try {
    		FlashVersion = window["FlashMovie"].getVariable("$version");    	
    		var startIndex = FlashVersion.indexOf("WIN")+4;
        	var minorIndex = FlashVersion.indexOf(",", startIndex);
        	var revisionIndex = FlashVersion.indexOf(",", minorIndex+1);
        	var revisionEndIndex = FlashVersion.indexOf(",", revisionIndex+1);
        	var versionNum = FlashVersion.substring(startIndex, minorIndex);
        	var minorVersionNum = FlashVersion.substring(minorIndex+1, revisionIndex);
        	var revisionNum = FlashVersion.substring(revisionIndex+1, revisionEndIndex);
        	while (revisionNum.length < 3) {
        		revisionNum = "0" + revisionNum;
        	}
        	flashVersionNum = versionNum + "." + minorVersionNum + revisionNum;
        } catch(er) {
        }        
    } else if (navigator.plugins != null && navigator.plugins.length > 0) {
    	var flashPlugin = navigator.plugins['Shockwave Flash'];
    	if(flashPlugin != null){
	    	FlashVersion = flashPlugin.description;
	        if (typeof flashPlugin == 'object') {
	            var fla = flashPlugin.description;
	            var start_index = fla.indexOf("Flash ") + 6;
	            var end_index = fla.lastIndexOf(" ");
	            var ver = fla.substring(start_index, end_index - 1);
	            var release = fla.substr(end_index);
	            release = (release.substr(1,1) == "r")?release.substr(2):"";
				while (release.length < 3) {
	        		release = "0" + release;
	        	}
	            flashVersionNum = ver + release;
	        }
	    }
    }
  
    return flashVersionNum;
}