var displayErrors = false; // Set to false to eliminate alerts, this is a debugging tool
 
/*********************************************
		GLOBAL VARIABLES
 ********************************************/
//initialize variables

var dragKeyword = "popup";	// ID tag keyword to identify a popup layer
var hitKeyword = "drag";	// ID tag keyword to identify a draggable element
var currentPopup = null;	// popup currently on top
tempLayer = null;			// temporary variable
tempLayerLoad = null;
tempLayerStore = null;
tempTopLayer = null;
var show = 0;				// temporary visiblity variable
var dragMode = 0;			// temporary dragmode variable
var currentX = 0;			// temporary x-coord variable
var currentY = 0;			// temporary y-coord variable
var whichLayer = null;		// temporary active layer variable
var isError = false;

var varFrame = top;		// frame where popup properties are stored
var defaultX = 50;
var defaultY = 50;
   
// array of all popup layer names
// NV, var popupList = new Array('popupText','popupHistory','popupAttachments','popupSponsors','popupCodeSections','popupExtras');
var popupList = new Array('popupText','popupHistory','popupAttachments','popupActiondetail','popupSponsors','popupSponsorVersion','popupCodeSections','popupExtras');
var hasFormElement = new Array('popupSponsors','popupText', 'popupActiondetail'); //which layers have forms
var hasFormElementID = new Array('formMatterVersionContain','formTextVersionContain', 'formActiondetail');	//the form ID's in those layers
 
// Merged from NN4 code
var showRollover = false;
var btnKeyword = "Img";
var overDrag=0;
var overClose=0;
var closingPopup = 0;
var showAllow = 0;
var activeLayer = null;
 
  
/*********************************************
objectExists() - Determines if a JavaScript
 object/variable reference is valid
 true == OK
 false == BAD
********************************************/
function objectExists(objTemp)
{
	//alert ("in objectExists");
	// Stupid MSIE 5.0 doesnt treat undefined and null the same... undefined is in fact 'undefined' 
	// nor does it properly treat if statements with logical ORs. It process ALL statements rather
	// than stopping at the first TRUE statement. GRRRRR
	if (objTemp == null) return false;
	if (typeof(objTemp) == 'undefined') return false;
	if (objTemp == 'undefined')	return false;
	return true;
}

/*********************************************
checkActiveLayer() - Determines if activeLayer
has been initialized.  If not, set to the
'formlayer'
********************************************/
function checkActiveLayer()
{
	if (activeLayer == null)
		setActiveLayer("formlayer");
}

/*********************************************
Retrieve a layer object by ID
*********************************************/
function getLayer(ID)
{
	//alert ("In getLayer");
	var	tmpObj = null;

	// Figure out if we're in MSIE
	if (!objectExists(document.layers)) {
		//alert ("In getLayer:2");
		if (document.getElementById){
			//alert ("getLayer:NN6");
			tmpObj = eval("document.getElementById('" + ID + "')");
		}
		else{
			//alert ("In getLayer:2.5");
			tmpObj = eval("document.all." + ID);
		}
	
	}
	//alert ("In getLayer:3");
	if (!objectExists(tmpObj)){
	
		// Hack to force MSIE to have document.layers property
		if (typeof(document.all) == 'object')
			document.layers = document.all.tags("DIV");
		
		for (var i=0; i<document.layers.length; i++ ) {
			if (document.layers[i].id == ID)
				{
				tmpObj = document.layers[i];
				break
			}
		}
	}
	//alert ("In getLayer:4");
	return tmpObj;
}

/*********************************************
Set the layer active by ID
*********************************************/
function setActiveLayer(ID)
{
	var tempLayer = getLayer(ID);
	
	if (tempLayer != null ) {
		activeLayer = tempLayer;
	}
	else {
		legistarError("setActiveLayer(" + ID + ") failed, layer not found","setActiveLayer()",1);
	}
	
	return activeLayer;
}

