var required=false;
var notRequired=true;
var whitespace=" \t\n\r";
var decimalPointDelimiter=".";
var daysInMonth=new Array(12);
daysInMonth[1]=31;
daysInMonth[2]=29;
daysInMonth[3]=31;
daysInMonth[4]=30;
daysInMonth[5]=31;
daysInMonth[6]=30;
daysInMonth[7]=31;
daysInMonth[8]=31;
daysInMonth[9]=30;
daysInMonth[10]=31;
daysInMonth[11]=30;
daysInMonth[12]=31;
var iDayPrefix="The second field in ";
var iDaySuffix=" must be a day number between 1 and 31.";
var iMonthPrefix="The first field in ";
var iMonthSuffix=" must be a month number between 1 and 12.";
var iYearPrefix="The third field in ";
var iYearSuffix=" must be a 4 digit year number.";

function isEmpty(s){
 return ((s==null)||(s.length==0));
}

function isWhitespace(s){
 var i;
 if(isEmpty(s)){
  return true;
 }
 for (i=0;i<s.length;i++){
  var c=s.charAt(i);
  if(whitespace.indexOf(c)==-1){
   return false;
  }
 }
 return true;
}

function isInteger(s){
 var i;
 if(isEmpty(s)){
  if(isInteger.arguments.length==1){
   return required;
  }
  else{
   return notRequired;
  }
 }
 for(i=0;i<s.length;i++){
  var c=s.charAt(i);
  if(!isDigit(c)){
   return false;
  }
 }
 return true;
}

function isFloat(s){
 var i;
 var seenDecimalPoint=false;
 if(isEmpty(s)){
  if(isFloat.arguments.length==1){
   return required;
  }
  else{
   return(isFloat.arguments[1]==true);
  }
 }
 if(s==decimalPointDelimiter){
  return false;
 }
 for(i=0;i<s.length;i++){
  var c=s.charAt(i);
  if((c==decimalPointDelimiter)&&!seenDecimalPoint){
   seenDecimalPoint=true;
  }
  else if(!isDigit(c)){
   return false;
  }
 }
 return true;
}

function isDigit(c){
 return((c>="0")&&(c<="9"));
}

function stripWhitespace(s){
 return stripCharsInBag(s,whitespace);
}

function stripCharsInBag(s,bag){
 var i;
 var returnString="";
 for(i=0;i<s.length;i++){
  var c=s.charAt(i);
  if(bag.indexOf(c)==-1){
   returnString+=c;
  }
 }
 return returnString;
}

function isYear(s){
 if(isEmpty(s)){
  return false;
 } 
 if(!isInteger(s)){
  return false;
 }
 return(s.length==4);
}

function isIntegerInRange(s,a,b){
 if(isEmpty(s)){
  return false;
 }
 if(!isInteger(s)){
  return false;
 }
 var num=parseInt(s,10);
 return ((num>=a)&&(num<=b));
}

function isMonth(s){
 if(isEmpty(s)){
  return false;
 }
 else{
  return isIntegerInRange(s,1,12);
 }
}

function isDay(s){
 if(isEmpty(s)){
  return false;
 }
 else{
  return isIntegerInRange(s,1,31);
 }
}

function daysInFebruary(year){
 return(((year%4==0)&&((!(year%100==0))||(year%400==0)))?29:28);
}

function isDate(month,day,year){
 if(!(isYear(year,false)&&isMonth(month,false)&&isDay(day,false))){
  return false;
 }
 var intYear=parseInt(year,10);
 var intMonth=parseInt(month,10);
 var intDay=parseInt(day,10);
 if(intDay>daysInMonth[intMonth]){
  return false; 
 }
 if((intMonth==2)&&(intDay>daysInFebruary(intYear))){
  return false;
 }
 return true;
}

function selectField(theField){
 theField.select();
}

function stripBegEndSpaces(field){
 var pos=0;
 var interString="";
 var finalString="";
 while(pos<field.value.length&&field.value.charAt(pos)==" "){
  pos++;
 }
 while(pos<field.value.length){
  interString+=field.value.charAt(pos);
  pos++;
 }
 var cnt=interString.length-1;
 while(cnt>0&&interString.charAt(cnt)==" "){
  cnt--;
 }
 var index=0;
 while(index<=cnt){
  finalString+=interString.charAt(index);
  index++;
 }
 field.value=finalString;
}

