// *** Supported query string NVP's

// rel -- Coresponds with the BLOC software release (e.g., 2.5, 2.6, etc) that the user intends on launching.  The default is "2.5".

// ver -- Which "version" of the selected release should be launched? (e.g., experimental / dev, alpha, beta, GA)  The default is "GA".

// loc -- Which datacenter "location" should be contacted for this user's desired BLOC? (e.g., sales, server.iad, UK, BANA)  The default is "server.iad"

// override -- Normally the BLOC will not be launched if the user's PC is not qualified.  By setting this to "1", testing can be performed ahead of opening up support for additional PC configs.  Default is "0" (no / false)

// autolaunch -- Should the jnlp be launched automatically once the user's PC is certified as "supported".  Default is "1" (yes / true).

// debug -- This can be used to make the user's PC configuration available directly via the page.  The results are displayed at the bottom of the page.  This is particularly useful with autolaunch=0.  Default is "0" (no / false).


// *** Define all constants used on this page ***

// Support Array Layout
var SUPPORT_OS_VERSION = 0;
var SUPPORT_BROWSER_CLASS =  1;
var SUPPORT_BROWSER_MAJOR_VERSION_MIN =  2;
var SUPPORT_BROWSER_MAJOR_VERSION_MAX =  3;
var SUPPORT_REQUIRE_JWS =  4; // Some configurations will simply presume JWS is available.
var SUPPORT_BEGIN_VER_SUPPORT_INDEX =  5; // The "ver" level at which this configuration is supported.
var SUPPORT_BEGIN_REL_SUPPORT_INDEX =  6; // The "rel" level at which this configuration is supported.

// Supported Platform Table
var supportArray = [
    ["win2k","msie","6","8",1,0,10],
    ["winxp","msie","6","8",1,0,10],
    ["win2003","msie","6","8",1,0,10],
    ["winvista","msie","6","8",1,0,10],
    ["win2k","firefox","2","3",1,0,10],
    ["winxp","firefox","2","3",1,0,10],
    ["win2003","firefox","2","3",1,0,10],
    ["winvista","firefox","2","3",1,0,10],
    ["win2k","safari","500","599",1,0,10],
    ["winxp","safari","500","599",1,0,10],
    ["win2003","safari","500","599",1,0,10],
    ["winvista","safari","500","599",1,0,10],
    ["mac","firefox","2","3",0,0,0],
    ["mac","safari","412","599",0,0,0],
    ["linux","firefox","2","3",1,0,10],
    ["-","-","0","0",0,0]
  ];

// "loc" NVP to jnlp file matrix
var jnlpArray = [
    ["default","SMB"], // This jnlp pattern will be used by default (server.iad)
    ["bana","BANA"],
    ["ent","ENT"],
    ["smb","SMB"],
    ["uk","UK"],
    ["",""]
  ];

// "ver" NVP to jnlp file matrix

var VER_NVP = 0;
var VER_SUFFIX=1;
var VER_SUPPORT_INDEX=2;

var verArray = [
    ["default","GA",0],
    ["ga","GA",0],
    ["exp","Exp",30],
    ["alpha","Alpha",20],
    ["beta","Beta",10],
    ["","",0]
  ];

// "rel" NVP to jnlp file matrix

var REL_NVP = 0;
var REL_SUFFIX=1;
var REL_SUPPORT_INDEX=2;

var relArray = [
	["AUTOMATION_TEXT_ADD_MARKER","AUTOMATION_TEXT_ADD_MARKER",0],
	["v2.5b40","v2.5b40",0],
	["v2.6b53","v2.6b53",10],
	["v2.6b55","v2.6b55",10],
	["default","v2.6b61",10],
	["","",0]
];
jnlpRootDirectory="/console/launch/"

// *** Generic Function to Strip Query String into Global Variables ***

var GLOBAL_GET_VARIABLE_PREFIX="GV_"
var queryStringValue = location.search;

if (queryStringValue.indexOf("=")==-1) {
	queryStringValue = queryStringValue.substring(0,1)+"e=null"+queryStringValue.substring(1,queryStringValue.length);
}

if ((queryStringValue.indexOf("&")==-1) || (((queryStringValue.indexOf("&")!=-1) && (queryStringValue.indexOf("=")<queryStringValue.indexOf("&"))))) {
	eval(unescape(queryStringValue.replace(/\+/g,' ').replace(/[?&]([^=]+)=([^&]*)/g, "var "+GLOBAL_GET_VARIABLE_PREFIX+"$1='$2';")))
}

// Set override=1 on query string to enable jnlp launch regardless of supported platform		  
if (typeof(GV_override) == "undefined") {var GV_override = 0;}

