/**
$Id: pint_commonDEBUG.js,v 1.15 2003/07/03 17:25:16 cducker Exp $

Description:
	PINT Commonly used JavaScript functions and constants.

Dependencies:
	Inward:
		pint_initcleanup.js
	
	Outward:
		none	
	
Usage:
	n/a		
*/

/* ******** Constants *********************************** */
windowStatus = "";
/* ******** Common Window Settings ********************** */
defaultStatus = "";

/**
 * PINT_GetEventSource()
 * Takes as an argument the first argument to an event handler, and 
 * returns a reference to the object that generated the event
 *
 * @param e - first argument to an event handler
 *
 * @return reference to object that triggered event
 */
function PINT_GetEventSource(e)
{
	return ( //figure out where in the dom events come in on this browser
		(e && e.target) || 
		(window && window.event && window.event.srcElement)
	);	
}

/**
 * PINT_GetElementById()
 * Tries to find an element in the document 
 * by its id or name
 *
 * @param idname - id of element to locate
 */
function PINT_GetElementById(idname)
{
	var handle;

	if (document.getElementById) {
		handle = document.getElementById(idname);
		if (handle) return handle;
	}

	if (document.getElementByName) {
		handle = document.getElementByName(idname)[0];
		if (handle) return handle;
	}

	handle = document[idname];
	if (handle) return handle;

	if (document.all) {
		handle = document.all[idname];
		if (handle) return handle;
	}
	
	if (document.anchors) {
		handle = document.anchors[idname];
		if (handle) return handle;
	}
	
	if (document.links) {
		handle = document.links[idname];
		if (handle) return handle;
	}
	
	if (document.images) {
		handle = document.images[idname];
		if (handle) return handle;
	}
	
	if (document.embeds) {
		handle = document.embeds[idname];
		if (handle) return handle;
	}

	return handle;
}

/**
 * PINT_GetIdByElement()
 * Inverse of PINT_GetElementById, returns the id, 
 * or name, of a given element
 *
 * @param element - object whose id to retrieve
 */
function PINT_GetIdByElement(element)
	{
	if (!(element)) return undefined;
	if (element.id) return element.id;
	if (element.name) return element.name;
	return undefined;
	}

/**
 * PINT_ChangePageTitle()
 * Change title of current page. Use when initial title
 * tag value is optimized for Search Engines, but you 
 * want the title to be more descriptive for the visitor.
 *
 * @param   pageTitle  - new page title
 */	
function PINT_ChangePageTitle( pageTitle )
	{
	if(document.title.readOnly == true) document.title = pageTitle;
	} 	
	
/**
 * PINT_GetCurrentFileName()
 * Get name of current file from path name
 */
function PINT_GetCurrentFileName()
	{
	var URL = unescape( window.location.pathname );
	var start = URL.lastIndexOf( "/" ) + 1;
	var end = ( URL.indexOf( "?" ) > 0 ) ? URL.indexOf( "?" ) : URL.length;
	return( URL.substring( start, end ) );
	}	
/**
 * PINT_GetCurrentFilePath()
 * Get path to current file from path name
 */
function PINT_GetCurrentFilePath()
	{
	var URL = unescape( window.location.pathname );
	var start = URL.lastIndexOf( "/" );
	return( URL.substring( 0, start ) );
	}

/**
 * PINT_GetCurrentDirectory()
 * Get name of current directory from path name
 */			
function PINT_GetCurrentDirectory()
	{
	var filePath = PINT_GetCurrentFilePath();
	var directories = filePath.split("/");
	return directories.length && directories[ directories.length-1 ] != "" ? directories[ directories.length-1 ] : "";
	}
	
/**
 * PINT_IsRootDirectory()
 * Determine if specified directory matches root directory
 *
 * @param directory - directory to check
 */
function PINT_IsRootDirectory( directory )
	{
	return directory == rootDirectory ? true : false;
	}

/**
 * PINT_FirstFocus()
 * Set cursor focus to first available form field
 * 
 * @param field - optional: reference to form input, otherwise defaults to the first element of the first form on the page
 */				
function PINT_FirstFocus()	
	{
	var elementref;
	var i=0;
	if (!(elementref = PINT_FirstFocus.arguments[0]))
		{
		if (!(document.forms[0])) return false;
		while ((elementref = document.forms[0].elements[i++]) && (elementref.type == 'hidden')) {};
		}
	if (!(elementref)) return false;
	elementref.focus();
	return true;
	}


/**
 * PINT_OnMouseOverHandler()
 * Handler for all onmouseover events. Must be explicitly set as 
 * the function handler.
 * 
 * @param e		event
 * @return		True.
 *
 */
