// 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";

//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(bOpera)>0) {browser=bOpera;}	
	else if (browserString.indexOf(bIE)>0) {browser=bIE;}
	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(t,p) {
//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);}	
	
}

function addBrowserCSS() {
//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="css/mac.css">');}
		else {
			if (uAgent[agentBrowserLoc]==bNetscape||uAgent[agentBrowserLoc]==bMozilla) {document.writeln('<LINK type="text/css" rel="stylesheet" href="css/mozilla.css">');}
			if (uAgent[agentBrowserLoc]==bIE) {document.writeln('<LINK type="text/css" rel="stylesheet" href="css/pc.css">');}
		}	
	}	
}

//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_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];}
}


