/* ------------------------------------------------------------
* Copyright 2005-2009 iLinc Communications, Inc.
* All rights reserved.
*
* The program and information contained herein are licensed
* only pursuant to a license agreement that contains use, 
* reverse engineering, disclosure, and other restrictions.
* The license does not allow removal of this copyright 
* message from this file.
*------------------------------------------------------------ */

function initSystemTest() {
	// check to see if ssl should be used when setting cookie
	var proto = location.protocol;
	var useSSLCookie = (proto == 'https:' ? 1 : 0);

	var showEndMsg = false;

	// cookie test
	setCookie('cookie_test', 'none', '', '/', '', useSSLCookie);
	if ( getCookie('cookie_test') ) {
		$('#systest_cookieEnabled').show();
		$('#systest_cookiestatusOK').show();
		delCookie('cookie_test', '/', '', useSSLCookie); // remove test cookie
	} else {
		$('#systest_cookieDisabled').show();
		$('#systest_cookiestatusNotOK').show();
		$('#systest_cookieMsg').show();
		showEndMsg = true;
	}
	
	// javascript test
	var jstest = true;
	if (jstest) {
		$('#systest_js').show();
		$('#systest_jsstatusOK').show();
	} else {
		$('#systest_jstestMsg').show();
		$('#systest_jsstatusNotOK').show();
		showEndMsg = true;
	}

	// set colortest
	if (screen.colorDepth >= 8) {
		$('#systest_color').html(screen.colorDepth + "-" + "bit");
		$('#systest_colorstatusOK').show();
	} else {
		$('#systest_colorstatusNotOK').show();
		$('#systest_colorMsg').show();
		showEndMsg = true;
	}

	// detect compatible browser versions

	var browObj = detectBrowserProps();
	var bname = browObj.browser.name;
	var bversion = browObj.browser.version;
	var success = browObj.success;

	$('#systest_b').html(bname + " " + bversion);
	if (success) {
		$('#systest_bstatusOK').show();
	} else {
		$('#systest_bMsg').show();
		$('#systest_bstatusNotOK').show();
		showEndMsg = true;
	}

	// try to detect OS
	$('#systest_op').html(navigator.platform);
	if (navigator.platform == "Win32" || navigator.platform.indexOf('Mac') != -1) {
		$('#systest_opstatusOK').show();
	} else {
		$('#systest_opMsg').show();
		$('#systest_opstatusNotOK').show();
		showEndMsg = true;
	}

	// Display recommendations where needed.
	if (showEndMsg) {
		$('#systest_endMsg').show();
	}	
}	

/* session cookie functions */

function getCookie(cName) {
	if (document.cookie.length > 0) {
		var cStart = document.cookie.indexOf(cName+"=");
		if (cStart != -1) {
			cStart = cStart + cName.length + 1;
			var cEnd = document.cookie.indexOf(";", cStart);
			if (cEnd == -1)
				cEnd = document.cookie.length;

			return unescape(document.cookie.substring(cStart, cEnd));
		}
	} else {
		return "";
	}
}


function setCookie(cName, cVal, expDays, path, domain, secure) {
	var expDate = new Date();
	expDate.setDate(expDate.getDate()+expDays);
	document.cookie = cName + "=" + escape(cVal) + 
		( ( expDays ) ? ";expires=" + expDate.toUTCString() : "" ) + 
		( ( path ) ? ";path=" + path : "" ) + 
		( ( domain ) ? ";domain=" + domain : "" ) +
		( ( secure == 1 ) ? ";secure" : "" );
}

function delCookie(cName, path, domain, secure) {
	// use same info as setCookie
	if ( getCookie(cName) ) document.cookie = cName + "=" +
		( ( path ) ? ";path=" + path : "") +
		( ( domain ) ? ";domain=" + domain : "" ) +
		";expires=Thu, 01-Jan-1970 00:00:01 GMT" + 
		( ( secure == 1 ) ? ";secure" : "" );
}

