var numBowlers = 1;
var guests = new Array();
var lastCheapDate = Date.cDate("5/29/2010 11:59:59 PM");

function init() {
	for (index = 0; index < document.app.length; index++) {
		var element = document.app.elements[index];
		if (element.type == "text") {
			element.id = element.name;
			element.onfocus = new Function("doFocus(this)");
			element.onblur = new Function("doBlur(this)");
			doBlur(element);
		}
	}
	for (index = 1; index <= 4; index++) {
		document.app.elements["dobMonth" + index].tabIndex = index * 100 + 11;
		document.app.elements["dobDay" + index].tabIndex = index * 100 + 12;
		document.app.elements["talent" + index].checked = false;
		document.app.elements["freeEntry" + index].checked = false;
	}
	doNumBowlers();
}

function doFocus(field) {
	field.value = field.value.trim();
	if (field.value == field.title) {
		field.value = "";
		field.style.color = "black";
	}
	field.select();
	return true;
}

function doBlur(field) {
	field.value = field.value.trim();
	if (field.value == "") {
		field.value = field.title;
		field.style.color = "gray";
		return true;
	} else {
		field.style.color = "black";
	}
	if (field.name == "leagueName1") {
		for (index = 2; index <= 4; index++) {
			if (getFieldValue("leagueName" + index) == "") {
				field2 = document.getElementsByName("leagueName" + index)[0];
				field2.value = field.value;
				field2.style.color = "black";
				
			}
		}
	}
	if (field.name == "secretaryName1") {
		for (index = 2; index <= 4; index++) {
			if (getFieldValue("secretaryName" + index) == "") {
				field2 = document.getElementsByName("secretaryName" + index)[0];
				field2.value = field.value;
				field2.style.color = "black";
			}
		}
	}
	if (field.name == "secretaryContact1") {
		for (index = 2; index <= 4; index++) {
			if (getFieldValue("secretaryContact" + index) == "") {
				field2 = document.getElementsByName("secretaryContact" + index)[0];
				field2.value = field.value;
				field2.style.color = "black";
			}
		}
	}
	return true;
}

function doNumBowlers() {
	numBowlers = parseInt(document.app.numBowlers.options[document.app.numBowlers.selectedIndex].value);
	// set doubles partners text
	switch (numBowlers) {
		case 1:
			document.getElementById("doubles").innerHTML = "";
			break;
		case 2:
		case 3:
			document.getElementById("doubles").innerHTML = "Bowler 1 will bowl doubles with bowler 2.";
			break;
		case 4:
			document.getElementById("doubles").innerHTML = "Bowler 1 will bowl doubles with bowler 2.  Bowler 3 will bowl doubles with bowler 4.";
			break;
	}
	// dropdowns for team order
	for (bowler = 1; bowler <= numBowlers; bowler++) {
		div = document.getElementById("orderDiv" + bowler);
		html = "<select name=\"teamOrder" + bowler + "\" id=\"teamOrder" + bowler + "\" tabindex=\"" + (100 * bowler) + "\">";
		for (index2 = 1; index2 <= numBowlers; index2++) {
			html += "<option value=\"" + index2 + "\"" + (bowler == index2 ? " selected" : "") + ">" + index2;
		}
		html += "</select>";
		div.innerHTML = html;
	}
	// en-/dis-able captain radio button & hide columns where possible
	captain = 0;
	for (bowler = 1; bowler <= 4; bowler++) {
		captainRadio = document.getElementsByName("captain")[bowler - 1];
		captainRadio.disabled = bowler > numBowlers;
		captain = captainRadio.checked ? bowler : captain;
		element = document.getElementById("bowler" + bowler);
		switch (navigator.appName) {
			case "Microsoft Internet Explorer":
				element.style.display = (bowler <= numBowlers ? "block" : "none");
				break;
			case "Netscape":
				element.style.visibility = (bowler <= numBowlers ? "visible" : "collapse");
				break;
		}
	}
	if (captain > numBowlers) {
		document.getElementsByName("captain")[0].checked = true;
	}
	// set column widths & alignment
	switch (navigator.appName) {
		case "Microsoft Internet Explorer":
			document.getElementById("bowlers").style.width = Math.round(100 * (numBowlers + 1) / 5) + "%";
			for (bowler = 0; bowler <= 4; bowler++) {
				element = document.getElementById("bowler" + bowler);
				element.style.width = Math.round(100 / (numBowlers + 1)) + "%";
			}
			break;
		case "Netscape":
			elements = document.getElementsByTagName("th");
			for (index = 0; index < elements.length; index++) {
				element = elements[index];
				if (element.colSpan == 1) {
					element.align = "right";
				}
			}
			break;
	}
	// en-/dis-able fields in each column
	for (index = 0; index < document.app.elements.length; index++) {
		element = document.app.elements[index];
		if (element.type != "hidden" && element.name != null && (element.name.endsWith(1) || element.name.endsWith(2) || element.name.endsWith(3) || element.name.endsWith(4))) {
			element.disabled = parseInt(element.name.charAt(element.name.length - 1)) > numBowlers;
		}
	}
	calculateAmountDue();
}

