function selectUnselectMatchingOptions(obj,regex,which,only) {
	if (window.RegExp) {
		if (which == "select") {
			var selected1=true;
			var selected2=false;
			}
		else if (which == "unselect") {
			var selected1=false;
			var selected2=true;
			}
		else {
			return;
			}
		var re = new RegExp(regex);
		for (var i=0; i<obj.options.length; i++) {
			if (re.test(obj.options[i].text)) {
				obj.options[i].selected = selected1;
				}
			else {
				if (only == true) {
					obj.options[i].selected = selected2;
					}
				}
			}
		}
	}
		
function selectMatchingOptions(obj,regex) {
	selectUnselectMatchingOptions(obj,regex,"select",false);
	}
function selectOnlyMatchingOptions(obj,regex) {
	selectUnselectMatchingOptions(obj,regex,"select",true);
	}
function unSelectMatchingOptions(obj,regex) {
	selectUnselectMatchingOptions(obj,regex,"unselect",false);
	}
	
function sortSelect(obj) {
	var o = new Array();
	for (var i=0; i<obj.options.length; i++) {
		o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
		}
	o = o.sort( 
		function(a,b) { 
			if ((a.text+"") < (b.text+"")) { return -1; }
			if ((a.text+"") > (b.text+"")) { return 1; }
			return 0;
			} 
		);

	for (var i=0; i<o.length; i++) {
		obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
		}
	}

function selectAllOptions(obj) {
	var iMax = 500;
	var iMaxCounter = obj.options.length;
	if (iMaxCounter > iMax) {
		iMaxCounter = iMax;
	}

	for (var i=0; i<iMaxCounter; i++) {
		obj.options[i].selected = true;
		}
	}
	
function moveSelectedOptions(from,to) {
	// Unselect matching options, if required
	if (arguments.length>3) {
		var regex = arguments[3];
		if (regex != "") {
			unSelectMatchingOptions(from,regex);
			}
		}
	// Move them over
	for (var i=0; i<from.options.length; i++) {
		var o = from.options[i];
		if (o.selected) {
			to.options[to.options.length] = new Option( o.text, o.value, false, false);
			}
		}
	// Delete them from original
	for (var i=(from.options.length-1); i>=0; i--) {
		var o = from.options[i];
		if (o.selected) {
			from.options[i] = null;
			}
		}
	if ((arguments.length<3) || (arguments[2]==true)) {
		sortSelect(from);
		sortSelect(to);
		}
	from.selectedIndex = -1;
	to.selectedIndex = -1;
	}

function copySelectedOptions(from,to) {
	var options = new Object();
	for (var i=0; i<to.options.length; i++) {
		options[to.options[i].text] = true;
		}
	for (var i=0; i<from.options.length; i++) {
		var o = from.options[i];
		if (o.selected) {
			if (options[o.text] == null || options[o.text] == "undefined") {
				to.options[to.options.length] = new Option( o.text, o.value, false, false);
				}
			}
		}
	if ((arguments.length<3) || (arguments[2]==true)) {
		sortSelect(to);
		}
	from.selectedIndex = -1;
	to.selectedIndex = -1;
	}

function moveAllOptions(from,to) {
	selectAllOptions(from);
	if (arguments.length==2) {
		moveSelectedOptions(from,to);
		}
	else if (arguments.length==3) {
		moveSelectedOptions(from,to,arguments[2]);
		}
	else if (arguments.length==4) {
		moveSelectedOptions(from,to,arguments[2],arguments[3]);
		}
	}

function copyAllOptions(from,to) {
	selectAllOptions(from);
	if (arguments.length==2) {
		copySelectedOptions(from,to);
		}
	else if (arguments.length==3) {
		copySelectedOptions(from,to,arguments[2]);
		}
	}

function swapOptions(obj,i,j) {
	var o = obj.options;
	var i_selected = o[i].selected;
	var j_selected = o[j].selected;
	var temp = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
	var temp2= new Option(o[j].text, o[j].value, o[j].defaultSelected, o[j].selected);
	o[i] = temp2;
	o[j] = temp;
	o[i].selected = j_selected;
	o[j].selected = i_selected;
	}
	
function moveOptionUp(obj) {
	// If > 1 option selected, do nothing
	var selectedCount=0;
	for (i=0; i<obj.options.length; i++) {
		if (obj.options[i].selected) {
			selectedCount++;
			}
		}
	if (selectedCount > 1) {
		return;
		}
	// If this is the first item in the list, do nothing
	var i = obj.selectedIndex;
	if (i == 0) {
		return;
		}
	swapOptions(obj,i,i-1);
	obj.options[i-1].selected = true;
	}

