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_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_findObj(n, d) { //v4.0
  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 && document.getElementById) x=document.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 openIt(url) {
   var newWin = window.open(url,"","resizable=yes,menubar=yes,toolbar=yes,width=450,height=300,scrollbars=yes");     
}

function openBrainPops(url) {
   var newWin = window.open(url,"","resizable=no,menubar=no,toolbar=no,width=320,height=323,scrollbars=no");     
}

function openGlossary(url) {
   var newWin = window.open(url,"","resizable=no,menubar=no,toolbar=no,width=680,height=480,scrollbars=no");     
}

function openThis(url)
{
   var thisWin=
window.open(url,"","resizable=yes,menubar=yes,toolbar=yes,width=600,height=360,scrollbars=yes,location=yes");
}

function openPDF(url)
{
   var thisWin=
window.open(url,"PDFWindow","resizable=yes,menubar=yes,toolbar=yes,scrollbars=yes,location=yes");
}

function fixLayers() {
	if (navigator.appName == "Netscape") {
		if (parseFloat(navigator.appVersion) >= 4.5) {
			document.location.reload();
		} // End Check AppVersion
	}// End Check AppName
} // End fixLayers

function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_checkBrowser(NSvers,NSpass,NSnoPass,IEvers,IEpass,IEnoPass,OBpass,URL,altURL) { //v3.0
  var newURL='', verStr=navigator.appVersion, app=navigator.appName, version = parseFloat(verStr);
  if (app.indexOf('Netscape') != -1) {
    if (version >= NSvers) {if (NSpass>0) newURL=(NSpass==1)?URL:altURL;}
    else {if (NSnoPass>0) newURL=(NSnoPass==1)?URL:altURL;}
  } else if (app.indexOf('Microsoft') != -1) {
    if (version >= IEvers || verStr.indexOf(IEvers) != -1)
     {if (IEpass>0) newURL=(IEpass==1)?URL:altURL;}
    else {if (IEnoPass>0) newURL=(IEnoPass==1)?URL:altURL;}
  } else if (OBpass>0) newURL=(OBpass==1)?URL:altURL;
  if (newURL) { window.location=unescape(newURL); document.MM_returnValue=false; }
}

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}

MM_reloadPage(true);

function doMenuJump(theMenu)
{	
	if (theMenu.selectedIndex)
		window.location = theMenu.options[theMenu.selectedIndex].value;
}

function doMenuJumpNew(theMenu)
{	
	if (theMenu.selectedIndex)
   var newWin = window.open(window.location,"","resizable=yes,menubar=yes,toolbar=yes,width=450,height=300,scrollbars=yes");
	newWin.window.location = theMenu.options[theMenu.selectedIndex].value;
     
}

// isblank and verify are used in an example example from OReilly JavaScript The Definitive Guide pages 311-314.
// Please refer to the above reference for further explanation.

// A utility function that returns true if a string contains only 
// whitespace characters.
function isblank(s) {
	for(var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if ((c != '') && (c != '\n') && (c != '\t')) return false;
	}
	return true;
}	

// This is the funciton that performs form verification.  It will be invoked 
// from the onSubmit() event handler.  The handler should return whatever
// value this function returns.	
function verify(f) {
	var msg;
	var empty_fields = "";
	var errors = "";
	// Loop through the elements of the form, looking for all
	// text and textarea elements that don't have an "optional" property
	// defined.  Then, check for fields that are empty and make a list of them.
	// Also, if any of these elements have a "min" or a "max" property defined,
	// then verify that they are numbers and that they are in the right range.
	// If the element has a "numeric" property defined, verify that
	// it is a number, but don't check its range.
	// Put together error messages for fields that are wrong.
	for(var i = 0; i < f.length; i++) {
		var e = f.elements[i];
		if (((e.type == "text") || (e.type == "textarea")) && !e.optional) {
			// first check if the field is empty
			if ((e.value == null) || (e.value == "") || isblank(e.value)) {
				empty_fields += "\n          " + e.name;
				continue;
			}

			// Now check for fields that are supposed to be numeric
			if (e.numeric || (e.min != null) || (e.max != null)) {
				var v = parseFloat(e.value);
				if (isNaN(v) || ((e.min != null) && (v < e.min)) || ((e.max != null) && (v > e.max))) {
					errors += "- The field " + e.name + " must be a number";
					if (e.min != null)
						errors += " that is greater than " + e.min;
					if (e.max != null && e.min != null)
						errors += " and less than " + e.max;
					else if (e.max != null)
						errors += " that is less than " + e.max;
					errors += ".\n";
				}
			}
		}
	}

	// Now, if there were any errors, display the messages, and 
	// return false to prevent the form from being submitted.
	// Otherwise return true.
	if (!empty_fields && !errors) return true;
	
	msg  = "______________________________________________________\n\n"
	msg += "The form was not submitted because of the following error(s).\n";
	msg += "Please correct these error(s) and re-submit.\n";
	msg += "______________________________________________________\n\n";
	
	if (empty_fields) {
		msg += "- The following required field(s) are empty:" + empty_fields + "\n";
		if (errors) msg += "\n";
	}
	msg += errors;
	alert(msg);
	return false;
}
