var imagesDirectoryURL = '/Images/';
var javaScriptURL = '/JavaScript/';
var styleSheetsURL = '/StyleSheets/';
var servletsDirectoryURL = '/servlet/';
var calculatorURL = '/Calculator/';
var computerBasicsURL = '/ComputerBasics/';
// not used yet, but may be:
//var soundDirectoryURL = '/Sounds/';
//var helpDirectoryURL = '/Help/';
//var offlineMaterialsURL = '/OfflineMaterials/';
//var lessonsDirectoryURL = '/Lessons/';
//var installsDirectoryURL = '/Installs/';
//var classesDirectoryURL = '/Classes/';

var statusString = '';
//var statusString = 'status,'; // DEBUG

// get browser version for use in any other scripts
var isNN4, isIE4;
var isNN, isIE;
var isMac;
var browserVersion = parseInt(navigator.appVersion);
var hex_chr = "0123456789abcdef";
var clientkey = "test";

isNN = (navigator.appName == "Netscape");
isIE = (navigator.appName.indexOf("Microsoft") != -1);
if (browserVersion >= 4)
{
	isNN4 = (navigator.appName == "Netscape");
	isIE4 = (navigator.appName.indexOf("Microsoft") != -1);
}
isMac = (navigator.userAgent.toLowerCase().indexOf("mac") != -1);
//if (isNN)
//{
//	window.captureEvents(Event.RESIZE);
//	window.onresize = handleResize;
//}
//
//function handleResize()
//{
//	location.reload();
//	return false;
//}

function CheckLicenseAgreement(width, height)
{
	if (document.cookie.length == 0)
	{
		location.href = '/LicenseAgreement' + width + 'x' + height + '.html';
	}
}

function AcceptLicenseAgreement(width, height)
{
	var expirationDate = new Date();
	var nowPlusOneYear = expirationDate.getTime() + (1000 * 60 * 60 * 24 * 365);
	expirationDate.setTime(nowPlusOneYear);
//	var nowPlusOneMinute = expirationDate.getTime() + (1000 * 60 * 1);
//	expirationDate.setTime(nowPlusOneMinute);
	document.cookie = "LicenseAgreementAccepted=True; expires=" + expirationDate.toGMTString();

	location.href = servletsDirectoryURL + 'Interface?Size=' + width + 'x' + height;
}

function OpenLoginWindow()
{
	var newWindowWidth = 560;
	var newWindowHeight = 200;
	/*if (isMac && isIE)
		{
		newWindowWidth = newWindowWidth - 15;
		newWindowHeight = newWindowHeight - 15;
		}*/
	// Change made by Ashish, Jaikrit on 13th january 05
	// for screen area setting of 800x600
	//	if (screen.width <= 800)

	if (screen.width < 800)
	{
		// 640x480 version
		OpenNewWindow(servletsDirectoryURL + 'Interface?Size=640x480', 'InterfaceSelection', newWindowWidth, newWindowHeight, statusString + ',scrollbars=no');
	}
	else
	{
		// 800x600 version
		newWindowWidth = 700;
		newWindowHeight = 250;
		/*if (isMac && isIE)
			{
			newWindowWidth = newWindowWidth - 15;
			newWindowHeight = newWindowHeight - 15;
			}*/
		OpenNewWindow(servletsDirectoryURL + 'Interface?Size=800x600', 'InterfaceSelection', newWindowWidth, newWindowHeight, statusString + ',scrollbars=no');
	}
}

function HandleLoginPageEvent(event)
{
	var keyCode;
	var source;
	var sourceTextField;
	if (isNN)
	{
		keyCode = event.which;
		sourceTextField = event.target;
	}
	else
	{
		keyCode = event.keyCode;
		sourceTextField = event.srcElement;
	}
	if (keyCode == 13)
	{
		var otherTextField;
		if (sourceTextField == document.LogInfForm.PP)
		{
			if (sourceTextField.value.length > 0)
			{
				//if (isNN)
				//	{
					doLoginSubmit();
				//	}
			}
			return true;
		}
		
		if (sourceTextField == document.LogInfForm.Nf)
		{
			otherTextField = document.LogInfForm.If;
		}
		else if (sourceTextField == document.LogInfForm.If)
		{
			otherTextField = document.LogInfForm.Nf;
		}
		if (sourceTextField.value.length > 0)
		{
			if (otherTextField.value.length > 0)
			{
				//if (isNN)
				//{
					doLoginSubmit();
				//}
			}
			else
			{
				otherTextField.focus();
			}
		}
		else
		{
			sourceTextField.focus();
		}
	}
	return true;
}