function moveOptionDown(obj) {
	// If > 1 option selected, do nothing
	var selectedCount=0;
	for (i=0; i<obj.options.length; i++) {
		if (obj.options[i].selected) {
			selectedCount++;
			}
		}
	if (selectedCount > 1) {
		return;
		}
	// If this is the last item in the list, do nothing
	var i = obj.selectedIndex;
	if (i == (obj.options.length-1)) {
		return;
		}
	swapOptions(obj,i,i+1);
	obj.options[i+1].selected = true;
	}


function isEmpty( x ) {
	if ( x == null || x == "" ) {
		return true;
	}
	return false;
}

function containsUpperCase( x ) {
	var haveUpper = false
	var inputStr = x.toString();
	for ( var i = 0; i < inputStr.length; i++ ) {
		var oneChar = inputStr.charAt( i );
		if ( oneChar >= "A" && oneChar <= "Z" ) {
			return true;
		}
	}
	return false;
}

function containsLowerCase( x ) {
	var haveLower = false
	var inputStr = x.toString();
	for ( var i = 0; i < inputStr.length; i++ ) {
		var oneChar = inputStr.charAt( i );
		if ( oneChar >= "a" && oneChar <= "z" ) {
			return true;
		}
	}
	return false;
}

function containsDigit( x ) {
	var haveLower = false
	var inputStr = x.toString();
	for ( var i = 0; i < inputStr.length; i++ ) {
		var oneChar = inputStr.charAt( i );
		if ( oneChar >= "0" && oneChar <= "9" ) {
			return true;
		}
	}
	return false;
}

function containsSpecial( x ) {
	var haveSpecial = false
	var inputStr = x.toString();
	for ( var i = 0; i < inputStr.length; i++ ) {
		var oneChar = inputStr.charAt( i );
		if (( oneChar < "a" || oneChar > "z" )&&( oneChar < "A" || oneChar > "Z" ) && ( oneChar < "0" || oneChar > "9" )) {
			return true;
		}
	}
	return false;
}

function isPosInteger( x ) {
	var haveDigit = false
	var inputStr = x.toString();
	for ( var i = 0; i < inputStr.length; i++ ) {
		var oneChar = inputStr.charAt( i );
		if ( oneChar < "0" || oneChar > "9" ) {
			if ( oneChar != "," || !haveDigit ) {
				return false;
			}
		}
		else {
			haveDigit = true;
		}
	}
	return true;
}

function isInteger( x ) {
	var inputStr = x.toString();
	var haveDash = false;
	var haveDigit = false;
	if (inputStr == "Select One") {
		return true;
	}
	else{
		for ( var i = 0; i < inputStr.length; i++ ) {
			var oneChar = inputStr.charAt( i );
			if ( oneChar < "0" || oneChar > "9" ) {
					return false;
			}
			else
				haveDigit = true;
		}
		return true;
	}
}

function isFloat( x ) {
	var inputStr = x.toString();
	var haveDash = false;
	var haveDot = false;
	var haveDigit = false;
	if (inputStr == "Select One") {
		return true;
	}
	else{	
		for ( var i = 0; i < inputStr.length; i++ ) {
			var oneChar = inputStr.charAt( i );
			if ( oneChar == "." ) {
				if ( haveDot ) {
					return false;
				}
				haveDot = true;
			}
			else if ( oneChar < "0" || oneChar > "9" ) {
				return false;
			}
			else {
				haveDigit = true;
			}
		}
		return true;
	}
}
		
function isPercent( x ) {
	var inputStr = x.toString();
	var haveDash = false;
	var haveDot = false;
	var haveDigit = false;
	var havePercent = false;
	for ( var i = 0; i < inputStr.length; i++ ) {
		var oneChar = inputStr.charAt( i );
		if ( havePercent ) {
			return false;
		}
		else if ( oneChar == "-"  ) {
			if ( haveDigit || haveDot ) {
				return false;
			}
			haveDash = true;
		}
		else if ( oneChar == "." ) {
			if ( haveDot ) {
				return false;
			}
			haveDot = true;
		}
		else if ( oneChar < "0" || oneChar > "9" ) {
			if ( oneChar == "%" ) {
				havePercent = true;
			}
			else if ( oneChar != "," || !haveDigit ) {
				return false;
			}
		}
		else {
			haveDigit = true;
		}
	}
	return true;
}
		

