function totalCost()
{
	var numOfNonmembers ;
	var numOfMembers ;
	var numOfAnnualmembers ;	
	var numOfAdditionalmembers ;	
	
	if(!document.forms.register.numOfNonmembers.value)
		numOfNonmembers = 0 ;
	else	
		numOfNonmembers = document.forms.register.numOfNonmembers.value ;
		
	if(!document.forms.register.numOfMembers.value)
		numOfMembers = 0 ;
	else	
		numOfMembers = document.forms.register.numOfMembers.value ;
		
			if(!document.forms.register.numOfAnnualmembers.value)
		numOfAnnualmembers = 0 ;
	else	
		numOfAnnualmembers = document.forms.register.numOfAnnualmembers.value ;
		
					if(!document.forms.register.numOfAdditionalmembers.value)
		numOfAdditionalmembers = 0 ;
	else	
		numOfAdditionalmembers = document.forms.register.numOfAdditionalmembers.value ;
	
	if(isNaN(numOfMembers)){
		alert("Only numeric values are allowed for No. of people.") ;
		return false ;
	}
	
	if(isNaN(numOfNonmembers)){
		alert("Only numeric values are allowed for No. of people.") ;
		return false ;
	}
	
		if(isNaN(numOfAnnualmembers)){
		alert("Only numeric values are allowed for No. of people.") ;
		return false ;
	}
	
			if(isNaN(numOfAdditionalmembers)){
		alert("Only numeric values are allowed for No. of people.") ;
		return false ;
	}
	
	var runningmembersCost = numOfMembers * membersCost ;
	var runningnonmembersCost = numOfNonmembers * nonmembersCost ;
	var runningannualmembersCost = numOfAnnualmembers * annualmembersCost ;
	var runningadditionalmembersCost = numOfAdditionalmembers * additionalmembersCost ;
	finalCost = runningmembersCost + runningnonmembersCost + runningannualmembersCost + runningadditionalmembersCost ;
	document.forms.register.total.value = finalCost ;
}

function individualCost()
{
	var f = document.forms.register ;
		
	if(f.registrationType[0].checked){
		finalCost = membersCost;
	} else if(f.registrationType[1].checked){
		finalCost = nonmembersCost;
	}
	
	f.total.value = finalCost ;
}



function onlyCharacters(inputString)
{
  var searchForNumbers = /\d+/ ;
  var val = (searchForNumbers.test(inputString)) ? false : true ;
  return val ;
}

function onlyNumbers(inputString)
{
  var searchForNumbers = /\D+\_+\W+\s+\S+/ ;
  var val = (searchForNumbers.test(inputString)) ? false :  true ;
  return val ;
} 

function stringLength(inputString)
{
  return inputString.length ;
}

function numberRange(input, min, max)
{
	return input >= min && input <= max ;
}

function stringRange(input, min, max)
{
	return input.length >= min && input.length <= max ;
}

