jQuery(document).ready(function($) {
	var canRun = $('body').is('#settings');
	if (canRun) {
		// =============== SETTINGS PAGE ==============
		window.Settings = {
			// constructor
			init : function() {
				window.Settings = this; // needed for initialization
				this.attachSettingsHandlers();
				this.setInitialPhotosPrefs();
				return this;
			},

			settingsChanged : false,
			initialPhotoPrefs : 'none',
			initialTagsValue : '',

			markSettingsAsChanged : function() {
				Settings.settingsChanged = true;
			},

			setInitialPhotosPrefs : function() {
				if ($('#settings #chose_with_tag').is('.selected')) {
					this.initialPhotoPrefs = 'tags';
					this.initialTagsValue = $('#settings #tags input').attr('value');
				}
				if ($('#settings #chose_public_and_private').is('.selected')) {
					this.initialPhotoPrefs = 'publicAndPrivate';
				}
				if ($('#settings #chose_public').is('.selected')) {
					this.initialPhotoPrefs = 'public';
				}
			},

			watchInputForValueChanges : function(input, valueChangedCallback) {
				input = $(input);
				input.focus(function() {
					input.attr("__initial_value", input.val());
				}).blur(function() {
					var initialValue = input.attr("__initial_value");
					if (initialValue != input.val())
						valueChangedCallback();
				});
			},

			attachSettingsHandlers : function() {
				/*
				 * If any error messages are present - marking settigs as
				 * changed
				 */
				if ($("#settings div.error").length > 0)
					Settings.markSettingsAsChanged();

				/*
				 * Check if trying to leave unsaved settings page and act
				 * accordingly
				 */
				$('#settings #settings_form a.leavepage').click(function() {
					var url = $(this).attr("_href");
					if (Settings.settingsChanged) {
						UnsavedSettings.showUnsavedModalForDestinationUrl(url);
						return false;
					}
					/* settings did not change - going to _href destination */
					$(this).attr("href", url);
				});

				/* Settings page, Sign up pages (account, flickr) */
				$('#snow form .control a.save:not(.close,.cancel)').bind('click', function() {
					var form = $(this).parents('form');
					if (ModalUtils.isModalForm(form)) {
						return false;
					}

					form.submit();
					return false;
				});
				$('#settings #sky a:not(#user_area .signout a), #settings #overview a:not(.batch), #settings #footer a:not(.teal)').click(function() {

					var url = $(this).attr("href");
					if (Settings.settingsChanged) {
						UnsavedSettings.showUnsavedModalForDestinationUrl(url);
						return false;
					}
					/* settings did not change - going to _href destination */
					$(this).attr("href", url);
				});

				/* Watching for changes in email and name fields */
				this.watchInputForValueChanges($("#settings_form input#realname"), function() {
					Settings.markSettingsAsChanged();
				});
				this.watchInputForValueChanges($("#settings_form input#email"), function() {
					Settings.markSettingsAsChanged();
				});

				/* Show flickr tags if chosen */
				if ($('#settings div#snow form #with_tag').hasClass('selected')) {
					$('#settings div#snow form #chose_with_tag').addClass('selected');
					$('#settings div#snow form #tags').show();
				}

				/* Show/hide title and fieldset on click */
				$('#settings div#snow form h3 a:not(.leavepage)').click(function() {
					$(this).toggleClass('active').parent().toggleClass('active').next().toggleClass('show');
					return false;
				});

				/*
				 * In "change your flickr preferences"... open account type
				 * settings.
				 */
				$('#settings div#snow form a.change1').click(function() {
					$('#settings div#snow form h3:first a:not(.active)').trigger('click');
					return false;
				});

				/* Flickr settings *//* Signup 2 - flickr */
				/*
				 * Clear tags input field if chose public or public and private
				 * is chosen.
				 */
				$('div#snow form #chose_public_and_private, div#snow form #chose_public').click(function() {
					$('div#snow form #tags input').val('');
				});

				// *Check for error messages on settings page*/
			$("#settings div.error").parents('fieldset').prev("h3").children('a').click();

			/* Background image */
			$('#settings div#snow form .fieldcontainer input#background').bind("mouseenter mouseleave", function() {
				$(this).siblings('a.button.background').toggleClass('hover');
			});
			$('#settings div#snow form .fieldcontainer a.button.background').click(function() {
				$('#settings div#snow form .fieldcontainer input#background').trigger('click');
				return false;
			});
			$('#settings div#snow form .fieldcontainer a.restore').click(function() {
				$('#settings div#snow form .fieldcontainer input#hasBackground').val('false');
				$('#settings div#snow form .fieldcontainer input#background').val('');
				$('#settings div#snow form .fieldcontainer div#background-holder').html('');
				return false;
			});

			$('#settings .save_settings').click(function() {
				if (Settings.settingsChanged) {
					/*
					 * settings has changed, we have to check whether there are
					 * changes in photo prefs. 1. private->tag 2. public->tag 3.
					 * tag->tag
					 */
					var photoPrefsChangeMightDeletePhotos = false;
					if ($('#settings #chose_with_tag').is('.selected')) {
						if (Settings.initialTagsValue != $('#settings #tags input').attr('value')) {
							photoPrefsChangeMightDeletePhotos = true;
						}
					}
					/*
					 * 4. tag->public 5. private->public
					 */
					if ($('#settings #chose_public').is('.selected') && (Settings.initialPhotoPrefs == 'tags' || Settings.initialPhotoPrefs == 'publicAndPrivate')) {
						photoPrefsChangeMightDeletePhotos = true;
					}
				}

				if (photoPrefsChangeMightDeletePhotos) {
					DeletePhotoWarning.showModal();
				} else {
					$('#settings form').submit();
				}
				return false;
			});

			$('#settings .unnamed_settings').click(function() {
				var url = $(this).attr("_href");
				if (Settings.settingsChanged) {
					UnsavedSettings.showUnsavedModalForDestinationUrl(null, function() {
						Naming.nameWasAdded = false;
						Naming.startBatchnamingProcessIterationWithUrl(Naming.generalBatchnamingUrl);
					});
					return false;
				} else {
					Naming.nameWasAdded = false;
					Naming.startBatchnamingProcessIterationWithUrl(Naming.generalBatchnamingUrl);
					return false;
				}
			});

			$('#settings div#snow form .fieldcontainer input#background').bind("change", function() {
				var val = $(this).val() || null;
				if (val && val.match(/(\.jpg)|(\.jpeg)|(\.gif)|(\.png)$/i)) {
					$('#settings div#snow form .fieldcontainer div#background-holder').html('<em title="' + val + '">' + val + '</em>').truncate( {
						max_length : 40,
						more : '&hellip;'
					});
					$('#settings div#snow form .fieldcontainer input#hasBackground').val('true');
					if ($(this).parent('.fieldcontainer').next().is('div.error')) {
						$('#settings div#snow form .fieldcontainer').next('div.error').remove();
					}
					;
				} else {
					if (!$(this).parent('.fieldcontainer').next().is('div.error')) {
						$(this).parent('.fieldcontainer').after('<div class="error">Please choose an image file</div>');
					}
					;

				}
				Settings.markSettingsAsChanged();
			});

			/* Edit your email address, email list */
			$('#settings div#snow form #scrollable_area li .address').truncate( {
				max_length : 44,
				more : '&hellip;'
			});
			if ($('#settings div#snow form #scrollable_area li').length > 3) {
				$('#settings div#snow form #scrollable_area').addClass('scroll');
			}
			$('#settings div#snow form #scrollable_area li:last').addClass('last');
		}
		}.init();

		/* =============== UNSAVED SETTINGS ============== */
		window.UnsavedSettings = {
			// constructor
			init : function() {

				window.UnsavedSettings = this;
				return this;

			},
			destinationUrl : null,
			callbackFunction : null,
			saveButtonSelector : "#settings_form #settings_form_submit",

			showUnsavedModalForDestinationUrl : function(destinationUrl, callbackFunction) {
				UnsavedSettings.destinationUrl = destinationUrl;
				UnsavedSettings.callbackFunction = callbackFunction;
				var modalForm = ModalUtils.retrieveHtmlTemplateById("unsaved");
				ModalUtils.replaceIdAttributes(modalForm);
				UnsavedSettings.attachModalHandlers(modalForm);
				ModalUtils.createAndResizeModal(modalForm);
			},
			attachModalHandlers : function(modalForm) {
				modalForm.find(".control .save").click(function() {
					$(UnsavedSettings.saveButtonSelector).click();
					return false;
				});
				modalForm.find(".control .continue").click(function() {
					Settings.settingsChanged = false;
					if (UnsavedSettings.destinationUrl) {
						window.location.href = UnsavedSettings.destinationUrl;
					} else if (UnsavedSettings.callbackFunction) {
						UnsavedSettings.callbackFunction();
					}
					return false;
				});
			}

		}.init();

		/* =============== WARNING ON SETTINGS PAGE WHEN PHOTO PREFS HAS CHANGED */

		window.DeletePhotoWarning = {
			/* constructor */
			init : function() {
				return this;
			},
			saveButtonSelector : "#settings_form #settings_form_submit",

			showModal : function() {
				var modalForm = ModalUtils.retrieveHtmlTemplateById("modal-change-photo-settings");
				ModalUtils.replaceIdAttributes(modalForm);
				ModalUtils.createAndResizeModal(modalForm);
				this.attachModalHandlers(modalForm);
			},
			attachModalHandlers : function(modalForm) {
				modalForm.find(".control .save").click(function() {
					$('#settings form').submit();
					return false;
				});
				modalForm.find(".control .close").click(function() {
					ModalUtils.deleteModal();
					return false;
				});
			}
		}.init();
	}
});