// global js functions/variables used across Marx environments
//constant boolean values
var isTrue = 0;
var isFalse = 1;

//constant path values
var bPath = "";
var sPath = "samples/";
var hPath = "help/";

//constant browser names
var bIE = "msie";
var bSafari = "safari";
var bOpera = "opera";
var bNavigator = "netscape";
var bGecko = "gecko";
var bNetscape = "netscape";
var bMozilla = "mozilla";
var bOmni = "omniweb";
var bWebTV = "webtv";
var bUnknown = "unknown";
var bFirefox = "firefox";

//constant OS names
var osPC = "win";
var osMac = "mac";
var osLinux = "linux";
var osUnix = "x11";
var osUnknown = "unknown";

//constants that indicate location in user agent array for specific information
//these are used in conjunction with the getUserAgentInfo() function
var agentBrowserLoc = 0;
var agentBrowserVersionLoc = 1;
var agentOSLoc = 2;

//global parsing charater used to separate array values
var paramParseChar = "|";

function getUserAgentInfo() {

	var browserString = navigator.userAgent.toLowerCase();
	var browser, version, OS;	
	var userAgent = new Array();

	//acquires browser type	
	if (browserString.indexOf(bIE)&&browserString.indexOf(bOpera)==-1&&browserString.indexOf(bSafari)==-1&&browserString.indexOf(bGecko)==-1&&browserString.indexOf(bNavigator)==-1) {browser=bIE;}
	else if (browserString.indexOf(bOpera)>0) {browser=bOpera;}
	else if (browserString.indexOf(bSafari)>0) {browser=bSafari;}
	else if (browserString.indexOf(bOmni)>0) {browser=bOmni;}
	else if (browserString.indexOf(bWebTV)>0) {browser=bWebTV;}
	
	else if (browserString.indexOf(bNetscape)>0) {
		if (browserString.indexOf(bGecko)>0) {browser=bNetscape;}
		else {browser=bNavigator;}
	}
	else if (browserString.indexOf(bGecko)>0&&browserString.indexOf(bMozilla)==0) {browser=bMozilla;}
	else {browser=bUnknown;}	

	//acquires browser version
	if (!version) {
		if (browser!=bUnknown) {
			if (browser!=bMozilla) {version = browserString.charAt((browserString.indexOf(browser)+1)+(browser.length));}
			else if (browser==bMozilla) {version = browserString.charAt(8);}
			else {browser=0;}
		}
	}
	
	//acquires operating system
	if (!OS) {
		if (browserString.indexOf(osPC)>0) {OS=osPC;}
		else if (browserString.indexOf(osMac)>0) {OS=osMac;}
		else if (browserString.indexOf(osLinux)>0) {OS=osLinux;}
		else if (browserString.indexOf(osUnix)>0) {OS=osUnix;}
		else {OS=osUnknown;}
	}
	
	//sets array values
	userAgent[agentBrowserLoc]=browser;
	userAgent[agentBrowserVersionLoc]=version;
	userAgent[agentOSLoc]=OS;
	return userAgent;	
					
}

function enablePrint(p, t) {
//function used to output print icon/label
//to handle no print enabled browsers
//t var = text label
//p var = path to image 
	if (window.print && document.write) {
		if (p) {document.write('<IMG src="'+p+'print.gif" alt="Print Page" width="18" height="16" border="0" align="absmiddle">&nbsp;');}
		document.write('<A href="#" onClick="javascript:window.print()">'+t+'</A>');	
	}
}

function getParamValue(p, useParent) {
//function extracts url param
	var u = unescape(window.location);
	
	if (useParent) {u = unescape(parent.window.location)}
	var pStart = u.indexOf(p)+p.length+1;
	if (pStart > p.length+1) {
		var pEnd = u.indexOf("&",pStart+1);
		if (pEnd==-1||pEnd==0) {return u.substring(pStart);}
		else {return u.substring(pStart,pEnd)};
	}
	else {return null;}
}

