$().ready(function() {
	publishQuantityChange();
	$("#registration").show();
	if ($('input:visible', this)) {
		$('input:visible', this).get(0).focus();
	}
});


function publishQuantityChange() {
	var quantity = document.getElementById('quantity')
	if (quantity) {
		quantity = quantity.value;
		
	}		
	updateMemberList(quantity);

}

function updateMemberList(quantity) {
	
	var entries = document.getElementById('memberList');
	
	$('.memberItem').each(function(index){
		if (index < quantity) {
			$(this).show();
			
		} else {
			$(this).hide();
			
		}
	});
}

function updateEntryList(quantity) {

	var entries = document.getElementById('entryList');

	var offset;
	var rowElement;
	var dataElement;
	var labelElement;
	var inputElement;

	/*
	 * Set the browser offset for node lengths.
	 * Firefox has an extra text node at the end of the selects.
	 */
	var browserOffset = 0;
	if (BrowserDetect.browser == 'Firefox') {
		browserOffset = 1;

	}

	/*
	 * Remove excess children in existence.
	 * Do not refactor, this is meant to save
	 * data entry that has occured in the
	 * earliest children.
	 */
	var currentSize = entries.childNodes.length - browserOffset;
	if (entries.hasChildNodes()) {

		for (var index = currentSize; quantity < index; index--) {
			entries.removeChild(entries.childNodes[entries.childNodes.length - 1]);

		}

	}

	currentSize = entries.childNodes.length - browserOffset;
	var keyArray = new Array(2);
	keyArray[0] = 'XXXII Registration';
	keyArray[1] = 'XXXII Registration+Golf';

	var valueArray = new Array(2);
	valueArray[0] = 'Registration ($20.00)';
	valueArray[1] = 'Registration + Golf ($80.00)';

	/*
	 * Build the new children.
	 */
	for (var index = currentSize; index < quantity; index++) {
		offset = (index + 1);

		rowElement = document.createElement('tr');
		dataElement = document.createElement('td');
		dataElement.appendChild(createInputElement('name' + offset, 'name' + offset, 30, 25));
		rowElement.appendChild(dataElement);

		dataElement = document.createElement('td');
		dataElement.appendChild(createInputElement('address' + offset, 'address' + offset, 25, 30));
		rowElement.appendChild(dataElement);
		
		dataElement = document.createElement('td');
		dataElement.appendChild(createInputElement('city' + offset, 'city' + offset, 15, 15));
		rowElement.appendChild(dataElement);
		
		dataElement = document.createElement('td');
		dataElement.appendChild(createInputElement('state' + offset, 'state' + offset, 4, 2));
		rowElement.appendChild(dataElement);
		
		dataElement = document.createElement('td');
		dataElement.appendChild(createInputElement('postal' + offset, 'postal' + offset, 10, 10));
		rowElement.appendChild(dataElement);

		dataElement = document.createElement('td');
		dataElement.appendChild(createInputElement('phone' + offset, 'phone' + offset, 10, 10));
		rowElement.appendChild(dataElement);

		dataElement = document.createElement('td');
		dataElement.appendChild(createSelectElement('item' + offset, 'item' + offset, keyArray, valueArray));
		rowElement.appendChild(dataElement);
		
		entries.appendChild(rowElement);


	}

}

function createInputElement(id, name, size, maxlength) {

	var inputElement = document.createElement('input');
	inputElement.setAttribute('type', 'text');
	inputElement.setAttribute('id', id);
	inputElement.setAttribute('name', name);
	inputElement.setAttribute('size', size);
	inputElement.setAttribute('maxlength', maxlength);

	return inputElement;
}

function createHiddenElement(id, name, value) {

	var inputElement = document.createElement('input');
	inputElement.setAttribute('type', 'hidden');
	inputElement.setAttribute('id', id);
	inputElement.setAttribute('name', name);
	inputElement.setAttribute('value', value);

	return inputElement;
}

function createSelectElement(id, name, keyList, valueList) {

	var selectElement = document.createElement('select');
	var optionElement;

	selectElement.setAttribute('id', id);
	selectElement.setAttribute('name', name);

	for (var index = 0; index < keyList.length; index++) {
		optionElement = document.createElement('option');
		optionElement.setAttribute('value', keyList[index]);
		optionElement.appendChild(document.createTextNode(valueList[index]));

		selectElement.appendChild(optionElement);

	}

	return selectElement;

}

function validateForm() {
	var registrationForm = document.getElementById('registrationForm');
	
	if (checkFormValues()) {
		return true;	
	}
	return false;
	
}