function calculateAmountDue() {
	paidRate = (new Date() <= lastCheapDate ? 90 : 100);
	paidEntries = 0;
	freeEntries = 0;
	usbc = 0;
	numGuests = 0;
	noTap = 0;
	totalDue = 0;
	for (bowler = 1; bowler <= numBowlers; bowler++) {
		if (isChecked("freeEntry" + bowler)) {
			freeEntries++;
		} else {
			paidEntries++;
		}
		if (isChecked("usbcParticipation" + bowler)) {
			usbc++;
		}
		if (isChecked("noTap" + bowler)) {
			noTap++;
		}
	}
	numGuests = guests.length;
	
	totalDue = (paidEntries * paidRate) + (usbc * 5) + (noTap * 20) + (numGuests * 35);
	document.getElementById("totalAmountDue").innerHTML = "<h2>Total amount due with application: $" + totalDue + "</h2>";

	if (totalDue > 0) {
		document.getElementById("payDiv").innerHTML =
			"<input type=\"hidden\" name=\"amount\" value=\"" + totalDue + ".00\">";
		if (paidEntries > 0) {
			document.getElementById("payDiv").innerHTML +=
				"<input type=\"hidden\" name=\"on0\" value=\"Paid Entries @ $" + paidRate + "\">" +
				"<input type=\"hidden\" name=\"os0\" value=\"" + paidEntries + "\">";
		}
		if (freeEntries > 0) {
			document.getElementById("payDiv").innerHTML +=
				"<input type=\"hidden\" name=\"on1\" value=\"Free Entries\">" +
				"<input type=\"hidden\" name=\"os1\" value=\"" + freeEntries + "\">";
		}
		if (noTap > 0) {
			document.getElementById("payDiv").innerHTML +=
				"<input type=\"hidden\" name=\"on2\" value=\"No-Tap Entries @ $20\">" +
				"<input type=\"hidden\" name=\"os2\" value=\"" + noTap + "\">";
		}
		if (numGuests > 0) {
			document.getElementById("payDiv").innerHTML +=
				"<input type=\"hidden\" name=\"on3\" value=\"Guests @ $35\">" +
				"<input type=\"hidden\" name=\"os3\" value=\"" + numGuests + "\">";
		}
		if (usbc > 0) {
			document.getElementById("payDiv").innerHTML +=
				"<input type=\"hidden\" name=\"on4\" value=\"USBC fees @ $5\">" +
				"<input type=\"hidden\" name=\"os4\" value=\"" + usbc + "\">";
		}
			
		document.getElementById("payDiv").innerHTML +=
			"<input type=\"image\" src=\"https://www.paypal.com/en_US/i/btn/btn_paynow_LG.gif\" border=\"0\" name=\"submit\" alt=\"Make payments with PayPal - fast, free and secure!\" onclick=\"submitApp();return false;\">";
//			"<img alt=\"\" border=\"0\" src=\"https://www.paypal.com/en_US/i/scr/pixel.gif\" width=\"1\" height=\"1\">";
	} else {
		document.app.action = "";
		document.app.id = "";
		document.getElementById("payDiv").innerHTML =
			"<input type=\"image\" src=\"https://www.paypal.com/en_US/i/btn/btn_paynow_LG.gif\" border=\"0\" name=\"submit\" onclick=\"submitApp();return false;\">";
//			"<input type=\"button\" onclick=\"submitApp()\" value=\"Submit\" tabindex=\"700\">";
	}
	return totalDue;
}

