//=======================================================
     //detect browser settings for showing and hiding DIVs
     isNS4 = (document.layers) ? true : false;
     isIE4 = (document.all && !document.getElementById) ? true : false;
     isIE5 = (document.all && document.getElementById) ? true : false;
     isNS6 = (!document.all && document.getElementById) ? true : false;
//=======================================================

function switchDiv(strDivName,bolVisible){
 //identify the element based on browser type
 if (isNS4) {
   objElement = document.layers[strDivName];
 } else if (isIE4) {
   objElement = document.all[strDivName].style;
 } else if (isIE5 || isNS6) {
   objElement = document.getElementById(strDivName).style;
 }
 
 if(isNS4){
     if(!bolVisible) {
       objElement.visibility ="hidden"
     } else {
       objElement.visibility ="visible"
     }     
 }else if(isIE4){
     if(!bolVisible) {
       objElement.visibility = "hidden";
     } else {
       objElement.visibility = "visible";
     }
 } else if (isIE5 || isNS6) {
      if(!bolVisible){
         objElement.display = "none";
      } else {
        objElement.display = "";
        }
      }
}

function selectNewItem(page, userID, title, table) {
// update triggered on new window, not here
// opens dialog
	var randomParam = Math.random();
	var url = page + "?ID=" + userID;
	url += "&pageTitle=" + title;
	url += "&table=" + table;
	url += "&random=" + randomParam;
	var returnValue = openDialog(url,'550','253'); 
	if (returnValue == "false") {
		self.location = "login.asp";
	}
	return returnValue;
	returnValue = null;
}

// creates page array that stores all window references opened from page
// array is used in checkWindows to close all windows related to the current page
var arrWindow = new Array();
// closes all windows opened through openWindow
// called when page unloads
function checkWindows() {
	for (i = 0; i < arrWindow.length; i ++) {
		if (arrWindow[i] && !arrWindow[i].closed) {
			arrWindow[i].close();
		}
	}
}
function openWindow(url,width,height,resize,scroll,menubar) {
    x = (640 - width)/2, y = (480 - height)/2;

    if (screen) {
        y = (screen.availHeight - height)/2;
        x = (screen.availWidth - width)/2;
    }
	if (screen.availWidth > 1800) { 
	x = ((screen.availWidth/2) - width)/2; 
    } 
	arrWindow[arrWindow.length] = window.open(url,'newWin','width='+width+',height='+height+',screenX='+x+',screenY='+y+',top='+y+',left='+x+',resizable='+resize+',scrollbars='+scroll+',menubar='+menubar+',status=yes');
	return arrWindow[arrWindow.length - 1];
}

function openWindowDownload(url,width,height,resize,scroll,menubar) {
    x = (640 - width)/2, y = (480 - height)/2;

    if (screen) {
        y = (screen.availHeight - height)/2;
        x = (screen.availWidth - width)/2;
    }
	if (screen.availWidth > 1800) { 
	x = ((screen.availWidth/2) - width)/2; 
    } 
	arrWindow[arrWindow.length] = window.open(url,'newWin','width='+width+',height='+height+',screenX='+x+',screenY='+y+',top='+y+',left='+x+',resizable=yes,scrollbars=yes,menubar=yes,status=yes');
	return arrWindow[arrWindow.length - 1];
}

// opens centered window
// returns value generated from dialog
function openDialog(url,width,height,resize,scroll) {
    x = (640 - width)/2, y = (480 - height)/2;

    if (screen) {
        y = (screen.availHeight - height)/2;
        x = (screen.availWidth - width)/2;
    }
	if (screen.availWidth > 1800) { 
	x = ((screen.availWidth/2) - width)/2; 
    } 
	return window.showModalDialog(url,"","dialogHeight:"+height+"px;dialogWidth:"+width+"px;status:no;unadorned:yes;help:no;scrollbars=no");
}
 
function trim (s) { 
	// this will get rid of leading spaces 
	var strText = new String(s);
	while (strText.substring(0,1) == ' ') 
        	strText = strText.substring(1, strText.length);

	// this will get rid of trailing spaces 
	while (strText.substring(strText.length-1,strText.length) == ' ')
		strText = strText.substring(0, strText.length-1);

	return strText;
}