function PINT_OnMouseOverHandler(e) 
	{
	e = (e) ? e : ((window.event) ? window.event : "")
	if (e) 
		{
		var eventsource = PINT_GetEventSource(e);
		if( eval( 'typeof(PINT_MenuTriggers)' ) != 'undefined' && 
		    eval( 'typeof(PINT_MenuTriggers[eventsource.id])' ) != 'undefined' )
			PINT_MenuPopUp(e);
		else if( eval( 'typeof(PINT_ROtriggers)' ) != 'undefined' &&  
		    eval( 'typeof(PINT_ROtriggers[eventsource.id])' ) != 'undefined' )
			PINT_RORollover(e);
			
		PINT_SetWindowStatus();	
		}
	return true;	
	}

/**
 * PINT_OnMouseOutHandler()
 * Handler for all onmouseout events. Must be explicitly set as 
 * the function handler.
 * 
 * @param e		event
 * @return		True.
 *
 */	
function PINT_OnMouseOutHandler(e) 
	{
	e = (e) ? e : ((window.event) ? window.event : "")
	if (e) 
		{
		var eventsource = PINT_GetEventSource(e);
		if( eval( 'typeof(PINT_MenuTriggers)' ) != 'undefined' && 
		    eval( 'typeof(PINT_MenuTriggers[eventsource.id])' ) != 'undefined' )
			PINT_MenuPopDown(e);	
		else if( eval( 'typeof(PINT_ROtriggers)' ) != 'undefined' &&  
			eval( 'typeof(PINT_ROtriggers[eventsource.id])' ) != 'undefined' )
			PINT_RORollout(e);
		}
	return true;
	}

/**
 * PINT_SetWindowStatus()
 * Set status bar message from parameter or global variable.
 * 
 * @param e		event
 * @return		True.
 *
 */	
function PINT_SetWindowStatus()
	{
	// if no arguments are passed, look for global windowStatus varible
	if( PINT_SetWindowStatus.arguments.length == 0 )
		{
		if( typeof(windowStatus) != 'undefined' && windowStatus != "" )
			{
			window.status = windowStatus;
			windowStatus = "";
			}
		}	
	else
		window.status = PINT_SetWindowStatus.arguments[0];
	return true;
	}	
	

/**
 * PINT_GetRootDirectory()
 * Gets rootDirectory global variable if defined.
 * 
 * @return		root directory path.
 *
 */	
function PINT_GetRootDirectory()
	{
	if( typeof( rootDirectory ) == 'undefined' )	
		return "";
	else
		return rootDirectory;
	}

function PINT_PrintCSS()
	{
	var NS4, IE, DOMstandard, CSScapable;
	NS4 = (document.layers) ? 1 : 0;
	IE = (document.all) ? 1 : 0;
	DOMstandard = (document.getElementById) ? 1 : 0;
	CSScapable = (NS4 || IE || DOMstandard) ? 1 : 0;
	
	if(CSScapable) 
		{
		if(NS4) 
			document.write("<link rel=\"stylesheet\" href=\"" + PINT_GetRootDirectory() + "/css/netscape.css\" type=\"text/css\" media=\"screen\" />");
		else
			document.write("<link rel=\"stylesheet\" href=\"" + PINT_GetRootDirectory() + "/css/dom.css\" type=\"text/css\" media=\"screen\" />");
		}
	}	
/*
$Id: pint_rolloverDEBUG.js,v 1.5 2003/07/03 17:01:44 cducker Exp $

Creator: J. Brock

Description:
	This rollover code is supposed to be 
		1. flexible, to accomodate all possible rollover activity
		2. compatible, should work on anything better than IE4, Netscape 4
		3. easy, so that all the rollover information can be inserted into the img tag in a simple way
		4. robust, so that errors, typos, bad DOM support make it degrade gracefully

Dependancies:
	pint_initcleanup.js

Usage:
	In pint_initcleanup.js:
	function init()
		{
		PINT_RORolloverInit('img1', 'img1', 'img1on.png');
		PINT_RORolloverInit('img2', 'img2', 'img2on.png', 'img1', 'img1on.png');
		};
	
	function cleanup()
		{};
	
	In page.htm:
	<head>
	<script src="\script\PINTRolloverDEBUG.js" language="JavaScript" type="text/javascript"></script>
	<script src="\script\PINTInitCleanup.js" language="JavaScript" type="text/javascript"></script>
	</head>

	<!-- rolling over img1 turns img1 on, rolling over img2 turns img1 and img2 on. -->
	<img name="img1" src="img1off.png">
	<img name="img2" src="img2off.png">
*/

/*************** PRIVATE DATA STRUCTURES ****************/

var PINT_ROcapableFlag = true;			// assume this browser is rollover capable, unless it proves otherwise.
var PINT_ROtriggers = new Array();
var PINT_ROtargets = new Array();
var PINT_ROtargetRollovers = new Array();
if ((typeof PINT_ROtriggers) != 'object') PINT_ROcapableFlag = false;