function doTalent(bowler) {
	document.getElementById("talentDiv" + bowler).style.display = (isChecked("talent" + bowler) ? "block" : "none");
}

function doFreeEntry(bowler) {
	document.getElementById("freeEntryDiv" + bowler).style.display = (isChecked("freeEntry" + bowler) ? "block" : "none");
	calculateAmountDue();
}

function lookupIgboUser(bowler) {
	lastName = getFieldValue("lastName" + bowler);
	if (lastName == "") {
		alert("You must enter the bowler's name and date of birth before clicking this link.");
		return;
	}
	dobMonth = getFieldValue("dobMonth" + bowler);
	if (dobMonth < 10) {
		dobMonth = "0" + dobMonth;
	}
	dobDay = getFieldValue("dobDay" + bowler);
	if (dobDay < 10) {
		dobDay = "0" + dobDay;
	}
	window.open("http://www.igbo.org/tournaments/tad/averages_list_member.cfm?MID=" + lastName.toLowerCase() + dobMonth + dobDay);
}

function lookupUsbcId(bowler) {
	firstName = getFieldValue("firstName" + bowler).toLowerCase();
	lastName = getFieldValue("lastName" + bowler).toLowerCase();
	zipCode = getFieldValue("zip" + bowler);
	if (firstName == "" || lastName == "" || zipCode == "") {
		alert("You must enter the bowler's name and zip/postal code before clicking this link.");
		return;
	}
	window.open("http://membership.bowl.com/USBCsearch/SearchMemberResults.jsp?SearchTypeSelector=ByName&FirstNameBox=" + firstName + "&LastNameBox=" + lastName + "&ZipCodeBox=" + zipCode + "&PrefixBox=&SuffixBox=&SearchButton.x=0&SearchButton.y=0");
}

function isChecked(fieldName) {
	return document.app.elements[fieldName].checked;
}

function getFieldValue(fieldName) {
	field = document.app.elements[fieldName];
	if (! field) {
		alert (fieldName + " not a valid field name");
		return fieldName + " name error";
	}
	if (field.type == "text" || field.type == "select-one" || field.type == "textarea" || field.type == "hidden" || field.type == "checkbox") {
		retVal = field.value.trim();
		if (retVal == field.title.trim()) {
			retVal = "";
		}
		return retVal;
	}
	alert (fieldName + " is a " + field.type + " field");
	return fieldName + " type error";
}

function validateData() {
	for (bowler = 1; bowler <= numBowlers; bowler++) {
		if (! (validate("firstName" + bowler) && validate("lastName" + bowler)
			&& validate("address" + bowler) && validate("city" + bowler) && validate("state"+ bowler) && validate("zip" + bowler) && validate("country" + bowler)
			&& validate("phone" + bowler))) {
			return false;
		}
		if (isChecked("talent" + bowler)) {
			if (! validate("talentDescription" + bowler)) {
				return false;
			}
		}
		if (isChecked("freeEntry" + bowler)) {
			if (! (validate("certNumber" + bowler) && validate("wonAt" + bowler))) {
				return false;
			}
		}
	}
	elements = document.getElementsByName("captain");
	for (index = 0; index < elements.length; index++) {
		if (elements[index].checked && ! (validate("emailAddress" + (index + 1)))) {
			return false;
		}
	}
	for (bowler = 1; bowler <= numBowlers - 1; bowler++) {
		for (index2 = bowler + 1; index2 <= numBowlers; index2++) {
			element1 = document.getElementById("teamOrder" + bowler);
			element2 = document.getElementById("teamOrder" + index2);
			if (element1.options[element1.selectedIndex].value == element2.options[element2.selectedIndex].value) {
				element1.focus();
				alert("The team order is incorrect.");
				return false;
			}
		}
	}
	return true;
}

