﻿/* SETTINGS */
var popupHeight = 600;
var popupWidth = 560;
var popupContactId = "contactPopup";
var popupContactEditUrl = "/Contact/PopupEdit/";
var popupContactCreateUrl = "/Contact/PopupCreate/";
var popupPersonId = "personPopup";
var popupPersonSelectUrl = "/Person/PopupSelect";
var popupPersonCreateUrl = "/Person/PopupCreate";
var popupBevoegdhedenId = "bevoegdhedenPopup";
var popupBevoegdhedenUrl = "/Contact/PopupBevoegdheden/";
var popupDienstId = "dienstPopup";
var popupDienstEditUrl = "/Gemeente/Diensten/PopupEdit/";
var popupDienstCreateUrl = "/Gemeente/Diensten/PopupCreate";
var popupDienstSaveUrl = "/Gemeente/Diensten/Save";
var popupDienstListUrl = "/Gemeente/Diensten/List";
var formatPhoneNumberUrl = "/Format/PhoneNumber?id=";
var autocompletePersonUrl = "/Person/AutoComplete";
var autocompletePartijUrl = "/Partij/AutoComplete";
var autocompleteZipCodeUrl = "/Geo/AutoCompleteZipCode";
var autocompleteCityUrl = "/Geo/AutoCompleteCity";
var managementteamCandidatesUrl = "/Gemeente/ManagementTeam/Candidates";
var managementteamMembersUrl = "/Gemeente/ManagementTeam/Members";
var managementteamUpdateUrl = "/Gemeente/ManagementTeam/UpdateContact";
var managementteamCreateUrl = "/Gemeente/ManagementTeam/CreateContact";

// Ajax Setup

$.ajaxSetup({ cache: false });

/* ***************************************************************************************************************** */
// Common Form Functions

function SetupSelectTextOnFocus() {
	$("input[type=text], input[type=password]").focus(function () {
		// Select field contents
		this.select();
	});
}

function SubmitFormOnEnter(field) {
	$(field).keypress(function (e) {
		var key = e.which ? e.which : e.keyCode;
		if (key == 13) {
			e.preventDefault();

			var form = $(this).parents("form:first");
			if (form.length == 1) {
				form.submit();
			}
		}
	});
}

/* ***************************************************************************************************************** */
// Contact Popup Dialog

function CloseContactDialog(sender) {
	$("#" + popupContactId).dialog('close');
}

function LoadContactPopup(urlToLoad, title, onclose, onopen, height, width) {
	if (!height) height = popupHeight;
	if (!width) width = popupWidth;
	$("#" + popupContactId).load(urlToLoad, function () {
		$("#" + popupContactId).dialog({
			title: title, height: height, width: width, modal: true, draggable: false, resizable: false, closeOnEscape: false, position: 'center',
			close: onclose,
			open: onopen
		});
	});
}

function ContactEditPopup(objectToClick, id, title, height, width) {
	$(objectToClick).click(function () {
		LoadContactPopup(popupContactEditUrl + id, title, null, null, height, width);
	});
}

function ContactCreatePopup(objectToClick, type, title, height, width) {
	$(objectToClick).click(function () {
		LoadContactPopup(popupContactCreateUrl + type, title, null, null, height, width);
	});
}

function SaveContact(sender) {
	var form = $(sender).parents("form:first");

	if (form.length == 0) {
		alert("Error: Form not found.");
		return;
	}

	if (! form.valid()) {
		return;
	}

	$.post("/Contact/Save", form.serialize(),
		function (data) {
			if (data.result) {
				if (typeof (ReloadContact) == "function") ReloadContact(data.model);
				$("#" + popupContactId).dialog('close');
			} else {

				alert("Error: Could not save contact. Please try again.");
			}
		}
	);
}

function SetupVolgordeDropDown(dropdown, hidden) {
	if ($(dropdown).length == 0) {
		alert("Error: Volgorde - dropdown not found");
		return;
	}

	if ($(hidden).length == 0) {
		alert("Error: Volgorde - hidden field not found");
		return;
	}

	//set value
	var volgorde = $(hidden).val();
	$(dropdown).val(volgorde);

	//on change event: change value in hidden field
	$(dropdown).change(function () {
		$(hidden).val($(dropdown).find("option:selected").val());
	});
}

/* ***************************************************************************************************************** */
// Person Popup Dialog

