$(document).ready(function() {
  initLoginFormBtn();
  initLoginForm();
  initRegistrationFormBtn();
  initRegistrationForm();
  initForgotBtn();
  initForgotForm();
  initPasswordChangeBtn();
  initPasswordChangeForm();
});

var initRegistrationFormBtn = function() {

  $("#btn_form_register").click(function() {
    $("#form_login").hide();
    $("#form_register").toggle();
    $("#register_username").focus();
    return false;
  });

}

//

var initRegistrationForm = function() {

  logg("initRegistrationForm()");

  $("#form_register").submit(function() {

    var username = $("#register_username").val();
    var email = $("#register_email").val();
    var password = $("#register_password").val();
    var passwordConfirm = $("#register_password_confirm").is("input")
        ? $("#register_password_confirm").val()
        : "";

    $(this).find(".field_error").text("");

    var requestData =
      "register_username=" + username +
      "&register_email=" + email +
      "&register_password=" + password +
      "&register_password_confirm=" + passwordConfirm;

    if ($("#register_sex").is("select")) {
      var sex = $("#register_sex>option:selected").eq(0).val();
      requestData += "&register_sex=" + sex;
    }

    // TODO verify

    var requestType = "POST";
    var requestUrl = CONTEXT_PATH + "x/register/";

    //

    led.on();

    $.ajax({
      type: requestType,
      url: requestUrl,
      data: requestData,
      dataType: "json",
      success: registrationResponse // ie7 wont' understand a comma here
    });

    return false;

  });

}

var registrationResponse = function(response) {
  led.off();
  if (response.status != "okay") {
    for (error in response.errors) {
      $("#" + error).next().text(response.errors[error]);
    }
  } else {
    $("#form_register").hide();
    //alert("registration successful, log in now");
    loginOkay(response);
  }
}


var initLoginFormBtn = function() {

  $("#btn_form_login").click(function() {
    $("#form_register").hide();
    $("#form_login").toggle();
    $("#form_forgot").hide();
    $("#login_username").focus();
    return false;
  });

}

var initLoginForm = function() {

  logg("initLoginForm()");

  $("#form_login").submit(function() {

    // different methods to log in: username, email, or either:

    var login_param = "login_username";
    var login_value = "";
    if ($("#login_username").is("input")) {
      login_value = $("#login_username").val();
    } else {
      login_param = "login_email";
      if ($("#login_email").is("input")) {
        login_value = $("#login_email").val();
      } else {
        login_param = "login";
        if ($("#login").is("input")) {
          login_value = $("#login").val();
        } else {
          logg("FAILED to init login form: no login field found");
          return;
        }
      }
    }

    var password = $("#login_password").val();

    $(this).find(".field_error").text("");

    var requestData =
      login_param + "=" + login_value +
      "&login_password=" + password;

    // TODO verify

    var requestType = "POST";
    var requestUrl =
      CONTEXT_PATH +
      "x/login/";

    led.on();

    $.ajax({
      type: requestType,
      url: requestUrl,
      data: requestData,
      dataType: "json",
      success: loginResponse,
      error: function() {
        led.off();
        logg("FAILED to log in due to server error");
      }
    });

    return false;

  });

}

var loginResponse = function(response) {

  led.off();

  if (response.status != "okay") {

    for (error in response.errors) {
      $("#" + error).next().text(response.errors[error]);
    }

    if (response.errors.login_form) {
      alert(response.errors.login_form);
    }

  } else {
    //alert("login okay");
    loginOkay(response);
  }
}

var initForgotBtn = function() {
  $("#btn_forgot").click(function() {
    $("#form_forgot").toggle();
  });
}

var initForgotForm = function() {
  $("#form_forgot").submit(function() {


    var email = $("#forgot_email").val();

    $(this).find(".field_error").text("");

    var requestData =
      "forgot_email=" + email;

    var requestType = "POST";
    var requestUrl =
      CONTEXT_PATH +
      "x/reset/";

    led.on();

    $.ajax({
      type: requestType,
      url: requestUrl,
      data: requestData,
      dataType: "json",
      success: forgotResponse
    });


    return false;
  });
}

var forgotResponse = function(response) {

  led.off();

  if (response.status != "okay") {

    for (error in response.errors) {
      $("#" + error).next().text(response.errors[error]);
    }

    if (response.errors.login_form) {
      alert(response.errors.login_form);
    }

  } else {
    $("#forgot_email").next().text(response.message);

  }
}

var initPasswordChangeBtn = function() {
  logg("initPasswordChangeBtn()");
  $("#btn_password_change").click(function() {
    logg("toggling password change btn");
    $("#form_password_change").toggle();
    $("#password_current").focus();
  });
};

var initPasswordChangeForm = function() {

  logg("initPasswordChangeForm()");
  
  $("#form_password_change").submit(function() {

    var p_current = $("#password_current").val();
    var p_new = $("#password_new").val();
    var p_confirm = $("#password_confirm").val();

    $(this).find(".field_error").text("");

    var requestData =
      "password_current=" + p_current +
      "&password_new=" + p_new +
      "&password_confirm=" + p_confirm;

    var requestType = "POST";
    var requestUrl =
      CONTEXT_PATH +
      "x/password_change/";

    led.on();

    $.ajax({
      type: requestType,
      url: requestUrl,
      data: requestData,
      dataType: "json",
      success: passwordChangeResponse
    });

    return false;
  });
};

var passwordChangeResponse = function(response) {

  led.off();

  if (response.status != "okay") {
    for (error in response.errors) {
      $("#" + error).next().text(response.errors[error]);
    }

  } else {
    $("#password_current").next().text(response.message);
    $("#password_current").val("");
    $("#password_new").val("");
    $("#password_confirm").val("");
  }
};

var hideLoginForm = function() {
  $("#form_login").hide();
  $("#login_username").val("");
  $("#login_password").val("");
  // hiding feedback messages if present
  $("#login_username").next().text("");
  $("#login_password").next().text("");
}

var hideRegisterForm = function() {
  $("#form_register").hide();
  $("#register_username").val("");
  $("#register_email").val("");
  $("#register_password").val("");
  $("#register_password_confirm").val("");
  // hiding feedback messages if present
  $("#regsiter_username").next().text("");
  $("#regsiter_email").next().text("");
  $("#regsiter_password").next().text("");
  $("#regsiter_password_confirm").next().text("");
}

var hideForgotForm = function() {
  $("#form_forgot").hide();
  $("#forgot_email").val("");
  // hiding feedback messages if present
  $("#forgot_email").next().text("");
}

var hidePasswordChangeForm = function() {
  logg("hidePasswordChangeForm()");
  $("#form_password_change").hide();
  $("#password_current").val("");
  $("#password_new").val("");
  $("#password_confirm").val("");
  // hiding feedback messages if present
  $("#password_current").next().text("");
  $("#password_new").next().text("");
  $("#password_confirm").next().text("");
}