// Set debug=1 on query string to enable full configuration print-out		  
if (typeof(GV_debug) == "undefined") {var GV_debug = 0;}
  	
// Set autolaunch=0 on query string to DISABLE auto launch behavior
if (typeof(GV_autolaunch) == "undefined") {var GV_autolaunch = 1;}
   	
// Set loc=default if NVP is missing on query string (this drives the selection of the right server-specific jnlp file)
if (typeof(GV_loc) == "undefined") {var GV_loc = "default";}

// Set ver=default if NVP is missing on query string (this drives the selection of the right phase-specific jnlp file)
if (typeof(GV_ver) == "undefined") {var GV_ver = "default";}

// Set rel=default if NVP is missing on query string (this drives the selection of the right phase-specific jnlp file)
if (typeof(GV_rel) == "undefined") {var GV_rel = "default";}

//Mesasge to be used while the configuration is being detected

messageWait = '<br>Checking your configuration.  Please wait ...';

//Grab a current time as a cache buster
var cbValue = new Date().getTime();

//Mesasge to be used if configuration is supported
appLaunch = location.protocol + '//' + location.host + jnlpRootDirectory + 'JNLPs/' + pickArray(jnlpArray,GV_loc,0,1) + '/' + pickArray(verArray,GV_ver,VER_NVP,VER_SUFFIX) + '/' + pickArray(relArray,GV_rel,REL_NVP,REL_SUFFIX) + "/JRep.jnlp?cb=" + cbValue;
urlLaunch = '"'+appLaunch+'"';
titleLaunch = '"LivePerson_Support"';

//Object for launching jnlp from IE

ieObjectDef  = "<OBJECT codeBase=http://java.sun.com/update/1.5.0/jinstall-1_5_0_05-windows-i586.cab classid=clsid:5852F5ED-8BF4-11D4-A245-0080C6F74284 height=0 width=0>";
ieObjectDef += "<PARAM name=app VALUE="+appLaunch+">";
ieObjectDef += "<PARAM NAME=back VALUE=false>";
ieObjectDef += "</OBJECT>";

messageLaunch ="<br>Your computer configuration is supported.<br><br>";
messageLaunch+="If the Operator Console does not launch automatically, <a href='' onClick='javascript:window.open("+urlLaunch+","+titleLaunch+");return false;'>click here</a>.";

//Message to be used if configuration is supported but requires jws

urlInstall = '"http://jdl.sun.com/webapps/getjava/BrowserRedirect?locale=en&host=java.com"';
titleInstall = '"Install_Java_Web_Start"';

messageInstall ="<br>It appears that Sun Java Web Start is not installed on your computer.<br><br>";
messageInstall+="<a href='' onClick='javascript:window.open("+urlInstall+","+titleInstall+");return false;'>Click here</a> to download the appropriate plug-in directly from Sun.";
  
//Mesasge to be used if configuration is not supported

urlSupport = '"http://server.iad.liveperson.net/hc/s-5296924/cmd/kbresource/view_question%21PAGETYPE?documentid=16686"';
titleSupport = '"LivePerson_Support"';
  
messageSupport ="<br>Your computer configuration is not currently supported by LivePerson's Browser-Launched Operator Console.<br><br>";
messageSupport+="<a href='' onClick='javascript:window.open("+urlSupport+","+titleSupport+");return false;'>Click here</a> for a listing of the supported platforms."

// *** Initiatlize Global Variables ***

javawsInstalled = 0;  
javawsRequired = 1;
javaws142Installed = 0;
javaws150Installed=0;
javaws160Installed=0;
jnlpIE = false; 
supportedOS = false;
supportedBrowser = false;
valueBrowserName = "n/a";
valueBrowserVersion = "n/a";
valueBrowserVersionMinor = "n/a";
valueBrowserVersionMajor = "n/a";

agt=navigator.userAgent.toLowerCase();
appVer = navigator.appVersion.toLowerCase();
appVendor = ((navigator.vendor))?navigator.vendor.toLowerCase():"n/a";
appPlatform = ((navigator.platform))?navigator.platform.toLowerCase():"n/a";

// JavaScript Provided by Sun for detecting jnlp support on non-IE browsers

function jnlpFirstEval () {
   	if (navigator.mimeTypes && navigator.mimeTypes.length) { 
	   x = navigator.mimeTypes['application/x-java-jnlp-file']; 
	   if (x) { 
	      javawsInstalled=1; 
	      javaws142Installed=webstartVersionCheck("1.4.2");
	      javaws150Installed=webstartVersionCheck("1.5");
	      javaws160Installed=webstartVersionCheck("1.6");
	   } 
	} 
	else { 
	      jnlpIE = true; 
	} 
}