function isPhoneNumber( x ) {
	x = x.replace( /[^0-9]/g, "" );
	if ( !isPosInteger( x ) || ( x.length != 5 && x.length != 10 ) ) {
		return false;
	}
	return true;
}

function formatPhoneNumber( fld ) {
	var val = fld.value;
	val = val.replace( /[^0-9]/g, "" );
	if ( val.length == 5 ) {
		fld.value = val.substr( 0, 1 ) + "-" + val.substr( 1, 4 );
	}
	else if ( val.length == 10 ) {
		fld.value = val.substr( 0,3 ) + "-" + val.substr( 3, 3 ) + "-" + val.substr( 6, 4 );
	}
}

function formatDate( dst, m, d, y ) {
	var val = "";
	if ( m < 10 ) {
		val += "0";
	}
	val += parseInt(m,10) + "/";
	if ( d < 10 ) {
		val += "0";
	}
	val += parseInt(d,10) + "/";
	val += y;
	if ( isAdmin ) { alert( "formatDate( " + m + ", " + d + ", " + y + " ) = " + val ); }
	dst.value = val;
}


function isInRange( cmp, min, max ) {
	var icmp = parseInt( cmp,10 );
	if ( min <= icmp && icmp <= max ) {
		return true;
	}
	return false;
}

function daysInMonth( cMo, cYr ) {
	var mo = parseInt( cMo,10 );
	var yr = parseInt( cYr,10 );
	switch (mo) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
				return 31;
		case 4:
		case 6:
		case 9:
		case 11:
				return 30;
		case 2:
				if ( yr % 4 == 0 && ( yr % 100 != 0 || yr % 400 == 0 ) ) {
					return 29;
				}
				else {
					return 28;
				}
	}
} 

function isDate( day, month, year ) {
	if ( isEmpty( day.value )   || !isPosInteger(day.value)   ||
		 isEmpty( month.value ) || !isPosInteger(month.value) ||
		 isEmpty( year.value )  || !isPosInteger(year.value)    ){
		return -1;
	}
	else if ( !isInRange( month.value, 1, 12 ) ) {
		return -2;
	}
	else if ( !isInRange( year.value, 1950, 2550 ) ) { 
		return -3;
	}
	else if ( !isInRange( day.value, 1, daysInMonth( month.value, year.value ) ) ) {
		return daysInMonth( month.value, year.value );
	}
	return 0;
}

function isDateRange( x,lownum,highnum ) {
	if ( x > lownum && x < highnum ) {
		return true;
	}
	else {
		return false;
	}
	return true;
}

function checkLength( fld, fldName,Legth ) {
  if (fld.value.length > Legth)
  {
	    alert("Your current character count is "+fld.value.length+".The maximun length for the " + fldName + " field is " + Legth + " characters.");
	    fld.focus();
		return false;
  }
  return (true);
}

function validatePosInteger( fld, fldName ) {
	if ( isEmpty( fld.value ) || !isPosInteger( fld.value ) ) {
		alert( "Positive integer value expected for " + fldName + "." );
		fld.focus();
		return false;
	}
	return true;
}

function validateInteger( fld, fldName ) {
	if ( isEmpty( fld.value )) {
		return true;
	}
	if ( !isInteger( fld.value )) {
		alert( "Integer value expected for " + fldName + "." );
		fld.focus();
		return false;
	}
	if ( fld.value.length > 15) {
		alert( "The Integer value for " + fldName + " is too large." );
		fld.focus();
		return false;
	}
	return true;
}

function validateFloat23( fld, fldName ) {
	if ( isEmpty( fld.value )) {
		fld.focus();
		return true;
	}
	if ( isEmpty( fld.value ) || !isFloat( fld.value ) ) {
		alert( "Numeric value expected for " + fldName + "." );
		fld.focus();
		return false;
	}
	return true;
}