function emailCheck (emailStr) {
/* The following pattern is used to check if the entered e-mail address
   fits the user@domain format.  It also is used to separate the username
   from the domain. */
var emailPat=/^(.+)@(.+)$/
/* The following string represents the pattern for matching all special
   characters.  We don't want to allow special characters in the address. 
   These characters include ( ) < > @ , ; : \ " . [ ]    */
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
/* The following string represents the range of characters allowed in a 
   username or domainname.  It really states which chars aren't allowed. */
var validChars="\[^\\s" + specialChars + "\]"
/* The following pattern applies if the "user" is a quoted string (in
   which case, there are no rules about which characters are allowed
   and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
   is a legal e-mail address. */
var quotedUser="(\"[^\"]*\")"
/* The following pattern applies for domains that are IP addresses,
   rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
   e-mail address. NOTE: The square brackets are required. */
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
/* The following string represents an atom (basically a series of
   non-special characters.) */
var atom=validChars + '+'
/* The following string represents one word in the typical username.
   For example, in john.doe@somewhere.com, john and doe are words.
   Basically, a word is either an atom or quoted string. */
var word="(" + atom + "|" + quotedUser + ")"
// The following pattern describes the structure of the user
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
/* The following pattern describes the structure of a normal symbolic
   domain, as opposed to ipDomainPat, shown above. */
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")


/* Finally, let's start trying to figure out if the supplied address is
   valid. */

/* Begin with the coarse pattern to simply break up user@domain into
   different pieces that are easy to analyze. */
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
  /* Too many/few @'s or something; basically, this address doesn't
     even fit the general mould of a valid e-mail address. */
	return false
}
var user=matchArray[1]
var domain=matchArray[2]

// See if "user" is valid 
if (user.match(userPat)==null) {
    // user is not valid
    return false
}

/* if the e-mail address is at an IP address (as opposed to a symbolic
   host name) make sure the IP address is valid. */
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
		return false
	    }
    }
    return true
}

// Domain is symbolic name
var domainArray=domain.match(domainPat)
if (domainArray==null) {
    return false
}

/* domain name seems valid, but now make sure that it ends in a
   three-letter word (like com, edu, gov) or a two-letter word,
   representing country (uk, nl), and that there's a hostname preceding 
   the domain or country. */

/* Now we need to break up the domain to get a count of how many atoms
   it consists of. */
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   // the address must end in a two letter or three letter word.
   return false
}

// Make sure there's a host name preceding the domain.
if (len<2) {
   return false
}

// If we've gotten this far, everything's valid!
return true;
}

function phoneCheck (phoneStr) {
	if (trim(phoneStr) != "") {
	 	var phonePat = /[0-9]{3}\-[0-9]{3}\-[0-9]{4}/;
		// See if Phone Number is valid 
		if (phoneStr.match(phonePat)==null) {
		    return false;
		}
	}
	return true;
}

function ssnCheck (ssnStr) {
	if (trim(ssnStr) != "") {
	 	var ssnPat = /[0-9]{9}/;
		// See if SSN is valid 
		if (ssnStr.match(ssnPat)==null) {
		    return false;
		}
	}
	return true;
}

function numericCheck (numericStr) {
//  check for valid numeric strings	
	var strValidChars = "0123456789.-";
	var strChar;
	var blnResult = true;
	if (trim(numericStr) == "") return true;
	//  test strString consists of valid characters listed above
	for (i = 0; i < numericStr.length && blnResult == true; i++)  {
	strChar = numericStr.charAt(i);
		if (strValidChars.indexOf(strChar) == -1)  {
			blnResult = false;
		}
	}
	return blnResult;
}

function moneyCheck (moneyStr) {
// Check to see if the string is in a valid currency format
	if (trim(moneyStr) != "") {
		var pattern = /\$\d{1,3}(,\d{3})*\.\d{2}$/;
		// See if currency is valid 
		if (!(moneyStr.match(pattern))) {
			return false;
		}
	}
	return true;
}

