// js-lib.js  v3.1
// By: dZ.
// Last Updated: 06/10/2005
//
// Copyright (c) 2k++ Technology Unlimited PR.

// Image Arrays for ImageSwaps
	var IMAGE_ARRAY_ON    = new Array;
	var IMAGE_ARRAY_OFF   = new Array;
	var IMAGE_FILE_PREFIX = 'btn';
	var IMAGE_FILE_PATH   = '/graphix/';

// Browser Sniffer
//
// Ultimate client-side JavaScript client sniff. Version 3.03
// (C) Netscape Communications 1999.  Permission granted to reuse and distribute.
//
function Is ()
{   // convert all characters to lowercase to simplify testing
	var agent=navigator.userAgent.toLowerCase();

	// *** BROWSER VERSION ***
	// Note: On IE5, these return 4, so use is.ie5up to detect IE5.

	this.major = parseInt(navigator.appVersion);
	this.minor = parseFloat(navigator.appVersion);

	// Note: Opera and WebTV spoof Navigator.  We do strict client detection.
	// If you want to allow spoofing, take out the tests for opera and webtv.
	this.nav    = ((agent.indexOf('mozilla')!=-1) && (agent.indexOf('spoofer')==-1)
				&& (agent.indexOf('compatible') == -1) && (agent.indexOf('opera')==-1)
				&& (agent.indexOf('webtv')==-1) && (agent.indexOf('hotjava')==-1));
	this.nav2   = (this.nav && (this.major == 2));
	this.nav3   = (this.nav && (this.major == 3));
	this.nav4   = (this.nav && (this.major == 4));
	this.nav4up = (this.nav && (this.major >= 4));
	this.navonly= (this.nav && ((agent.indexOf(';nav') != -1) || (agent.indexOf('; nav') != -1)) );
	this.nav6   = (this.nav && (this.major == 5));
	this.nav6up = (this.nav && (this.major >= 5));
	this.gecko  = (agent.indexOf('gecko') != -1);


	this.ie      = ((agent.indexOf('msie') != -1)     && (agent.indexOf('opera') == -1));
	this.ie3     = (this.ie && (this.major < 4));
	this.ie4     = (this.ie && (this.major == 4)      && (agent.indexOf('msie 4')!=-1) );
	this.ie4up   = (this.ie && (this.major >= 4));
	this.ie5     = (this.ie && (this.major == 4)      && (agent.indexOf('msie 5.0')!=-1) );
	this.ie5_5   = (this.ie && (this.major == 4)      && (agent.indexOf('msie 5.5') !=-1));
	this.ie5up   = (this.ie && !this.ie3 && !this.ie4);
	this.ie5_5up = (this.ie && !this.ie3 && !this.ie4 && !this.ie5);
	this.ie6     = (this.ie && (this.major == 4)      && (agent.indexOf('msie 6.')!=-1) );
	this.ie6up   = (this.ie && !this.ie3 && !this.ie4 && !this.ie5 && !this.ie5_5);

	// KNOWN BUG: On AOL4, returns false if IE3 is embedded browser
	// or if this is the first browser window opened.  Thus the
	// variables is.aol, is.aol3, and is.aol4 aren't 100% reliable.
	this.aol    = (agent.indexOf('aol') != -1);
	this.aol3   = (this.aol && this.ie3);
	this.aol4   = (this.aol && this.ie4);
	this.aol5   = (agent.indexOf('aol 5') != -1);
	this.aol6   = (agent.indexOf('aol 6') != -1);

	this.opera  = (agent.indexOf('opera') != -1);
	this.opera2 = (agent.indexOf('opera 2') != -1 || agent.indexOf('opera/2') != -1);
	this.opera3 = (agent.indexOf('opera 3') != -1 || agent.indexOf('opera/3') != -1);
	this.opera4 = (agent.indexOf('opera 4') != -1 || agent.indexOf('opera/4') != -1);
	this.opera5 = (agent.indexOf('opera 5') != -1 || agent.indexOf('opera/5') != -1);
	this.opera5up = (this.opera && !this.opera2 && !this.opera3 && !this.opera4);

	this.webtv = (agent.indexOf('webtv') != -1);

	this.TVNavigator = ((agent.indexOf('navio') != -1) || (agent.indexOf('navio_aoltv') != -1));
	this.AOLTV = this.TVNavigator;

	this.hotjava = (agent.indexOf('hotjava') != -1);
	this.hotjava3 = (this.hotjava && (this.major == 3));
	this.hotjava3up = (this.hotjava && (this.major >= 3));

	// *** JAVASCRIPT VERSION CHECK ***
	if (this.nav2 || this.ie3) this.js = 1.0;
	else if (this.nav3) this.js = 1.1;
	else if (this.opera5up) this.js = 1.3;
	else if (this.opera) this.js = 1.1;
	else if ((this.nav4 && (this.minor <= 4.05)) || this.ie4) this.js = 1.2;
	else if ((this.nav4 && (this.minor > 4.05)) || this.ie5) this.js = 1.3;
	else if (this.hotjava3up) this.js = 1.4;
	else if (this.nav6 || this.gecko) this.js = 1.5;
	// NOTE: In the future, update this code when newer versions of JS
	// are released. For now, we try to provide some upward compatibility
	// so that future versions of Nav and IE will show they are at
	// *least* JS 1.x capable. Always check for JS version compatibility
	// with > or >=.
	else if (this.nav6up) this.js = 1.5;
	// note ie5up on mac is 1.4
	else if (this.ie5up) this.js = 1.3

	// HACK: no idea for other browsers; always check for JS version with > or >=
	else this.js = 0.0;

	// *** PLATFORM ***
	this.win   = ( (agent.indexOf('win')!=-1) || (agent.indexOf('16bit')!=-1) );
	// NOTE: On Opera 3.0, the userAgent string includes 'Windows 95/NT4' on all
	//        Win32, so you can't distinguish between Win95 and WinNT.
	this.win95 = ((agent.indexOf('win95')!=-1) || (agent.indexOf('windows 95')!=-1));

	// is this a 16 bit compiled version?
	this.win16 = ((agent.indexOf('win16')!=-1) ||
			   (agent.indexOf('16bit')!=-1) || (agent.indexOf('windows 3.1')!=-1) ||
			   (agent.indexOf('windows 16-bit')!=-1) ); 

	this.win31 = ((agent.indexOf('windows 3.1')!=-1) || (agent.indexOf('win16')!=-1) ||
					(agent.indexOf('windows 16-bit')!=-1));

	// NOTE: Reliable detection of Win98 may not be possible. It appears that:
	//       - On Nav 4.x and before you'll get plain 'Windows' in userAgent.
	//       - On Mercury client, the 32-bit version will return 'Win98', but
	//         the 16-bit version running on Win98 will still return 'Win95'.
	this.win98 = ((agent.indexOf('win98')!=-1) || (agent.indexOf('windows 98')!=-1));
	this.winnt = ((agent.indexOf('winnt')!=-1) || (agent.indexOf('windows nt')!=-1));
	this.win32 = (this.win95 || this.winnt || this.win98 ||
					((this.major >= 4) && (navigator.platform == 'Win32')) ||
					(agent.indexOf('win32')!=-1) || (agent.indexOf('32bit')!=-1));

	this.winme = ((agent.indexOf('win 9x 4.90')!=-1));
	this.win2k = ((agent.indexOf('windows nt 5.0')!=-1));

	this.os2   = ((agent.indexOf('os/2')!=-1) ||
					(navigator.appVersion.indexOf('OS/2')!=-1) ||  
					(agent.indexOf('ibm-webexplorer')!=-1));

	this.mac    = (agent.indexOf('mac')!=-1);
	// hack ie5 js version for mac
	if (this.mac && this.ie5up) this.js = 1.4;
	this.mac68k = (this.mac && ((agent.indexOf('68k')!=-1) ||
							   (agent.indexOf('68000')!=-1)));
	this.macppc = (this.mac && ((agent.indexOf('ppc')!=-1) ||
								(agent.indexOf('powerpc')!=-1)));

	this.sun   = (agent.indexOf('sunos')!=-1);
	this.sun4  = (agent.indexOf('sunos 4')!=-1);
	this.sun5  = (agent.indexOf('sunos 5')!=-1);
	this.suni86= (this.sun && (agent.indexOf('i86')!=-1));
	this.irix  = (agent.indexOf('irix') !=-1);    // SGI
	this.irix5 = (agent.indexOf('irix 5') !=-1);
	this.irix6 = ((agent.indexOf('irix 6') !=-1) || (agent.indexOf('irix6') !=-1));
	this.hpux  = (agent.indexOf('hp-ux')!=-1);
	this.hpux9 = (this.hpux && (agent.indexOf('09.')!=-1));
	this.hpux10= (this.hpux && (agent.indexOf('10.')!=-1));
	this.aix   = (agent.indexOf('aix') !=-1);      // IBM
	this.aix1  = (agent.indexOf('aix 1') !=-1);   
	this.aix2  = (agent.indexOf('aix 2') !=-1);   
	this.aix3  = (agent.indexOf('aix 3') !=-1);   
	this.aix4  = (agent.indexOf('aix 4') !=-1);   
	this.linux = (agent.indexOf('inux')!=-1);
	this.sco   = (agent.indexOf('sco')!=-1) || (agent.indexOf('unix_sv')!=-1);
	this.unixware = (agent.indexOf('unix_system_v')!=-1);
	this.mpras    = (agent.indexOf('ncr')!=-1);
	this.reliant  = (agent.indexOf('reliantunix')!=-1);
	this.dec   = ((agent.indexOf('dec')!=-1) || (agent.indexOf('osf1')!=-1) ||
				  (agent.indexOf('dec_alpha')!=-1) || (agent.indexOf('alphaserver')!=-1) ||
				  (agent.indexOf('ultrix')!=-1) || (agent.indexOf('alphastation')!=-1));
	this.sinix = (agent.indexOf('sinix')!=-1);
	this.freebsd = (agent.indexOf('freebsd')!=-1);
	this.bsd = (agent.indexOf('bsd')!=-1);
	this.unix  = ((agent.indexOf('x11')!=-1) || this.sun || this.irix || this.hpux ||
				 this.sco ||this.unixware || this.mpras || this.reliant ||
				 this.dec || this.sinix || this.aix || this.linux || this.bsd || this.freebsd);

	this.vms   = ((agent.indexOf('vax')!=-1) || (agent.indexOf('openvms')!=-1));
}