function validateFloat( fld, fldName ) {
	
	var inputStr = fld.value;
	var haveDot = false;
	var numberItems = new Array();
	numberItems = fld.value.split('.');

	if ( isEmpty( fld.value )) {
		return true;
	}
	if ( isEmpty( fld.value ) || !isFloat( fld.value ) ) {
		alert( "Numeric value expected for " + fldName + "." );
		fld.focus();
		return false;
	}
	for ( var i = 0; i < inputStr.length; i++ ) {
		var oneChar = inputStr.charAt( i );
		if ( oneChar == "." ) {
			haveDot = true;
			}
	}
	if (haveDot){
			if ( numberItems[0].length > 12) {
				alert( "The Numeric value for " + fldName + " is too large." );
				return false;
			}
			if ( numberItems[1].length > 3) {
				alert( "The Precision value for " + fldName + " is too large." );
				return false;
			}	
	}
	return true;
}

function validatePercent( fld, fldName ) {
	if ( isEmpty( fld.value ) || !isPercent( fld.value ) ) {
		alert( "Percentage value expected for " + fldName + "." );
		fld.focus();
		return false;
	}
	return true;
}

function validatePassword( fld, fldName ) {
	var CriteriaCount=0;
	if ( containsSpecial( fld.value ) ){
		CriteriaCount=CriteriaCount+1;
	}
	if ( containsUpperCase( fld.value ) ){
		CriteriaCount=CriteriaCount+1;
	}
	if ( containsLowerCase( fld.value ) ){
		CriteriaCount=CriteriaCount+1;
	}
	if ( containsDigit( fld.value ) ){
		CriteriaCount=CriteriaCount+1;
	}	
	if (CriteriaCount < 3) {
		alert( "Your password should consist of lowercase letters (a-z), uppercase letters (A-Z), numbers (0-9),\n and special characters (punctuation symbols). Using 3 of the 4 password criteria is required." );
		fld.focus();
		return false;
	}
	return true;
}

function validateUserName( fld, fldName ) {
	var CriteriaCount=0;
	if ( containsSpecial( fld.value ) ){
		alert( "Your Username must consist of letters and/or numbers. You can nont use spaces or special characters" );
		fld.focus();
		return false;
	}
	return true;
}

function validateRequired( fld, fldName ) {
  if (fld.value == "")
  {
		alert("Please enter a value for the " + fldName + " field.");
		fld.focus();
		return false;
  }
	return true;
}

function validateConfirm( fld1, fld2, fldName, fldName2 ) {
  if (fld1.value != fld2.value)
  {
		alert("Your " + fldName + " does not match the " + fldName2 + " field.");
		fld1.focus();
		return false;
  }
	return true;
}


function validateRadio(fld, fldName)
{

  var radioSelected = false;
  for (i = 0;  i < fld.length;  i++)
  {
    if (fld[i].checked)
        radioSelected = true;
  }
  if (!radioSelected)
  {
    alert("Please select one of the " + fldName + " options.");
    return (false);
  }
  return (true);
}



function validateSelect( fld, fldName ) {
  if (fld.selectedIndex < 0)
  {
	    alert("Please select one of the " + fldName + " options.");
		fld.focus();
		return false;
  }
  if (fld.selectedIndex == 0)
  {
	    alert("The first " + fldName + " option is not a valid selection.  Please choose one of the other options.");
		fld.focus();
		return false;
  }
  return (true);
}


function validateMultiSelect( fld, fldName ) {
  if (fld.selectedIndex < 0)
  {
	    alert("The " + fldName + " list can not be emtpy.");
		fld.focus();
		return false;
  }
  return (true);
}


function validateLength( fld, fldName,Legth ) {
  if (fld.value.length < Legth && !isEmpty( fld.value ))
  {
	    alert("Please enter at least " + Legth + " characters in the  " + fldName + "  field.");
		fld.focus();
		return false;
  }
  return (true);
}

function validateDate( fld,day,month,year,fldName) {
	if ( !isEmpty( day.value )   && !isPosInteger(day.value)   || !isDateRange( day.value,0,32 ) || 
		 !isEmpty( month.value ) && !isPosInteger(month.value) || !isDateRange( month.value,0,13 ) ||
		 !isEmpty( year.value )  && !isPosInteger(year.value) ||  year.value.length < 4 || !isDateRange( year.value,1950,2101 ) )
	{
		if ( isEmpty( month.value )   || !isPosInteger(month.value) ){
				alert("The Month value \"" + month.value + "\" is not correct.");
				month.focus();
			}
		else if ( isEmpty( day.value )   || !isPosInteger(day.value) ){
				alert("The Day value \"" + day.value + "\" is not correct.");
				day.focus();
			}
		else if ( isEmpty( year.value )   || !isPosInteger(year.value) ){
				alert("The Year value \"" + year.value + "\" is not correct.");
				year.focus();
			}
		else if (year.value.length < 4) {
				alert("The year \"" + year.value + "\" is not correct. Please enter at least 4 digits in this field ");
				year.focus();
			}
		else if (!isDateRange( month.value,0,13 )){
					alert("The Month value \"" + month.value + "\" is not correct. The Month value must range between 1 and 12.");
					month.focus();
			}
		else if (!isDateRange( day.value,0,32 )){
					alert("The Day value \"" + day.value + "\" is not correct. The Day value must range between 1 and 31.");
					day.focus();
			}
		else if (!isDateRange( year.value,1950,2500)){
					alert("The Year value \"" + year.value + "\" is not correct. The Year value must range between 1950 and 2500.");
					year.focus();
			}
			    	
		return false;
	}
	return (true);
}