function focusField(field,radio,values){
 var value=getRadioButtonValue(radio);
 var a=values.split(';');
 for(i=0;i<a.length;i++){
  if(a[i]==value){
   return false;
  }
 }
 field.blur();
 return true;
}

function checkBadCharsField(field,fieldName){
 for(var i=0;i<field.value.length;i++){
  if(field.value.charAt(i)=="="){
   addError(fieldName+" cannot have a '=' character.");
   break;
  }
  if(field.value.charAt(i)=="|"){
   addError(fieldName+" cannot have a '|' character.");
   break;
  }
 }
 return;
}

function checkBadCharsForm(form){
 for(var i=0;i<form.elements.length;i++){
  if((form.elements[i].type=="text")||(form.elements[i].type=="password")){
   checkBadCharsField(form.elements[i],form.elements[i].name);
  }
 }
}

function validPassword(pwd){
 var letters="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 var letterCount=0;
 var digits="0123456789";
 var digitCount=0;
 for(i=0;i<pwd.length;i++){
  var c=pwd.charAt(i);
  if(letters.indexOf(c)>=0){
   letterCount++;
  }
  if(digits.indexOf(c)>=0){
   digitCount++;
  }
  if((letterCount>=1)&&(digitCount>=1)){
   return true;
  }
 }
 return false;
}

function checkRadioButtonChecked(radio){
 for(var i=0;i<radio.length;i++){
  if(radio[i].checked==true){
   return true;
  }
 }
 return false;
}

function getRadioButtonValue(radio){
 var found=false;
 for(var i=0;i<radio.length;i++){
  if(radio[i].checked==true){
   found=true;
   break;
  }
 }
 if(found){
  return radio[i].value;
 }
 else{
  return "";
 }
}

function isRadioButtonOption(radio,value)
{
 for(var i=0;i<radio.length;i++){
  if(radio[i].value==value){
   return true;
  }
 }
 return false;
}

function setRadioButtonChecked(radio,value){
 for(vari=0;i<radio.length;i++){
  if(radio[i].value==value){
   radio[i].checked=true;
   return true;
  }
 }
 return false;
}

function clearRadioButton(radio){
 for(var i=0;i<radio.length;i++){
  radio[i].checked=false;
 }
 return;
}

function setRadioButtonState(radio,value,enabled){
 for(var i=0;i<radio.length;i++){
  if(radio[i].value==value){
   radio[i].disabled=!enabled;
   return true;
  }
 }
 return false;
}

function getSelectValue(select){
 return select.options[select.selectedIndex].value;
}

/* This is the global Pop-Up window function 
function openWindow(theURL,winName,features) 
	{
  		window.open(theURL,winName,features);
	}*/

/* Disable Stus Bar message on ALL links */
function hidestatus(){ 
	window.status=''
	return true
}

function openWindow(HREF, Name) {
	var pixelHeight=600;
	var pixelWidth=717;
	var CenteredX = (screen.width - pixelWidth) / 2;
	var CenteredY = (screen.height - pixelHeight) / 3;
	window.open(HREF,Name,'top='+CenteredY+',left='+CenteredX+',height='+pixelHeight+',width='+pixelWidth+',scrollbars=yes,menubar=no,status=no,toolbar=no,resizable=no');
}

function openWindowSize(HREF, Name, w, h) {
	var pixelHeight=h;
	var pixelWidth=w;
	var CenteredX = (screen.width - pixelWidth) / 2;
	var CenteredY = (screen.height - pixelHeight) / 3;
	window.open(HREF,Name,'top='+CenteredY+',left='+CenteredX+',height='+pixelHeight+',width='+pixelWidth+',scrollbars=yes,menubar=no,status=no,toolbar=no,resizable=no');
}