function validateForm()
{

	var f = document.forms.register ;
	
	// REQUIRED
	// title, dropdown option must be set to something other than blank
	var title = f.title.value ;
	if(title == ''){
		alert("Please select a title") ;
		return false ;
	}

	// REQUIRED
	// forname, only chars and min length > 1 and < 101
	var forname = f.forname.value ;
	if(! onlyCharacters(forname) || !stringRange(forname, 2, 101)){
		alert("Please enter a valid first name") ;
		return false ;
	}
	// REQUIRED
	// surname, only chars and min length > 1 and < 101
	var surname = f.surname.value ;
	if(! onlyCharacters(surname) || !stringRange(surname, 2, 101)){
		alert("Please enter a valid last name") ;
		return false ;
	}
	// OPTIONAL
	// degname, only chars and min length > 1 and < 101
	var degree = f.degree.value ;
	if((degree != '' || degree != null) && degree.length > 0){
		if(! onlyCharacters(degree) || !stringRange(degree, 2, 101)){
			alert("Please enter a valid degree") ;
			return false ;
		}
	}

	// REQUIRED
	// jobtitle, only chars and min length > 1 and < 101
	var jobtitle = f.jobtitle.value ;
	if(! onlyCharacters(jobtitle) || !stringRange(jobtitle, 2, 101)){
		alert("Please enter a valid position/job title") ;
		return false ;
	}

	// REQUIRED
	// institution, only chars and min length >= 2 & <= 101
	var institution = f.institution.value ;
	if(! onlyCharacters(institution) || !stringRange(institution, 2, 101)){
		alert("Please enter a valid company/organization/institution") ;
		return false ;
	}
	
	// OPTIONAL
	// speciality, only chars and min length >= 2 & <= 101
	// var speciality = f.speciality.value ;
	// if((speciality != '' || speciality != null) && speciality.length > 0){
		// if(! onlyCharacters(speciality) || !stringRange(speciality, 2, 101)){
			// alert("Please enter a valid speciality") ;
			// return false ;
		// }
	// }
	
	// OPTIONAL
	// department, only chars and min length >= 2 & <= 101
	// var department = f.department.value ;
	// if((department != '' || department != null) && department.length > 0){
		// if(! onlyCharacters(department) || !stringRange(department, 2, 101)){
			// alert("Please enter a valid department") ;
			// return false ;
		// }
	// }
	
	// REQUIRED
	// address, only chars and min length >= 10 & <= 1000
	var mailingAddress = f.address.value ;
	if(! stringRange(mailingAddress, 10, 1000)){
		alert("Please enter a valid address") ;
		return false ;
	}
	
	// REQUIRED
	// city, only chars and min length >= 2 & <= 101
	var city = f.city.value ;
	if(! onlyCharacters(city) || !stringRange(city, 2, 1000)){
		alert("Please enter a valid city") ;
		return false ;
	}
	
	// NOW REQUIRED
	// state, only chars and min length >= 2 & <= 10000
	var state= f.state.value ;
	//if((state != '' || state != null) && state.length > 0){
		if(! onlyCharacters(state) || !stringRange(state, 2, 1000)){
			alert("Please enter a valid state/province") ;
			return false ;
		}
	//}
	
	// REQUIRED
	// zip, only chars and min length >= 2 & <= 101
	var zip = f.zip.value ;
	if(!stringRange(zip, 4, 50)){
		alert("Please enter a valid zip code") ;
		return false ;
	}
	
	// REQUIRED
	// telephone, only chars and min length >= 2 & <= 101
	var telephone = f.telephone.value ;
	if(!stringRange(telephone, 2, 1000)){
		alert("Please enter a valid telephone number") ;
		return false ;
	}
	
	// REQUIRED
	// email, use isEmail for check
	var email = f.email.value ;
	var validEmailObj = isEmailAddress(email) ;
	if(!validEmailObj.result){
		alert("Email Address Error\n" + validEmailObj.message) ;
		return false ;
	}

	// REQUIRED
	// contact name, only chars and min length > 1 and < 101
	var e_name = f.e_name.value ;
	if(! onlyCharacters(e_name) || !stringRange(e_name, 2, 101)){
		alert("Please enter a valid contact name") ;
		return false ;
	}

	// REQUIRED
	// contact telephone number , only chars and min length >= 2 & <= 101
	var e_number = f.e_number.value ;
	if(!stringRange(e_number, 2, 1000)){
		alert("Please enter a valid contact telephone number") ;
		return false ;
	}
	
	// Ensure that individuals click on one of the registrationType radio buttons
	if(f.formType.value == 'individual'){
		if(! f.registrationType[0].checked && ! f.registrationType[1].checked){
			alert("Please tell us if you wish to register as a member or a non-member.") ;
			return false ;
		}
	}


	// START OF: Only check number of (non)members if form is not for an individual
	if(! f.formType.value == 'individual') {
		// REQUIRED
		// Bit tricky, need to check that either numOfMembers OR numOfNonmembers has
		// a numeric value ;
		// first get both the values as integers
		
		
		var numOfMembers  = parseInt(f.numOfMembers.value) ;
		var numOfNonmembers = parseInt(f.numOfNonmembers.value) ;
		var numOfAnnualmembers = parseInt(f.numOfAnnualmembers.value) ;
		var numOfAdditionalmembers = parseInt(f.numOfAdditionalmembers.value) ;
		var membersHasValue = true ;
		if(isNaN(numOfMembers)){
			numOfMembers = 0 ;
			membersHasValue  = false ;
		}
		var nonmembersHasValue = true ;
		if(isNaN(numOfNonmembers)){
			numOfNonmembers = 0 ;
			nonmembersHasValue = false ;
		}
			var annualmembersHasValue = true ;
		if(isNaN(numOfAnnualmembers)){
			numOfAnnualmembers = 0 ;
			annualmembersHasValue = false ;
		}
				var additionalmembersHasValue = true ;
		if(isNaN(numOfAdditionalmembers)){
			numOfAdditionalmembers = 0 ;
			additionalmembersHasValue = false ;
		}
		
		if(parseInt(f.numOfNonmembers.value) === 0 && parseInt(f.numOfMembers.value) === 0  && parseInt(f.numOfAnnualmembers.value) === 0  && parseInt(f.numOfAdditionalembers.value) === 0){
			alert("You have not entered a valid entry for the number of registrants or enrollments.") ;
			return false ;
		}
		/*
		if(parseInt(f.numOfMembers.value) === 0){
			alert("You have not entered a valid entry for the number of residents.") ;
			return false ;
		}
		*/
		if(! membersHasValue && ! nonmembersHasValue && ! annualmembersHasValue && ! additionalmembersHasValue){
			alert("Please tell us how many people are planning to attend or enrollments required.") ;
			return false ;
		}
	}// END OF: Only check number of (non)members if form is not for an individual
	
	// REQUIRED
	
	//var numOfMembers  = f.numOfMembers.value ;
	//var numOfNonmembers = f.numOfNonmembers.value ;
	if(f.formType.value == 'individual') {
		var totalUsers = 1 ;
	} else {
		var totalUsers = numOfMembers + numOfNonmembers + numOfAnnualmembers + numOfAdditionalmembers ;
	}
	//alert("total users = " + totalUsers) ; 
	/*
	// check radio groups if there is a numeric value
	*///if(! f.checkdinner[0].checked && ! f.checkdinner[1].checked){
		//alert("Please tell us if you plan to attend Wednesday night's Welcome Reception.") ;
		//return false ;
	//}	
	
	if(! f.checkdinner[0].checked && ! f.checkdinner[1].checked){
		alert("Please tell us if you plan to attend the keynote speaker dinner on Sunday, June 8, 2008.") ;
		return false ;
	}
	
// The following validation can probably be dropped as breakfast and lunches are no longer of interest.
/*		if(! f.checkbreakfastmon[0].checked && ! f.checkbreakfastmon[1].checked){
		alert("Please tell us if you plan to attend breakfast on Monday, June 11.") ;
		return false ;
	}
	
	
		if(! f.checklunchmon[0].checked && ! f.checklunchmon[1].checked){
		alert("Please tell us if you plan to attend lunch on Monday, June 11.") ;
		return false ;
	}	
	
			if(! f.checkbreakfasttue[0].checked && ! f.checkbreakfasttue[1].checked){
		alert("Please tell us if you plan to attend breakfast on Tuesday, June 12.") ;
		return false ;
	}
*/	
	
	
/*	if(! isCheckedRadioGroup('specialdietRequirement')){
		alert("Please tell us if you have any special diet requirements.") ;
		return false ;
	}
*/
	if(f.hasFoodAlergy.checked && f.foodAllergies.value == ''){
		alert("You have selected 'food allergies' could you please specify.") ;
		return false ;
	}
	if(f.hasOtherFoodRequirements.checked && f.otherRequirements.value == ''){
		alert("You have selected 'other food requirements' could you please specify.") ;
		return false ;
	}
	
	if(! f.reservations[0].checked && ! f.reservations[1].checked){
		alert("Please tell us if you plan to make reservations at the Hyatt Regency, Jersey City on the Hudson.") ;
		return false ;
	}
	
	if(f.formType.value == 'individual') {
		individualCost() ;
	} else {
		totalCost() ;
	}
	
	return true ;
	
}