function validateDate2( fld,fldName) {
	if(fld.value) {
		var ItemList = fld.value;
		var rgItems = ItemList.split('/');
		month =  rgItems[0]
		day =  rgItems[1]
		year =  rgItems[2]

		if ( isEmpty( month)   || !isPosInteger(month) ){
			alert("The Month value \"" + month + "\" is not correct.");
			fld.focus();
			return false;
	    }
	    else if ( isEmpty( day )   || !isPosInteger(day) ){
			alert("The Day value \"" + day + "\" is not correct.");
			fld.focus();
			return false;
	    }
	    else if ( isEmpty( year )   || !isPosInteger(year) ){
			alert("The Year value \"" + year + "\" is not correct.");
			fld.focus();
			return false;
	    }
	    else if (year.length < 4) {
			alert("The year \"" + year + "\" is not correct. Please enter at least 4 digits in this field ");
			fld.focus();
			return false;
	    }
		else if (!isDateRange( month,0,13 )){
			alert("The Month value \"" + month + "\" is not correct. The Month value must range between 1 and 12.");
			fld.focus();
			return false;
		}
		else if (!isDateRange( day,0,32 )){
			alert("The Day value \"" + day + "\" is not correct. The Day value must range between 1 and 31.");
			fld.focus();
			return false;
		}
		else if (!isDateRange( year,1950,2101)){
			alert("The Year value \"" + year + "\" is not correct. The Year value must range between 1950 and 2100.");
			fld.focus();
			return false;
		}
	}
	return (true);
}

function validateTime( fld,fldName) {
	if(fld.value) {
		var ItemList = fld.value;
		var Time_pm_am = ItemList.split(' ');
		var rgItems = Time_pm_am[0].split(':');
		hours=  rgItems[0]
		minutes =  rgItems[1]
		seconds =  rgItems[2]
		
		
		if ( isEmpty( hours)   || !isPosInteger(hours) ){
			alert("The Hours value \"" + hour + "\" is not correct.");
			fld.focus();
			return false;
	    }
	    else if ( isEmpty( minutes )   || !isPosInteger(minutes) ){
			alert("The Minutes value \"" + minutes + "\" is not correct.");
			fld.focus();
			return false;
	    }
	    else if ( isEmpty( seconds )   || !isPosInteger(seconds) ){
			alert("The Seconds value \"" + seconds + "\" is not correct.");
			fld.focus();
			return false;
	    }
		else if (!isDateRange( hours,0,13 )){
			alert("The Hours value \"" + hours + "\" is not correct. The Hours value must range between 1 and 12.");
			fld.focus();
			return false;
		}
		else if (!isDateRange( minutes,-1,61 )){
			alert("The Minutes value \"" + minutes + "\" is not correct. The Minutes value must range between 0 and 60.");
			fld.focus();
			return false;
		}
		else if (!isDateRange( seconds,-1,61)){
			alert("The Seconds value \"" + seconds + "\" is not correct. The Seconds value must range between 1950 and 2100.");
			fld.focus();
			return false;
		}
	}
	return (true);
}

function NewWindow(mypage,myname,w,h,scroll) {
	  //alert(mypage);
	  //alert(myname);
	  //alert(w);
	  //alert(h);
	  //alert(scroll);  
	  var win= null;
	  var winl = (screen.width-w)/2;
	  var wint = (screen.height-h)/2;
	  var settings  ='height='+h+',';
      settings +='width='+w+',';
      settings +='top='+wint+',';
      settings +='left='+winl+',';
      settings +='scrollbars='+scroll+',';
      settings +='resizable=yes';      
	  win=window.open(mypage,myname,settings);
      if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
 }
 