/*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.trialEdit = (function () {
  "use strict";
  //---------------- BEGIN MODULE SCOPE VARIABLES --------------
  var stateMap = {},
    onApprove,
    onReject,
    onDelete,
    configModule,
    initModule;
  //----------------- END MODULE SCOPE VARIABLES ---------------

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

  //ONAPPROVE
  //
  onApprove = function (event) {
    event.preventDefault();
    $.gevent.publish("app-clear-error");

    app.api.postAction("trial/approve/" + stateMap.id, function (res) {
      if (res.error) {
        $.gevent.publish("app-show-error", res.msg);
      } else {
        app.utilB.formData(res);
      }
    });

    return false; //prevent default?
  };

  //ONREJECT
  //
  onReject = function (event) {
    event.preventDefault();
    $.gevent.publish("app-clear-error");

    var reason = $("#rejectReason").val();
    if (reason) {
      reason = "?rejectReason=" + reason;
    }
    var r = confirm("Are you sure you want to reject this request?");
    if (r == true) {
      app.api.postAction("trial/reject/" + stateMap.id + reason, function (
        res
      ) {
        if (res.error) {
          $.gevent.publish("app-show-error", res.msg);
        } else {
          app.utilB.formData(res);
        }
      });
    } else {
      return false;
    }

    return false; //prevent default?
  };

  //ONDELETE
  //
  onDelete = function (event) {
    event.preventDefault();
    $.gevent.publish("app-clear-error");
    var r = confirm("Are you sure you want to delete this record?");
    if (r == true) {
      app.api.remove("trial/" + stateMap.id, function (res) {
        if (res.error) {
          $.gevent.publish("app-show-error", res.msg);
        } else {
          page("#!/trials");
          return false;
        }
      });
    } else {
      return false;
    }
    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.trialEdit"]({}));

    document.title = "trial ";

    //fetch existing record
    app.api.get("trial/" + stateMap.id, function (res) {
      if (res.error) {
        $.gevent.publish("app-show-error", res.msg);
      } else {
        //fill out form
        app.utilB.formData(res);
      }
    });
    //Context menu
    app.nav.contextClear();
    app.nav.contextAddLink("trials/", "List", "");

    // bind actions
    $("#btn-reject").bind("click", onReject);
    $("#btn-approve").bind("click", onApprove);
    $("#btn-delete").bind("click", onDelete);
  };

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