/************** PUBLIC METHODS **********************/


/*	PINT_RORolloverInit()
	Initializes an html entity for image rollover triggering. This function should only be called after the body of the document has finished loading.
	Arguments: (there must be an odd number of arguments)
		1. the name attribute of the entity (usually an <a> or an <img>) which triggers the rollover
		2. the name attribute of the <img> which will be changed
		3. the source url that the image named by arg 2 will rollover to
		4. same as 2...
		5. same as 3...
		...
	Returns: true on success, false on failure
*/
function PINT_RORolloverInit()
	{
	if (!(PINT_ROcapableFlag)) return false;			// if the browser is not rollover capable, fail
	if (!(document.images)) return PINT_ROcapableFlag = false;
	if (PINT_RORolloverInit.arguments.length < 1 ) return true;		//if no arguments
	//if ((PINT_RORolloverInit.arguments.length % 2) != 0) return false;	//must be even number of arguments

	if( document.getElementById )
		{
		//var trigger = document[PINT_RORolloverInit.arguments[0]];  // the element that triggers the rollover    
		var trigger = document.getElementById( PINT_RORolloverInit.arguments[0] );
	
		if( trigger )
			{
			if (!(PINT_ROtriggers[trigger.id])) PINT_ROtriggers[trigger.id] = new Array(); // init the target array
			
			var i, target;
		
			target = document.getElementById( PINT_RORolloverInit.arguments[1] );
			targetrollover = PINT_RORolloverInit.arguments[2];
	
			if (!(target.src)) return false;		// if target is not an image
	
			PINT_ROtargets[target.id] = target.src;     // load up the target rollover sources
			PINT_ROtargetRollovers[targetrollover] = new Image();
			PINT_ROtargetRollovers[targetrollover].src = targetrollover; // cache rollover images in associative array
			//PINT_ROtriggers[trigger.name][target.name] = PINT_ROtargetRollovers[targetrollover]; // reference to the cached image
			PINT_ROtriggers[trigger.id][target.id] = PINT_ROtargetRollovers[targetrollover]; // reference to the cached image
			
			if( typeof(PINT_RORolloverInit.arguments[3]) != 'undefined' )
				PINT_ROtriggers[trigger.id]["window.status"] = PINT_RORolloverInit.arguments[3];
				
			trigger.onmouseover = PINT_OnMouseOverHandler;
			trigger.onmouseout = PINT_OnMouseOutHandler;
			}
		}
	return true;
	}



/********* PRIVATE METHODS ************/
function PINT_RORollover(e)
{
	if (!PINT_ROcapableFlag) return false;
	var eventsource = PINT_GetEventSource(e);	//figure out where the events come in on this browser
	if (!eventsource) return (PINT_ROcapableFlag = false); // if there's no events, can't do rollovers
	PINT_RORolloverById(eventsource.id);
	return true;
}

function PINT_RORollout(e)
{
	if (!PINT_ROcapableFlag) return false;
	var eventsource = PINT_GetEventSource(e);	//figure out where the events come in on this browser
	if (!eventsource) return (PINT_ROcapableFlag = false); // if there's no events, can't do rollovers
	PINT_RORolloutById(eventsource.id);
	return true;
}	
	
	
function PINT_RORolloverById(elementId)
	{
	if(!PINT_ROcapableFlag)return false;
	if(eval('typeof(PINT_ROtriggers[elementId])')!='undefined')
		{
		for (target in PINT_ROtriggers[elementId]) //for this trigger, rollover each of it's targets
			{
			if( typeof( document[target] ) == 'object' )
				document[target].src = PINT_ROtriggers[elementId][target].src;
	
			if( target == "window.status" )
				windowStatus = PINT_ROtriggers[elementId][target];
			}
		}
	return true;
	}

function PINT_RORolloutById(elementId)
	{
	if(!PINT_ROcapableFlag)return false;
	if(eval('typeof(PINT_ROtriggers[elementId])')!='undefined')
		{
		for (target in PINT_ROtriggers[elementId]) //for this trigger, reset the src for each of it's targets
			{
			if( typeof( document[target] ) == 'object' )
				document[target].src = PINT_ROtargets[target];
			}
		}
	return true;
	}	