// preloadImageArray()
function preloadImageArray(imgArray, imgPath, imgPrefix, imgType) {
	IMAGE_FILE_PREFIX = imgPrefix;
	IMAGE_FILE_PATH   = imgPath;

	for(i = 0; i < imgArray.length; i++) {
		var imgUrl = IMAGE_FILE_PATH + IMAGE_FILE_PREFIX + '_' + imgArray[i];

		IMAGE_ARRAY_ON[i]  = preloadImage(imgUrl + '_on.' + imgType, true);
		IMAGE_ARRAY_OFF[i] = preloadImage(imgUrl + '.'    + imgType, true);
	}
}

// preloadImage()
function preloadImage(imgUrl, returnImg) {
	var theImg = new Image();
		theImg.src = imgUrl;

	if (returnImg) return theImg;
}

// SwitchImage()
function SwitchImage(imgIndex, imgOn) {
	if (!swapAllowed) return;

	var theImg     = eval('document.' + IMAGE_FILE_PREFIX + '_' + imgIndex);
		theImg.src = (imgOn)
				? IMAGE_ARRAY_ON[imgIndex - 1].src
				: IMAGE_ARRAY_OFF[imgIndex - 1].src;
}

// SwitchArrow()
function SwitchArrow( imgIndex, imgOn ) {
	if (!swapAllowed) return;

	var theImg     = eval('document.arrow_' + imgIndex);
		theImg.src = (imgOn)
				? '/~dz/mantic/graphix/menu_arrow.gif'
				: '/~dz/mantic/graphix/clearpix.gif';
}

var is          = new Is();
var swapAllowed = (
	(is.nav     && is.major >= 3   ) ||
	(is.ie      && is.minor >= 3.01) ||
	(is.opera   && is.minor >= 3.60) ||
	(is.hotjava && is.major >= 3   )
	) ? true : false;