function doLoginSubmit()
	{
	handleLoginSubmit();
	document.LogInForm.submit();
	}
	
function handleLoginSubmit()
	{
	clientkey = document.LogInfForm.If.value.toLowerCase();
	var password = document.LogInfForm.DD.value + document.LogInfForm.If.value.toLowerCase();
	var newPassword = calcMD5(password);
	var fakePassword = "";
	for (var i = 0; i < document.LogInfForm.If.value.length; i++)
		fakePassword = fakePassword + "*";
	document.LogInForm.I.value = newPassword;
	document.LogInfForm.If.value = fakePassword;
	document.LogInForm.N.value = document.LogInfForm.Nf.value;
	
	var siteSelect = document.LogInfForm.Sf;
	document.LogInForm.S.value = siteSelect.options[siteSelect.selectedIndex].value;
	
	var expirationDate = new Date();
	var nowPlusOneYear = expirationDate.getTime() + (1000 * 60 * 60 * 24 * 365);
	expirationDate.setTime(nowPlusOneYear);
	document.cookie = 'Site=' + document.LogInForm.S.value + '; expires=' + expirationDate.toGMTString();
	
	return true;
	}

// General functions
function OpenNewWindow(urlToOpen)
{
	return OpenNewWindow(urlToOpen, urlToOpen, 640, 480, "");
}

function OpenNewWindow(urlToOpen, width, height)
{
	return OpenNewWindow(urlToOpen, urlToOpen, width, height, "");
}

function OpenNewWindow(urlToOpen, name, width, height, decorations)
{
	return GetNewWindow(urlToOpen, name, width, height, decorations);
}

function GetNewWindow(urlToOpen, name, width, height, decorations)
{
	var newWindow;

	// can't center the new window
	var window_left = 0;
	var window_top = 0;
		
	if (browserVersion > 3)
	{
		// center the new window
		if (screen.width > 800 || width < 800){
			window_left = (screen.width - (width + 10)) / 2;//+10 for side rails of window
		}
		
		if (screen.height > 600 || height < 600){
			window_top = (screen.height - (height+30)) / 2;//+30 for window bar
		}
		
		
		//alert("screen.width - "+screen.width + ", screen.height - "+screen.height+ ", window_left - "+window_left+", window_top - "+window_top);
	}	

	newWindow = window.open(urlToOpen, name,
		decorations + ",width=" + width + ",height=" + height + ",top=" + window_top + ",left=" + window_left + "");
	
	//newWindow.moveTo(screen.availWidth / 2- ((width + 10) / 2), screen.availHeight / 2 - ((height + 30) / 2));
	newWindow.focus();
	//newWindow.clientkey = clientkey;
	return newWindow;
}

function GetHTML(bodyHTML, scripts, bodyTags)
{
	// no title (for when creating a frame's HTML)
	return GetHTMLWithTitle(bodyHTML, scripts, '', bodyTags);
}