// *** General Functions ***

function webstartVersionCheck(versionString) {
	for (var i = 0; i < navigator.mimeTypes.length; ++i) {
		pluginType = navigator.mimeTypes[i].type;
		if (pluginType == "application/x-java-applet;version=" + versionString) {
		return 1;
		}
	}
	return 0;
 }



function getBrowserVersion(a,b,c) {
	startPos=b.indexOf(a);
	endPos=((b.indexOf(c,startPos)!=-1))?b.indexOf(c,startPos):b.length;
	return b.substring(startPos+a.length+1,endPos);
}

function insertDetectionResults(a) {
  document.getElementById('detectionResults').innerHTML=a;  
}

// *** OS Detection ***

var valueOS = appPlatform;

switch (true) {
	case appPlatform.indexOf('win')!=-1 :
	// Detect various forms of Windows
		valueOS = ((agt.indexOf("windows nt 5.0")!=-1) || (agt.indexOf("windows 2000")!=-1))?"win2k":valueOS;
		valueOS = ((agt.indexOf("windows nt 5.1")!=-1) || (agt.indexOf("windows xp")!=-1))?"winxp":valueOS;
		valueOS = ((agt.indexOf("windows nt 5.2")!=-1) || (agt.indexOf("windows 2003")!=-1))?"win2003":valueOS;
		valueOS = ((agt.indexOf("windows nt 6.0")!=-1) || (agt.indexOf("windows vista")!=-1))?"winvista":valueOS;
		break;
	case appPlatform.indexOf('mac')!=-1 :
		// Detect various forms of Mac
		break;
	case appPlatform.indexOf('linux')!=-1 :
		valueOS = "linux";
		break;
}

// *** Browser Detection ***		     

// Check IE

if ((agt.indexOf("mac")==-1) && (appVer.indexOf('msie')!=-1)) {
	valueBrowserName="msie";
	valueBrowserVersion=getBrowserVersion('msie',appVer,';')
}

// Check Safari
if(appVer.indexOf('safari')!=-1) {
	valueBrowserName="safari";
	valueBrowserVersion=getBrowserVersion('applewebkit',appVer,'.')
}

// Check Firefox
if (agt.indexOf('firefox')!=-1) {
	valueBrowserName="firefox";
	valueBrowserVersion=getBrowserVersion('firefox',agt,' ')
}

// WebKit-based Browser Tests (provided by Apple)
var isWebKit = WebKitDetect.isWebKit();
var webKitVersion = (isWebKit)?WebKitDetect.version():"n/a";
    
// Calculate Major and Minor browser versions
valueBrowserVersionMinor = parseFloat(valueBrowserVersion);
valueBrowserVersionMajor = parseInt(valueBrowserVersionMinor);

// *** Main Support Decision Function ***

function checkSupportTable() {

	for (var i = 0; i <= supportArray.length-1; i++) {
		if(valueOS.indexOf(supportArray[i][SUPPORT_OS_VERSION])!=-1 && (supportArray[i][SUPPORT_BEGIN_VER_SUPPORT_INDEX]<=pickArray(verArray,GV_ver,VER_NVP,VER_SUPPORT_INDEX)) && 
(supportArray[i][SUPPORT_BEGIN_REL_SUPPORT_INDEX]<=pickArray(relArray,GV_rel,REL_NVP,REL_SUPPORT_INDEX))) {
			supportedOS=true;
			if(valueBrowserName.indexOf(supportArray[i][SUPPORT_BROWSER_CLASS])!=-1 && (supportArray[i][SUPPORT_BEGIN_VER_SUPPORT_INDEX]<=pickArray(verArray,GV_ver,VER_NVP,VER_SUPPORT_INDEX,2)) && 
(supportArray[i][SUPPORT_BEGIN_REL_SUPPORT_INDEX]<=pickArray(relArray,GV_rel,REL_NVP,REL_SUPPORT_INDEX))) {
				if ((valueBrowserVersionMajor >= supportArray[i][SUPPORT_BROWSER_MAJOR_VERSION_MIN]) &&
				    (valueBrowserVersionMajor <= supportArray[i][SUPPORT_BROWSER_MAJOR_VERSION_MAX])){
					javawsRequired=supportArray[i][SUPPORT_REQUIRE_JWS];
					supportedBrowser=true;
					i=supportArray.length;
				}
			}
		}
	}
	validJava = (javawsInstalled && (javaws142Installed || javaws150Installed || javaws160Installed));
	return ((supportedOS)&&(supportedBrowser)&&(validJava||!(javawsRequired)));
}