function formatMoney(fieldObj){
	var i;
	var s='0'+fieldObj.value;
	var s2='';
	var stripChars="~`!@#$%^&*()_-+={[}]|'\":;?/><,abcdefghijklmnopqrstuvwxyz";
	for(i=0;i<s.length;i++){ var c=s.charAt(i); if(stripChars.indexOf(c)==-1){ s2+=c; } }
	s2=s2*100/100;
	if(parseFloat(s2)){
    	if(s2==Math.round(s2)){ s2+=".00"; }
   		else{ s2=s2+"0"; s2=(s2.substring(0,(s2.indexOf(".")+3))) }
  	}else{ s2="0.00" }
	fieldObj.value=s2;
}

function formatFloat(fieldObj){
	var i;
	var s='0'+fieldObj.value;
	var s2='';
	var stripChars="~`!@#$%^&*()_-+={[}]|'\":;?/><,abcdefghijklmnopqrstuvwxyz";
	var precision=(formatFloat.arguments.length==1)?2:formatFloat.arguments[1];
	var precisionMask='';
	for(i=0;i<precision;i++){ precisionMask+="0"; }
	for(i=0;i<s.length;i++){ var c=s.charAt(i); if(stripChars.indexOf(c)==-1){ s2+=c; } }
	var roundingValue=parseInt("1"+precisionMask+"0");
	s2=(s2*roundingValue)/roundingValue;
	if(parseFloat(s2)){
    	if(s2==Math.round(s2)){ s2+="."+precisionMask; }
   		else{ s2=s2+precisionMask; s2=(s2.substring(0,(s2.indexOf(".")+(precision+1)))) }
  	}else{ s2="0."+precisionMask; }
	fieldObj.value=s2;
}

function getLayer(name){
	 if (document.all){
	    return document.all[name].style;
	  }else if (document.layers){
	    return document.layers[name];
	  }else return false;
}

function setLayerVisibility(layerID,desiredStatus){
	i=getLayer(layerID);
	i.visibility=desiredStatus;
	return true;
}

function inArray(val,arr){ 
	for(i=0;i<arr.length;i++){ 
		if(val.toLowerCase() == arr[i].toLowerCase()){
			return true;
		}
	}
	return false;
}

function formatPhoneNumber(fieldObj){
	var i;
	var s=fieldObj.value;
	var s2='';
	var s3='';
	var stripChars="~`!@##$%^&*()_-+={[}]|'\":;?/><,. abcdefghijklmnopqrstuvwxyz";
	var extDelim='x';
	var extDelimFound=false;
	var preExtDelimDigitCount=0;
	for(i=0;i<s.length;i++){ 
		var c=s.charAt(i); 
		if(c==extDelim){ extDelimFound=true; } 
		if(stripChars.indexOf(c)==-1){ s2+=c; if(!extDelimFound) preExtDelimDigitCount++; }
	}
	if(parseInt(s2) && preExtDelimDigitCount >=10){
		s3="("+s2.substring(0,3)+") "+s2.substring(3,6)+"-"+s2.substring(6,10);
		if(s2.length > 10){
			s3 += " x"+s2.substring(10);
		}
	}
	if(s3.length) fieldObj.value=s3;
}

function reloadForm(targetAction){
	var formIndex=(reloadForm.arguments.length>1)?reloadForm.arguments[1].value:0;
	document.forms[formIndex].action.value=targetAction;
	document.forms[formIndex].displayAction.value='form';
	document.forms[formIndex].submit();
}

var isSubmitted=false;
function submitForm(inputForm){
	if (!validateForm(inputForm)){
		alert(error);
		errorCount = 0;
		error = "";
		valid = true;
		return false;
	}
	
	if(!isSubmitted){ isSubmitted=true; return true; }
	else{ return false; }
}

function confirmDelete(obj){
	return confirm("Are you sure you want to delete \""+obj+"\"?");
}

