jQuery(document).ready(function($) {
	/* =============== EDIT DETAILS ============== */
	window.EditDetails = {
		// constructor
		init : function() {
			var canRun = $('body').is('#people');
			if (canRun) {
				window.EditDetails = this;
				this.attachGeneralEditDetailsHandlers();
			}
			return this;
		},

		nextStepConstants : {
			MERGE_WARN_MODAL : "MERGE_WARN_MODAL",
			EDIT_MODAL : "EDIT_MODAL",
			CLOSE_MODAL : "CLOSE"

		},

		email : '',
		resultsData : null,
		showEditDetailsModalForUrl : function(editDetailsUrl) {
			ModalUtils.showModalLoadingProgress();
			ModalUtils.getAjaxJson(editDetailsUrl, function(results) {
				EditDetails.resultsData = results;
				var modalForm = ModalUtils.retrieveHtmlTemplateById("modal-edit");
				/*
				 * setting values and altering form according to received
				 * results
				 */
				modalForm.find("[name=faceboxUuid]").attr("value", results.actionBean.faceboxUuid);
				modalForm.find("[name=imageMD5]").attr("value", results.actionBean.imageMD5);
				modalForm.find("[name=nameeUserId]").attr("value", results.actionBean.nameeUserId);
				modalForm.find("[name=prevnameeUserId]").attr("value", results.actionBean.nameeUserId);
				
				if (results.actionBean.faceboxId) {
					modalForm.find("[name=faceboxId]").attr("value", results.actionBean.faceboxId);
				}
				if (results.actionBean.nameeIdentityId) {
					modalForm.find("[name=nameeIdentityId]").attr("value", results.actionBean.nameeIdentityId);
				}
				var img = modalForm.find(".photo img");
				var imageSrcPrefix = img.attr("_src");
				img.attr("src", imageSrcPrefix + results.actionBean.faceboxUuid);
				modalForm.find("[name=name]").attr("value", results.requestedUser.screenName);
				if (results.actionBean.email) {
					modalForm.find("[name=email]").attr("value", results.actionBean.email).removeClass("default-value");
					EditDetails.email = results.actionBean.email;
				}

				ModalUtils.replaceIdAttributes(modalForm);
				EditDetails.attachModalHandlers(modalForm);
				ModalUtils.createAndResizeModal(modalForm);

				if (results.actionBean.email) {
					$('#add_email_button').hide();
					$('#add_email_button').removeClass('inline');
				} else {
					$('#edit_email_button').hide();
					$('#edit_email_button').removeClass('inline');

				}

				GeneralUtils.autocomplete = new AutoComplete("#modal-edit input#name-field", "#modal-edit #autocompleter", function(result) {
					if (result) {
						modalForm.find("[name=nameeIdentityId]").attr("value", result.defaultIdentityId);
					}
				}, 3, function() {
				}, '#modal-edit', true);

			});
		},

		updateDetailsData : function() {
			var modalForm = $("#modal-data form.modal");
			/*
			 * fetching email value manually as we need to substitute empty
			 * string for the default value here so that it is correctly passed
			 * to server and validating email and name
			 */
			var email = GeneralUtils.autocomplete.getEmail();
			var emailValid = ModalUtils.isEmailValid(email);
			if (!emailValid) {
				GeneralUtils.autocomplete.invalidEmail();
				return false;
			}
			var name = GeneralUtils.autocomplete.getName();
			if (name == null || name == '' || name == 'Unknown Person') {
				GeneralUtils.autocomplete.emptyName();
				return false;
			} else {
				var nameValid = ModalUtils.isNameValid(name);
				if (!nameValid) {
					GeneralUtils.autocomplete.invalidName();
					return false;
				}
			}

			ModalUtils.showModalLoadingProgress();
			ModalUtils.submitModalFormWithAdditionalData(modalForm, function(results) {
				var nextStep = results.nextStep;
				var modalForm = null;
				switch (nextStep) {
				case EditDetails.nextStepConstants.MERGE_WARN_MODAL:
					ModalUtils.deleteModal();
					EditDetails.viewWarning(results);
					break;
				case EditDetails.nextStepConstants.CLOSE_MODAL:
					ModalUtils.deleteModal();
					window.location.reload();
					break;
				}
			}, {});
		},

		viewWarning : function(results) {

			ModalUtils.showModalLoadingProgress();
			var modalForm = ModalUtils.retrieveHtmlTemplateById("modal-edit-merge-warning");
			/*
			 * setting values and altering form according to received results
			 */
			modalForm.find("[name=faceboxUuid]").attr("value", results.actionBean.faceboxUuid);

			modalForm.find("[name=imageMD5]").attr("value", results.actionBean.imageMD5);
			modalForm.find("[name=nameeUserId]").attr("value", results.actionBean.nameeUserId);
			if (results.actionBean.faceboxId) {
				modalForm.find("[name=faceboxId]").attr("value", results.actionBean.faceboxId);
			}
			if (results.actionBean.nameeIdentityId) {
				modalForm.find("[name=nameeIdentityId]").attr("value", results.actionBean.nameeIdentityId);
			}
			var paragraph = modalForm.find("p:first");
			paragraph.text(paragraph.text().replace("__OLD_NAME__", results.oldName));
			paragraph.text(paragraph.text().replace("__NEW_NAME__", results.newName));
			//EditDetails.alterTemplateRespectingEditMode(results, modalForm);

			ModalUtils.replaceIdAttributes(modalForm);
			EditDetails.attachModalHandlers(modalForm);
			ModalUtils.createAndResizeModal(modalForm);

		},

		mergeAndCloseModal : function() {
			var modalForm = $("#modal-data form.modal");
			/* validating email and name */

			ModalUtils.showModalLoadingProgress();
			ModalUtils.submitModalFormWithAdditionalData(modalForm, function(results) {
				ModalUtils.deleteModal();
				window.location.reload();
			}, {});
		},

		attachModalHandlers : function(modalForm) {
			modalForm.filter("#modal-edit").find("input[name=name]").bind("keypress", function(e) {
				if (e.keyCode == 27) {
					/*
					 * escape (not closing with first escape
					 */
					if (EditDetails.autocomplete && EditDetails.autocomplete.isShown()) {
						return false;
					}
				}
			});
			/* focus/blur on name field */
			modalForm.filter("#modal-edit").find("input[name=name]").focus(function() {
				ModalUtils.focusOnInputWithDefaultValue(this, ModalUtils.defaultName);
			}).blur(function() {
				/*
				 * autocomplete shown and tab pressed - choosing selected item
				 */
				if (EditDetails.autocomplete)
					EditDetails.autocomplete.chooseSelectedValue();
				ModalUtils.blurFromInputWithDefaultValue(this, ModalUtils.defaultName);
			});
			/* focus/blur on email field */
			modalForm.filter("#modal-edit").find("input[name=email]").focus(function() {
				ModalUtils.focusOnInputWithDefaultValue(this, ModalUtils.defaultEmail);
			}).blur(function() {
				ModalUtils.blurFromInputWithDefaultValue(this, ModalUtils.defaultEmail);
			}).keypress(function(e) {
				if (e.keyCode == 13) {
					return false;
				}
			});
			/* saving changes */
			modalForm.filter("#modal-edit").find(".control a.button.done").click(function() {
				EditDetails.updateDetailsData();
				return false;
			});
			modalForm.filter("#modal-edit-merge-warning").find(".control a.button.save").click(function() {
				EditDetails.mergeAndCloseModal();
				return false;
			});

			modalForm.filter("#modal-edit").find("#add_email_button").click(function() {
				GeneralUtils.autocomplete.newNameMode = true;
				GeneralUtils.autocomplete.prepareNewNameMode(GeneralUtils.autocomplete, GeneralUtils.autocomplete.autocompleteElement);
				$('#autocompleter').show();
				$('#add_email input').focus();
				$('#add_email_button').hide();
				$('#add_email_button').removeClass('inline');

				return false;
			});
			modalForm.filter("#modal-edit").find("#edit_email_button").click(function() {
				GeneralUtils.autocomplete.newNameMode = true;
				GeneralUtils.autocomplete.prepareNewNameMode(GeneralUtils.autocomplete, GeneralUtils.autocomplete.autocompleteElement);
				$('#autocompleter').show();
				$('#add_email input').focus();
				$('#add_email input').attr('value', EditDetails.email);
				$('#edit_email_button').hide();
				$('#edit_email_button').removeClass('inline');
				
				return false;
			});
			modalForm.filter("#modal-edit").find(".reset").click(function() {

				$('#name-field').attr("value", EditDetails.resultsData.requestedUser.screenName);
				if (EditDetails.email) {
					$("#add_email").attr("value", EditDetails.email).removeClass("default-value");
				}
				
				if (!EditDetails.email || EditDetails.email=='') {
					$('#add_email_button').addClass('inline');
					$('#add_email_button').show();
					
				} else {
					$('#edit_email_button').addClass('inline');
					$('#edit_email_button').show();
				}
				
				
				$('#autocompleter').hide();
				$('#modal-edit-photo-who_is_this .message').removeClass('not_visible');
				$('#add_email').remove();
				$(this).hide();
				return false;
			});
			modalForm.filter("#modal-edit").find("#name-field").keypress(function() {
				$('#add_email_button').hide();
				$('#add_email_button').removeClass('inline');
				$('#edit_email_button').hide();
				$('#edit_email_button').removeClass('inline');
			});
			
		},

		attachGeneralEditDetailsHandlers : function() {
			/* entering edit details modal */
			$('.face_container .function.edit a').click(function() {
				EditDetails.showEditDetailsModalForUrl($(this).attr('href'));
				return false;
			});
		}

	}.init();

})