/**
Function checks that at least one (1) of radio group is checked

@method isCheckedRadioGroup
@param groupName [String] The name of radio group
@returns Boolean
@access public
*/
function isCheckedRadioGroup(groupName)
{
	var group = document.getElementsByName(groupName) ; 
	for(var i=0; i<group.length; i++)
		if(group[i].checked)		
			return true ;
		
	return false ;
}

function isBlank(inputString)
{
	var totalBlanks = 0 ;
	var i = inputString.length ;
	if(i == 0)
		return false ;
	while(i--){
		if(inputString.charAt(i) == ' '){
			totalBlanks++ ;
		}
	}
	return (totalBlanks == inputString.length) ? true : false ;
}
	
function onlyCharacters(inputString)
{
  var searchForNumbers = /\d+/ ;
  var val = (searchForNumbers.test(inputString)) ? false : true ;
  if(val)
  	if(isBlank(inputString))
		return false ;
  return val ;
}

function onlyNumbers(inputString)
{
  var searchForNumbers = /\D+\_+\W+\s+\S+/ ;
  var val = (searchForNumbers.test(inputString)) ? false :  true ;
  return val ;
} 

function stringLength(inputString)
{
  return inputString.length ;
}

function numberRange(input, min, max)
{
	return input >= min && input <= max ;
}

