var supportedBrowsers = [ "ie", "firefox", "safari", "chrome"]; //"opera"
var supportedVersions = { ie: 7, firefox: 2, safari: 2, chrome: 1 }; //opera: 9
var userAgent = navigator.userAgent.toLowerCase();
var currentURL = document.location.href;

var Browser = {
	ie: /msie/.test(userAgent) && !/opera/.test(userAgent),
	firefox: /firefox/.test(userAgent),
	safari: /safari/.test(userAgent) && !/chrome/.test(userAgent),
	chrome: /chrome/.test(userAgent),
	opera: /opera/.test(userAgent),
	browser: "unknown",
	browserClass: "",
	version: function () {
		var version = Math.abs((userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, '0'])[1]);
		if (Browser.ie) {
			version = (version === 6 && /msie 7/.test(userAgent))?
			            7 : (version === 6 && /msie 8/.test(userAgent))?
			            8 : version;
			this.browser = "ie";
		} else if (Browser.firefox) {
			version = userAgent.substring(userAgent.indexOf('firefox/') + 8).substring(0, 1);
			this.browser = "firefox";
		} else if (Browser.safari && !Browser.chrome) {
			version = userAgent.substring(userAgent.indexOf('version/') + 8).substring(0, 1);
			this.browser = "safari";
		} else if (Browser.chrome) {
			version = userAgent.substring(userAgent.indexOf('chrome/') + 7).substring(0, 1);
			this.browser = "chrome";
		} else if (Browser.opera) {
			this.browser = "opera";
		}
		
		return version;
	},
	supported: function () {
		var status = false, browser;
		for (browser in supportedBrowsers) {
			if (typeof supportedBrowsers[browser] === "string") {
				status = status || (Browser[supportedBrowsers[browser]] && Browser.version() >= supportedVersions[supportedBrowsers[browser]]);
			}
		}
		return status;
	},
	isForcedToBrowse: function () {
		return this.getCookie("unsupported") === "true";
  },
	getCookie: function (cookie_name) {
		var cookie = document.cookie,
				cookie_start = document.cookie.indexOf(cookie_name + "=") + 1;
		return cookie_start ? decodeURIComponent(cookie.substring(cookie_start += cookie_name.length, (cookie.indexOf(";", cookie_start) + 1 || cookie.length + 1) - 1)) : "";
  },
	getRedirURL: function() {
		var redirURL = (typeof(baseDomain) !== "undefined") ? ("http://" + baseDomain + "/browserupgrade") : "/browserupgrade";
	  redirURL +=  "?url=" +  encodeURIComponent(currentURL);
	  return redirURL;
  },
	setBrowserClass: function () {
		Browser.browserClass = Browser.browser + " " + Browser.browser + Browser.version();
		if(document.documentMode) { //CHECK documentMode FOR IE8's IE7 Standards Mode
			Browser.browserClass += " " + Browser.browser + document.documentMode;
		}
	}
};

if (!Browser.supported() && !Browser.isForcedToBrowse()) { //If Unsupported and user not wishing to continue browsing
  document.location = Browser.getRedirURL(); //Redirect the Browser
}else { //If Browser is supported, set the class names for the browser or an user with unsupported browser forces to see
	Browser.setBrowserClass();
}