//moves participants between lists while maintaining alphabetical order; called above (TODO: could be upgraded to DOM at a later point)
function moveListItems(srcList, destList) {
	var listCtr = 0;
	var currOption = null;
	while (listCtr < srcList.options.length) {
		currOption = srcList.options[listCtr];
		if (currOption.selected) {

			//parse first and last name from value string
			var srcFirstName = currOption.value.substring(currOption.value.lastIndexOf(",") + 1, currOption.value.length);
			var srcLastName = currOption.value.substring(currOption.value.indexOf("|") + 1, currOption.value.lastIndexOf(","));

			//flag to keep track of whether this option is inserted into destList or needs to be added to the end
			var isInserted = false;
			for (var i = 0; i < destList.options.length; i++) {

				//parse first and last name from value string
				var destFirstName = destList.options[i].value.substring(destList.options[i].value.lastIndexOf(",") + 1, destList.options[i].value.length);
				var destLastName = destList.options[i].value.substring(destList.options[i].value.indexOf("|") + 1, destList.options[i].value.lastIndexOf(","));

				//alphabetize (case-insensitive)
				if (destLastName.toUpperCase() > srcLastName.toUpperCase() || (destLastName.toUpperCase() == srcLastName.toUpperCase() && destFirstName.toUpperCase() > srcFirstName.toUpperCase())) {

					//insert before current dest option, but first we must move the options after it forward one place
					destList.options[destList.options.length] = new Option();
					for (var j = destList.options.length - 1; j > i; j--) {
						destList.options[j].text = destList.options[j-1].text;
						destList.options[j].value = destList.options[j-1].value;
					}

					destList.options[i] = new Option(currOption.text, currOption.value);
					isInserted = true;
					break;
				}
			}

			//if currOption was not inserted, add at end
			if (!isInserted) {
				destList.options[destList.options.length] = new Option(currOption.text, currOption.value);
			}

			//delete from source list
			srcList.options[listCtr] = null;
		}
		else {
			listCtr++;
		}
	}
}

function saveListItems(srcList, destList){
	var listItemIdList="";
	var currID;
	for(var i=0; i<srcList.length; i++){ 
		if(i) listItemIdList+=",";
		currID=srcList.options[i].value.substring(0, srcList.options[i].value.indexOf("|"));
		listItemIdList+=currID;
	}
	destList.value=listItemIdList;
}

function validatePwd(fieldObj){
	if(fieldObj.value.length > 0){
		if(fieldObj.value.length < 6){ addError("Your password must consist of at least 6 characters, including at least 1 letter and at least 1 number."); }
		else if (!validPassword (fieldObj.value)) {addError("Your password must consist of at least 1 letter and at least 1 number."); }
	}
}

function setField(formName,fieldName,str){
	var frmObj,fieldObj;
	frmObj=document[formName];
	fieldObj=frmObj[fieldName];
	fieldObj.value=str;
}

function selectFieldValue(formName,fieldName,val){
	var i,frmObj,fieldObj,fieldLength;
	frmObj=document.all[formName];
	fieldObj=frmObj[fieldName];
	fieldLength=fieldObj.options.length;
	for(i=0;i<fieldLength;i++){
		if(fieldObj.options[i].value==val)
			fieldObj.options[i].selected=true;
	}
}

function goToLocation(formName,fieldName,type){
	var obj=document[formName][fieldName];
	if (type == "radio"){
		var formValue=getRadioButtonValue(obj);
	} else {
		var formValue=getSelectValue(obj);
	}
	var useNewWin=false;
	var regExp1="http://";
	var regExp2="https://";
	
	// check to see if the URL contains 'http://'
	// This means that we are visiting an external site
	if (formValue.match(regExp1) || formValue.match(regExp2)){
		useNewWin=true;
	}
	
	if (formValue.length > 0){
		if (useNewWin){
			window.open(formValue);
		} else {
			// For some reason we have to put a 100 millisecond delay on the
			// forward, otherwise it doesn't work in IE
			window.setTimeout("window.location.href='"+formValue+"'", 100);
		}
	} else {
		alert("Please select your destination.");
	}
}

function leaveWebSite(url){
	openWindowSize('index.cfm?Action=leaveWebSite&siteURL='+url,'leaveWebSite', 300, 350);
	return false;
}

function alertDisclosure(){
	return confirm("IMPORTANT: Please do not use this e-mail for communicating sensitive personal information like account numbers or social security numbers.");
}