/*********************************************
Display active layer ID in status bar. debugging stuff
*********************************************/
function trackLayer()
{
	if (activeLayer == null)
		top.status='null';
	else
		top.status=activeLayer.id;
}

/*********************************************
Display any JavaScript Errors....
*********************************************/
function legistarError(msg, url, lno) { 
	if (displayErrors) {
	  if (objectExists(activeLayer.id))
	  	tmpString = activeLayer.id;
	  else
	  	tmpString = activeLayer;
	  alert("Error:" + msg   + " in " + url + " at line " +  lno +"\nactiveLayer=" + tmpString + "\nPage index=" + pageIndex);
	  }
	return true;
}
/*
	sets a cookie, defaults: expires +1 month, domain from url, path is /
	returns: false if invalid argument length, 	-1 if cookie name is not valid
*/
function setCookie( n, v, e, p, d, s ) {
	if(arguments.length < 2 || arguments.length > 6) return false;
	if( n == "" ) return -1;  								// invalid name
	if( !e ) { e = new Date; e.setMonth(e.getMonth()+1); }  // expire next month
		// build document cookie string
	document.cookie = n + '=' + escape(v) +
			';expires=' + e.toGMTString() +
			';path=' + ((p) ? p : "/") +
			';domain=' + ((d) ?  d : location.host) +
			((s) ?  ';secure=' + "1" : "");
return true;
}

/*
	gets a cookie
	returns: false if invalid argument length, -1 there are no cookies set
	-2 the cookie name requested was blank, -3 if the cookie doesn't exist
*/
function getCookie( n ) {
	if( arguments.length !=1 ) return false; // invalid arguments
	if( document.cookie == "" ) return -1;  // no cookies exist
	if( n == "" ) return -2;  				// blank name
	s = document.cookie.indexOf( n+"=" );
		if( s == -1 ) return -3; 	// named cookie doesn't exist
	e = document.cookie.indexOf( ";", s);
		if( e == -1 ) e = document.cookie.length;	// it was the last cookie
return unescape(document.cookie.substring( (s+n.length+1), e ));
}

/*
	deletes a cookie, uses the url domain and path / if none specified
	returns -1 if cookie name was blank, -2 if cookie doesn't exist
*/
function delCookie( n,p,d ) {
	if(arguments.length < 1 || arguments.length > 3) return false;	// invalid args
	if( n == "" ) return -1;  		// empty cookie name
	if( getCookie(n) == -3 ) return -2;
	document.cookie = n + '=;' +
			';path=' + ((p) ? p : "/") +
			';domain=' + ((d) ?  d : location.host)	+
			';expires=Thu, 06-May-76 07:30:00 GMT';
return true;
}

/*
	deletes multiple cookies for a given domain and path
	uses the url domain and path / if none specified
*/
function delCookies( p,d ) {
	if(arguments.length < 3 ) return false;	// invalid args
	for(var i=3; i<arguments.length; i++ )
		alert( delCookie( arguments[i], p, d ) );
return true;
}

/* positioning functions*/
function objectXLocation(oTemp)
{
	if (NS4)
		{
		return oTemp.x;
		}
	else
		return oTemp.style.pixelLeft;
}

function objectYLocation(oTemp)
{
	if (NS4)
		return oTemp.y;
	else
		return oTemp.style.pixelTop;
}

function objectWidth(oTemp)
{
	if (NS4) {
//		return oTemp.clip.width;
		return oTemp.document.width;
		}
	else
		return oTemp.clientWidth;
}

function objectHeight(oTemp)
{
	if (NS4)
		{
//		return oTemp.clip.height;
		return oTemp.document.height;
		}
	else
		return oTemp.clientHeight;
}

