var repeat = false; // Whether to redisplay submission form after submitting
var formMode;
var receiptEmail = null;
var usedTeamName = false;
var teamNameIsOK = false;
var test = 1;
var serverDate;
var rebateDate;
var rebateDays;

$(document).ready(function(){
	// Initialize debugging
	if (window.debugging) {
		recordDebugSize();
		clearDump();
		closeDebug();
	} else {
		debugEnabled = false;
	}
	// Initialize main view
	// Close loader screen. Check that all files have loaded
	// Open main window
	// Initialization of private registration table
	if ($("#divPrivateTable").html() != null) {
		// Adds click handler for rows
		$("#tablePrivateTable tbody").click(function(event) {
			$(oTable.fnSettings().aoData).each(function (){
				$(this.nTr).removeClass("row_selected");
			});
			$(event.target.parentNode).addClass("row_selected");
		});
		oTable = $("#tablePrivateTable").dataTable({
			"bProcessing": true,
			"sAjaxSource": base+"json_private.php?code="+orderCode+"&language="+language+randomizer(),
			"oLanguage": {"sUrl": base+"language/"+tableLanguage+".txt"},
			"aoColumns": [
				{"sClass": "cellMemberID"},
				{"sClass": "cellFirstName"},
				{"sClass": "cellLastName"},
				{"sClass": "cellGender"},
				{"sClass": "cellBirthDate"},
				{"sClass": "cellAge"},
				{"sClass": "cellCountry"},
				{"sClass": "cellAmount"},
				{"sClass": "cellDistance"}
			]
		});
		refreshAmount();
	}
	// Initialization of public member table
	if ($("#divPublicTable").html() != null) {
		oTable = $('#tablePublicTable').dataTable( {
			"bProcessing": true,
			"sAjaxSource": base+"json_public.php?language="+language+randomizer(),
			"oLanguage": {"sUrl": base+"language/"+tableLanguage+".txt"},
			"aoColumns": [
				{"sClass": "cellFirstName"},
				{"sClass": "cellLastName"},
				{"sClass": "cellCity"},
				{"sClass": "cellCountry"},
				{"sClass": "cellTeamName"},
				{"sClass": "cellDistance"}
			]
		});
	}
	// Initialization of archive table
	if ($("#divArchiveTable").html() != null) {
		oTable = $('#tableArchiveTable').dataTable( {
			"bProcessing": true,
			"sAjaxSource": base+"json_archive.php?language="+language+randomizer(),
			"oLanguage": {"sUrl": base+"language/"+tableLanguage+".txt"},
			"aoColumns": [
				{"sClass": "cellWalkYear"},
				{"sClass": "cellFirstName"},
				{"sClass": "cellLastName"},
				{"sClass": "cellCity"},
				{"sClass": "cellCountry"},
				{"sClass": "cellDistance"},
				{"sClass": "cellHVM"},
				{"sClass": "cellHVM20"},
				{"sClass": "cellCompleted"}
			]
		});
	}
	// Initialization of private direct registration table
	if ($("#divDirectTable").html() != null) {
	$("#tableDirectTable tbody").click(function(event) {
		$(oTable.fnSettings().aoData).each(function (){
			$(this.nTr).removeClass("row_selected");
		});
		$(event.target.parentNode).addClass("row_selected");
	});
	oTable = $('#tableDirectTable').dataTable( {
		"bProcessing": true,
		// Probably need more flexibility here, or a statement whether the item has been paid
		"sAjaxSource": base+"json_direct.php?language="+language+randomizer(),
		"oLanguage": {"sUrl": base+"language/"+tableLanguage+".txt"},
		"aoColumns": [
			{"sClass": "cellOrderCode"},
			{"sClass": "cellMemberID"},
			{"sClass": "cellFirstName"},
			{"sClass": "cellLastName"},
			{"sClass": "cellCity"},
			{"sClass": "cellCountry"},
			{"sClass": "cellTeamName"},
			{"sClass": "cellDistance"},
			{"sClass": "cellAmount"},
			{"sClass": "cellMethod"}
		]
	});
	}
	// Initialization of team name field
	if ($("#teamNameField").html() != null) {
		$.ajax({
			type: "POST",
			url: base+"get_value.php",
			data: "name=teamname&arg="+orderCode+randomizer(),
			success: function(response) {
				$("#teamNameField").val(response);
			}
		});
		// This should provide some kind of delayed response, otherwise we can tax the server pretty hard
		$("#teamNameField").blur(function () {
		// Store the team name with an ajax function
//		$("#teamNameNotice").html(lang["processing..."]);
//		$("#teamNameNotice").css({"color": "#666666", "font-weight": "normal"});
			$.ajax({
				type: "POST",
				url: base+"set_value.php",
				data: "name=teamname&arg="+orderCode+"&value="+$("#teamNameField").val()+randomizer(),
				success: function (response) {
// echo value back in field? I'm not sure that's a good idea.
//          if (response == "Already taken") {
//            usedTeamName = true;
//            $("#teamNameNotice").html(lang["nameexists"]);
//            $("#teamNameNotice").css({"color": "red", "font-weight": "bold"});
//          } else {
//            usedTeamName = false;
//            $("#teamNameNotice").html(lang["available"]);
//            $("#teamNameNotice").css({"color": "#666666", "font-weight": "normal"});
//          }
			}
		});
	});
//    $("#teamNameField").blur(function () {
//      if (usedTeamName == false) {
//        $("#teamNameNotice").html("&nbsp;");
//      }
//    });
	}
	// Initialize email field in registration
	if ($("#receiptEmailField").html() != null) {
		receiptEmail = $("#receiptEmailField").val();
		$("#receiptEmailField").blur(function () {
			receiptEmail = $("#receiptEmailField").val();
		});
	}
	// Initialize general OK and cancel buttons in blockUI forms
	if ($.blockUI) {
		$.blockUI.defaults.fadeOut = 0;
		$.blockUI.defaults.fadeIn = 0;
		$(".btnClose").click(function (){
			if (cancelAction) {
				cancelAction();
				cancelAction = null;
			}
			$.unblockUI();
			return false;
		});
		$("#confirmOkBtn").click(function (){
			if (confirmAction) {
				confirmAction();
				confirmAction = null;
			}
			$.unblockUI();
			return false;
		});
	}
	// Initialize buttons for member registration form
	if ($("#divMemberForm").html() != null) {
		$("#btnFormCancel").click(function (){
			// Cancel errors for form
			resetErrors();
			return false;
		});
		$("#btnSave").click(function (){
			validateFields();
			checkBirthDate();
			if (errors.length == 0 && unfilled.length == 0) {
				// Store data on server for this person, through form submission
				// Then close the window
				repeat = false;
				$.unblockUI();
				displaySplash(lang["updating"], 275, 150);
				// This fails in IE
				$("#IDMemberForm").submit();
			} else {
				// Else display field errors
				alert(listLanguageItems(errors)+" "+lang["arenotfilled"]);
				// Focus field here
				if(errors[0] != "birthdate") {
					var field = document.forms.memberForm[errors[0]]
					field.focus();
				}
			}
			return false;
		});
		$("#btnSaveAndNew").click(function (){
			validateFields();
			checkBirthDate();
			if (errors.length == 0 && unfilled.length == 0) {
				// If valid, store data on server for this person, through form submission
				// Then clear the form for a new person
				repeat = true;
				$.unblockUI();
				displaySplash(lang["updating"], 275, 150);
				$("#IDMemberForm").submit();
			} else {
				// Else display field errors
				alert(listLanguageItems(errors)+" "+lang["arenotfilled"]);
				// Focus field here
				if(errors[0] != "birthdate") {
					var field = document.forms.memberForm[errors[0]]
					field.focus();
				}
			}
			return false;
		});
		$('#IDMemberForm').ajaxForm(function (response){
			if(response == "OK") {
				refreshPrivateTable();
				$.unblockUI();
				if(repeat == true) {
					formMode = "new";
					displayMemberForm();
					resetForm();
				}
			} else {
				$.unblockUI();
				repeat = false;
				displayError(response);
			}
		});
	}
	// Initializebuttons for archive form
	if ($("#divArchiveForm").html() != null) {
	}
	// Initialize button for creating a new person
	$("#newPersonBtn").click(function (){
		formMode = "new";
		$.ajax({
			type: "POST",
			dataType: "json",
			url: "get_value.php",
			data: "name=serverRebate"+randomizer(),
			success: function(response) {
				serverDate = jsonDate(response["serverDate"]);
				rebateDate = jsonDate(response["rebateDate"]);
				rebateDays = response["rebateDays"];
				displayMemberForm();
				resetForm();
				// Set signup date to serverDate
				document.forms.memberForm.signupdate.value =
					serverDate.getFullYear()+"-"+
					(serverDate.getMonth()+1)+"-"+
					serverDate.getDate()+" "+
					serverDate.getHours()+":"+
					serverDate.getMinutes()+":"+
					serverDate.getSeconds();
			},
			error: function(response) {
				displayError(lang["couldnotdooperation"]);
			}
		});
	});
	// Initialize button for creating a new person from archive
	//$("#newPersonFromArchiveBtn").click(function (){
	//  formMode = "new";
	//  displayArchiveForm();
	//  resetForm();
	//});
	// Initialize button for editing a person
	$("#editPersonBtn").click(function (){
		var selectedMemberID = getSelectedMember(oTable);
		if (!selectedMemberID) {
			displayMessage(lang["nomemberselected"], 275, 150);
			return;
		}
		$.ajax({
			type: "POST",
			url: base+"get_value.php",
			dataType: "json",
			data: "name=person&arg="+selectedMemberID+"&arg2="+orderCode+randomizer(),
			success: function(response) {
				if (response) {
					formMode = "edit";
					$.ajax({
						type: "POST",
						dataType: "json",
						url: "get_value.php",
						data: "name=serverPersonRebate&arg="+selectedMemberID+"&arg2="+orderCode+randomizer(),
						success: function(rebateResponse) {
							serverDate = jsonDate(rebateResponse["serverDate"]);
							rebateDate = jsonDate(rebateResponse["rebateDate"]);
							rebateDays = rebateResponse["rebateDays"];
							// This order is critical for IE
							displayMemberForm();
							fillForm(response);
						},
						error: function(rebateResponse) {
							displayError(lang["couldnotdooperation"]);
						}
					});
				} else {
					displayError(lang["couldnotfindperson"]);
				}
			},
			error: function(response) {
				displayError(lang["couldnotdooperation"]);
			}
		});
	});
	// Initialize button for deleting a person
	$("#deletePersonBtn").click(function (){
		var selectedMemberID = getSelectedMember(oTable);
		if (!selectedMemberID) {
			displayMessage(lang["nomemberselected"], 275, 150);
			return;
		}
		confirmAction = function (){
			displaySplash(lang["updating"], 275, 150);
			$.ajax({
				url: base+"set_value.php",
				data: "name=deleteperson&arg="+selectedMemberID+"&value="+orderCode+randomizer(),
				success: function (response){
					refreshPrivateTable();
					$.unblockUI();
				},
				error: function (response){
					$.unblockUI();
					displayError(lang["couldnotdooperation"]);
				}
			});
		}
		displayConfirm(lang["suretodelete"]);
		return false;
	});
	// Same for direct and for read only private
	$("#showPersonBtn").click(function (){
		var row = getSelectedRow(oTable);
		if (!row) {
			displayMessage(lang["nomemberselected"], 275, 150);
			return;
		}
		$.ajax({
			type: "POST",
			url: base+"get_value.php",
			dataType: "json",
			data: "name=person&arg="+row[1]+"&arg2="+row[0]+randomizer(),
			success: function(response) {
				if (response) {
					displaySizedFloater("#divMemberDetails");
					fillDetails(response);
				} else {
					displayError(lang["couldnotfindperson"]);
				}
			},
			error: function(response) {
				displayError(lang["couldnotdooperation"]);
			}
		});
	});
	// Initialize button for showing groups in private
	$("#showGroupBtn").click(function (){
		var row = getSelectedRow(oTable);
		if (!row) {
			displayMessage(lang["nomemberselected"], 275, 150);
			return;
		}
		$.ajax({
			type: "POST",
			url: base+"get_value.php",
			dataType: "json",
			data: "name=person&arg="+row[1]+"&arg2="+row[0]+randomizer(),
			success: function(response) {
				if (response) {
					displaySizedFloater("#divReceiptDetails"); // Similar to the real receipt
					fillDetails(response);
				} else {
					displayError(lang["couldnotfindperson"]);
				}
			},
			error: function(response) {
			  displayError(lang["couldnotdooperation"]);
			}
		});
	});
	// Initialize direct approval of registration button
	if (direct) {
		$("#directBtn").click(function (){
			// Need to find a better way to handle two dialogs after eachother. This is not working.
			// So we lose a message.
			//test = 31;
			//if (usedTeamName) {
			//  confirmAction = function() {
			//    teamNameIsOK = true;
			//  }
			//  cancelAction = function() {
			//    teamNameIsOK = false;
			//    $("#teamNameField").focus();
			//  }
			//  displayConfirm(lang["teamnamealreadyused"], 275, 150);
			//  test = 23;
			//}
			//test = teamNameIsOK;
			//if (teamNameIsOK == false) {
			//  return;
			//}
			//test = 43;
			if (oTable.fnSettings().aoData.length == 0) {
				displayMessage(lang["nomembersinlist"], 275, 150);
			} else {
				confirmAction = function() {
					window.location = "invoice_direct.php?language="+language+"&code="+orderCode+randomizer();
				}
				displayConfirm(lang["pleaseassurecorrectness"]);
			}
		});
	}
	// Initialize button for registration approval for displaying invoice
	$("#invoiceBtn").click(function (){
		//if (usedTeamName) {
		//  cancelAction = function() {
		//    $("#teamNameField").focus();
		//  }
		//  displayMessage(lang["teamnamealreadyused"], 275, 150);
		//  return;
		//}
		if (receiptEmail == null || receiptEmail == "") {
			cancelAction = function() {
				// Focus on the receipt email field
				$("#receiptEmailField").focus();
			}
			displayMessage(lang["receiptemailrequired"], 275, 150);
			return;
		}
		if (oTable.fnSettings().aoData.length == 0) {
			displayMessage(lang["nomembersinlist"], 275, 150);
			return;
		} else {
			confirmAction = function() {
				window.location = "invoice.php?language="+language+"&code="+orderCode+"&receiptemail="+receiptEmail+randomizer();
			}
			displayConfirm(lang["pleaseassurecorrectness"], 275, 300);
		}
	});
	// Initialization of various buttons
	$("#receiptDirectBtn").click(function (){
		window.location = "invoice_direct.php?language="+language+"&code="+orderCode+randomizer();
	});
	$("#receiptBtn").click(function (){
		window.location = "invoice.php?language="+language+"&code="+orderCode+randomizer();
	});
	$("#startCardsBtn").click(function (){
		retrieveFileLink("pdf.php", "startcards");
	});
	$("#dinnerCardsBtn").click(function (){
		retrieveFileLink("pdf.php", "dinnercards");
	});
	$("#refreshBtn").click(function (){
		refreshPrivateTable();
	});
	$("#refreshDirectBtn").click(function (){
		refreshDirectTable();
	});
	$("#priceListBtn").click(function (){
		displaySizedFloater("#divPriceList");
	});
	$("#supportBtn").click(function (){
		if (window["orderCode"] == undefined) {
			var oc = "";
		} else {
			var oc = orderCode;
		}
		window.open("contact_"+language+".php?ordercode="+oc+randomizer());
		return false;
	});
	if (direct) {
		if ($("#divPrivateTable").html() != null) {
			$("#helpBtn").click(function (){
				loadTopics();
				return false;
			});
		}
		if ($("#divDirectTable").html() != null) {
			$("#helpBtn").click(function (){
				loadTopics();
				return false;
			});
		}
	} else {
		// help images here, depending on language, so we would want to use a php inclusion
		$("#helpBtn").click(function (){
			loadTopics();
			return false;
		});
	}
	// Other initializations happen here
	$("#loading").hide();
	$("#pagebody").show();
});

var mainLoaded = true;
