// JavaScript Document for 2007 Registration form

function copyForm(fromIndex, toIndex)
{
	copyItem('companyName', fromIndex, toIndex);
	copyItem('address1', fromIndex, toIndex);
	copyItem('address2', fromIndex, toIndex);
	copyItem('city', fromIndex, toIndex);
	copyItem('state', fromIndex, toIndex);
	copyItem('zipCode', fromIndex, toIndex);
	copyItem('phone', fromIndex, toIndex);
	copyItem('fax', fromIndex, toIndex);
	copyItem('emailAddress', fromIndex, toIndex);
	document.getElementById('firstName'+toIndex).focus();
}

function copyItem(fieldName, from, to)
{
	setInputValue(document.getElementById(fieldName+to), getInputValue(document.getElementById(fieldName+from)));
}

// Routine to calculate the fee based on user input and display on form
function calculateFee(f)
{
//	var member = getInputValue(f.memberStatus);
//	alert ("Status = " + member);
var feeAmount = 0;
var perAttendeeFee = 0;
var numberOfAttendees = 0;
var attendeeType = '';
	switch(getInputValue(f.memberStatus))
	{
		case 'nonMember':
			perAttendeeFee = 385;
			attendeeType = ' Non-Member';
			break;
		case 'member':
			perAttendeeFee = 285;
			attendeeType = ' TXRPC Member';
			f.chkSecondToRegister.readOnly = false;
			if(getInputValue(f.chkSecondToRegister)=='Y') perAttendeeFee -= 30;
			break;
		case 'exhibitor':
			perAttendeeFee = 125;
			attendeeType = ' Exhibitor';
			f.chkSecondToRegister.checked = false;
			f.chkSecondToRegister.readOnly = true;
			if (f.numberOfTables.value == '') {
				f.numberOfTables.value = '1';
			}
			alert('If you would like to reserve additional space for your exhibit, please contact the Meetings Chairperson, Alexis Ward at (800) 329-1084 or via email at meetings@txrpc.org.\n\rPlease indicate the number of tables that you would like to have for your exhibit space.');
			break;
		case 'CEUOnly':
			perAttendeeFee = 100;
			attendeeType = ' CEU Only';
			break;
	}

	// Count the number of attendees on this form
	numberOfAttendees = 0;
	if (f.firstName1.value + f.lastName1.value != '')
		numberOfAttendees++;
	if (f.firstName2.value + f.lastName2.value != '')
		numberOfAttendees++;
	if (f.firstName3.value + f.lastName3.value != '')
		numberOfAttendees++;
		
	// Collect and post some receipt information
	var receipt = document.getElementById('receipt');
	receipt.innerHTML = '';
	receipt.innerHTML += numberOfAttendees + attendeeType + ' Attendees at $' + perAttendeeFee + '.00<br />';
	feeAmount = numberOfAttendees * perAttendeeFee;


	// If they are exhibiting, then count the number of tables
	var numberOfTables = 0;
	if (getInputValue(f.memberStatus) == 'exhibitor')
	{
		numberOfTables = parseFloat(getInputValue(f.numberOfTables));
		feeAmount += numberOfTables * 375;
		receipt.innerHTML += numberOfTables + ' exhibit table(s) at $375.00 each <br />';
	}

	//alert("fee amount "+feeAmount);
	setInputValue(f.feeAmount, '$'+feeAmount+'.00');
	//f.feeAmount.value = '$'+feeAmount+'.00';
	return true;
}

// Main edit driver, disables/enables submit button
function editForm(f)
{
	f.cmdSubmit.disabled = true;
	if (!editTheForm(f))
	{
		f.cmdSubmit.disabled = false;
		return false;
	}
	f.submit();
}

// Routine with form edits called from editForm()
function editTheForm(f)
{
	// Look through all the instances of items on the form
	for (index=1;index<4;index++)
	{
		// Only edit those where there is a first and last name
		if (getInputValue(document.getElementById('firstName'+index))+getInputValue(document.getElementById('lastName'+index)) != '')
		{
			// Registrant required fields
			if (disallowBlank(document.getElementById('firstName'+index), 'First Name is required.', true)
				|| disallowBlank(document.getElementById('lastName'+index), 'Last Name is required.', true)
				|| disallowBlank(document.getElementById('companyName'+index), 'Company Name is required.', true)
				|| disallowBlank(document.getElementById('address1'+index), 'Please enter your street address.', true)
				|| disallowBlank(document.getElementById('city'+index), 'City is required.', true)
				|| disallowBlank(document.getElementById('state'+index), 'Please choose a state from the drop down list.', true)
				|| disallowBlank(document.getElementById('zipCode'+index), 'Please enter your Zip Code.', true)
				|| disallowBlank(document.getElementById('phone'+index), 'Please enter you phone number, including area code.', true)
				|| disallowBlank(document.getElementById('emailAddress'+index), 'Please enter your email address.', true)
				)
			{
				return false;
			}
	
			var z = document.getElementById('zipCode'+index)
			if (!isValidZip(z))
			{
				alert('Please enter a valid zip code; valid formats( nnnnn or nnnnn-nnnn or nnnnnnnnn).\nYou have entered '+z.value);
				z.focus();
				return false;
			}
			
			var p = document.getElementById('phone'+index)
			if (!isValidPhone(p))
			{
				alert('Please enter your 10 digit phone number.');
				p.focus();
				return false;
			}
			p = document.getElementById('fax'+index)
			if (!isValidPhone(p))
			{
				alert('Please enter a valid 10 digit Fax Number.');
				p.focus();
				return false;
			}
			var e = document.getElementById('emailAddress'+index)
			if (!isValidEmail(e))
			{
				alert('The Email Address that you have entered has an invalid format.');
				e.focus();
				return false;
			}
		
		}
	}

	if(getInputValue(f.memberStatus)=="")
	{
		alert('Please select a Membership Status');
		//f.memberStatus.focus();
		return false;
	}
	
	switch(getInputValue(f.cboPaymentMethod))
	{
		case 'CC':
			return true;
		case 'Check':
			return true;
		default:
			alert('Please choose your payment method from the drop-down list.');
			f.cboPaymentMethod.focus();
			return false;
	}
	// recalculate fees one last time before we go on
	return calculateFee(f);
}

// Validate an email address
function isValidEmail(obj) 
{
   var s = Trim(getInputValue(obj));
   return ((s.length > 6) && s.indexOf(".") > 2) && (s.indexOf("@") > 0) && (s.indexOf(".") < s.length-1);
}

// Validate a zip code
function isValidZip(obj)
{
	var z = Trim(getInputValue(obj));
	z = z.replace('-', '');
	switch(z.length)
	{
		case 5:
			setInputValue(obj,z)
			break;
		case 9:
			// reformat the value with a dash
			setInputValue(obj,z.substring(0,5)+'-'+z.substring(5,9));
			break;
	}
	return ((z.length == 5) 
		|| (z.length == 9)) 
		&& (isNumeric(z));
}

// Validate a phone number
function isValidPhone(obj)
{
	var p = Trim(getInputValue(obj));
	p = p.replace(/\(/g, '');
	p = p.replace(/\)/g, '');
	p = p.replace(/-/g, '');
	p = p.replace(/ /g, '');
	switch(p.length)
	{
		case 0:
			// zero length is valid if the phone number is not required, that edit is done elsewhere
			return true;
		case 10:
			// reformat the value that they entered into our preferred format
			setInputValue(obj, '('+p.substring(0,3)+') '+p.substring(3,6)+'-'+p.substring(6,10));
			return isInteger(p);
		default:
			return false;
	}
}