/* $Id: init.js,v 1.3 2003/07/17 17:37:45 cducker Exp $

Description:
	Library of functions for initialization of DHTML menus and their 
	respective event handlers
		
Dependencies:
	pint_common.js
	pint_cleanupinit.js
			
Usage:
	In pint_initcleanup.js
	function init()
		{
		PINT_MenuInit( "TriggerName1", "TargetName1", "MenuName1" );
		PINT_MenuInit( "TriggerName2", "TargetName2", "MenuName2" );
		}

	In referencing HTML document
	<html>
	<head>
	...
	<script src="scripts/pint_menus.js" language="JavaScript" type="text/javascript"></script>		
	...
	</head>
	...
	<!-- ** Just before ending <body> tag -->
	<script src="scripts/menus/HM_Loader.js" language="JavaScript" type="text/javascript"></script>		
	</body>
	</html>
*/	

// PRIVATE DATA STRUCTURES
var PINT_MenuCapableFlag = true;			// assume this browser is menu capable, unless it proves otherwise.
var PINT_MenuTriggers = new Array();
var PINT_MenuTargets = new Array();
var PINT_MenuTargetMenus = new Array();
if ((typeof PINT_MenuTriggers) != 'object') PINT_MenuCapableFlag = false;


// PUBLIC METHODS 
/**
 * PINT_MenuInit()
 * Initializes menu trigger handlers.
 * 
 * @return          True if successfull, false if not.
 *
 */
function PINT_MenuInit()
	{
	if (!(PINT_MenuCapableFlag)) return false;			
	if (PINT_MenuInit.arguments.length < 1 ) return true;        //if no arguments
	if ((PINT_MenuInit.arguments.length % 2) != 1) return false; //must be odd number of arguments

	if( document.getElementById )
		{
		var trigger = document.getElementById( PINT_MenuInit.arguments[0] );
		
		if( trigger )
			{
			if (!(PINT_MenuTriggers[trigger.id])) PINT_MenuTriggers[trigger.id] = new Array(); 

			var target, targetMenu;
			target     = document.getElementById( PINT_MenuInit.arguments[1] );
			targetMenu = PINT_MenuInit.arguments[2];
			
			PINT_MenuTriggers[trigger.id] = targetMenu;

			trigger.onmouseover = PINT_OnMouseOverHandler;		
			trigger.onmouseout  = PINT_OnMouseOutHandler;
			}
		}
	return true;
	}


// PRIVATE METHODS 
/**
 * PINT_MenuPopUp()
 * Forwards event and which menu to menu pop up method
 * 
 * @return          True if successfull, false if not.
 *
 */
function PINT_MenuPopUp(e)
	{
	if (!PINT_MenuCapableFlag) return false;
	var eventsource = PINT_GetEventSource(e);	
	if (!eventsource) return (PINT_MenuCapableFlag = false); 
	HM_f_PopUp( PINT_MenuTriggers[eventsource.id], e);
	return true;
	}

/**
 * PINT_MenuPopDown()
 * Forwards event and which menu to menu pop down method
 * 
 * @return          True if successfull, false if not.
 *
 */	
function PINT_MenuPopDown(e)
	{
	if (!PINT_MenuCapableFlag) return false;
	var eventsource = PINT_GetEventSource(e);
	if (!eventsource) return (PINT_MenuCapableFlag = false); 
	HM_f_PopDown( PINT_MenuTriggers[eventsource.id] );
	return true;
	}	

function On(imgName) {
      if (document.images) 
          document.images[imgName].src = eval(imgName + "on.src");
}

function Off(imgName) {
      if (document.images)
             document.images[imgName].src = eval(imgName + "off.src");
}		
	
function PINT_LoadMenuConfig()
	{	
	// include menu display configuration
	document.write("<script language='JavaScript1.2' src='" + PINT_GetRootDirectory() + "/scripts/menus/config.js' type='text/javascript'><\/script>");	
	}


	
// convert all characters to lowercase to simplify testing
var agt    = navigator.userAgent.toLowerCase();
var appVer = navigator.appVersion.toLowerCase();

// *** BROWSER VERSION ***

var is_minor = parseFloat(appVer);
var is_major = parseInt(is_minor);

// Note: On IE, start of appVersion return 3 or 4
// which supposedly is the version of Netscape it is compatible with.
// So we look for the real version further on in the string

var iePos  = appVer.indexOf('msie');
if (iePos !=-1) {
   is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos)))
   is_major = parseInt(is_minor);
}

var is_getElementById   = (document.getElementById) ? "true" : "false"; // 001121-abk
var is_getElementsByTagName = (document.getElementsByTagName) ? "true" : "false"; // 001127-abk
var is_documentElement = (document.documentElement) ? "true" : "false"; // 001121-abk

var is_gecko = ((navigator.product)&&(navigator.product.toLowerCase()=="gecko"))?true:false;
var is_gver  = 0;
if (is_gecko) is_gver=navigator.productSub;

