function MM_jumpMenu(targ,selObj,restore){
// This function makes the browser go to the url inside the selected Pull Down value
// Used for PullDowns like Campus & Building

  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}


function openWindow(url,winName,winWidth,winHeight,features) { //v2.0
// This function opens a popup window centered by x and y
// Example of use: openWindow('http://www.google.com','test','400','400','scrollbars=yes')

 x = (screen.availWidth-winWidth)/2;
   y = (screen.availHeight-winHeight)/2;
 features += ",width="+winWidth+",height="+winHeight;
   features += ",left="+x+",top="+y+",screenX="+x+",screenY="+y;
    window.open(url,winName,features).focus();
}


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 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_showHideLayers() { //v6.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; }
}


// Functions used to verify the fields inside the forms. Also it creates masks
// Example of use:
// fields2verify = new Array()
// fields2verify[0] = new field('campus1[a]','field1 1',JST_MASK_DECIMAL,'R')
// fields2verify[1] = new field('campus2[c]','field2 2',JST_MASK_DECIMAL,'R')
// createMask(fields2verify);
// onSubmit="return verifyFields(fields2verify,errorMsg)";

function field(objName,humanName,mask,required) {
this.objName=objName;
this.humanName=humanName;
this.mask=mask;
this.required=required;
}

function createMask(arrayObj) {
 for(var i=0;i<arrayObj.length;i++) {
// alert(arrayObj[i].mask);
 if (arrayObj[i].mask!=null)
 var mask = new InputMask(arrayObj[i].mask, getObject(arrayObj[i].objName));
 }
}

function verifyFields(arrayObj,errorMessage) {
 error="";
 errorOR="";
 countOR=0;
 ifOR="";
 count=0;
 XORmax=0;
 XORcount=0;
 errorXOR="";
 ifXOR="";
 errorFlag=0;

 for(var i=0;i<arrayObj.length;i++) {
	   	if (arrayObj[i] == "0")
        	break;
        objType=MM_findObj(arrayObj[i].objName).type;
     	if(arrayObj[i].required=="R") {
			if(!objType) {
				if ( !searchChecked(arrayObj[i].objName) ) {error+="- "+arrayObj[i].humanName+"\r\n";}
			}
			else {

		   switch (objType){
			
			case "hidden":
			case "text":
				if (Trim(MM_findObj(arrayObj[i].objName).value)=="") {error+="- "+arrayObj[i].humanName+"\r\n";}
				break;
  
		    case "checkbox":
				if (MM_findObj(arrayObj[i].objName).checked==false) {error+="- "+arrayObj[i].humanName+"\r\n";}
			break;
   
			case "select-one":
				if (Trim(MM_findObj(arrayObj[i].objName).value)=="" || MM_findObj(arrayObj[i].objName).value=="0") {error+="- "+arrayObj[i].humanName+"\r\n";}
		    break;

			}
		}
	}

  if(arrayObj[i].required=="OR") {
   if (countOR>=1) ifOR=" OR ";
   count++;
   switch (objType){
	
	case "hidden":
    case "text":
     if (MM_findObj(arrayObj[i].objName).value=="" || MM_findObj(arrayObj[i].objName).value+0==0) {errorOR+=ifOR+arrayObj[i].humanName;countOR++;}
    break;
  
    case "checkbox":
     if (MM_findObj(arrayObj[i].objName).checked==false) {error+=". "+arrayObj[i].humanName+"\r\n";}
    break;
   
    case "select-one":
     if (MM_findObj(arrayObj[i].objName).value=="") {errorOR+=ifOR+arrayObj[i].humanName;countOR++;}
    break;

   }
  }

  if(arrayObj[i].required=="XOR") {
   XORmax++;
   if (XORcount>=1||XORmax>(XORcount+1)) ifXOR=" OR "
   errorXOR+=ifXOR+""+arrayObj[i].humanName;

   switch (objType){
    
	case "hidden":
	case "text":
     if (MM_findObj(arrayObj[i].objName).value=="" || getObject(arrayObj[i].objName).value+0==0) {XORcount++;}
    break;
  
    case "checkbox":
     if (MM_findObj(arrayObj[i].objName).checked==false) {error+=". "+arrayObj[i].humanName+"\r\n";}
    break;
   
    case "select-one":
     if (MM_findObj(arrayObj[i].objName).value=="") {error+=". "+arrayObj[i].humanName+"\r\n";}
    break;
   }
  
  
  }
 }
 errorheader=errorMessage+":\r\n";
 errorfinal=errorheader;

 if (error!="") {errorFlag=1;errorfinal+=error;}
 if (countOR==count&&countOR!=0&&count!=0) {errorFlag=1;errorfinal+=errorOR; }
 if ((XORmax-1)!=XORcount&&XORmax>0) {errorFlag=1;errorfinal+=errorXOR;}
 if (errorFlag==1) {alert(errorfinal);return false} else return true;
}


