$(function(){
  /*
   * タブコントローラ
   * TODO: タブ固有の処理を切り離して汎用化
   */
  // 名前空間の取得
  var controllers = $.fn.okwave.controllers;
  // コンストラクタ
  controllers.tabController = function(model){this.init(model)};
  //　インスタンスメソッド
  controllers.tabController.prototype = {
    // コンストラクタ（のエイリアス）
    init: function(model){
      this.model = model;
    },
    // 描写する
    render: function(){
      var params = {}

      if(this.uId){
        params['uid'] = this.uId;
      }
      if(this.isProfile != undefined){
        params['is_profile'] = this.isProfile;
      }
      if(this.searchId != undefined){
        params['search_id'] = this.searchId;
      }

      this.model.load($.fn.okwave.pageNum, params);
    },
    // POSTする
    post: function(run, msgConfirmation, msgResult, onSuccess){
      var result;
      var showResult = function(result){
        if(result.responseText == 'true'){
          $.fn.okwave.ui.notice.open(msgResult);
          onSuccess();
        }else{
          switch(result.status){
            case 200:
              $.fn.okwave.ui.notice.open(result.responseText);
              break;
            case 304:
              $.fn.okwave.ui.notice.open('リクエストされたページは更新されていませんでした。');
              break;
            case 404:
              $.fn.okwave.ui.notice.open('リクエストされたページが見つかりませんでした。');
              break;
            case 403:
              $.fn.okwave.ui.notice.open('リクエストは拒否されました。');
              break;
            case 401:
              $.fn.okwave.ui.notice.open('リクエストが認証されませんでした。');
              break;
            case 500:
            default:
              $.fn.okwave.ui.notice.open('リクエスト先で処理が失敗しました。');
          }
          
        }
      }
      if(msgConfirmation){
        // 「はい」ボタン押下時
        $.fn.okwave.ui.confirm.onYesClicked(function(){
          showResult(run());
        });
        // 確認ダイアログを表示
        $.fn.okwave.ui.confirm.open(msgConfirmation);
      }else{
        showResult(run());
      }
    },
    // submit
    _submit: function(run, msgConfirmation, msgResult, onSuccess, onError){
      var result;
      var showResult = function(result){
        switch(result.status){
        case 200:
          onSuccess(result.responseText);
          break;
        case 304:
        case 404:
        case 403:
        case 401:
        case 500:
        default:
          onError();
          break;
        }
      }
      if(msgConfirmation){
        // 「はい」ボタン押下時
        $.fn.okwave.ui.confirm.onYesClicked(function(){
          showResult(run());
        });
        // 確認ダイアログを表示
        $.fn.okwave.ui.confirm.open(msgConfirmation);
      }else{
        showResult(run());
      }
    },
    // 削除する
    del: function(params, msgConfirmation, msgResult, onSuccess){
      var self = this;
      this.post(function(){return self.model.del(params)}, msgConfirmation, msgResult, onSuccess);
    },
    // 作成する
    create: function(params, msgConfirmation, msgResult, onSuccess){
      var self = this;
      this.post(function(){return self.model.create(params);}, msgConfirmation, msgResult, onSuccess);
    },
    // 登録する
    submit: function(params, msgConfirmation, msgResult){
      var self = this;
      var onSuccess = function(responseText){
        if(responseText == 'true'){
          $.fn.okwave.ui.notice.open(msgResult);
          self.render();
        }else{
          $('#' + self.model.idTab).html(responseText);
        }
      };
      this._submit(function(){return self.model.create(params);}, msgConfirmation, msgResult, onSuccess);
    }
  }

});