function timeCheck (timeStr) {
// Check to see if the string is in a valid time format
	if (trim(timeStr) != "") {
		var pattern = /\d{1,2}\:\d{2}\s(AM|am|PM|pm)$/;
		// See if currency is valid 
		if (!(timeStr.match(pattern))) {
			return false;
		}
	}
	return true;
}

function dateCheck (dateStr) {
	if (trim(dateStr) != "") {
		var sDate = dateStr;
		var patternDate1 = /[0-9]{2}\/[0-9]{2}\/[0-9]{4}/;
	 	if (sDate.match(patternDate1)) {
			var sDateMonth	= dateStr.substr(0,2);
			var sDateDay	= dateStr.substr(3,2);
			var sDateYear	= dateStr.substr(6,4);
	 	} else {
			var patternDate2 = /[0-9]{1}\/[0-9]{2}\/[0-9]{4}/;
			if (sDate.match(patternDate2)) {
				var sDateMonth	= "0" + dateStr.substr(0,1);
				var sDateDay	= dateStr.substr(2,2);
				var sDateYear	= dateStr.substr(5,4);
		 	} else {
				var patternDate3 = /[0-9]{2}\/[0-9]{1}\/[0-9]{4}/;
				if (sDate.match(patternDate3)) {
					var sDateMonth	= dateStr.substr(0,2);
					var sDateDay	= "0" + dateStr.substr(3,1);
					var sDateYear	= dateStr.substr(5,4);
			 	} else {
					var patternDate4 = /[0-9]{1}\/[0-9]{1}\/[0-9]{4}/;
					if (sDate.match(patternDate4)) {
						var sDateMonth	= "0" + dateStr.substr(0,1);
						var sDateDay	= "0" + dateStr.substr(2,1);
						var sDateYear	= dateStr.substr(4,4);
					} else {
						return false;
					}
				}
			}	
		}
	
		if ( ( (sDateMonth < "01") || (sDateMonth > "12") )
		|| ( (sDateMonth == "01") && ((sDateDay < "01") || (sDateDay > "31")) ) 
		|| ( (sDateMonth == "02") && ((sDateDay < "01") || (sDateDay > "29")) ) 
		|| ( (sDateMonth == "03") && ((sDateDay < "01") || (sDateDay > "31")) ) 
		|| ( (sDateMonth == "04") && ((sDateDay < "01") || (sDateDay > "30")) ) 
		|| ( (sDateMonth == "05") && ((sDateDay < "01") || (sDateDay > "31")) ) 
		|| ( (sDateMonth == "06") && ((sDateDay < "01") || (sDateDay > "30")) ) 
		|| ( (sDateMonth == "07") && ((sDateDay < "01") || (sDateDay > "31")) ) 
		|| ( (sDateMonth == "08") && ((sDateDay < "01") || (sDateDay > "31")) ) 
		|| ( (sDateMonth == "09") && ((sDateDay < "01") || (sDateDay > "30")) ) 
		|| ( (sDateMonth == "10") && ((sDateDay < "01") || (sDateDay > "31")) ) 
		|| ( (sDateMonth == "11") && ((sDateDay < "01") || (sDateDay > "30")) ) 
		|| ( (sDateMonth == "12") && ((sDateDay < "01") || (sDateDay > "31")) ) ) {
			return false;
		}
		
		if (sDateYear < "1900") {
			return false;
		}
		
		if (((sDateYear % 4) > 0) && (sDateMonth=="02") && (sDateDay>"28"))	{
			return false;
		}
	}
	return true;
}

// -------------------------------------------------------------------
// TabNext()
// Function to auto-tab phone field
// Arguments:
//   obj :  The input object (this)
//   event: Either 'up' or 'down' depending on the keypress event
//   len  : Max length of field - tab when input reaches this length
//   next_field: input object to get focus after this one
// -------------------------------------------------------------------
var phone_field_length=0;
function TabNext(obj,event,len,next_field) {
	if (event == "down") {
		phone_field_length=obj.value.length;
		}
	else if (event == "up") {
		if (obj.value.length != phone_field_length) {
			phone_field_length=obj.value.length;
			if (phone_field_length == len) {
				next_field.focus();
				}
			}
		}
	}


