// JavaScript Document for 2009 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)
{
	// Let's reset the submit button
	f.cmdSubmit.disabled = false;
	f.cmdRecalculate.disabled = true;
	
//	var member = getInputValue(f.memberStatus);
//	alert ("Status = " + member);
var feeAmount = 0;
var perAttendeeFee = 0;
var numberOfAttendees = 0;
var attendeeType = '';

// Calculate Earlybird discount
var earlyBirdDiscount = 0;
var dateToday = new Date();
var cutoffDate = new Date('2009','7','10');

	if (dateToday > cutoffDate) {
		earlyBirdDiscount = 0;
	}

	switch(getInputValue(f.memberStatus))
	{
		case 'nonMember':
			perAttendeeFee = 275;
			attendeeType = ' Non-Member';
			f.chkSecondToRegister.checked = false;
			f.chkSecondToRegister.disabled = true;
			break;
		case 'member':
			perAttendeeFee = 250 - earlyBirdDiscount;
			attendeeType = ' TXRPC Member';
			f.chkSecondToRegister.disabled = false;
			if(getInputValue(f.chkSecondToRegister)=='Y') perAttendeeFee -= 0;
			break;
		case 'CEUOnly':
			perAttendeeFee = 100;
			attendeeType = ' CEU Only';
			f.chkSecondToRegister.disabled = true;
			f.chkSecondToRegister.checked = false;
			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++;
	if (f.firstName4.value + f.lastName4.value != '')
		numberOfAttendees++;
		
	// Collect and post some receipt information
	var receipt = document.getElementById('receipt');
	receipt.innerHTML = '';
	setInputValue(f.feeAmount, '');

	if (numberOfAttendees < 1)
	{
		receipt.innerHTML += 'Please enter Attendee Names.';
		f.cmdRecalculate.disabled = false;
		return true;
	}

	feeAmount = numberOfAttendees * perAttendeeFee;
	receipt.innerHTML += numberOfAttendees + attendeeType + ' Attendees @ $' + perAttendeeFee + '.00 ea -- $' + feeAmount + '.00<br />';

	//alert("fee amount "+feeAmount);
	setInputValue(f.feeAmount, '$'+feeAmount+'.00');
	//f.feeAmount.value = '$'+feeAmount+'.00';
	f.cmdRecalculate.disabled = false;
	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();
	f.cmdSubmit.disabled = false;
}

// Routine with form edits called from editForm()
function editTheForm(f)
{
	var numberOfAttendees = 0;
	
	// Look through all the instances of items on the form
	for (index=1;index<5;index++)
	{
		// Only edit those where there is a first and last name
		if (getInputValue(document.getElementById('firstName'+index))+getInputValue(document.getElementById('lastName'+index)) != '')
		{
			numberOfAttendees++;
			// 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(numberOfAttendees == 0)
	{
		alert('Please enter attendee information.');
		document.getElementById('firstName1').focus();
		return false;
	}

	if(getInputValue(f.memberStatus)=="")
	{
		alert('Please select a Membership Status');
		//f.memberStatus.focus();
		return false;
	}
	
	if(getInputValue(f.memberStatus)=='exhibitor')
	{
		if(getInputValue(f.cboExhibitorOption) == "")
		{
			alert('Please Select an Option for your exhibit');
			f.cboExhibitorOption.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;
	}
}