function setWindowFocus(w) {
//function used to set focus of specific window
//w is optional name of window
	if (window.focus) {
		if (!w) {window.focus();}
		else {eval(w+".focus()");}
	}
}

function loadPopup(u,win,a,ps,useParent,alignRight) {
//function used to load popup window
// u = target url of popup (e.g. http://www.something.com/something.do)
// win = name of window object (e.g. printReport)
// a = window attributes (e.g. left=10, etc.)
// ps = parameter string that defines the url parameters to be appended to u string
//      ps string should use param|param|param,etc. format (| is param separator)
// useParent = indicates if ps values should come from base window url or parent window url
// alignRight = indicates if popup should load on the right margin of user's monitor

	var winAtts = "";
	var w,l,t,h;
	
	//builds complete url by appending parameters if needed
	if (!ps) {u=u;}
	else {u=u+"?"+getUrlParams(ps,useParent);}
	
	//starts building window attribute string
	if (a) {winAtts=a+",";}
	
	//gets width and left and top value of window
	w=getWinAttValue(a,'width');
	l=getWinAttValue(a,'left');
	t=getWinAttValue(a,'top');
	h=getWinAttValue(a,'height');

	//sets width
	if (!w) {winAtts=winAtts+"width=800,";}
	//sets height
	if (!h) {winAtts=winAtts+"height=600,";}
				
	//sets left value of window if window needs to be aligned on right side of monitor
	//appends left attribute value
	//cant compute left margin without window width set	
	if (w && alignRight) {l=getPopupLeftMargin(w);}
	if (l) {winAtts=winAtts+"left="+l+",";}
	else {winAtts=winAtts+"left=10,";}
	
	//sets top value
	if (!t) {winAtts=winAtts+"top=10,";}
	
	//trims trailing ,	
	if (winAtts.charAt(winAtts.length-1)==",") {winAtts=winAtts.substr(0,winAtts.length-1);}	
	
	//open and focus window
	try {
		var popWin = window.open(u,win,winAtts);
    	if (popWin) {popWin.focus();}
	}
	catch(e) {return false}

}

function getUrlParams(ps,useParent) {
//function used to create parameter string that is appended to base url
//ps = string of parameters to acquire and build (e.g. p1|p2)
//useParent = indicates if method should use parent window url to acquire url param values
	var up = "";
	var pName, pValue;
	var pArray = ps.split(paramParseChar);
	var pCount = 0;
	
	while (pCount < pArray.length) {
		pName = pArray[pCount];
		pValue = getParamValue(pName,useParent);
		up=up+pName+"="+pValue+"&";
		pCount+=1;
	}
	
	//trims trailing & 
	if (up.charAt(up.length-1)=="&") {up=up.substr(0,up.length-1);}
	
	return up;

}

function getPopupLeftMargin(w) {
//function used to acquire the left margin for a popup window
//that is to be aligned on the right margin of a user's screen
// w = width of window
	if (!w) {return 0;}
	else if (screen.width) {return screen.width-w-20;}
	else {return 0;}
}

function getWinAttValue(as,a) {
//function used to extract a specific window attribute value
//for a specific attribute (e.g. left)
// as = attribute string
// a = specific attribute to find and return

	//checks to see if attribute exists in string	
	if (as.indexOf(a)==-1){return false};
	
	//if it does, proceeds to find where attribute value starts in string
	var sLoc = as.indexOf(a)+a.length+1;
	var eLoc = sLoc;
	
	//next, checks to see if additional attributes exist in string
	//if they do, trims value at next parsing character (,).	
	eLoc = as.substring(sLoc).indexOf(',');
	if (eLoc != -1) {return as.substr(sLoc,eLoc);}
	else {return as.substring(sLoc);}	
	
}