function PersonSelectPopup(objectToClick, createTitle, selectTitle, personIdField, personFirstNameElement, personLastNameElement, personTitleSelect, personMgmtTeam, onclose, height, width) {
	if (!height) height = popupHeight;
	if (!width) width = popupWidth;

	$(objectToClick).click(function () {
		//reset popup data
		$("#" + popupPersonId).data("Person", null);

		//load and show person select popup
		$("#" + popupPersonId).load(popupPersonSelectUrl, function () {
			$("#" + popupPersonId).dialog({
				title: selectTitle, height: height, width: width, modal: true, draggable: false, resizable: false, closeOnEscape: false, stack: true, modal: false,
				close: function () {
					if ($("#" + popupPersonId).data("Person")) {
						//show new person data
						var person = $("#" + popupPersonId).data("Person");

						if (personIdField != null) $(personIdField).val(person.Id);
						if (personFirstNameElement != null) $(personFirstNameElement).text(person.FirstName);
						if (personLastNameElement != null) $(personLastNameElement).text(person.LastName);
						if (personTitleSelect != null) {
							$(personTitleSelect).find("option").removeAttr("selected");
							switch (person.Gender) {
								/*MALE*/ 
								case 1: personTitleSelect.find("option").eq(1).attr("selected", "selected"); break;
								/*FEMALE*/ 
								case 2: personTitleSelect.find("option").eq(2).attr("selected", "selected"); break;
								/*OTHER*/ 
								default: personTitleSelect.find("option:first").attr("selected", "selected"); break;
							}
						}
						if (personMgmtTeam != null) {
							if (person.InManagementTeam)
								$(personMgmtTeam).attr("checked", "checked");
							else
								$(personMgmtTeam).removeAttr("checked");
						}

						if (typeof (ReloadPerson) == "function") ReloadPerson(person);
					}
				}
			});
		});
	});
}

function SavePerson(sender) {
	var form = $(sender).parents("form:first");

	if ($(form).length == 0) {
		alert("Error: Form not found.");
		return;
	}

	var firstname = $(form).find("#FirstName");
	var lastname = $(form).find("#LastName");

	if (firstname.val() == "" && lastname.val() == "") {
		if (!confirm(Resources.PopupPerson.SelectErrorMessage)) {
			return;
		}
	}

	$.post("/Person/Save", $(form).serialize(),
		function (data) {
			if (data.result) {

				var popupContact = $("#" + popupContactId);

				$(popupContact).find("#NewPersonId").val(data.model.Id);
				$(popupContact).find("#PersonFirstName").text(data.model.FirstName || "");
				$(popupContact).find("#PersonLastName").text(data.model.LastName || "");
				$(popupContact).find("#TitleId").val(EmptyGuid);

				if ($(popupContact).find("#Street").val() == "") $(popupContact).find("#Street").val(data.model.Street || "");
				if ($(popupContact).find("#Number").val() == "") $(popupContact).find("#Number").val(data.model.Number || "");
				if ($(popupContact).find("#Bus").val() == "") $(popupContact).find("#Bus").val(data.model.Bus || "");
				if ($(popupContact).find("#Zipcode").val() == "") $(popupContact).find("#Zipcode").val(data.model.Zipcode || "");
				if ($(popupContact).find("#City").val() == "") $(popupContact).find("#City").val(data.model.City || "");
				if ($(popupContact).find("#GeoId").val() == "" || $(popupContact).find("#GeoId").val() == EmptyGuid) $(popupContact).find("#GeoId").val(data.model.GeoId || "");
				if ($(popupContact).find("#Email").val() == "") $(popupContact).find("#Email").val(data.model.Email || "");
				if ($(popupContact).find("#Website").val() == "") $(popupContact).find("#Website").val(data.model.Website || "");
				if ($(popupContact).find("#Phone").val() == "") $(popupContact).find("#Phone").val(data.model.Phone || "");
				if ($(popupContact).find("#Fax").val() == "") $(popupContact).find("#Fax").val(data.model.Fax || "");

				//show message in contact form after creating new person
				$("#EnterProfessionalMessage").show();

				$("#" + popupPersonId).data("Person", data.model);
				$("#" + popupPersonId).dialog('close');
			} else {
				alert("Error: Could not save person. Please try again.");
			}
		}
	);
}

/* ***************************************************************************************************************** */
// AutoComplete

var autoCompletePersonSelection = null;

