
Kwo.Inbox = {

  Message: {

    onComment: function(elt) {
      elt = $(elt);
      Kwo.exec("/account/social/message.reply", elt,
               {callback: Kwo.Inbox.Message.onCommentCallback,
                disable: elt});
    },

    onCommentCallback: function(res) {
      if (Kwo.hasError(res)) return Kwo.error(res);
      Kwo.Inbox.Message.view(res["result"]["id"]);
    },

    onDelete: function(elt) {
      Kwo.exec("messages.delete", $(elt).up("FORM"),
               {callback: Kwo.Inbox.display,
                confirm: elt});
    },

    onMarkRead: function(elt) {
      Kwo.exec("messages.mark.read", $(elt).up("FORM"),
               {callback: Kwo.Inbox.display});
    },

    onMarkUnread: function(elt) {
      Kwo.exec("messages.mark.unread", $(elt).up("FORM"),
               {callback: Kwo.Inbox.display});
    },

    view: function(id,tab) {
      Kwo.go("message", {id: id, tab: tab});
    }

  },

  display: function(res) {
    if (Kwo.hasError(res)) return Kwo.error(res);
    Kwo.go("", {offset:window.inbox_offset});
  },

  onSelect: function(elt) {
    var type = $F(elt);
    if (type.length <= 1) return;
    $(elt.form).select("[type=checkbox]").each(function(input) {
      if (type == "none" || type == "all") {
        input.checked = type == "all";
      }
      else {
        input.checked = input.hasClassName("message-" + type);
      }
    });
  }

};

Kwo.Class.Connection = Class.create(Kwo.Dialog, {

  initialize: function($super, elt) {
    this.name = "connection";
    this.className = "layout-hbox";
    this.args = {item_key: $(elt).readAttribute("data-item-key")};
    this.width = 350;
    this.height = 250;
    $super(this.onDisplay);
  },

  onDisplay: function() {
    Kwo.exec("/social/connection.prompt", this.args,
             {container: this.support});
  },

  onSubmit: function(elt) {
    elt = $(elt);
    Kwo.exec("/social/invitation.save", [this.args, elt],
             {callback: elt});
  }

});

Kwo.Connection = {

  onRequest: function(elt) {
    Kwo.exec("/social/invitation.save", elt,
             {callback: elt});
  },

  onAccept: function(user_id) {
  }

};

Kwo.Group = {

  onCancel: function(elt) {
    elt = $(elt);
    elt.up("TD.column").update();
  },

  onEdit: function(elt) {
    elt = $(elt);
    Kwo.go("group.edit", {id: elt.readAttribute("data-id")});
  },

  onDelete: function(elt) {
    elt = $(elt);
    Kwo.exec("group.delete", elt.up("FORM"),
             {callback: true, disable: true, confirm: true});
  },

  onInvitationCallback: function(res) {
    this.update(res["result"]["callback_msg"]);
  },

  onInvitationSend: function(elt) {
    elt = $(elt);
    Kwo.exec("/social/invitation.save", elt,
             {callback: Kwo.Group.onInvitationCallback.bind(elt), disable: true});
  },

  onInvite: function(elt) {
    elt = $(elt);
    new Kwo.Dialog("/social/group.invite", {"item_key": elt.readAttribute("data-id")},
                   {className: "layout-hbox", width: 600, height: 400});
  },

  onJoin: function(id) {},

  onLeave: function(elt) {
    elt = $(elt);
    Kwo.exec("group.leave", {"id": elt.readAttribute("data-id")},
             {callback: elt.up("DIV.group"), confirm: true});
  },

  onSave: function(elt) {
    Kwo.exec("group.save", elt,
             {callback: true, disable: true});
  }

};

Kwo.Invitation = {

  onAccept: function(elt) {
    elt = $(elt);
    Kwo.exec("/account/social/invitation.accept", {id: elt.readAttribute("data-id")},
             {callback: Kwo.reload});
  },

  onRefuse: function(elt) {
    elt = $(elt);
    Kwo.exec("/account/social/invitation.refuse", {id: elt.readAttribute("data-id")},
             {callback: Kwo.reload, confirm: elt});
  }

};

Kwo.Network = {

  onRemove: function(elt) {
    elt = $(elt);
    Kwo.exec("/account/social/friend.remove", {id: elt.readAttribute("data-id")},
             {callback: elt.up("DIV"), confirm: elt});
  }

}

