﻿BenefulMap.ModalLoginForm = BenefulMap.ModalForm.extend({
	init: function(modalTitle, modalElements, modalOptions, snippetPath, params, formElements) {
		this._super( modalTitle, modalElements, modalOptions, snippetPath, params, formElements);
		this.forgotPassword = this.getModalDiv() + " " + modalElements.forgotPasswordLink;
		this.backToLogin =  this.getModalDiv() + " " + modalElements.backToLoginLink;
		this.context = "login";
		this.openListener("login.open");
		this.closeListener("login.close");
		this.modalToOpenOnLogin = null;
	},
	getModalToOpenOnLogin: function() {
		return this.modalToOpenOnLogin;
	},
	setModalToOpenOnLogin: function(newModal) {
		this.modalToOpenOnLogin = newModal;
	},
	getForgotPassword: function() {
		return this.forgotPassword;
	},
	setForgotPassword: function(forgotPassword) {
		this.forgotPassword = forgotPassword;
	},
	getBackToLogin: function() {
		return this.backToLogin;
	},
	setBackToLogin: function(newBackToLogin) {
		this.backToLogin = newBackToLogin;
	},
	getContext: function() {
		return this.context;
	},
	setContext: function(context) {
		this.context = context;
	},
	serializeFormData: function() {
		var self = this;
		var serializedData = $(this.getFieldsToSerialize()).serializeArray();
		jQuery.each(serializedData, function() {
			if (this.name == "Remember") {
				self.setIndividualFormData(this.name, true);
			} else {
				self.setIndividualFormData(this.name, this.value);
			}
		});
		if ( !this.getIndividualFormData('Remember')) {
			this.setIndividualFormData('Remember', false);
		}
		console.log("Form data: ", this.getFormData());
	},
	addModalListeners: function() {
		var self = this;
		this._super();
		this.forgotPasswordListener();
		this.backToLoginListener();
		$(this.getModalDiv() + " .register").click(function(event) {
			event.preventDefault();
			$(document).trigger("registration.open");
			self.close();
		});
	},
	forgotPasswordListener: function() {
		var self = this;
		$(this.getForgotPassword()).click( function(event) {
			event.preventDefault();
			var params = {
				ph: 2
			};
			self.setParams(params);
			self.setTitle("Forgot Password?");
			self.setContext("forgot");
			self.populate();
		});
	},
	backToLoginListener: function() {
		var self = this;
		$(this.getBackToLogin()).click( function(event) {
			event.preventDefault();
			var params = {
				ph: 1
			};
			self.setParams(params);
			self.setTitle("Login");
			self.populate();
		});
	},
	submitFormData: function() {
		var self = this;
		if (this.getContext() == 'login') {
			WagWorld.Web.AjaxUtility.LogUserIn(this.getIndividualFormData('EmailAddress'), this.getIndividualFormData('Password'), this.getIndividualFormData('Remember'), function(result) {
				console.log("Result: ", result);
				var pass = result.value.Pass;
				var reason = result.value.Reason;
				var auxNum = result.value.AuxiliaryNumber;
				if (pass == true) {
					console.info("Login successful");
					self.close();
					window.location.hash = self.getModalToOpenOnLogin();
					window.location.reload();	
				} else {
					if (reason == "NoAccount" || auxNum == 1 || reason == 9) {
						self.close();
						$(document).trigger("registration.open", []);
					} else {
						var params = {};
						params.ph = 1;
						params.message = result.value.Reason;
						self.setParams(params);
						self.populate();
					}
				}
			});
		} else if (this.getContext() == "forgot") {
			var email = this.getIndividualFormData('EmailAddress');
			WagWorld.Web.AjaxUtility.SendForgottenPassword(email, function(result) {
				console.log(result);
				var params = {
					ph: 3
				};
				self.setParams(params);
				self.setTitle("Password Sent");
				self.setContext("sent");
				self.populate();
			});
		}
	},
	openListener: function(eventName) {
		var self = this;
		$(document).bind(eventName, function(event, slug, message) {
			console.log("slug:", slug, "message:", message);
			if (slug) {
				self.setModalToOpenOnLogin(slug);
			}
			
			if (message) {
				var params = {};
				params.ph = 1;
				params.message = message;
				self.setParams(params);
			}
			
			self.open();
		});
	},
	revertToInitialState: function() {
		this._super();
		this.setContext("login");
	}
});