function SetupAutoCompletePerson(form) {
	if ($(form).length == 0) {
		alert("Error: Form not found.");
		return;
	}

	var autocompleteText = $(form).find("#autocomplete");
	var searchfull = $(form).find("#searchfull");

	if (autocompleteText.length == 0 || searchfull.length == 0) {
		alert("Error: Autocomplete fields not found.");
		return;
	}

	$(autocompleteText).autocomplete({
		minLength: 2,
		source: function (request, response) {
			$.ajax({
				url: autocompletePersonUrl,
				dataType: "json",
				data: { Term: request.term, Full: $(searchfull).is(":checked") },
				success: function (data, textStatus, xhr) {
					response($.map(data.Persons, function (item) {
						return {
							label: item.FullName + (item.Function != '' ? ' (' + item.Function + ')' : ''),
							value: item.FullName,
							data: item
						}
					}));
				},
				error: function (xhr) {
					alert("Error: Unable to get autocomplete values");
				}
			});
		},
		select: function (event, ui) {
			if (ui.item) {
				autoCompletePersonSelection = ui.item.data;
			}
		}
	});
}

var originalPartij;
function SetupAutoCompletePartij(partijField, partijIdField) {
	if ($(partijField).length == 0) {
		alert("Error: Partij field not found.");
		return;
	}

	$(partijField).autocomplete({
		minLength: 2,
		source: function (request, response) {
			$.ajax({
				url: autocompletePartijUrl,
				datatype: "json",
				data: { Term: request.term },
				success: function (data, textStatus, xhr) {
					response($.map(data.Partijen, function(item) {
						return { label: item.Naam, value: item.Naam, data: item }
					}));
				},
				error: function (xhr) {
					alert("Error: Unable to get autocomplete values");
				}
			});
		},
		select: function (event, ui) {
			if (ui.item) {
				originalPartij = ui.item.data.Naam;
				$(partijIdField).val(ui.item.data.Id);
			}
		}

	});

	originalPartij = $(partijField).val();

	$(partijField).blur(function () {
		if ($(partijField).val() == "") {
			originalPartij = "";
			$(partijIdField).val(EmptyGuid);
			return;
		}

		if ($(partijField).val() != originalPartij) {
			$(partijField).val(originalPartij);
			return;
		}
	});
}

var originalZipCode;
var originalCity;
function SetupAutoCompleteZipCodeAndCity(zipCodeField, cityField, geoIdField) {
	if ($(zipCodeField).length == 0) {
		return;
	}
	if ($(cityField).length == 0) {
		return;
	}

	var callerId;
	var autocompleteOptions = {
		minlength: 2,
		source: function (request, response) {
			callerId = this.element[0].id;
			var url = callerId.toLowerCase().indexOf("zipcode") >= 0 ? autocompleteZipCodeUrl : autocompleteCityUrl;
			$.ajax({
				url: url,
				dataType: "json",
				data: { Term: request.term },
				success: function (data, textStatus, xhr) {
					response($.map(data.Locations, function (item) {
						var label = item.ZipCode + " " + item.City;
						var value = callerId.toLowerCase().indexOf("zipcode") >= 0 ? item.ZipCode : item.City;
						return { label: label, value: value, data: item }
					}));
				},
				error: function (xhr) {
					alert("Error: Unable to get autocomplete values");
				}
			});
		},
		select: function (event, ui) {
			if (ui.item) {
				$(geoIdField).val(ui.item.data.Id);

				if (callerId.toLowerCase().indexOf("zipcode") >= 0) {
					$(cityField).val(ui.item.data.City);
				}
				else {
					$(zipCodeField).val(ui.item.data.ZipCode);
				}

				originalCity = ui.item.data.City;
				originalZipCode = ui.item.data.ZipCode;
			}
		}
	}

	$(zipCodeField).autocomplete(autocompleteOptions);
	$(cityField).autocomplete(autocompleteOptions);

	originalZipCode = $(zipCodeField).val();
	originalCity = $(cityField).val();

	$(zipCodeField).blur(function() {
		if($(zipCodeField).val() == "") {            
			$(geoIdField).val(EmptyGuid);
			$(cityField).val("");
			originalZipCode = "";
			originalCity = "";
			return;
		}

		if ($(zipCodeField).val() != originalZipCode) {
			$(zipCodeField).val(originalZipCode);
			return;
		}
	});

	$(cityField).blur(function() {
		if($(cityField).val() == "") {
			$(geoIdField).val(EmptyGuid);
			$(zipCodeField).val("");
			originalZipCode = "";
			originalCity = "";
			return;
		}

		if ($(cityField).val() != originalCity) {
			$(cityField).val(originalCity);
			return;
		}
	});
}

/* ***************************************************************************************************************** */
// Formatting

function SetFormattedPhoneNumber(element) {
	element.blur(function () {
		$.ajax({
			url: formatPhoneNumberUrl + encodeURIComponent(element.val()),
			async: false,
			success: function (data, textStatus, xhr) {                
				element.val(data.replace(/['"]/g, ''));
			},
			error: function (xhr) {
				element.val("");
			}
		});
	});
}