function GetHTMLWithStyleSheet(bodyHTML, scripts, bodyTags, styleSheet)
{

	var frame = '';
	
	if ((bodyTags != null) && (bodyTags.length == 0))
	{
		bodyTags = null;
	}
	
	frame += '<HTML><HEAD>\n';
	frame += '<TITLE>' + '</TITLE>\n';
	frame += '<META http-equiv="Expires" content="Tue, 02 Jan 1980 1:00:00 GMT">\n';
	if (styleSheet != null && styleSheet == 'noStyleSheet')
		frame += '<!-- No stylesheet Tags -->';
	else
		frame += '<LINK rel="stylesheet" type="text/css" href="' + styleSheetsURL + styleSheet + '">\n';
	for (var scriptIndex = 0; scriptIndex < scripts.length; scriptIndex++)
	{
		frame += '<SCRIPT language="JavaScript" src="' + javaScriptURL + scripts[scriptIndex] + 'Script.js"></SC' + 'RIPT>\n';
	}
	frame += '</HEAD>\n';
	if (bodyTags != null && bodyTags == 'noBody')
		frame += '<!-- No Body Tags -->';
	else
		frame += '<BODY class="smallmargin" marginheight="0" marginwidth="0"' + (bodyTags != null ? ' ' + bodyTags : '') + '>\n';
	frame += bodyHTML;
	if (bodyTags != null && bodyTags == 'noBody')
		frame += '<!-- No Body Tags -->';
	else
		frame += '</BODY>\n';
	frame += '</HTML>\n';
	
	return frame;
}

function GetHTMLWithTitle(bodyHTML, scripts, title, bodyTags)
{
	var frame = '';
	
	if ((bodyTags != null) && (bodyTags.length == 0))
	{
		bodyTags = null;
	}
	
	frame += '<HTML><HEAD>\n';
	frame += '<TITLE>' + title + '</TITLE>\n';
	frame += '<META http-equiv="Expires" content="Tue, 02 Jan 1980 1:00:00 GMT">\n';
	frame += '<LINK rel="stylesheet" type="text/css" href="' + styleSheetsURL + 'MainSheet.css">\n';
	for (var scriptIndex = 0; scriptIndex < scripts.length; scriptIndex++)
	{
		frame += '<SCRIPT language="JavaScript" src="' + javaScriptURL + scripts[scriptIndex] + 'Script.js"></SC' + 'RIPT>\n';
	}
	frame += '</HEAD>\n';
	if (bodyTags != null && bodyTags == 'noBody')
		frame += '<!-- No Body Tags -->';
	else
		frame += '<BODY class="smallmargin" marginheight="0" marginwidth="0"' + (bodyTags != null ? ' ' + bodyTags : '') + '>\n';
	frame += bodyHTML;
	if (bodyTags != null && bodyTags == 'noBody')
		frame += '<!-- No Body Tags -->';
	else
		frame += '</BODY>\n';
	frame += '</HTML>\n';
	
	return frame;
}

function WriteBlankFrame()
{
	return GetHTML('', new Array(), null);
}



// Macromedia Dreamweaver standard functions (MM_*)
function MM_showHideLayers() { //v1.2
	if (!pageFullyLoaded)
	{
		return;
	}
	var i, visStr, args, theObj;
	args = MM_showHideLayers.arguments;
	for (i=0; i<(args.length-2); i+=3) { //with arg triples (objNS,objIE,visStr)
		visStr   = args[i+2];
		if (navigator.appName == 'Netscape' && document.layers != null) {
			theObj = eval(args[i]);
			if (theObj) theObj.visibility = visStr;
		} else if (document.all != null) { //IE
			if (visStr == 'show') visStr = 'visible'; //convert vals
			if (visStr == 'hide') visStr = 'hidden';
			theObj = eval(args[i+1]);
			if (theObj) theObj.style.visibility = visStr;
	} }
}
function MM_changeProp(objStrNS,objStrIE,theProp,theValue) { //v1.2
	if (!pageFullyLoaded)
	{
		return;
	}
	var NS = (navigator.appName == 'Netscape');
	var objStr = (NS)?objStrNS:objStrIE;
	if (( NS && (objStr.indexOf('document.layers[')!=0 || document.layers!=null)) ||
			(!NS && (objStr.indexOf('document.all[')   !=0 || document.all   !=null))) {
		var obj = eval(objStr);
		if ((obj != null) && (theProp.indexOf("style.") != 0 || obj.style != null)) {
			eval(objStr+'.'+theProp + '="'+theValue+'"');
	} }
}

