/*jslint         browser : true, continue : true,
  devel  : true, indent  : 2,    maxerr   : 50,
  newcap : true, nomen   : true, plusplus : true,
  regexp : true, sloppy  : true, vars     : false,
  white  : true
*/

/*global $, app */

app.rfsettings = (function() {
  "use strict";
  //---------------- BEGIN MODULE SCOPE VARIABLES --------------
  var stateMap = {},
    configModule,
    onChangePassword,
    initModule;
  //----------------- END MODULE SCOPE VARIABLES ---------------

  //------------------- BEGIN UTILITY METHODS ------------------
  //-------------------- END UTILITY METHODS -------------------

  //------------------- BEGIN EVENT HANDLERS -------------------

  ///////////////////////////////
  //ONUPDATE
  //
  onChangePassword = function(event) {
    event.preventDefault();
    $.gevent.publish("app-clear-error");
    //get form data
    var formData = $("form").serializeArray({
      checkboxesAsBools: true
    });

    var submitData = app.utilB.objectifyFormDataArray(formData);

    app.api.create(
      "user/" + app.shell.stateMap.user.id + "/changepassword",
      submitData,
      function(res) {
        if (res.error) {
          $.gevent.publish("app-show-error", res.msg);
        } else {
          page("#!/logout");
        }
      }
    );

    return false; //prevent default?
  };
  //-------------------- END EVENT HANDLERS --------------------

  //------------------- BEGIN PUBLIC METHODS -------------------
  //CONFIGMODULE
  //
  configModule = function(context) {
    stateMap.context = context.context;
    if (stateMap.context.params.id) {
      stateMap.id = stateMap.context.params.id;
    }
  };

  //INITMODULE
  //
  initModule = function($container) {
    if (typeof $container === "undefined") {
      $container = $("#app-shell-main-content");
    }
    $container.html(Handlebars.templates["app.rfsettings"]({}));

    // bind actions
    $("#btn-change-password").bind("click", onChangePassword);

    //Context menu
    app.nav.contextClear();

    app.api.get("meta/server_version/", function(res) {
      if (res.error) {
        $.gevent.publish("app-show-error", res.msg);
      } else {
        $("#about").append(
          "<p>Rockfish client version: " +
            app.api.RockFishVersion +
            "</p><p>Rockfish server version: " +
            res.server_version +
            "</p>"
        );
      }
    });

    ////app.nav.setContextTitle("Search");
  };

  //PUBLIC METHODS
  //
  return {
    configModule: configModule,
    initModule: initModule
  };
  //------------------- END PUBLIC METHODS ---------------------
})();