function compareDateTime(monthA, dayA, yearA, hourA, minA, ampmA, monthB, dayB, yearB, hourB, minB, ampmB, msg)
{
	if(hourB == "3" && minB == "00" && ampmB == "AM")
	{
		return true;
	} else
	{
		dateA = createDate(monthA, dayA, yearA, hourA, minA, ampmA);
		dateB = createDate(monthB, dayB, yearB, hourB, minB, ampmB);
		if(dateA < dateB)
		{
			return true;
		} else
		{
			if(msg)
				alert(msg);
			return false;
		}
	}
}

function redirectById(destination,obj) {
if (obj.options[obj.selectedIndex].value!="")  location.href=destination+obj.options[obj.selectedIndex].value;
}

function openWindowForm(url,winName,winWidth,winHeight,features,myform) {
 if (! window.focus)return true;
 openWindow(url,winName,winWidth,winHeight,features)
 myform.target=winName;
 return true;
}

function tableruler()
{
 var oldRowStyle;
 if (document.getElementById && document.createTextNode)
  {
   var tables=document.getElementsByTagName('table');
   for (var i=0;i<tables.length;i++)
   {
    if(tables[i].className=='ruler')
    {
     var trs=tables[i].getElementsByTagName('tr');
     for(var j=0;j<trs.length;j++)
     {
   if(trs[j].parentNode.nodeName=='TBODY'&& trs[j].parentNode.nodeName!='TFOOT' && trs[j].nodeName!='THEAD')
     {
    trs[j].clicat=false;
       trs[j].onmouseover=function(){
     if(this.clicat==false){
    this.oldRowStyle = this.className;
     }
     this.className='ruled';
       return false
    }
   
    
    trs[j].onmouseout=function(){
     if(this.clicat==false){
      this.className = this.oldRowStyle;
      return false
     }
     else {
    this.className = "clicked";
    return false
     }
  }
   
   trs[j].onmousedown=function(){
     if(this.clicat==true){
      this.clicat=!this.clicat;
      this.className=this.oldRowStyle;
      return false
     } 
     else {
        this.clicat=!this.clicat;
 //    oldRowStyle = this.className;
     this.className="clicked";
     return false;
     }
   }

   
   }
    }
   }
  }
 }
}

function Trim(s) {
  // Remove leading spaces and carriage returns
  while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r')) {
    s = s.substring(1,s.length);
  }

  // Remove trailing spaces and carriage returns
  while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r')){
    s = s.substring(0,s.length-1);
  }
  return s;
}