/*
 function PropertyHandler(id,visibility,x,y,zindex)
 {
 	this.id = id;
	this.visibility = visibility;
	this.x = x;
	this.y = y;
	this.zindex = zindex;
 }
 
 function storeTest(){
 	var aLayerObj = new Array(0);
	var tO = null;

	debugger;
	
 // Walk throught the layers and store the properties
 	for ( i=0; i < document.layers.length; i++ ) {
			tO = document.layers[i];
			var tLayer = new PropertyHandler(tO.id,tO.style.visibility,objectXLocation(tO),objectYLocation(tO),tO.style.Zindex);
			aLayerObj.concat(tLayer);
		}

	// Now store them in a cookie
	setCookie("aLayerObj",aLayerObj);
 }
 */
window.onerror = legistarError;

/*************************************************************************
** nSight Media event handling API

Usage:
nmAddEventListener("mousedown",document,function);
nmRemoveEventListener("mousedown",document,function);
etc.  
*************************************************************************/
// Process events for pre-V2 model 
function nmProcessEvent(e) {
	if (e != null && e != 'undefined') {
		// Netscape
		event = e;
		event.srcElement = e.target;
	}

	var x=event.srcElement;
	if (eval("x.nmHandler_" + event.type) == 'undefined' || eval("x.nmHandler_" + event.type) == null) {
		if ((eval("x.nmHandler_" + event.type) == 'undefined' || eval("x.nmHandler_" + event.type) == null) && x.document != 'undefined')
			x = x.document;
		if ((eval("x.nmHandler_" + event.type) == 'undefined' || eval("x.nmHandler_" + event.type) == null) && x.document != 'undefined')
			x= event.srcElement.parentElement;
		if ((eval("x.nmHandler_" + event.type) == 'undefined' || eval("x.nmHandler_" + event.type) == null) && x.document != 'undefined')
			x = x.document;
	}
	
	if (event.type != null && eval("x.nmHandler_" + event.type)) {
		var handlerProperty=eval("x.nmHandler_" + event.type);
		if (handlerProperty != null && handlerProperty != 'undefined') {
			for (var i=0; i < handlerProperty.length ; i++) {
				handlerProperty[i](event); 
			}
		} 
	}
}

// Add a new event handler
function nmAddEventListener(sEvent,obj,fncHandler) {
	if (typeof(obj.addEventListener) != 'undefined') {
		// Event Model 2.0
	    obj.addEventListener(sEvent, fncHandler, true);
	}  else {
		// Old Event Model
		var queueName = "obj.nmHandler_" + sEvent;
		var handlerName = "obj.on" + sEvent;
		
		// Initialize if first time
		if (eval(queueName) == null || eval(queueName) == 'undefined') {
			eval(queueName + "= new Array(0);");
			if (eval(handlerName) != null) {
				eval(queueName + "[0]=" + handlerName);
			}
		}

		// Add new handler
		var exists = false;
		var maxSize = eval(queueName + ".length");
		
		for (var i=0; i<maxSize; i++) {
			if (eval(queueName + "[i]") == fncHandler) {
				exists=true;
				continue;
				}
		}	
		
		if (!exists) {
			eval(queueName + "[" + queueName + ".length-1]=fncHandler;");
		}
		eval("obj.on" + sEvent + "=nmProcessEvent");
	}
}

// Remove an event handler
function nmRemoveEventListener(sEvent,obj,fncHandler) {
	if (typeof(obj.removeEventListener) != 'undefined') {
		// Event Model 2.0
		// NOTE: You cannot remove event handlers that were set the old way... (they must have been added using addEventListener)
	    obj.removeEventListener(sEvent, fncHandler, true);
	}  else {
		// Old Event Model
		var queueName = "obj.nmHandler_" + sEvent;
		var handlerName = "obj.on" + sEvent;
		
		// Remove handler
		var maxSize = eval(queueName + ".length");
		
		var tmpArray = new Array(0);
		for (var i=0; i<maxSize; i++) {
			if (eval(queueName + "[i]") != fncHandler) {
				tmpArray[tmpArray.length] = eval(queueName + "[i]");
				}
		}	
		eval(queueName + "=tmpArray");
	
	}
}
