
  var oBrowser = new Object();  
  oBrowser.UserAgent     = navigator.userAgent.toLowerCase();
  oBrowser.AppVersion    = navigator.appVersion.toString().toLowerCase();
  oBrowser.MajorVersion  = parseInt(navigator.appVersion);
  oBrowser.MinorVersion  = parseFloat(navigator.appVersion);
  
  oBrowser.isIE     = false;
  oBrowser.isIE6    = false;
  oBrowser.isIE7	= false;
  oBrowser.isNav    = false;
  oBrowser.isNav7_1 = false;
  oBrowser.isNav8   = false;
  oBrowser.isNav9	= false;
  oBrowser.isSafari = false;
  oBrowser.isSafari1_2 = false;
  oBrowser.isSafari1_2_up = false;
  oBrowser.isSafari2 = false;
  oBrowser.isSafari3 = false;
  oBrowser.isFirefox = false;
  oBrowser.isFirefox1_5 = false;
  oBrowser.isFirefox1_5_up = false;
  oBrowser.isFirefox2 = false;
  oBrowser.isFirefox3 = false;
   
  var oPlatform = new Object();  
  oPlatform.isWin    = false;
	oPlatform.isWinXP  = false;
	oPlatform.isWinVista = false;
	oPlatform.isMacOSX = false;

  //-------------------------------------------------------------------------
  // PLATFORM CHECKS 
  function parse_webkit_version(version) {
  var bits = version.split(".");
  var is_nightly = (version[version.length - 1] == "+");
  if (is_nightly) {
    var minor = "+";
  } else {
    var minor = parseInt(bits[1]);
    // If minor is Not a Number (NaN) return an empty string
    if (isNaN(minor)) {
      minor = "";
    }
  }
  return {major: parseInt(bits[0]), minor: minor, is_nightly: is_nightly};
}

