$(function(){

  /*
   * タブモデル
   * タブに必要な処理を集約しています。
   * TODO: タブ固有の処理を切り離して汎用化
   */
  // 名前空間の取得
  var models = $.fn.okwave.models;

  // Ajax通信中フラグ
  models.connecting = false;　

  /*
   *  コンストラクタ
   */
  models.tab = function(idTab, idPaginator){this.init(idTab, idPaginator);}

  /*
   * インスタンスメソッド
   */
  models.tab.prototype = {
    // HTML id属性
    // - タブ
    idTab: '',
    // - パジネータ
    idPaginator: '',

    // リクエスト先URL
    // - 描写
    urlLoad: '',
    // - 作成
    urlCreate: '',
    // - 削除
    urlDelete: '',

    /*
     * コンストラクタ（のエイリアス）
     *
     * @params string idTab タブのid
     * @params string idPaginator パジネータのid
     */
    init: function(idTab, idPaginator, uId){
      this.idTab = idTab;
      this.uId = uId;
      if(idPaginator) this.idPaginator = idPaginator;
    },

    /*
     * ajaxレスポンスの内容を描写する
     * @params integer pageNum ページ番号
     */
    load: function(pageNum, params){
      // 表示するタブが無い場合は何もしない
      $pane = $('#' + this.idTab);
      if(! $pane) return;
      // パラメータの指定
      if(pageNum) params['page'] = pageNum;
      // 表示結果をロード
      $pane.load(this.urlLoad, params, $.fn.okwave.lib.ajaxErrorHandler);
    },
    
    /*
     * POSTする
     * @params string url POST先のアプリケーションのURL
     * @params Object params POSTするパラメータ
     */
    post: function(url, params) {
      // 通信中は処理しない
      if (models.connecting) return;

      var response  = $.ajax({
        type: 'POST',
        url: url,
        data: params,
        beforeSend : function(){models.connecting = true;},
        complete: function(){models.connecting = false;},
        async: false
      });
      return response;
    },
    // 削除する
    del: function(params){
      return this.post(this.urlDelete, params);
    },
    // 作成する
    create: function(params){
      return this.post(this.urlCreate, params);
    }

  }
  
});