function detectBrowserProps() {
	//initialization, browser, os detection

	var d, dom, nu='', brow='', ie, ie4, ie5, ie5x, ie6, ie7, ie8;
	var ns4, moz, moz_rv_sub, release_date='', moz_brow, moz_brow_nu='', moz_brow_nu_sub='', rv_full=''; 
	var mac, win, old, lin, ie5mac, ie5xwin, konq, saf, op, op4, op5, op6, op7;
	var success;
		
	d = document;
	n = navigator;
	nav = n.appVersion;
	nan = n.appName;
	nua = n.userAgent;
	old = (nav.substring(0,1)<4);
	mac = (nav.indexOf('Mac')!=-1);
	win = ( ( (nav.indexOf('Win')!=-1) || (nav.indexOf('NT')!=-1) ) && !mac)?true:false;
	lin = (nua.indexOf('Linux')!=-1);

	var os = '';
	var osAry = new Array('lin', 'mac', 'win');
	for (var i=0; i<osAry.length; i++) {
		if (eval(osAry[i])) {
			os = osAry[i];
		}
	}

	var uaAry = nua.split("/");
	var tmpAry = uaAry[1].split(";");
	var osVersion = $.trim(tmpAry[2]);
	osVersion = osVersion.toLowerCase();
	osVersion = (osVersion.indexOf('windows nt 6') != -1 ? 'vista' : osVersion);

	// begin primary dom/ns4 test
	// this is the most important test on the page
	if ( !document.layers )
	{
		dom = ( d.getElementById ) ? d.getElementById : false;
	}
	else { 
		dom = false; 
		ns4 = true;// only netscape 4 supports document layers
	}
	// end main dom/ns4 test
		
	op=(nua.indexOf('Opera')!=-1);
	//saf=(nua.indexOf('Safari')!=-1);
	chrome=(nua.indexOf('Chrome')!=-1);
	saf=(!chrome && (nua.indexOf('Safari')!=-1) ) ? true : false;
	konq=(!saf && (nua.indexOf('Konqueror')!=-1) ) ? true : false;
	moz=( (!saf && !konq ) && ( nua.indexOf('Gecko')!=-1 ) ) ? true : false;
	ie=((nua.indexOf('MSIE')!=-1)&&!op);
	if (op)
	{
		str_pos=nua.indexOf('Opera');
		nu=nua.substr((str_pos+6),4);
		brow = 'Opera';
		success = 0;
	}
	else if (chrome)
	{
		var vAry = nua.split("/");
		str_pos=nua.indexOf('Chrome');
		var v = vAry[3];
		vArySplit = v.split(" ");
		nu = vArySplit[0];

		brow = 'Chrome';
		success = 1; // chrome ok
	}
	else if (saf)
	{
		// updated for Safari 3
		var vAry = nua.split("/");
		str_pos=nua.indexOf('Safari');
		//nu=nua.substr((str_pos+7),5);
		var v = vAry[3];
		vArySplit = v.split(" ");
		nu = vArySplit[0];

		// based on Safari build, not AppleWebKit
		var sVerAry = new Array();
		sVerAry['412'] = '2';
		sVerAry['412.2'] = '2';
		sVerAry['412.2.2'] = '2';
		sVerAry['412.5'] = '2.0.1';
		sVerAry['416.12'] = '2.0.2';
		sVerAry['416.13'] = '2.0.2';
		sVerAry['417.8'] = '2.0.3';
		sVerAry['417.9.2'] = '2.0.3';
		sVerAry['417.9.3'] = '2.0.3';
		sVerAry['419.3'] = '2.0.4';
		sVerAry['100'] = '1.1';
		sVerAry['100.1'] = '1.1.1';
		sVerAry['125.7'] = '1.2.2';
		sVerAry['125.8'] = '1.2.2';
		sVerAry['125.9'] = '1.2.3';
		sVerAry['125.11'] = '1.2.4';
		sVerAry['125.12'] = '1.2.4';
		sVerAry['312'] = '1.3';
		sVerAry['312.3'] = '1.3.1';
		sVerAry['312.3.1'] = '1.3.1';
		sVerAry['312.5'] = '1.3.2';
		sVerAry['312.6'] = '1.3.2';
		sVerAry['85.5'] = '1';
		sVerAry['85.7'] = '1.0.2';
		sVerAry['85.8'] = '1.0.3';
		sVerAry['85.8.1'] = '1.0.3';

		if (sVerAry[nu])
			nu = sVerAry[nu];

		brow = 'Safari';
		success = 1; // safari ok
	}
	else if (konq)
	{
		str_pos=nua.indexOf('Konqueror');
		nu=nua.substr((str_pos+10),3);
		brow = 'Konqueror';
		success = 0;
	}
	// this part is complicated a bit, don't mess with it unless you understand regular expressions
	// note, for most comparisons that are practical, compare the 3 digit rv number, that is the output
	// placed into 'nu'.
	else if (moz)
	{
		// regular expression pattern that will be used to extract main version/rv numbers
		pattern = /[(); \n]/;
		// moz type array, add to this if you need to
		moz_types = new Array( 'Firebird', 'Phoenix', 'Firefox', 'Galeon', 'K-Meleon', 'Camino', 'Epiphany', 
			'Netscape6', 'Netscape', 'MultiZilla', 'Gecko Debian', 'rv' );
		rv_pos = nua.indexOf( 'rv' );// find 'rv' position in nua string
		rv_full = nua.substr( rv_pos + 3, 6 );// cut out maximum size it can be, eg: 1.8a2, 1.0.0 etc
		// search for occurance of any of characters in pattern, if found get position of that character
		rv_slice = ( rv_full.search( pattern ) != -1 ) ? rv_full.search( pattern ) : '';
		//check to make sure there was a result, if not do nothing
		// otherwise slice out the part that you want if there is a slice position
		( rv_slice ) ? rv_full = rv_full.substr( 0, rv_slice ) : '';
		// this is the working id number, 3 digits, you'd use this for 
		// number comparison, like if nu >= 1.3 do something
		nu = rv_full.substr( 0, 3 );
		for (i=0; i < moz_types.length; i++)
		{
			if ( nua.indexOf( moz_types[i]) !=-1 )
			{
				moz_brow = moz_types[i];
				break;
			}
		}
		if ( moz_brow )// if it was found in the array
		{
			str_pos=nua.indexOf(moz_brow);// extract string position
			moz_brow_nu = nua.substr( (str_pos + moz_brow.length + 1 ) ,3);// slice out working number, 3 digit
			// if you got it, use it, else use nu
			moz_brow_nu = ( isNaN( moz_brow_nu ) ) ? moz_brow_nu = nu: moz_brow_nu;
			moz_brow_nu_sub = nua.substr( (str_pos + moz_brow.length + 1 ), 8);
			// this makes sure that it's only the id number
			sub_nu_slice = ( moz_brow_nu_sub.search( pattern ) != -1 ) ? moz_brow_nu_sub.search( pattern ) : '';
			//check to make sure there was a result, if not do  nothing
			( sub_nu_slice ) ? moz_brow_nu_sub = moz_brow_nu_sub.substr( 0, sub_nu_slice ) : '';
		}
		if ( moz_brow == 'Netscape6' )
		{
			moz_brow = 'Netscape';
		}
		else if ( moz_brow == 'rv' || moz_brow == '' )// default value if no other gecko name fit
		{
			moz_brow = 'Mozilla';
		} 
		if ( !moz_brow_nu )// use rv number if nothing else is available
		{
			moz_brow_nu = nu;
			moz_brow_nu_sub = nu;
		}
		if (n.productSub)
		{
			release_date = n.productSub;
		}
		brow = moz_brow;
		nu = moz_brow_nu;

		if (brow == 'Netscape') {
			success = (parseFloat(nu) >= 7 ? 1 : 0);
		} else {
			success = 1;
		}
	}
	else if (ie)
	{
		str_pos=nua.indexOf('MSIE');
		nu=nua.substr((str_pos+5),3);
		//brow = 'Microsoft Internet Explorer';
		brow = 'IE';	
		success = (parseFloat(nu) >= 5 && !mac ? 1 : 0);
	}
	// default to navigator app name
	else 
	{
		brow = nan;
		nu=parseFloat(navigator.appVersion);

		if (brow == 'Netscape') {
			success = (parseFloat(nu) >= 7 ? 1 : 0);
		} else {
			success = 0;
		}
	}		
	op5=(op&&(nu.substring(0,1)==5));
	op6=(op&&(nu.substring(0,1)==6));
	op7=(op&&(nu.substring(0,1)==7));
	ie4=(ie&&!dom);
	ie5=(ie&&(nu.substring(0,1)==5));
	ie6=(ie&&(nu.substring(0,1)==6));
	ie7=(ie&&(nu.substring(0,1)==7));
	ie8=(ie&&(nu.substring(0,1)==8));

	// default to get number from navigator app version.
	if(!nu) {
		nu = nav.substring(0,1);
		if (brow == 'Netscape') {
			success = (parseFloat(nu) >= 7 ? 1 : 0);
		} else {
			success = 0;
		}
	}
	
	/*ie5x tests only for functionality. dom or ie5x would be default settings. 
	Opera will register true in this test if set to identify as IE 5*/
	ie5x=(d.all&&dom);
	ie5mac=(mac&&ie5);
	ie5xwin=(win&&ie5x);
	var gecko = (nua.indexOf('Gecko')!= -1);

	var ret = new Object();
	ret["browser"] = new Object();
	ret["browser"]["name"] = brow;
	ret["browser"]["version"] = nu;
	ret["browser"]["supported"] = success;
	ret["browser"]["ie6"] = (ie6 ? true : false);
	ret["browser"]["ie7"] = (ie7 ? true : false);
	ret["browser"]["ie8"] = (ie8 ? true : false);
	ret["browser"]["gecko"] = (gecko ? true : false);
	ret["os"] = new Object();
	ret["os"]["name"] = os;
	ret["os"]["version"] = osVersion;
	ret["success"] = success;

	return ret;
}