//MM built in functions
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

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_preload_images() { //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_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function addBrowserCSS(p) {
//function adds custom css files used to handle browser-specific issues
//p=folder path to css files (e.g. css/)
	var uAgent = getUserAgentInfo();
	if (document) {
		if (uAgent[agentOSLoc]==osMac) {document.writeln('<LINK type="text/css" rel="stylesheet" href="'+p+'mac.css">');}
		else {
			document.writeln('<LINK type="text/css" rel="stylesheet" href="'+p+'pc.css">');
			if (uAgent[agentBrowserLoc]==bNetscape||uAgent[agentBrowserLoc]==bMozilla) {
				document.writeln('<LINK type="text/css" rel="stylesheet" href="'+p+'nn.css">');
			}
		}	
	}	
}

/*************************************************************************
    dw_event.js (version date Feb 2004)
        
    This code is from Dynamic Web Coding at http://www.dyn-web.com/
    See Terms of Use at http://www.dyn-web.com/bus/terms.html
    regarding conditions under which you may use this code.
    This notice must be retained in the code as is!
*************************************************************************/

var dw_event = {
  
  add: function(obj, etype, fp, cap) {
    cap = cap || false;
    if (obj.addEventListener) obj.addEventListener(etype, fp, cap);
    else if (obj.attachEvent) obj.attachEvent("on" + etype, fp);
  }, 

  remove: function(obj, etype, fp, cap) {
    cap = cap || false;
    if (obj.removeEventListener) obj.removeEventListener(etype, fp, cap);
    else if (obj.detachEvent) obj.detachEvent("on" + etype, fp);
  }, 

  DOMit: function(e) { 
    e = e? e: window.event;
    e.tgt = e.srcElement? e.srcElement: e.target;
    
    if (!e.preventDefault) e.preventDefault = function () { return false; }
    if (!e.stopPropagation) e.stopPropagation = function () { if (window.event) window.event.cancelBubble = true; }
        
    return e;
  }
  
}


/*************************************************************************

  dw_viewport.js
  version date Nov 2003
  
  This code is from Dynamic Web Coding 
  at http://www.dyn-web.com/
  Copyright 2003 by Sharon Paine 
  See Terms of Use at http://www.dyn-web.com/bus/terms.html
  regarding conditions under which you may use this code.
  This notice must be retained in the code as is!

*************************************************************************/  
  
var viewport = {
  getWinWidth: function () {
    this.width = 0;
    if (window.innerWidth) this.width = window.innerWidth - 18;
    else if (document.documentElement && document.documentElement.clientWidth) 
  		this.width = document.documentElement.clientWidth;
    else if (document.body && document.body.clientWidth) 
  		this.width = document.body.clientWidth;
  },
  
  getWinHeight: function () {
    this.height = 0;
    if (window.innerHeight) this.height = window.innerHeight - 18;
  	else if (document.documentElement && document.documentElement.clientHeight) 
  		this.height = document.documentElement.clientHeight;
  	else if (document.body && document.body.clientHeight) 
  		this.height = document.body.clientHeight;
  },
  
  getScrollX: function () {
    this.scrollX = 0;
  	if (typeof window.pageXOffset == "number") this.scrollX = window.pageXOffset;
  	else if (document.documentElement && document.documentElement.scrollLeft)
  		this.scrollX = document.documentElement.scrollLeft;
  	else if (document.body && document.body.scrollLeft) 
  		this.scrollX = document.body.scrollLeft; 
  	else if (window.scrollX) this.scrollX = window.scrollX;
  },
  
  getScrollY: function () {
    this.scrollY = 0;    
    if (typeof window.pageYOffset == "number") this.scrollY = window.pageYOffset;
    else if (document.documentElement && document.documentElement.scrollTop)
  		this.scrollY = document.documentElement.scrollTop;
  	else if (document.body && document.body.scrollTop) 
  		this.scrollY = document.body.scrollTop; 
  	else if (window.scrollY) this.scrollY = window.scrollY;
  },
  
  getAll: function () {
    this.getWinWidth(); this.getWinHeight();
    this.getScrollX();  this.getScrollY();
  }
  
}