function checkFormValues() {

	var quantity = document.getElementById('quantity').value;
	var phonePattern = /^[0-9]{10}$/;
	var fname;
	var lname;
	var address;
	var city;
	var state;
	var postal;
	var phone;
	for (var index = 0; index < quantity; index++) {
		offset = index;
		fname = document.getElementById('fname' + offset).value;
		lname = document.getElementById('lname' + offset).value;
		address = document.getElementById('address' + offset).value;
		city = document.getElementById('city' + offset).value;
		state = document.getElementById('state' + offset).value;
		postal = document.getElementById('postalCode' + offset).value;
		phone = document.getElementById('phone' + offset).value;
		
		if (!fname || !lname || !address || !city || !state || !postal) {
			alert('Please make sure to fill out all form fields.');
			return false;
		} else {
			if (phone.length > 0) {
				if (!phonePattern.test(phone)) {
					alert('Please enter phone number(s) in the valid pattern.');
					return false;
				}
				
			}
			
		}
		
	}
	
	return true;
}

function removeChildren(node) {
	if (node.hasChildNodes()) {

		while (node.childNodes[0]) {
			node.removeChild(node.childNodes[0]);
		}


	}
}

function createPayPalCart() {

	var payPal = document.getElementById('paypalDynamicInput');

	/*
	 * Remove excess children in existence.
	 */
	removeChildren(payPal);

	var quantity = document.getElementById('quantity').value;
	var itemCount = 2;

	var offset;
	var itemType;
	var typeMap = new Array(itemCount);
	typeMap[0] = 'XXXII Registration';
	typeMap[1] = 'XXXII Registration+Golf';

	var itemMap = new Array(itemCount);
	itemMap['XXXII Registration'] = 0;
	itemMap['XXXII Registration+Golf'] = 0;

	var amountMap = new Array(itemCount);
	amountMap['XXXII Registration'] = 20;
	amountMap['XXXII Registration+Golf'] = 80;

//	for (var index = 0; index < quantity; index++) {
//		offset = (index + 1);
//		itemType = document.getElementById('item' + offset);
//		itemMap[itemType.options[itemType.selectedIndex].value]++;
//
//	}
//
//	for (var index = 0; index < itemCount; index++) {
//		offset = (index + 1);
//		if (itemMap[typeMap[index]] > 0) {
//			payPal.appendChild(createHiddenElement('item_name_' + offset,
//				'item_name_' + offset,
//				typeMap[index]));
//			payPal.appendChild(createHiddenElement('on0_' + offset,
//				'on0_' + offset,
//
//			payPal.appendChild(createHiddenElement('amount_' + offset,
//				'amount_' + offset,
//				amountMap[typeMap[index]]));
//			payPal.appendChild(createHiddenElement('quantity_' + offset,
//				'quantity_' + offset,
//				itemMap[typeMap[index]]));
//			payPal.appendChild(createHiddenElement('shipping_' + offset,
//				'shipping_' + offset,
//				0));
//			payPal.appendChild(createHiddenElement('handling_' + offset,
//				'handling_' + offset,
//				0));
//
//		}

	var name;
	var address;
	var city;
	var state;
	var postal;
	var phone;
	var item;
	for (var index = 0; index < quantity; index++) {
		offset = (index + 1);

		name = document.getElementById('name' + offset).value;
		address = document.getElementById('address' + offset).value;
		city = document.getElementById('city' + offset).value;
		state = document.getElementById('state' + offset).value;
		postal = document.getElementById('postal' + offset).value;
		phone = document.getElementById('phone' + offset).value;
		item = document.getElementById('item' + offset).value;
		payPal.appendChild(createHiddenElement('item_name_' + offset,
			'item_name_' + offset,
			item));
		payPal.appendChild(createHiddenElement('on0_' + offset,
			'on0_' + offset,
			'Personal Information'));
		payPal.appendChild(createHiddenElement('on0_' + offset,
			'os0_' + offset,
			name + ', ' + 
			address + ', ' +
			city + ', ' +
			state + ', ' +
			postal));
		payPal.appendChild(createHiddenElement('on0_' + offset,
			'on1_' + offset,
			'Phone'));
		payPal.appendChild(createHiddenElement('on0_' + offset,
			'os1_' + offset,
			phone));
		payPal.appendChild(createHiddenElement('amount_' + offset,
			'amount_' + offset,
			amountMap[item]));
		payPal.appendChild(createHiddenElement('quantity_' + offset,
			'quantity_' + offset,
			1));
		payPal.appendChild(createHiddenElement('shipping_' + offset,
			'shipping_' + offset,
			0));
		payPal.appendChild(createHiddenElement('handling_' + offset,
			'handling_' + offset,
			0));

	}
	var payPalForm = document.getElementById('paypal');
	payPalForm.submit();

}