var is_moz   = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
                (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
                (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
                (is_gecko) && 
                ((navigator.vendor=="")||(navigator.vendor=="Mozilla")));
if (is_moz) {
   var is_moz_ver = (navigator.vendorSub)?navigator.vendorSub:0;
   if(!(is_moz_ver)) {
       is_moz_ver = agt.indexOf('rv:');
       is_moz_ver = agt.substring(is_moz_ver+3);
       is_paren   = is_moz_ver.indexOf(')');
       is_moz_ver = is_moz_ver.substring(0,is_paren);
   }
   is_minor = is_moz_ver;
   is_major = parseInt(is_moz_ver);
}

var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
            && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
            && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)
            && (!(is_moz)));

// Netscape6 is mozilla/5 + Netscape6/6.0!!!
// Mozilla/5.0 (Windows; U; Win98; en-US; m18) Gecko/20001108 Netscape6/6.0
// Changed this to use navigator.vendor/vendorSub - dmr 060502   
// var nav6Pos = agt.indexOf('netscape6');
// if (nav6Pos !=-1) {
if ((navigator.vendor)&&
    ((navigator.vendor=="Netscape6")||(navigator.vendor=="Netscape"))&&
    (is_nav)) {
   is_major = parseInt(navigator.vendorSub);
   // here we need is_minor as a valid float for testing. We'll
   // revert to the actual content before printing the result. 
   is_minor = parseFloat(navigator.vendorSub);
}

var is_opera = (agt.indexOf("opera") != -1);
var is_opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1);
var is_opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1);
var is_opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1);
var is_opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1);
var is_opera6 = (agt.indexOf("opera 6") != -1 || agt.indexOf("opera/6") != -1); // new 020128- abk
var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4);
var is_opera6up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4 && !is_opera5); // new020128

var is_nav2 = (is_nav && (is_major == 2));
var is_nav3 = (is_nav && (is_major == 3));
var is_nav4 = (is_nav && (is_major == 4));
var is_nav4up = (is_nav && is_minor >= 4);  // changed to is_minor for
                                            // consistency - dmr, 011001
var is_navonly      = (is_nav && ((agt.indexOf(";nav") != -1) ||
                      (agt.indexOf("; nav") != -1)) );

var is_nav6   = (is_nav && is_major==6);    // new 010118 mhp
var is_nav6up = (is_nav && is_minor >= 6) // new 010118 mhp

var is_nav5   = (is_nav && is_major == 5 && !is_nav6); // checked for ns6
var is_nav5up = (is_nav && is_minor >= 5);

var is_nav7   = (is_nav && is_major == 7);
var is_nav7up = (is_nav && is_minor >= 7);

var is_ie   = ((iePos!=-1) && (!is_opera));
var is_ie3  = (is_ie && (is_major < 4));

var is_ie4   = (is_ie && is_major == 4);
var is_ie4up = (is_ie && is_minor >= 4);
var is_ie5   = (is_ie && is_major == 5);
var is_ie5up = (is_ie && is_minor >= 5);

var is_ie5_5  = (is_ie && (agt.indexOf("msie 5.5") !=-1)); // 020128 new - abk
var is_ie5_5up =(is_ie && is_minor >= 5.5);                // 020128 new - abk

var is_ie6   = (is_ie && is_major == 6);
var is_ie6up = (is_ie && is_minor >= 6);

// 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.

var is_aol   = (agt.indexOf("aol") != -1);
var is_aol3  = (is_aol && is_ie3);
var is_aol4  = (is_aol && is_ie4);
var is_aol5  = (agt.indexOf("aol 5") != -1);
var is_aol6  = (agt.indexOf("aol 6") != -1);
var is_aol7  = ((agt.indexOf("aol 7")!=-1) || (agt.indexOf("aol7")!=-1));

var is_webtv = (agt.indexOf("webtv") != -1);

// new 020128 - abk

var is_TVNavigator = ((agt.indexOf("navio") != -1) || (agt.indexOf("navio_aoltv") != -1)); 
var is_AOLTV = is_TVNavigator;

var is_hotjava = (agt.indexOf("hotjava") != -1);
var is_hotjava3 = (is_hotjava && (is_major == 3));
var is_hotjava3up = (is_hotjava && (is_major >= 3));

// end new

// *** JAVASCRIPT VERSION CHECK ***
// Useful to workaround Nav3 bug in which Nav3
// loads <SCRIPT LANGUAGE="JavaScript1.2">.
// updated 020131 by dragle
var is_js;
if (is_nav2 || is_ie3) is_js = 1.0;
else if (is_nav3) is_js = 1.1;
else if (is_opera5up) is_js = 1.3; // 020214 - dmr
else if (is_opera) is_js = 1.1;
else if ((is_nav4 && (is_minor <= 4.05)) || is_ie4) is_js = 1.2;
else if ((is_nav4 && (is_minor > 4.05)) || is_ie5) is_js = 1.3;
else if (is_nav5 && !(is_nav6)) is_js = 1.4;
else if (is_hotjava3up) is_js = 1.4; // new 020128 - abk
else if (is_nav6up) is_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 (is_nav && (is_major > 5)) is_js = 1.4;
else if (is_ie && (is_major > 5)) is_js = 1.3;
else if (is_moz) is_js = 1.5;

