
var BrowserDetect = new function() {
    var self = this;
   
    self.IE = "Internet Explorer";
    self.SAFARI = "Safari";
    self.NETSCAPE = "Netscape";
    self.FIREFOX = "Firefox";
    self.CHROME = "Chrome";
    self.OTHER = "Other";
    
    self.browserName = self.OTHER;
    self.browserVersion = "Other";
    self.majorVersion = -1;
    self.minorVersion = -1;
    self.browserLabel = "Other";
    
    self.isIe = false;
    self.isSafari = false;
    self.isNetscape = false;
    self.isFirefox = false;
    self.isChrome = false;
    self.isOther = false;

    var _determineBrowserInfo = function(str) {
	    var browser = new Object();
	    var brs = "";
	    
	    if (str == null || str == "") {
	    	brs = navigator.userAgent.toLowerCase();
	    } else {
	    	brs = str.toLowerCase();
	    }
	       
	    if (brs.search(/msie\s(\d+(\.?\d)*)/) != -1) {
	    // MS Internet Explorer
	        browser['name'] = self.IE;
	        browser['version'] = brs.match(/msie\s(\d+(\.?\d*)*)/)[1];
	        browser['majorversion'] = _getBrowserMajorVersion(browser['version']);
	        browser['minorversion'] =  _getBrowserMinorVersion(browser['version']);
	    } else if (brs.search(/safari\/(\d)*/) != -1 && brs.search(/chrome\/(\d)*/) == -1 ) {
	    // Safari
	        browser['name'] = self.SAFARI;
	        browser['version'] = brs.substring(brs.toLowerCase().indexOf("version") + 8,brs.toLowerCase().indexOf("safari") - 1) + " (" + brs.match(/safari\/(\d+(\.?\d*)*)/)[1] + ")";
	        browser['majorversion'] = _getBrowserMajorVersion(browser['version']);
	        browser['minorversion'] =  _getBrowserMinorVersion(browser['version']);
	    } else if (brs.search(/netscape6[\/\s](\d+([\.-]\d*)*)/) != -1) {
	    // Netscape 6.x
	        browser['name'] = self.NETSCAPE;
	        browser['version'] = brs.match(/netscape6[\/\s](\d+([\.-]\d*)*)/)[1];
	        browser['majorversion'] = _getBrowserMajorVersion(browser['version']);
	        browser['minorversion'] =  _getBrowserMinorVersion(browser['version']);
	    } else if (brs.search(/netscape\/(7\.\d*)/) != -1) {
	    // Netscape 7.x
	        browser['name'] = self.NETSCAPE;
	        browser['version'] = brs.match(/netscape\/(7\.\d*)/)[1];
	        browser['majorversion'] = _getBrowserMajorVersion(browser['version']);
	        browser['minorversion'] =  _getBrowserMinorVersion(browser['version']);
	    } else if (brs.search(/netscape4\/(\d+([\.-]\d)*)/) != -1) {
	    // Netscape 4.x
	        browser['name'] = self.NETSCAPE;
	        browser['version'] = brs.match(/netscape4\/(\d+([\.-]\d*)*)/)[1];
	        browser['majorversion'] = _getBrowserMajorVersion(browser['version']);
	        browser['minorversion'] =  _getBrowserMinorVersion(browser['version']);
	    } else if (brs.search(/firefox[\/\s](\d+([\.-]\d)*)/) != -1) {
	    // Firefox
	        browser['name'] = self.FIREFOX;
	        browser['version'] = brs.match(/firefox[\/\s](\d+([\.-]\d*)*)/)[1];
	        browser['majorversion'] = _getBrowserMajorVersion(browser['version']);
	        browser['minorversion'] =  _getBrowserMinorVersion(browser['version']);
	    } else if (brs.search(/chrome\/(\d)*/) != -1) {
	    // Google Chrome
	        browser['name'] = self.CHROME;
	        browser['version'] = brs.match(/chrome\/(\d+(\.?\d*)*)/)[1];
	        browser['majorversion'] = _getBrowserMajorVersion(browser['version']);
	        browser['minorversion'] =  _getBrowserMinorVersion(browser['version']);
	    } else {
	    // Other browser
	        browser['name'] = self.OTHER;
	        browser['version'] = "Other";
	        browser['majorversion'] = _getBrowserMajorVersion();
	        browser['minorversion'] = _getBrowserMinorVersion();
	    } 
	
	    return browser;
	};
    
    var _getBrowserMajorVersion = function(v){
		if (v == null || v == "") {
			return -1;
		} else {
			return v.match(/(\d*)(\.\d*)*/)[1];
		}
  	};

    var _getBrowserMinorVersion = function(v){
    	if (v == null || v == "") {
	    	return -1;
	    } else {
	    	return v.match(/\.(\d*)/)[1];
	    }
  	};
  	
    self.majorAtLeast = function(version) {
        return self.majorversion >= version;
    };

    self.minorAtLeast = function(version) {
        return self.minorversion >= version;
    };
   
    self.test = function() {
    	alert("Browser Information: \n" +
    			"Name: " + self.browserName + "\n" +
    			"Version: " + self.browserVersion + "\n" +
    			"Major Version: " + self.majorVersion + "\n" +
    			"Minor Version: " + self.minorVersion + "\n" +
    			"Label: " + self.browserLabel + "\n" +
    			"User Agent: " + navigator.userAgent.toLowerCase() + "\n"
    			);
    };
    
    /**
     * Constructor
     */
    self.BrowserDetect = function() {
       var browser = _determineBrowserInfo();
       
       self.browserName = browser.name;
       self.browserVersion = browser.version;
       self.majorVersion = browser.majorversion;
       self.minorVersion = browser.minorversion;
       self.browserLabel = browser.name + " " + browser.version;
       
       if (browser.name == self.IE) {
    	   self.isIe = true;
       } else if (browser.name == self.SAFARI) {
    	   self.isSafari = true;
       } else if (browser.name == self.NETSCAPE) {
    	   self.isNetscape = true;
       } else if (browser.name == self.FIREFOX) {
    	   self.isFirefox = true;
       } else if (browser.name == self.CHROME) {
    	   self.isChrome = true;
       } else {
    	   self.isOther = true;
       }
    }();
};