function MM_swapImage() { //v1.2
	var i,j=0,objStr,obj,swapArray=new Array,oldArray=document.MM_swapImgData;
	for (i=0; i < (MM_swapImage.arguments.length-2); i+=3) {
		objStr = MM_swapImage.arguments[(navigator.appName == 'Netscape')?i:i+1];
		if ((objStr.indexOf('document.layers[')==0 && document.layers==null) ||
			 (objStr.indexOf('document.all[')==0 && document.all==null))
			objStr = 'document'+objStr.substring(objStr.lastIndexOf('.'),objStr.length);
		obj = eval(objStr);
		if (obj != null) {
			swapArray[j++] = obj;
			swapArray[j++] = (oldArray==null || oldArray[j-1]!=obj)?obj.src:oldArray[j];
			obj.src = MM_swapImage.arguments[i+2];
	} }
	document.MM_swapImgData = swapArray; //used for restore
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}


function MM_openBrWindow(theURL,winName,features) { //v1.2
  window.open(theURL,winName,features);
}
//--------------------------------------------------------------------------//
function addToArray(inArray, value)
	{
	var tempArray = new Array(inArray.length + 1);
	for (var i = 0; i < inArray.length; i++)
		{
		tempArray[i] = inArray[i];
		}
	tempArray[inArray.length] = value;
	return tempArray;
	}
//--------------------------------------------------------------------------//
function rhex(num)
	{
	str = "";
	for(j = 0; j <= 3; j++)
		str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) +
					hex_chr.charAt((num >> (j * 8)) & 0x0F);
	return str;
	}

/*
* Convert a string to a sequence of 16-word blocks, stored as an array.
* Append padding bits and the length, as described in the MD5 standard.
*/
function str2blks_MD5(str)
	{
	nblk = ((str.length + 8) >> 6) + 1;
	blks = new Array(nblk * 16);
	for(i = 0; i < nblk * 16; i++)
		blks[i] = 0;
	for(i = 0; i < str.length; i++)
		blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8);
	blks[i >> 2] |= 0x80 << ((i % 4) * 8);
	blks[nblk * 16 - 2] = str.length * 8;
	return blks;
	}

/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally 
* to work around bugs in some JS interpreters.
*/
function add(x, y)
	{
	var lsw = (x & 0xFFFF) + (y & 0xFFFF);
	var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
	return (msw << 16) | (lsw & 0xFFFF);
	}

/*
* Bitwise rotate a 32-bit number to the left
*/
function rol(num, cnt)
	{
	return (num << cnt) | (num >>> (32 - cnt));
	}

/*
* These functions implement the basic operation for each round of the
* algorithm.
*/
function cmn(q, a, b, x, s, t)
	{
	return add(rol(add(add(a, q), add(x, t)), s), b);
	}
function ff(a, b, c, d, x, s, t)
	{
	return cmn((b & c) | ((~b) & d), a, b, x, s, t);
	}
function gg(a, b, c, d, x, s, t)
	{
	return cmn((b & d) | (c & (~d)), a, b, x, s, t);
	}
function hh(a, b, c, d, x, s, t)
	{
	return cmn(b ^ c ^ d, a, b, x, s, t);
	}
function ii(a, b, c, d, x, s, t)
	{
	return cmn(c ^ (b | (~d)), a, b, x, s, t);
	}