// what about ie6 and ie6up for js version? abk

// HACK: no idea for other browsers; always check for JS version 
// with > or >=
else is_js = 0.0;
// HACK FOR IE5 MAC = js vers = 1.4 (if put inside if/else jumps out at 1.3)
if ((agt.indexOf("mac")!=-1) && is_ie5up) is_js = 1.4; // 020128 - abk

// Done with is_minor testing; revert to real for N6/7
if (is_nav6up) {
   is_minor = navigator.vendorSub;
}

// *** PLATFORM ***
var is_win   = ( (agt.indexOf("win")!=-1) || (agt.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.
var is_win95 = ((agt.indexOf("win95")!=-1) || (agt.indexOf("windows 95")!=-1));

// is this a 16 bit compiled version?
var is_win16 = ((agt.indexOf("win16")!=-1) ||
           (agt.indexOf("16bit")!=-1) || (agt.indexOf("windows 3.1")!=-1) ||
           (agt.indexOf("windows 16-bit")!=-1) );

var is_win31 = ((agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("win16")!=-1) ||
                (agt.indexOf("windows 16-bit")!=-1));

var is_winme = ((agt.indexOf("win 9x 4.90")!=-1));    // new 020128 - abk
var is_win2k = ((agt.indexOf("windows nt 5.0")!=-1) || (agt.indexOf("windows 2000")!=-1)); // 020214 - dmr
var is_winxp = ((agt.indexOf("windows nt 5.1")!=-1) || (agt.indexOf("windows xp")!=-1)); // 020214 - dmr

// 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".
var is_win98 = ((agt.indexOf("win98")!=-1) || (agt.indexOf("windows 98")!=-1));
var is_winnt = ((agt.indexOf("winnt")!=-1) || (agt.indexOf("windows nt")!=-1));
var is_win32 = (is_win95 || is_winnt || is_win98 ||
                ((is_major >= 4) && (navigator.platform == "Win32")) ||
                (agt.indexOf("win32")!=-1) || (agt.indexOf("32bit")!=-1));

var is_os2   = ((agt.indexOf("os/2")!=-1) ||
                (navigator.appVersion.indexOf("OS/2")!=-1) ||
                (agt.indexOf("ibm-webexplorer")!=-1));

var is_mac    = (agt.indexOf("mac")!=-1);
if (is_mac) { is_win = !is_mac; } // dmr - 06/20/2002
var is_mac68k = (is_mac && ((agt.indexOf("68k")!=-1) ||
                           (agt.indexOf("68000")!=-1)));
var is_macppc = (is_mac && ((agt.indexOf("ppc")!=-1) ||
                            (agt.indexOf("powerpc")!=-1)));

var is_sun   = (agt.indexOf("sunos")!=-1);
var is_sun4  = (agt.indexOf("sunos 4")!=-1);
var is_sun5  = (agt.indexOf("sunos 5")!=-1);
var is_suni86= (is_sun && (agt.indexOf("i86")!=-1));
var is_irix  = (agt.indexOf("irix") !=-1);    // SGI
var is_irix5 = (agt.indexOf("irix 5") !=-1);
var is_irix6 = ((agt.indexOf("irix 6") !=-1) || (agt.indexOf("irix6") !=-1));
var is_hpux  = (agt.indexOf("hp-ux")!=-1);
var is_hpux9 = (is_hpux && (agt.indexOf("09.")!=-1));
var is_hpux10= (is_hpux && (agt.indexOf("10.")!=-1));
var is_aix   = (agt.indexOf("aix") !=-1);      // IBM
var is_aix1  = (agt.indexOf("aix 1") !=-1);
var is_aix2  = (agt.indexOf("aix 2") !=-1);
var is_aix3  = (agt.indexOf("aix 3") !=-1);
var is_aix4  = (agt.indexOf("aix 4") !=-1);
var is_linux = (agt.indexOf("inux")!=-1);
var is_sco   = (agt.indexOf("sco")!=-1) || (agt.indexOf("unix_sv")!=-1);
var is_unixware = (agt.indexOf("unix_system_v")!=-1);
var is_mpras    = (agt.indexOf("ncr")!=-1);
var is_reliant  = (agt.indexOf("reliantunix")!=-1);
var is_dec   = ((agt.indexOf("dec")!=-1) || (agt.indexOf("osf1")!=-1) ||
       (agt.indexOf("dec_alpha")!=-1) || (agt.indexOf("alphaserver")!=-1) ||
       (agt.indexOf("ultrix")!=-1) || (agt.indexOf("alphastation")!=-1));
var is_sinix = (agt.indexOf("sinix")!=-1);
var is_freebsd = (agt.indexOf("freebsd")!=-1);
var is_bsd = (agt.indexOf("bsd")!=-1);
var is_unix  = ((agt.indexOf("x11")!=-1) || is_sun || is_irix || is_hpux ||
             is_sco ||is_unixware || is_mpras || is_reliant ||
             is_dec || is_sinix || is_aix || is_linux || is_bsd || is_freebsd);

var is_vms   = ((agt.indexOf("vax")!=-1) || (agt.indexOf("openvms")!=-1));
// additional checks, abk
var is_anchors = (document.anchors) ? "true":"false";
var is_regexp = (window.RegExp) ? "true":"false";
var is_option = (window.Option) ? "true":"false";
var is_all = (document.all) ? "true":"false";
// cookies - 990624 - abk
document.cookie = "cookies=true";
var is_cookie = (document.cookie) ? "true" : "false";
var is_images = (document.images) ? "true":"false";
var is_layers = (document.layers) ? "true":"false"; // gecko m7 bug?
// new doc obj tests 990624-abk
var is_forms = (document.forms) ? "true" : "false";
var is_links = (document.links) ? "true" : "false";
var is_frames = (window.frames) ? "true" : "false";
var is_screen = (window.screen) ? "true" : "false";

// java
var is_java = (navigator.javaEnabled());

	
/*
$Id: pint_popupwindowDEBUG.js,v 1.4 2003/04/09 01:55:48 cory Exp $

Creator: J. Brock

Description:
	Pop up a new window

Dependancies:
	none

Usage:
	TODO:
*/

/*************************************** global variables *****************************/

var PINTPW_capablePopupWin = true; // assume popup window capable
var PINTPW_popAnchors;
PINTPW_capablePopupWin = ((PINTPW_popAnchors = new Array()) ? true : false );

var PINTPW_featureBasic = 'alwaysLowered=no,alwaysRaised=no,dependent=yes,directories=no,hotkeys=no,'; // features that all popup windows will have
var PINTPW_featureNoChrome = 'location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,titlebar=no,toolbar=no,'; // features that no chrome popup windows will have

//enumerated constant types for poptype
var PINTPW_FULLCHROME = 5;
var PINTPW_NOCHROME = 6;

//enumerated constant types for positioning
var PINTPW_SCREENCENTER = 10;
var PINTPW_WINDOWCENTER = 11;
var PINTPW_FREE = 12;

/************************************* public methods ****************************/


function PINTPW_InitPopupWinFullChrome(anchorid, newurl, windowname, featurestring)
{
	PINTPW_InitPopupWin(anchorid, newurl, windowname, FULLCHROME, featurestring);
}


/*********************************************************
function PINTPW_InitPopupWin
Initializes an anchor to popup a new browser window onclick. 
To make popup windows re-use themselves, give them all the same name.
Arguments:
	1. name/id of an anchor element
	2. url to open in new browser window
	3. name of new browser window, or '' (null string)
	4. extra feature string as passed to window.open, or '' (null string)
Returns: false, to cancel the anchor href
*/
function PINTPW_InitPopupWin(anchorid, newurl, windowname, poptype, popWidth, popHeight, positioning, featurestring)
{
	if (!(PINTPW_capablePopupWin)) return false;
	if (!(window)) return false;	

	if (PINTPW_popAnchors[anchorid]) return false; // already a popup window attatched to this anchor

	PINTPW_popAnchors[anchorid] = new Array();
	PINTPW_popAnchors[anchorid]['newurl'] = newurl;
	PINTPW_popAnchors[anchorid]['windowname'] = windowname;
	PINTPW_popAnchors[anchorid]['poptype'] = poptype;
	PINTPW_popAnchors[anchorid]['popWidth'] = popWidth;
	PINTPW_popAnchors[anchorid]['popHeight'] = popHeight;
	PINTPW_popAnchors[anchorid]['positioning'] = positioning;
	PINTPW_popAnchors[anchorid]['featurestring'] = featurestring;

	alert( anchorid );
	document.anchors[anchorid].onclick = PINTPW_Pop;
	//document.forms['formname'][anchorid].onclick = PINTPW_PopH;
	return false;
}


/*************************************************************
PINTPW_InitPopupWinNoChrome
Initializes an anchor element that, onclick, pops up a no-chrome window to specification. 
To make popup windows re-use themselves, give them all the same name.
Arguments:
	1. name/id of an anchor element
	2. url to open in window
	3. name of new browser window, or '' (null string)
	4. horizontal size of new window in pixels
	5. vertical size of new window in pixels
	6. constant indicating the positioning of the new window. Possible values:
		PINTPW_SCREENCENTER	centered in screen
		PINTPW_WINDOWCENTER	centered in parent browser window
		PINTPW_FREE		pops up wherever the client feels like it
Returns: always false
*/
function PINTPW_InitPopupWinNoChrome(anchorid, newurl, windowname, popWidth, popHeight, positioning)
{
	if (!(PINTPW_capablePopupWin)) return false;
	if (!(window)) return false;	

	return PINTPW_InitPopupWin(anchorid, newurl, windowname, PINTPW_NOCHROME, popWidth, popHeight, positioning, '');
}

function PINTPW_Pop(newurl, windowname, poptype, popWidth, popHeight, positioning, featurestring)
	{
	var winLeft, winTop, winWidth, winHeight;
	var newXlocation, newYlocation;
	var allfeature = PINTPW_featureBasic;

	if (popWidth && popHeight)
		{
		allfeature += 
		'innerWidth=' + popWidth + ',' +
		'innerHeight=' + popHeight + ',' +
		'width=' + popWidth + ',' +
		'height=' + popHeight + ',';

		if( positioning == PINTPW_SCREENCENTER )
			{
			if (screen)
				{
				winWidth = screen.availWidth;// only in netscape?
				winHeight = screen.availHeight;
				winLeft = 0;
				winTop = 0;

				if (winWidth)
					{
					newXlocation = Math.floor(((winWidth - popWidth) / 2) + winLeft);
					newYlocation = Math.floor(((winHeight - popHeight) / 2) + winTop);
					allfeature += 'left=' + newXlocation + ','; // for ie
					allfeature += 'top=' + newYlocation + ',';
					allfeature += 'screenx=' + newXlocation + ','; //for netscape
					allfeature += 'screeny=' + newYlocation + ',';
					}					
				}
			}
		else if( positioning ==	PINTPW_WINDOWCENTER )
			{
			if (window.innerWidth)// only netscape can do window centering
				{
				winLeft = (window.screenLeft || window.screenX);
				winTop = (window.screenTop || window.screenY);
				winWidth = (window.innerWidth || window.width ); 
				winHeight = (window.innerHeight || window.height);
				}
			else // so do screen centering instead
				{
				winWidth = screen.availWidth;
				winHeight = screen.availHeight;
				winLeft = 0;
				winTop = 0;
				}

			if (winWidth)
				{
				newXlocation = Math.floor(((winWidth - popWidth) / 2) + winLeft);
				newYlocation = Math.floor(((winHeight - popHeight) / 2) + winTop);
				allfeature += 'left=' + newXlocation + ','; // for ie
				allfeature += 'top=' + newYlocation + ',';
				allfeature += 'screenx=' + newXlocation + ','; //for netscape
				allfeature += 'screeny=' + newYlocation + ',';
				}					
			}
		}
	if (poptype == PINTPW_NOCHROME)
		{
		allfeature += PINTPW_featureNoChrome;
		}
	allfeature += featurestring;
	return window.open(newurl, windowname, allfeature);
	}


/********************************** private methods ****************************/



function PINTPW_PopH(e)
{
	if (!(PINTPW_capablePopupWin)) return false;

	var eventSource;
	if (!(eventSource = PINT_GetEventSource(e))) return false;
//	alert(eventSource.name);
	var anchorname;
	if (!(anchorname = eventSource.name)) return false;

	return (PINTPW_popAnchors[anchorname] ?
		PINTPW_Pop(
			PINTPW_popAnchors[anchorname]['newurl'], 
			PINTPW_popAnchors[anchorname]['windowname'], 
			PINTPW_popAnchors[anchorname]['poptype'], 
			PINTPW_popAnchors[anchorname]['popWidth'], 
			PINTPW_popAnchors[anchorname]['popHeight'], 
			PINTPW_popAnchors[anchorname]['positioning'], 
			PINTPW_popAnchors[anchorname]['featurestring']
		) : false );


/*	if (PINTPW_popAnchors[anchorname])
	{
		alert(PINTPW_popAnchors[anchorname]['featurestring']);
		window.open(PINTPW_popAnchors[anchorname]['newurl'], PINTPW_popAnchors[anchorname]['windowname'], PINTPW_popAnchors[anchorname]['featurestring']);
	}

	return false;*/
} 


function Trango_PopupInstallPhotos( launcherLinkTarget )
	{
	var width  = 600;
	var height = is_nav ? 475 : 475;
	PINTPW_Pop( launcherLinkTarget, 'newwin', PINTPW_NOCHROME, width, height, PINTPW_WINDOWCENTER, 'scrollbars=no,status=no' );
	return false;
	}	
	