function getQueryVariable(variable) 
{
 var query = window.location.search.substring(1);
 var vars = query.split("&");
 for (var i=0;i<vars.length;i++) {
  var pair = vars[i].split("=");
  if (pair[0] == variable) {
   return pair[1];
  }
 } 
 return false;
}



   // Original JavaScript code by Duncan Crombie: dcrombie@chirp.com.au
   // Please acknowledge use of this code by including this header.

   // CONSTANTS
  var separator = ",";  // use comma as 000's separator
  var decpoint = ".";  // use period as decimal point
  var percent = "%";
  var currency = "$";  // use dollar sign for currency

  function formatNumber(number, format, print) {  // use: formatNumber(number, "format")
    if (print) document.write("formatNumber(" + number + ", \"" + format + "\")<br>");

    if (number - 0 != number) return null;  // if number is NaN return null
    var useSeparator = format.indexOf(separator) != -1;  // use separators in number
    var usePercent = format.indexOf(percent) != -1;  // convert output to percentage
    var useCurrency = format.indexOf(currency) != -1;  // use currency format
    var isNegative = (number < 0);
    number = Math.abs (number);
    if (usePercent) number *= 100;
    format = strip(format, separator + percent + currency);  // remove key characters
    number = "" + number;  // convert number input to string

     // split input value into LHS and RHS using decpoint as divider
    var dec = number.indexOf(decpoint) != -1;
    var nleftEnd = (dec) ? number.substring(0, number.indexOf(".")) : number;
    var nrightEnd = (dec) ? number.substring(number.indexOf(".") + 1) : "";

     // split format string into LHS and RHS using decpoint as divider
    dec = format.indexOf(decpoint) != -1;
    var sleftEnd = (dec) ? format.substring(0, format.indexOf(".")) : format;
    var srightEnd = (dec) ? format.substring(format.indexOf(".") + 1) : "";

     // adjust decimal places by cropping or adding zeros to LHS of number
    if (srightEnd.length < nrightEnd.length) {
      var nextChar = nrightEnd.charAt(srightEnd.length) - 0;
      nrightEnd = nrightEnd.substring(0, srightEnd.length);
      if (nextChar >= 5) nrightEnd = "" + ((nrightEnd - 0) + 1);  // round up

 // patch provided by Patti Marcoux 1999/08/06
      while (srightEnd.length > nrightEnd.length) {
        nrightEnd = "0" + nrightEnd;
      }

      if (srightEnd.length < nrightEnd.length) {
        nrightEnd = nrightEnd.substring(1);
        nleftEnd = (nleftEnd - 0) + 1;
      }
    } else {
      for (var i=nrightEnd.length; srightEnd.length > nrightEnd.length; i++) {
        if (srightEnd.charAt(i) == "0") nrightEnd += "0";  // append zero to RHS of number
        else break;
      }
    }

     // adjust leading zeros
    sleftEnd = strip(sleftEnd, "#");  // remove hashes from LHS of format
    while (sleftEnd.length > nleftEnd.length) {
      nleftEnd = "0" + nleftEnd;  // prepend zero to LHS of number
    }

    if (useSeparator) nleftEnd = separate(nleftEnd, separator);  // add separator
    var output = nleftEnd + ((nrightEnd != "") ? "." + nrightEnd : "");  // combine parts
    output = ((useCurrency) ? currency : "") + output + ((usePercent) ? percent : "");
    if (isNegative) {
      // patch suggested by Tom Denn 25/4/2001
      output = (useCurrency) ? "(" + output + ")" : "-" + output;
    }
    return output;
  }

  function strip(input, chars) {  // strip all characters in 'chars' from input
    var output = "";  // initialise output string
    for (var i=0; i < input.length; i++)
      if (chars.indexOf(input.charAt(i)) == -1)
        output += input.charAt(i);
    return output;
  }

  function separate(input, separator) {  // format input using 'separator' to mark 000's
    input = "" + input;
    var output = "";  // initialise output string
    for (var i=0; i < input.length; i++) {
      if (i != 0 && (input.length - i) % 3 == 0) output += separator;
      output += input.charAt(i);
    }
    return output;
  }


function setDropDownByValue(obj,searchValue) {
// this function sets the dropdown object to a position depending on the value we send to it.
	if (searchValue) {
		for( var i = 0 ; i < obj.options.length ; i ++ ) {
			if(obj.options[i].value==searchValue) {
				obj.selectedIndex=i;
				break;
			}
		}
	} else {
		obj.selectedIndex=0;
	}

}

function searchChecked(objName) {
	qtychecked=0;
	for (var i=0;i<document.forms[0].elements.length;i++) {
			if ( document.forms[0].elements[i].name.indexOf(objName)!=-1 && document.forms[0].elements[i].checked) 
				qtychecked++;
	}
	return qtychecked;			
}

function searchCheckedValue(objName) {
	for (var i=0;i<document.forms[0].elements.length;i++) {
			if ( document.forms[0].elements[i].name.indexOf(objName)!=-1 && document.forms[0].elements[i].checked) 
				return document.forms[0].elements[i].value;
	}
	return 0;			
}


function searchCheckedValueBefore(objName) {
	for (var i=0;i<document.forms[0].elements.length;i++) {
			if ( document.forms[0].elements[i].name.indexOf(objName)!=-1 && document.forms[0].elements[i].checked) 
				return document.forms[0].elements[i-1].value;
	}
	return 0;			
}


function getRadioValue(objName) {
	for (var i=0;i<document.forms[0].elements.length;i++) {
			if ( document.forms[0].elements[i].name.indexOf(objName)!=-1 && document.forms[0].elements[i].checked) 
				return document.forms[0].elements[i].value;
	}			
}

/*
    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com
*/

function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

function isNumberKey(evt)
      {
         
         var charCode = (evt.which) ? evt.which : event.keyCode
         /*
         	BUG#8020
         	- allow decimal on screen 4
         	- markg
         	- 11/15/2007
         */
         if (charCode > 31 && ((charCode < 48 && charCode != 46) || charCode > 57))
            return false;
         return true;
      }