function validate(fieldName) {
	field = document.app.elements[fieldName];
	if (field.type == "text" && getFieldValue(fieldName) == "") {
		field.focus();
		alert(field.title + " must be entered");
		return false;
	}
	return true;
}

function addGuest() {
	guestName = getFieldValue("guestName");
	if (guestName == "") {
		return;
	}
	guests.push(guestName);
	buildGuestSection();
	calculateAmountDue();
}

function removeGuest(guestToRemove) {
	for (index = guestToRemove; index < guests.length - 1; index++) {
		guests[index] = guests[index + 1];
	}
	guests.pop();
	buildGuestSection();
	calculateAmountDue();
}

function buildGuestSection() {
	html = "<input type=\"hidden\" name=\"numGuests\" value=\"" + guests.length + "\">";
	for (index = 0; index < guests.length; index++) {
		html += "<input type=\"hidden\" name=\"guest" + (index + 1) + "\" value=\"" + guests[index] + "\">";
		html += guests[index] + " <input type=\"button\" value=\"Delete\" onclick=\"removeGuest(" + index + ")\" tabindex=\"" + (500 + index + 1) + "\"><br>";
	}
	document.getElementById("guests").innerHTML = html;
	document.app.elements["guestName"].value = "";
	doBlur(document.app.guestName);
}
	
function submitApp() {
	if (!validateData()) {
		return;
	}
	params = "";
	for (index = 0; index < document.app.elements.length; index++) {
		field = document.app.elements[index];
		if (field.type == "checkbox") {
			if (field.checked) {
				params += "&" + field.name + "=" + getFieldValue(field.name);
			}
			continue;
		}
		if (field.type != "radio" && field.type != "button" && field.type != "submit") {
			params += "&" + field.name + "=" + getFieldValue(field.name);
		}
	}
	for (bowler = 1; bowler <= numBowlers; bowler++) {
		$bowlerAmountDue = 0;
		if (! isChecked("freeEntry" + bowler)) {
			$bowlerAmountDue += (new Date() <= lastCheapDate ? 90 : 100);
		}
		if (isChecked("usbcParticipation" + bowler)) {
			$bowlerAmountDue += 5;
		}
		if (isChecked("noTap" + bowler)) {
			$bowlerAmountDue += 20;
		}
		params += "&amountDue" + bowler + "=" + $bowlerAmountDue;
	}
	elements = document.getElementsByName("captain");
	for (index = 0; index < elements.length; index++) {
		if (elements[index].checked) {
			params += "&captain=" + elements[index].value;
		}
	}
	params = params.substr(1);
	http.open("POST", "submitapp.php", true);
	http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http.setRequestHeader("Content-length", params.length);
	http.setRequestHeader("Connection", "close");
	http.onreadystatechange = useHttpResponse;
	http.send(params);
}

function getXMLHTTPRequest() {
	try {
		return new XMLHttpRequest();
	}
	catch (ignored) {}
	try {
		return new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (ignored) {}
	try {
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch (ignored) {}
	return null;
}

var http = getXMLHTTPRequest();

function useHttpResponse() {
	if (http.readyState == 4) {
		if (http.status == 200) {
			if (http.responseText == "success") {
				amountDue = calculateAmountDue();
				if (calculateAmountDue() > 0) {
					alert("Your information has been submitted.  Your application is not considered \"received\" until we receive your payment of $" + amountDue + ".");
					document.pay.submit();
				} else {
					window.location = "/thankyou.php";
				}
			} else {
				alert(http.responseText + " - There was a problem submitting your application.  Please notify the webmaster @ webmaster@tgif-classic.org.");
			}
		}
	}
}