/*
* Take a string and return the hex representation of its MD5.
*/
function calcMD5(str)
	{
	x = str2blks_MD5(str);
	a =  1732584193;
	b = -271733879;
	c = -1732584194;
	d =  271733878;

	for(i = 0; i < x.length; i += 16)
		{
		olda = a;
		oldb = b;
		oldc = c;
		oldd = d;

		a = ff(a, b, c, d, x[i+ 0], 7 , -680876936);
		d = ff(d, a, b, c, x[i+ 1], 12, -389564586);
		c = ff(c, d, a, b, x[i+ 2], 17,  606105819);
		b = ff(b, c, d, a, x[i+ 3], 22, -1044525330);
		a = ff(a, b, c, d, x[i+ 4], 7 , -176418897);
		d = ff(d, a, b, c, x[i+ 5], 12,  1200080426);
		c = ff(c, d, a, b, x[i+ 6], 17, -1473231341);
		b = ff(b, c, d, a, x[i+ 7], 22, -45705983);
		a = ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
		d = ff(d, a, b, c, x[i+ 9], 12, -1958414417);
		c = ff(c, d, a, b, x[i+10], 17, -42063);
		b = ff(b, c, d, a, x[i+11], 22, -1990404162);
		a = ff(a, b, c, d, x[i+12], 7 ,  1804603682);
		d = ff(d, a, b, c, x[i+13], 12, -40341101);
		c = ff(c, d, a, b, x[i+14], 17, -1502002290);
		b = ff(b, c, d, a, x[i+15], 22,  1236535329);    

		a = gg(a, b, c, d, x[i+ 1], 5 , -165796510);
		d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
		c = gg(c, d, a, b, x[i+11], 14,  643717713);
		b = gg(b, c, d, a, x[i+ 0], 20, -373897302);
		a = gg(a, b, c, d, x[i+ 5], 5 , -701558691);
		d = gg(d, a, b, c, x[i+10], 9 ,  38016083);
		c = gg(c, d, a, b, x[i+15], 14, -660478335);
		b = gg(b, c, d, a, x[i+ 4], 20, -405537848);
		a = gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
		d = gg(d, a, b, c, x[i+14], 9 , -1019803690);
		c = gg(c, d, a, b, x[i+ 3], 14, -187363961);
		b = gg(b, c, d, a, x[i+ 8], 20,  1163531501);
		a = gg(a, b, c, d, x[i+13], 5 , -1444681467);
		d = gg(d, a, b, c, x[i+ 2], 9 , -51403784);
		c = gg(c, d, a, b, x[i+ 7], 14,  1735328473);
		b = gg(b, c, d, a, x[i+12], 20, -1926607734);

		a = hh(a, b, c, d, x[i+ 5], 4 , -378558);
		d = hh(d, a, b, c, x[i+ 8], 11, -2022574463);
		c = hh(c, d, a, b, x[i+11], 16,  1839030562);
		b = hh(b, c, d, a, x[i+14], 23, -35309556);
		a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
		d = hh(d, a, b, c, x[i+ 4], 11,  1272893353);
		c = hh(c, d, a, b, x[i+ 7], 16, -155497632);
		b = hh(b, c, d, a, x[i+10], 23, -1094730640);
		a = hh(a, b, c, d, x[i+13], 4 ,  681279174);
		d = hh(d, a, b, c, x[i+ 0], 11, -358537222);
		c = hh(c, d, a, b, x[i+ 3], 16, -722521979);
		b = hh(b, c, d, a, x[i+ 6], 23,  76029189);
		a = hh(a, b, c, d, x[i+ 9], 4 , -640364487);
		d = hh(d, a, b, c, x[i+12], 11, -421815835);
		c = hh(c, d, a, b, x[i+15], 16,  530742520);
		b = hh(b, c, d, a, x[i+ 2], 23, -995338651);

		a = ii(a, b, c, d, x[i+ 0], 6 , -198630844);
		d = ii(d, a, b, c, x[i+ 7], 10,  1126891415);
		c = ii(c, d, a, b, x[i+14], 15, -1416354905);
		b = ii(b, c, d, a, x[i+ 5], 21, -57434055);
		a = ii(a, b, c, d, x[i+12], 6 ,  1700485571);
		d = ii(d, a, b, c, x[i+ 3], 10, -1894986606);
		c = ii(c, d, a, b, x[i+10], 15, -1051523);
		b = ii(b, c, d, a, x[i+ 1], 21, -2054922799);
		a = ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
		d = ii(d, a, b, c, x[i+15], 10, -30611744);
		c = ii(c, d, a, b, x[i+ 6], 15, -1560198380);
		b = ii(b, c, d, a, x[i+13], 21,  1309151649);
		a = ii(a, b, c, d, x[i+ 4], 6 , -145523070);
		d = ii(d, a, b, c, x[i+11], 10, -1120210379);
		c = ii(c, d, a, b, x[i+ 2], 15,  718787259);
		b = ii(b, c, d, a, x[i+ 9], 21, -343485551);

		a = add(a, olda);
		b = add(b, oldb);
		c = add(c, oldc);
		d = add(d, oldd);
		}
	return rhex(a) + rhex(b) + rhex(c) + rhex(d);
	}
