$(document).ready(function() {
  xeko.drawers.items.loginDrawer = { "id": "loginDrawer", "closed": "-700px", "open": "0px", "onopenevent": "logindraweropen" };
  $("#loginLogin").click(function(e) {
    e.preventDefault();
    xeko.widgets.logIn.submit();
  });

  xeko.events.notify("xeko.widgets.logIn.defaultFocus", "logindraweropen");

  $("#loginRegister").click(function(e) {
    e.preventDefault();
    xeko.drawers.closeDrawers();
    xeko.drawers.slideDrawer("registerDrawer");
  });

  $("img.loginClose").click(function(e) {
    e.preventDefault();
    xeko.drawers.slideDrawer("loginDrawer", true);
    // Reset drawer
    xeko.widgets.logIn.resetLogin();
  });

  $("#forgotPasswordLink").click(function(e) {
    e.preventDefault();
    xeko.widgets.logIn.showForgotPassword();
  });

  $("#loginForgotPasswordSubmit").click(function(e) {
    e.preventDefault();
    xeko.widgets.logIn.forgotPasswordSubmitEmail();
  });

  $("#loginForgotPasswordCancel").click(function(e) {
    e.preventDefault();
    xeko.widgets.logIn.hideForgotPassword();
  });

  $("#loginPromptLogin").click(function(e) {
    e.preventDefault();
    xeko.drawers.closeDrawers();
    xeko.drawers.slideDrawer("loginDrawer");
    xeko.widgets.logIn.hidePrompt();
  });

  $("#loginPromptRegister").click(function(e) {
    e.preventDefault();
    xeko.drawers.closeDrawers();
    xeko.drawers.slideDrawer("registerDrawer");
    xeko.widgets.logIn.hidePrompt();
  });

  $("#loginPromptCancel").click(function(e) {
    e.preventDefault();
    xeko.widgets.logIn.hidePrompt();
  });
});