function stringRange(input, min, max)
{
	if(input == undefined) return false ;
	return input.length >= min && input.length <= max ;
}
function clearForm()
{
	///alert("Clearing Form") ;
	var f = document.forms.register ;
	if(f.title.value != ''){ 
		for(var i=0; i<f.title.options.length; i++){
			if(f.title.options[i].value == ''){
				f.title.options[i].selected = true  ;
				break ;
			}
		}
	}
	f.surname.value = '' ;
	f.forname.value = '' ;
	f.degree.value = '' ;
	f.jobtitle.value = '' ;
	f.institution.value = '' ;
	//f.speciality.value = '' ;
	//f.department.value = '' ;
	f.address.value = '' ;
	f.city.value = '' ;
	f.state.value = '' ;
	if(f.country.value != 'US'){ 
		for(var i=0; i<f.country.options.length; i++){
			if(f.country.options[i].value == 'US'){
				f.country.options[i].selected = true  ;
				break ;
			}
		}
	}
	f.telephone.value = '' ;
	f.zip.value = '' ;
	f.email.value = '' ;
	f.fax.value = '' ;
	f.e_name.value = '' ;
	f.e_number.value = '' ;

	if(f.formType.value == 'individual') {
		f.registrationType[0].checked = f.registrationType[1].checked = false ;
	} else {
		f.numOfMembers.value = '' ;
		f.numOfNonmembers.value = '' ;
		f.numOfAnnualmembers.value = '' ;
		f.numOfAdditionalmembers.value = '' ;
	}
	
	f.checkdinner[0].checked = f.checkdinner[1].checked = false ;
	f.reservations[0].checked = f.reservations[1].checked = false ;
	
	f.isVegetarian.checked = false;
	f.eatsKosher.checked = false;
	f.hasFoodAlergy.checked = false;
	f.foodAllergies.value = '' ;
	f.hasOtherFoodRequirements.checked = false;
	f.otherRequirements.value = '' ;
	//f.payment[0].checked = true ;
	//f.attendeeList.checked = false ;
	f.total.value = '' ;
}