function get_webkit_version() {
  var regex = new RegExp("\\(.*\\) AppleWebKit/(.*) \\((.*)");
  var matches = regex.exec(navigator.userAgent);
  if (matches) {
    var webkit_version = parse_webkit_version(matches[1]);    
  } 
  return {major: webkit_version['major'], minor: webkit_version['minor'], is_nightly: webkit_version['is_nightly']};
}  
  
  function fncDetectPlatform() {
	 	  
    if (oBrowser.UserAgent.length > 0) {
		
    	oPlatform.isWin     = (oBrowser.UserAgent.indexOf("windows") != -1);
    	oPlatform.isWinXP   = (oBrowser.UserAgent.indexOf("windows nt 5.1") != -1);
		oPlatform.isWinVista= (oBrowser.UserAgent.indexOf("windows nt 6.0") != -1);
    	oPlatform.isMacOSX	= (oBrowser.UserAgent.indexOf("os x") != -1);
  	}
  }
  function fncGetFullVersion(strAgent, strToFind) {
    var dblFullVersion = 0.0;
    var strShortAgent = "";
    var strVersion = "";
    strAgent = strAgent.toLowerCase();
    strToFind = strToFind.toLowerCase();
    
    if(strAgent.indexOf(strToFind) != -1) {
      strShortAgent = strAgent.substr(strAgent.indexOf(strToFind) + strToFind.length, strAgent.length);
      if (strShortAgent.charAt(0) != " ") strShortAgent = " " + strShortAgent;
    }
    
    var strKey = "";
    var intNumericStart = -1;
    var intNumericEnd = -1;
    
    for (var i=0;i<=strShortAgent.length;i++) {
      var chrTest = strShortAgent.charAt(i);
      var blnIsTestNaN = isNaN(chrTest);
      var chrKey = "0";
      
      if ((blnIsTestNaN && chrTest != ".") || chrTest == " ") {
        // not a number or period
        chrKey = "0";
        if (intNumericStart >= 0 && intNumericEnd < 0) {
          intNumericEnd = i-1;
        }
      }
      else {
        chrKey = "1";
        if (intNumericStart < 0 && intNumericEnd < 0) {
          intNumericStart = i;
        }
      }
      strKey = strKey + chrKey;
    }    
    
    if (intNumericStart >= 0 && intNumericEnd < 0) {
      intNumericEnd = strKey.length;
    }
    
    if (intNumericStart >= 0 && intNumericEnd > 0) {
      strVersion = strShortAgent.substr(intNumericStart, intNumericEnd);
      //alert (oBrowser.UserAgent + "\n" + strToFind + "\n" + strShortAgent + "\n" + strKey + "\n" + intNumericStart + "-" + intNumericEnd + "\n" + strVersion);
    }
    
    return (strVersion);
  }
  
  //-------------------------------------------------------------------------
  // BROWSER CHECKS 
  
  function fncDetectBrowser() {
	var safariBuild;
	var strVersion = "";
	  
	if (oBrowser.UserAgent.length > 0) {
      oBrowser.isGecko     = (oBrowser.UserAgent.indexOf('gecko') != -1) && (oBrowser.UserAgent.indexOf('firefox') == -1)  && (oBrowser.UserAgent.indexOf('safari') == -1);
	
      oBrowser.isIE        = ((oBrowser.UserAgent.indexOf("msie") != -1) && (oBrowser.UserAgent.indexOf("gecko") == -1) && (oBrowser.UserAgent.indexOf("opera") == -1) && (oBrowser.UserAgent.indexOf("netscape") == -1));
      
      if (oBrowser.UserAgent.indexOf('netscape') != -1 || oBrowser.UserAgent.indexOf('navigator') != -1) {
      	oBrowser.isNav = true;
      	strVersion = fncGetFullVersion(oBrowser.UserAgent,"netscape");
      }
      
      if (oBrowser.UserAgent.indexOf('safari') != -1) {
        oBrowser.isSafari = true;
        strVersion = fncGetFullVersion(oBrowser.UserAgent,"safari");
      }
	  
	  // Netscape 9 uses Firefox in its User Agent...make sure to confirm it's not that
	  if (oBrowser.UserAgent.indexOf('firefox') != -1 && oBrowser.UserAgent.indexOf('navigator') == -1) {
		oBrowser.isFirefox = true;
		strVersion = fncGetFullVersion(oBrowser.UserAgent,"firefox");
	  }
      
      if (strVersion.length < 1) {
        if (oBrowser.isIE) {
          strVersion = fncGetFullVersion(oBrowser.UserAgent,"msie");
        }
        else if (oBrowser.UserAgent.indexOf('mozilla') != -1 && oBrowser.UserAgent.indexOf('netscape') == -1) { // for NS 4.75
          strVersion = fncGetFullVersion(oBrowser.UserAgent,"mozilla");
        }
      }
      
      if (!isNaN(parseInt(strVersion)))
        oBrowser.MajorVersion  = parseInt(strVersion);
      if (!isNaN(parseFloat(strVersion)))
        oBrowser.MinorVersion  = parseFloat(strVersion);
		
      if (oBrowser.isNav)
	  {
		  oBrowser.isNav7_1 = (oBrowser.UserAgent.indexOf('netscape/7.1') != -1);
		  oBrowser.isNav8   = (oBrowser.UserAgent.indexOf('netscape/8') != -1);
		  oBrowser.isNav9	= (oBrowser.UserAgent.indexOf('navigator/9') != -1);
      }      
      
      if (oBrowser.isIE)
	  {
		  oBrowser.isIE6    = (oBrowser.MajorVersion == 6);
		  oBrowser.isIE7    = (oBrowser.MajorVersion == 7);
      }
	  
	   if (oBrowser.isFirefox)
	   {
		  oBrowser.isFirefox2 = (oBrowser.MajorVersion == 2);
		  oBrowser.isFirefox1_5  = (oBrowser.MinorVersion.toString().indexOf('1.5') != -1);
		  oBrowser.isFirefox3 = (oBrowser.MajorVersion == 3);
		  
		  if (oBrowser.isFirefox1_5 || oBrowser.MajorVersion >= 2)
		  	oBrowser.isFirefox1_5_up = true;
      }
	  
	    if (oBrowser.isSafari) {
			
			/* Safari versions are identified by build numbers in .userAgent:
			1.2 = 125.x
			2.0 = 412.x, 416.x, 417.x, 419.x
			3.0 = 523.x */
			
			safariBuild = parseInt(strVersion);

			if (safariBuild == 125)
		    	oBrowser.isSafari1_2 = true;
			else if (safariBuild == 412 || safariBuild == 416 || safariBuild == 417 || safariBuild == 419)
				oBrowser.isSafari2 = true;
			else if (safariBuild < 522)
				oBrowser.isSafari3 = true;
				
			if (safariBuild >= 125)
				oBrowser.isSafari1_2_up = true;
      }
      
    }
	
  }
  
  function CheckOKWinXPBrowsers()
  {
	  return oBrowser.isIE6 || oBrowser.isIE7 || oBrowser.isNav8 || oBrowser.isNav9 || oBrowser.isFirefox1_5 || oBrowser.isFirefox2 || oBrowser.isFirefox3;
  }
  
  function CheckOKWinVistaBrowsers()
  {
	  return oBrowser.isIE7 || oBrowser.isNav7_1 || oBrowser.isNav8 || oBrowser.isNav9 || oBrowser.isFirefox2 || oBrowser.isFirefox3;
  }
  
  function CheckOKMacOSXBrowsers()
  {
	  return oBrowser.isSafari1_2_up || oBrowser.isFirefox1_5 || oBrowser.isFirefox2 || oBrowser.isFirefox3;
  }
  
  //-------------------------------------------------------------------------
  // UTILITY FUNCTIONS
    
  function fncGetElementById(strID) {
    if (document.getElementById) {
      return document.getElementById(strID);
    } else if (document.layers != null) {
      return document.layers[strID];
    } else if (document.all != null) {
      return document.all[strID];
    }
  }