/* -*- Javascript -*-
 *
 * Copyright (c) 2009
 * Spoken Language Systems Group
 * MIT Computer Science and Artificial Intelligence Laboratory
 * Massachusetts Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use, copy,
 * modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */


var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

BrowserDetect.init();

// java version stuff
var javatype;
function doNetscape() {
  for (i=0; i < navigator.plugins.length; i++) {
    if (navigator.plugins[i].type.contains("application/x-java-applet;version=")) {
      javatype = navigator.plugins[i].type.substring(33);
    }
  }
  if (javatype == null) {
    return "none";
  } else {
    return javatype;
  }
}

function doMicrosoft() {
  var applet = document.applets["detectjava"];
  if (applet == null) {
    javatype = "applet not detected";
  } else {
    javatype = applet.getJavaVersion();
  }
  return javatype;
}

function doFirefox() {
  if (window.navigator.javaEnabled()) {
    javatype = java.lang.System.getProperty("java.version");
  } else {
    javatype = "none";
  }
  return javatype;
}

function getJavaType() {
  if (BrowserDetect.browser == "Firefox" || BrowserDetect.browser == "Mozilla") {
    return doFirefox();
  } else if (BrowserDetect.browser == "Netscape") {
    return doNetscape();
  } else if (BrowserDetect.browser == "Explorer") {
    return doMicrosoft();
  } else {
    return "unknown";
  }
}

function getBrowserInfo() {
	var info = "Detected Browser: <i>";
	info += BrowserDetect.browser + ' version ' + BrowserDetect.version + "</i>";
	return info;
}

function getOSInfo() {
	return "Detected Operating System: <i>" + BrowserDetect.OS + "</i>"
}


function isBrowserOK() {
  if ((BrowserDetect.browser == "Firefox" && (BrowserDetect.version == "2" || BrowserDetect.version == 1.5 || BrowserDetect.version == "3")) ||
      (BrowserDetect.browser == "Explorer" && (BrowserDetect.version == "6" || BrowserDetect.version == "7")) ||
      (BrowserDetect.browser == "Mozilla"  && (BrowserDetect.version == "1.7" || BrowserDetect.version == "1.8"))) { 
	  return true;
  }

  return false;
}

function isOSOK() {
	return BrowserDetect.OS == "Windows" || BrowserDetect.OS == "Linux" || BrowserDetect.OS == "Mac";
}

function getJavaInfo() {
	return "Detected Java Version: <i>" + getJavaType() + "</i>";
}

function isJavaOK() {
  return (getJavaType().indexOf("1.5") != -1 || getJavaType().indexOf("1.6") != -1) ;
}

function setSessionBrowserOK() {
	var request = newXMLRequest();
	var url = "generic/components/testbrowser/setbrowserok.jsp";
	request.open('GET', url , false);
	request.send(null);
	if(request.status != 200) {
		alert("Error contacting server");
		return false;
	}
}