// *** Essentially a VLOOKUP for a javascript array ***

function pickArray(searchArray,searchString,searchCol,returnCol) {
	returnString = "!@*";
	for (var i = 0; i <= searchArray.length-1; i++) {
		if(searchArray[i][searchCol]==searchString) {
			returnString=searchArray[i][returnCol];
			i=searchArray.length;
		}
	}
	if (returnString=="!@*") {
		pickArray(searchArray,"default",0,1)
	}
	return (returnString);
}

// *** Main Function ***

function main() {
        configSupported=false;
	jnlpFirstEval();
	if((valueOS.indexOf("win")!=-1)&&(jnlpIE)) {var vbval = jnlpSecondEval();}

	if(checkSupportTable() || GV_override) {
		configSupported=true;
	}
	else {
	    if (supportedOS && supportedBrowser) {
			// Missing jnlp support
	    	insertDetectionResults(messageInstall);
	    }
	    else {
	    	// Configuration is not supported
	    	insertDetectionResults(messageSupport);
	    }
	}
	if(GV_debug){writeDebugMessages();}
	if(configSupported){   // Supported - Launch the rep
		insertDetectionResults(messageLaunch);
		if(GV_autolaunch!=0) {
			if((valueOS.indexOf('win')!=-1) && (valueBrowserName=="msie")) {
				var newElement = ieObjectDiv.cloneNode(false);
				newElement.innerHTML = ieObjectDef;
  			}
			else {
				window.location = appLaunch;
			}
  		}
	}

}

// *** Generate debug results (if enabled by query string) ***

function writeDebugMessages() {

  messageText="";

  messageText+="<center>";
  messageText+="<br><br><table class='contentTable' border='0' cellpadding='0' cellspacing='0'>";
  messageText+="<tbody><tr><td class='centerTD'><div id='centerCol'>";
  messageText+="<h1>Debug Results</h1>";
  messageText+="<p>";

  messageText+="<br><h2>Dynamic JNLP File</h2><br>";
  messageText+="Filename = " + urlLaunch;
  messageText+="<br>";

  messageText+="<br><h2>Java WebStart Detection</h2><br>";
  messageText+="JWS Installed = " + javawsInstalled;
  if (javawsInstalled) {messageText+=" (supported)";}
  else {
    if (!javawsRequired) {messageText+=" (not required)";}
    else {messageText+=" <span style='color:#FF6600'>(not supported)</span>";}
  }
  messageText+="<br>";
  messageText+="JWS 1.4.2 Installed = " + javaws142Installed+"<br>";
  messageText+="JWS 1.5 Installed = " + javaws150Installed+"<br>";
  messageText+="JWS 1.6 Installed = " + javaws160Installed+"<br>";
  
  messageText+="<br><h2>Operating System Detection</h2><br>";
  messageText+="OS = "+ valueOS;
  if (supportedOS) {messageText+=" (supported)";}
  else {messageText+=" <span style='color:#FF6600'>(not supported)</span>";}
  messageText+="<br>";

  messageText+="<br><h2>Browser Detection</h2><br>";
  messageText+="Browser Name = " + valueBrowserName;
  if (supportedBrowser) {messageText+=" (supported)";}
  else {messageText+=" <span style='color:#FF6600'>(not supported)</span>";}
  messageText+="<br>";
  messageText+="Browser Version = " + valueBrowserVersion+"<br>";
  messageText+="Browser Minor = " + valueBrowserVersionMinor+"<br>";
  messageText+="Browser Major = " + valueBrowserVersionMajor+"<br>";
  
  messageText+="<br><h2>WebKit Detection</h2><br>";
  messageText+="isWebKit = "+ isWebKit+"<br>";
  messageText+="WebKit Version = "+ webKitVersion+"<br>";
  
  messageText+="<br><h2>Full Expresion of navigator Object</h2><br>";

  for (i in navigator) {
	messageText+="navigator." + i + " = " + navigator[i]+"<br>";
  }
    
  if(navigator.mimeTypes && navigator.mimeTypes.length) {
		messageText+="<br><h2>Mime Types</h2><br>";

		for (i=0; i<navigator.mimeTypes.length; i++) {
			messageText+= i +
				" = " + navigator.mimeTypes[i].type+
	   			" -- "+navigator.mimeTypes[i].description+
				" -- " +navigator.mimeTypes[i].description+
				"<br>";
		}
  }

  messageText+="</p>";
  messageText+="</div></td></tr></tbody></table>";
  messageText+="</center>";

  document.getElementById('debugDiv').innerHTML=messageText;
  document.getElementById('debugDiv').style.display = "inline";

}

