function validate(form){
	var successStatus = true;
	var errorFields = new Array();
	var specialErrorMessages = new Array();
	
	var reqfields=new Array();
	if(form.required){
		reqfields = form.required.value.split(',');
	}
	
	var selectonefields=new Array();
	if(form.selectone){
		selectonefields = form.selectone.value.split(',');
	}
	

	var nonSelected = true;
	//loop over select one fields
	for(var i=0;nonSelected && i<selectonefields.length;i++){
		var f=eval("form."+selectonefields[i]);
		if(!f){continue;}
		
		
		switch(f.type.toLowerCase()){
			case 'text':
				if(f.value!='' && (f.name.search(/email/i)==-1)) nonSelected = false;
				// email is a special field and needs checking
				if((f.name.search(/email/i)!=-1) && isEmailAddr(f.value)) nonSelected = false;
				break;
			case 'textarea':
				if(f.value!='') nonSelected = false;
				break;
			case 'checkbox':
				if(f.checked) nonSelected = false;							
				break;
			case 'radio':
				nonSelected = true;
				for (i=f.length-1; noRadioSelected && i > -1; i--) {
					if(f[i].checked)
						nonSelected = false;
				}
				break;
			case 'select-one':
				if(f.selectedIndex && f.selectedIndex!=0) nonSelected = false;
				break;
		}
		
	}


	// loop over required fields
	for(var i=0;i<reqfields.length;i++){
		// check if required field is there
		//var f=document.getElementById(reqfields[i]);
		var f=eval("form."+reqfields[i]);
		if(!f){continue;}
		// test if the required field has an error, 
		// according to its type
		
		//alert("form."+reqfields[i]+"= "+f);
		if(f.type){
			switch(f.type.toLowerCase()){
				case 'text':
					if(f.value=='' && (f.name.search(/email/i)==-1)) adderr(f);				
					// email is a special field and needs checking
					if((f.name.search(/email/i)!=-1) && !isEmailAddr(f.value)) adderr(f);
		 			break;
				case 'hidden':
					if(f.value=='' && (f.name.search(/email/i)==-1)) adderr(f);				
					// email is a special field and needs checking
					if((f.name.search(/email/i)!=-1) && !isEmailAddr(f.value)) adderr(f);
		 			break;
				case 'textarea':
					if(f.value=='') adderr(f);
					break;
				case 'checkbox':
					if(!f.checked) adderr(f);							
					break;
				case 'radio':
					nonSelected = true;
					for (i=f.length-1; noRadioSelected && i > -1; i--) {
						if(f[i].checked)
							nonSelected = false;
					}
					if(nonSelected) adderr(f);
					break;
				case 'select-one':
					if(!f.selectedIndex && f.selectedIndex==0) adderr(f);
					break;
			}
		}else if(f.length){
			onechecked = false;
			for (var j=0;j<f.length;j++) {
				if (f[j].checked) {
					onechecked = true;
				}
			}
			if(!onechecked) adderr(f[0]);
		}
	}
	
	

	
	
	if(isError(form)){
		//display error message
		errorMessage = getErrorMessage();
		alert(errorMessage);
		successStatus = false;
	}else{
		displaySuccessMessage(form);
	}
	
	return successStatus;

	function getCheckboxes(form){
		//alert("getting checkboxes");
	
		//TODO check if the checkboxes are within the form
		var checkboxes = new Array();
		var inputElems = document.getElementsByTagName("input");
		//alert(inputElems);
		if(inputElems!=null){
			for(var i=0; i<inputElems.length; i++){
				//alert(inputElems[i].type);
			
				if(inputElems[i].type=="checkbox"){
					checkboxes[checkboxes.length] = inputElems[i];
				}
			}
		}
	
		return checkboxes;
	}

	function displaySuccessMessage(form){
		//alert("Display error message");
		//var successMessageField = document.getElementById("successMessage");
		//alert(successMessageField);
		if(form.successMessage){
			alert(form.successMessage.value);
		}
	}
	function isError(form){
		nameOfForm = (form.nameOfForm)?form.nameOfForm.value:"";
	
		var errorOccured = false;
		errorOccured = (errorFields.length>0)?true:false;

	 // old code here
	 	
	 if(nameOfForm=="volunteer"){
			//alert("volunteer form");
			var checkboxes = getCheckboxes(form);
	
			if(checkboxes!=null){
				var oneSelected = false;
				for(var i=0; !oneSelected && i<checkboxes.length; i++){
					if(checkboxes[i].checked) oneSelected=true;
				}
			
				if(!oneSelected){
					specialErrorMessages[specialErrorMessages.length] = "Please select at least one checkbox";
					errorOccured = errorOccured || true;
				}
			}
		}
	
		if(selectonefields.length>0 && nonSelected){
			message="";
			for(var i=0;i<selectonefields.length;i++){
				var f = eval("form."+selectonefields[i]);
				if(!f) continue;
				message += f.title;
			
				if(i<selectonefields.length-1) message += " or ";
			}
			message += " is required";
			specialErrorMessages[specialErrorMessages.length] = message;
			errorOccured = errorOccured || true;
		}
	
		//alert("errorOccured"+errorOccured);
		return errorOccured;
	}
	function getErrorMessage(){
		var errorMessage="";
		var i;
	
	//		if(errorFields.length==1){
	//			errorMessage = "Please fill/fix the following field:\n"+errorFields[0].title;
	//		}else{
			errorMessage = "Please fill/fix the following field(s)\n";
			for(i=0; i<errorFields.length; i++){
				errorMessage += "("+ (i+1) + ")\t" + errorFields[i].title + "\n";
			}
	//		}
	
	//		if(specialErrorMessages.length>0){
	//			errorMessage += "/n/n";
	
			for(var j=0; j<specialErrorMessages.length; j++){
				errorMessage += "("+ (++i) + ")\t" + specialErrorMessages[j] + "\n";
			}
	//		}
	
		if(errorFields.length>0)	errorFields[0].focus();	
		return errorMessage;
	}




	function adderr(field){
		errorFields[errorFields.length] = field;
	}

	function isEmailAddr(str) 
	{
		return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
	}
}

function chapterSelect(myform)
{
  if(myform.chapter[0].checked == true)
  {
    myform.action ="http://pa.cair.com/cgi-bin/cgiemail/mailing.txt";
  }
  else
  if(myform.chapter[1].checked == true)
  {
    myform.action ="http://pa.cair.com/cgi-bin/cgiemail/mailing2.txt";
  }
  return true;
}


function chapterSelectDropDown(dropdown)
{
  if(dropdown.selectedIndex == 0)
  {
    document.forms["contactform"].action ="http://pa.cair.com/cgi-bin/cgiemail/contact-phl.txt";
  }
  else
  if(dropdown.selectedIndex == 1)
  {
    document.forms["contactform"].action ="http://pa.cair.com/cgi-bin/cgiemail/contact-hbg.txt";
  }
  else
  if(dropdown.selectedIndex == 2)
  {
    document.forms["contactform"].action ="http://pa.cair.com/cgi-bin/cgiemail/contact-pbg.txt";
  }
}

function buttonPressed(buttonName)
{
    document.mailing.buttonPressed.text = buttonName
}
