//
//  商品項目のリストページを表示するモジュール（単一サイト用）
//
//  構成要素：    商品区分／メーカー名／商品名
//
//  付加機能：    なし
//
//  引数：       array = カテゴリー名の配列（5項目まで）
//
//  id命名規約：  '総レコード数'表示用<span> = records
//              '総ページ数'表示用<span>  = pages
//              '現在ページ'表示用<span>  = pointer
//              '前ページ'表示用<input>   = backward
//              '次ページ'表示用<input>   = forward
//              '項目リスト'表示用<dl>    = list
//              '新規'ボタン用<input>     = renew
//              '管理TOP'ボタン用<input>  = totop
//
//  関連ファイル命名規約：
//              '商品登録／修正／削除'用HTMLファイル  = admin_goods.html
//              '商品一覧表示'用HTMLファイル        = listing_goods.html
//              '管理画面TOP'用HTMLファイル        = index.html
//
//  データベーステーブル／フィールド命名規約：
//              テーブル名                  = goods_tbl
//              'レコードID'用フィールド      = goods_id
//              '初期登録コード'用フィールド   = register
//              '商品区分'用フィールド        = category
//              'メーカー名'用フィールド      = maker
//              '商品名'用フィールド         = gname
//              'モデル名'用フィールド        = model
//              '価格'用フィールド           = price
//              '商品説明'用フィールド        = explanation
//              '画像ファイルパス'用フィールド = imagepath
//              '画像説明'用フィールド        = alternate
//
//  実行に必要なライブラリ：
//              prototype.js
//              basic.js
//              Xml2Obj.js
//
//  利用を想定しているサーバーサイドスクリプト：
//              get_record.php
//              get_record_list.php
//
//
//  2008/01/16 (c) Ohsako, Junichi
//



/*---------- 名前空間の初期化 ----------*/
var goodsList;
if(!goodsList) {
  goodsList = Object();
}



/*---------- オブジェクトの初期化関数 ----------*/
goodsList.initializeObj =
function(array) {
  /*--- オブジェクトの生成 ---*/
  goodsList.makeObj(['records',
                    'pages',
                    'pointer',
                    'backward',
                    'forward',
                    'list',
                    'renew',
                    'totop'
  ]);

  /*--- プロパティの初期化 ---*/
  goodsList.recordCounter = '../webdepr/php/get_record.php';
  goodsList.listGetter = '../webdepr/php/get_record_list.php';
  goodsList.records.value = 0;
  goodsList.pointer.value = 0;
  goodsList.limitter = 10;
  goodsList.total = 0;
  
  // カテゴリー判定用配列
  goodsList.categoryArray = array;
  
  // 総レコード数を得る(prototype.js でAjax通信)
  new Ajax.Request(goodsList.recordCounter, {
    asynchronous: false,
    method: "post",
    parameters: 'table=goods_tbl&key=goods_id',
    onComplete: function(request) {
                  var xml = request.responseXML;
                  // <record>のノードリストを得る
                  var res = xml.getElementsByTagName ("record");
                  // DOM出力
                  goodsList.records.firstChild.nodeValue = res.length;
                }
    }
  );
  
  // 総レコード数を取得
  goodsList.records.value = goodsList.records.firstChild.nodeValue;
  
  // 総ページ数を算出
  goodsList.total = Math.ceil(goodsList.records.value / goodsList.limitter);

  // 総ページ数と現在ページの値をDOM出力
  goodsList.pages.firstChild.nodeValue = goodsList.total;
  goodsList.pointer.firstChild.nodeValue = goodsList.pointer.value + 1;
  
  /*--- イベントハンドラの初期化 ---*/
  // 前ページを表示するコントロール
  goodsList.backward.onclick = goodsList.backwarder;

  // 次ページを表示するコントロール
  goodsList.forward.onclick = goodsList.forwarder;

  // ナビゲーションボタンのコントロール
  goodsList.renew.onclick =
  function() {
    location.replace('admin_goods.html');
  }
}



/*---------- 初期画面表示用関数 ----------*/
goodsList.initializedView =
function() {
  // ボタン表示を判定
  goodsList.decisionButton();
  // 最初のページを出力
  goodsList.requestGoodsList(goodsList.list, goodsList.listGetter, goodsList.limitter, goodsList.pointer.value);
}



/*---------- 前ページ用関数 ----------*/
goodsList.backwarder =
function() {
  goodsList.pointer.value--;
  goodsList.pointer.firstChild.nodeValue = goodsList.pointer.value + 1;
  goodsList.decisionButton();
  goodsList.requestGoodsList(goodsList.list, goodsList.listGetter, goodsList.limitter, goodsList.pointer.value);
}



/*---------- 次ページ用関数 ----------*/
goodsList.forwarder =
function() {
  goodsList.pointer.value++;
  goodsList.pointer.firstChild.nodeValue = goodsList.pointer.value + 1;
  goodsList.decisionButton();
  goodsList.requestGoodsList(goodsList.list, goodsList.listGetter, goodsList.limitter, goodsList.pointer.value);
}



/*---------- ボタン表示判定関数 ----------*/
goodsList.decisionButton =
function() {
  if(goodsList.pointer.value <= 0) {
    goodsList.backward.style.display = 'none';
  } else {
    goodsList.backward.style.display = 'block';
  }
  if(goodsList.pointer.value + 1 >= goodsList.total) {
    goodsList.forward.style.display = 'none';
  } else {
    goodsList.forward.style.display = 'block';
  }
}


  
/*---------- リスト出力実行関数 ----------*/
goodsList.requestGoodsList =
function(element, url, limitter, pointer) {
  // prototype.js でAjax通信
  new Ajax.Request(url, {
    asynchronous: true,
    method: "post",
    parameters: 'table=goods_tbl&key=category&field1=goods_id&field2=category&field3=maker&field4=gname&limit=' + limitter +
                '&offset=' + (pointer * limitter) + '&sort_key=category&sort_flag=ASC',
    onComplete: function(request) {
                  // 受信データオブジェクトをXMLとして取得し、レコード配列オブジェクトを生成
                  var dbResult = new Xml2Obj(request.responseXML);
                  dbResult.buildRecords();
                  var records = dbResult.getRecords();
                  // ここから変数htmlにHTML化した文字列を蓄積
                  var html = '<dt class="listheader">カテゴリー</dt><dd class="listheader">メーカー／品名</dd>';
                  // 有効なデータが存在するかを判定
                  if(records.length) { 
                    // ノードリストから値を取り出してHTML生成
                    for(var i = 0; i < records.length; i++) {
                      html += '<a href="admin_goods.html?' + records[i].goods_id + '"><dt>' + goodsList.categoryArray[records[i].category] + '</dt><dd>';
                      if(records[i].maker) {
                        html += records[i].maker;
                      }
                      if(records[i].gname) {
                        html += '&nbsp;／&nbsp;' + records[i].gname;
                      }
                      html += '</dd></a>';
                    }
                  }
                  // DOM書き出し
                  element.innerHTML = html;
                }
  });
}



/*---------- 要素オブジェクト生成関数 ----------*/
goodsList.makeObj =
function(ids) {
  for(var i = 0; i < ids.length; i++) {
    goodsList[ids[i]] = document.getElementById(ids[i]);
  }
}

