/* pagedlist.js - リストの分割表示モジュール(09.08.30) */

var PagedList = {

  /* -------------------- メンバ変数 -------------------- */

  // 表示するページ番号
  cr_index: 0,

  // ページ分割したデータリスト
  pages: [],

  // 1ページに表示するデータ件数
  list_size: 100,

  // 登録されている件数
  total: 0,

  /* -------------------- 各メソッド -------------------- */


  // HTTPリクエストを発行して元データを取得するメソッド
  load: function( param ){

    var url       = param.url;
    var list_size = this.list_size;

    // 画面状態を初期化
    this.cr_index = 0;
    $("#prev_link").css("display", "none");
    $("#next_link").css("display", "none");
    $("#data_list").html("<img id=data_list_indicator src=./image/ajax-loader.gif>");

    // IEのキャッシュ対策
    $.ajaxSetup({ cache: false });

    // データを取得
    $.get(url, function(response){
      $("#data_list").append(response);
      PagedList.setup( {list_size: list_size} );
    });
  },


  // ページの初期化メソッド
  setup: function( param ){

    // インジケータを削除
    $("#data_list_indicator").remove();

    // 1ページに表示するデータ数を定義
    var list_size = parseInt(param.list_size);

    // データが存在しない場合終了
    if ( ! $("#data_list_pgp").is(":has('span')")){
      $("#total").text( "Total: " + this.total );
      return;
    }

    // 必要なページ数を算出
    var data_list = $.makeArray( $("#data_list_pgp").children("span") );
    var page_length = Math.ceil( data_list.length / list_size ); // 割り切れない分は切り上げ
    this.total = data_list.length;

    // ページ分割
    for(var i = 0; i < page_length; i++){
      this.pages[i] = document.createElement("p");
      for(var j = i * list_size; j < (i + 1) * list_size; j++ ){
        if(data_list[j]){
          $(data_list[j]).clone().appendTo(this.pages[i]) ;
          $(this.pages[i]).append("<br/>");
        }
      }
      $("#data_list").append(this.pages[i]);
    }
    $("#data_list_pgp").remove();

    // 初期ページを表示
    $("#total").text( "Total: " + this.total );
    this.show_page();
    this.show_nav();

    // 登録ボタンを有効化
    $("#data_form_btn").attr("disabled", false);
  },


  // ページごとに表示を切り替えるメソッド
  show_page: function(){

    var pages    = this.pages;    // ページ内容
    var cr_index = this.cr_index; // 表示するページ番号

    // 該当ページのみ表示させる
    for(var i = 0; i < pages.length; i++){
      if(i == cr_index) {
        $(pages[i]).css("display", "block");
      }
      else {
        $(pages[i]).css("display", "none");
      }
    }

  },


  // ナビゲーションを表示するメソッド
  show_nav: function(){

    var cr_index = this.cr_index; // ページ番号

    // 総ページ数を定義
    var last_cr_index = 0;
    if(this.pages.length){
      last_cr_index = this.pages.length - 1;
    }

    // 前へリンクが無ければ作成
    if ( ! $("body").is(":has('#prev_link')")){
      $("#prev_navi").append("<a id=prev_link href=# >&laquo; Prev</a>");
      $("#prev_link").css("margin-right", "5px");
      var prev = function(){
        PagedList.cr_index --;
        PagedList.show_page();
        PagedList.show_nav();
        return false;
      }
      $("#prev_link").click( prev );
    }

    // 次へリンクが無ければ作成
    if ( ! $("body").is(":has('#next_link')")){
      $("#next_navi").append("<a id=next_link href=# >Next &raquo;</a>");
      var next = function(){
        PagedList.cr_index ++;
        PagedList.show_page();
        PagedList.show_nav();
        return false;
      }
      $("#next_link").click( next );
    }

    // ナビゲーションの表示を切り替え
    $("#prev_link").css("display", "inline"); 
    $("#next_link").css("display", "inline"); 
    if( cr_index == 0 ) $("#prev_link").css("display", "none");              // 先頭ページの場合
    if( cr_index == last_cr_index ) $("#next_link").css("display", "none");  // 最終ページの場合

    // デバッグ用
    //$(document.body).append("<div id=page_num></div>")
    //$("#page_num").text(cr_index + " / " + last_cr_index + "ページ目");

  },


};