xeko.widgets.logIn = {
	"submit": function() {
		var agentId = $("#loginAgentId").val();
		var password = $("#loginPassword").val();
		var rememberMe = $("#loginRememberMe").is(":checked") ? "remember" : "";
		if (agentId == "" || password == "") {
			this.throwError(xeko.messaging.alert.LOGIN_INCORRECT);
		}
		else {
			this.credentialCheck(agentId, password, rememberMe);
		}
	},
	"credentialCheck": function(agentid, password, rememberme) {
		$.ajax
		({
			"type": "POST",
			"url": "/widgets/widget.LogIn.handler.php",
			"data": "agentid=" + agentid + "&password=" + password + "&rememberme=" + rememberme,
			"beforeSend": function() { xeko.lightbox.show(xeko.strings.LOADING, true, "Login") },
			"complete": function() { xeko.lightbox.hide("Login"); },
			"success": function(response) {
				var authed = $("success", response).text();

				if (authed == "true") {
					flashObj = document.getElementById("headerflash");
					flashObj.passLoginFromJS();
					xeko.drawers.closeDrawers();
					xeko.widgets.logIn.updateUser();
				}
				else if (authed == "notapproved") {
					xeko.widgets.logIn.showNotApproved();
				}
				else if (authed == "false") {
					xeko.widgets.logIn.throwError(xeko.messaging.alert.LOGIN_INCORRECT);
				}
				else {
					xeko.widgets.logIn.throwError(xeko.messaging.error.UNEXPECTED_ERROR); ;
				}
			},
			"error": function(response) {
				xeko.widgets.logIn.throwError(xeko.messaging.error.UNEXPECTED_ERROR);
			}
		});
	},
	"updateUser": function() {
		$.ajax({ "type": "GET", "dataType": "json", "url": "/widgets/widget.AgentInfo.handler.php?request=agentjson",
			success: function(response) {
				xeko.agentinfo = response;
				xeko.events.trigger("login");
				xeko.debug.trace("login event triggered.");
			},
			error: function(xmlHttpRequest, status, err) {
				//alert('Error setting JSON');
			}
		});
	},
	"forgotPasswordSubmitEmail": function() {
		var email = $("#loginEmailAddress").val();

		$("#forgotError").hide();

		if ($("input[name='agentIdRadio']:checked").length == 1) {
			// More than one agent for this email address
			var agentGuid = $("input[name='agentIdRadio']:checked").val();
			var parentGuid = "";

			// Need to split Guids if this is an agentparent item
			if (agentGuid.indexOf("|") > -1) {
				parentGuid = agentGuid.substring(agentGuid.indexOf("|") + 1);
				agentGuid = agentGuid.substr(0, agentGuid.indexOf("|"));
			}

			xeko.widgets.logIn.forgotPasswordSendEmail(agentGuid, parentGuid);
		}
		else if ($("input[name='agentIdRadio']").length > 0) {
			// Agent list is shown, but no agent selected
			$("#forgotError").text(xeko.messaging.alert.LOGIN_FORGOT_SELECT_AGENT).show();
		}
		else if (email.length == 0) {
			// Email address is blank
			$("#forgotError").text(xeko.messaging.alert.LOGIN_FORGOT_ENTER_EMAIL).show();
		}
		else if (!xeko.validation.validateEmail(email)) {
			// Invalid Email address format
			$("#forgotError").text(xeko.messaging.alert.LOGIN_FORGOT_EMAIL_INVALID).show();
		}
		else {
			// Lookup agent by email
			$.ajax({
				"type": "GET",
				"url": "/widgets/widget.AgentInfo.handler.php?request=agentlookupbyemail",
				"data": { "agentemail": email },
				"beforeSend": function() { xeko.lightbox.show(xeko.strings.LOADING, true, "Login") },
				"complete": function() { xeko.lightbox.hide("Login"); },
				"success": function(xml) {
					var $agents = $("agents", xml);
					var $agentparents = $("agentparents", xml);
					var agentCount = $("agent", $agents).size() + $("agent", $agentparents).size();
					if (agentCount > 0) {
						if (agentCount == 1) {
							// One agent
							var agentGuid, parentGuid;

							if ($("agent", $agents).length > 0) {
								agentGuid = $("agent", $agents).attr("id");
							}

							if ($("agent", $agentparents).length > 0) {
								agentGuid = $("agent", $agentparents).attr("id");
								parentGuid = $("parent", $agentparents).attr("id");
							}

							// Send email
							xeko.widgets.logIn.forgotPasswordSendEmail(agentGuid, parentGuid);
						}
						else {
							// Multiple agents
							var count = 0;
							var userids = "<"; // used as a delimiter because it will not appear in a userid

							// Look up parent emails first
							// Parent email is also stored as the agent email for some reason and we need to suppress duplicates
							$("agentparent", $agentparents).each(function() {
								if (count < 10) {
									var agentGuid = $("agent", this).attr("id");
									var parentGuid = $("parent", this).attr("id");
									var userId = $("agent>userid", this).text();
									var isApproved = ($("agent>isparentapproved", this).text() == "1");
									if (isApproved && userId.length > 0 && userids.indexOf("<" + userId + "<") == -1) {
										var html = "<div><input type='radio' name='agentIdRadio' id='agentId" + agentGuid + "' value='" + agentGuid + "|" + parentGuid + "'/><label for='agentId" + agentGuid + "'>" + userId + "</label></div>";
										$("#selectAgent .radioList").append(html);
										userids += userId + "<";
										count++;
									}
								}
							});

							$("agent", $agents).each(function() {
								if (count < 10) {
									var guid = $(this).attr("id");
									var userId = $("userid", this).text();
									if (userids.indexOf("<" + userId + "<") == -1) {
										var html = "<div><input type='radio' name='agentIdRadio' id='agentId" + guid + "' value='" + guid + "'/><label for='agentId" + guid + "'>" + userId + "</label></div>";
										$("#selectAgent .radioList").append(html);
										userids += userId + "<";
										count++;
									}
								}
							});

							$("#forgotEmailLabel").hide();
							$("#forgotEmailInput").hide();
							$("#forgotIntro").hide();
							$("#emailNotFound").hide();
							$("#selectAgent").show();
						}
					}
					else {
						// No agents
						$("#emailNotFound").show();
					}
				}
			});
		}
	},
	"forgotPasswordSendEmail": function(agentGuid, parentGuid) {
		// Lookup agent by email
		$.ajax({
			"type": "GET",
			"url": "/widgets/widget.AgentInfo.handler.php",
			"data": { "agentguid": agentGuid, "parentguid": parentGuid, "request": "agentforgotpassword" },
			"beforeSend": function() { xeko.lightbox.show(xeko.strings.LOADING, true, "Login") },
			"complete": function() { xeko.lightbox.hide("Login"); },
			"success": function(xml) {
				if (xml != null) {
					$("#forgotError").html(xeko.messaging.alert.LOGIN_FORGOT_EMAIL_PASSWORD_SENT).show();
					$("#forgotEmailForm").hide();
					$("#forgotIntro").hide();
				}
				else {
					$("#forgotError").html(xeko.messaging.error.UNEXPECTED_ERROR).show();
				}
			},
			"error": function(response) {
				$("#forgotError").html(xeko.messaging.error.UNEXPECTED_ERROR).show();
			}
		});
	},
	"resetLogin": function() {
		$("div#loginform").show();
		$("div#loginparent").hide();
		$("div#loginForgotPassword").hide();
		$("#forgotError").hide();
		$("#forgotEmailForm").show();
		$("#forgotIntro").show();
		$("#loginDrawer input").val("");
	},
	"showPrompt": function(msg) {
		if (msg) $("#loginPromptMessage").text(msg);
		else $("#loginPromptMessage").text(xeko.messaging.alert.GENERIC_LOGIN_REQUIRED);

		$("#loginPrompt").fadeIn("fast");
	},
	"hidePrompt": function() {
		$("#loginPrompt").fadeOut("fast");
	},
	"throwError": function(msg) {
		$("div#loginDrawer #loginError").text(msg).show();
	},
	"hideError": function() {
		$("div#loginDrawer p.error").hide();
	},
	"onSuccess": null,
	"showForgotPassword": function() {
		$("#forgotError").hide();
		$("div#loginform").hide();
		$("div#loginForgotPassword").show();
	},
	"hideForgotPassword": function() {
		$("div.radioList").empty();
		$("#forgotEmailLabel").show();
		$("#forgotEmailInput").show();
		$("#forgotIntro").show();
		$("#emailNotFound").hide();
		$("#selectAgent").hide();
		$("div#loginForgotPassword").hide();
		$("div#loginform").show();
	},
	"defaultFocus": function() {
		xeko.debug.trace("defaultfocusfire");
		$("input#loginAgentId").focus();
	},
	"showNotApproved": function() {
		xeko.debug.trace("not approved");
		$("div#loginform").hide();
		$("div#loginparent").show();
	}
};
