// 2009(c)Tetra\/unit
// 2010.05.30 modified
// written by Ohsako, Junichi
//


//  共有配列の追加
tetraunit.week = ['日', '月', '火', '水', '木', '金', '土'];

//  requestNewsHeadline(url, limit)
//  ニュース記事頭出し表示のHTMLを出力する拡張メソッド（トップページ用） ※カスケード不可
//  arguments => url：記事頭出し表示のデータを取得するサーバサイドスクリプト（文字列）
//               limit：頭出し表示列数の制限値（整数）
//  return => 整形済みHTML文字列
//  delegation => makeNewsHeadline()：記事のHTML整形メソッド
//  dependent => $.ajax：Ajax通信オブジェクト（jQuery）
//
tetraunit.requestNewsHeadline =
function () {
  var _that;
  
  var _getHtml =                                                          // Ajax通信メソッド
  function (url, limit) {
    var html;
    $.ajax({url: url,
        data: 'table=news_tbl&sort_key=ndate&sort_flag=DESC&limit=' + limit,
        type: 'post',
        dataType: 'xml',
        async: false,
        complete: function (request) {                                    // HTMLを整形出力するメソッド呼出しのコールバック関数 
          html = tetraunit.makeNewsHeadline(request);
        }
      }
    );
    return html;
  };
  
  return function (url, limit) {
    return _getHtml(url, limit);
  }
}();



//  requestNewsHeadlinePage(url, newsId)
//  ニュース記事頭出し表示のHTMLを出力する拡張メソッド（ニュースページ用） ※カスケード不可
//  arguments => url：記事頭出し表示のデータを取得するサーバサイドスクリプト（文字列）
//               newsId：別表示するため除外する記事のID
//  return => 整形済みHTML文字列
//  delegation => makeNewsHeadlinePage()：記事のHTML整形メソッド
//  dependent => $.ajax：Ajax通信オブジェクト（jQuery）
//
tetraunit.requestNewsHeadlinePage =
function () {
  var _newsId;

  var _getHtml =                                                          // Ajax通信メソッド
  function (url) {
    var html;
    $.ajax({url: url,
        data: 'table=news_tbl&sort_key=ndate&sort_flag=DESC',
        type: 'post',
        dataType: 'xml',
        async: false,
        complete: function (request) {                                    // HTMLを整形出力するメソッド呼出しのコールバック関数 
          html = tetraunit.makeNewsHeadline(request, _newsId);
        }
      }
    );
    return html;
  };
  
  return function (url, newsId) {
    _newsId = newsId;
    
    return _getHtml(url, newsId);
  }
}();



//  makeNewsHeadline(response)
//  ニュース記事頭出し表示のデータをHTMLに整形する拡張メソッド ※カスケード不可
//  arguments => response：サーバから取得した記事頭出し表示データMXLオブジェクト（XMLオブジェクト）
//  return => 整形済みHTML文字列
//  delegation => xml2Obj()：XMLをレコードリストオブジェクトに変換するメソッド
//                   week[]：曜日文字列の共有オブジェクト
//
tetraunit.makeNewsHeadline =
function () {
  var _that, _newsId;

  var _buildHtml =
  function () {
    var html = [], nDate;
    _that = tetraunit.xml2Obj(_that.responseXML);                                 // XMLをレコード単位の配列オブジェクトに変換
    if (_that.length) {                                                           // 有効なデータが存在するかを判定
      for (var i = 0; i < _that.length; i++) {                                    // レコード数分の繰り返し（想定数は"１"）
        if (_that[i].news_id != _newsId) {
          nDate = new Date(_that[i].ndate * 1000);                              // 日付関連エレメントを生成・出力
          html.push('<a class="itemHeaderLink" href="info.html?' + _that[i].news_id);
          html.push('"><dt class="newsDate">' + nDate.getFullYear() + '年');
          html.push(nDate.getMonth() + 1);
          html.push('月' + nDate.getDate());
          html.push('日（' + tetraunit.week[nDate.getDay()] + '）</dt>');
          html.push('<dd class="newsHeader">' + _that[i].title + '</dd></a>');
        }
      }
    }
    return html.join('');
  };

  return function (response, newsId) {
    _that = response;
    _newsId = newsId;

    return _buildHtml();
  }
}();




//  requestNews(url, newsId)
//  ニュース記事のHTMLを出力する拡張メソッド ※カスケード不可
//  arguments => url：記事のデータを取得するサーバサイドスクリプト（文字列）
//               newsId：記事データを特定するidフィールド値（整数）
//  return => 整形済みHTML文字列
//  delegation => makeNews()：記事のHTML整形メソッド
//  dependent => $.ajax：Ajax通信オブジェクト（jQuery）
//
tetraunit.requestNews =
function () {
  
  var _getHtml =                                                          // Ajax通信メソッド
  function (url, newsId) {
    var html;
    $.ajax({url: url,
        data: 'table=news_tbl&key=news_id&key_value=' + newsId,
        type: 'post',
        dataType: 'xml',
        async: false,
        complete: function (request) {                                    // HTMLを整形出力するメソッド呼出しのコールバック関数 
          html = tetraunit.makeNews(request);
        }
      }
    );
    return html;
  };
  
  return function (url, newsId) {
    return _getHtml(url, newsId);
  }
}();




//  requestLastestId(url)
//  最新ニュース記事のHTMLを出力する拡張メソッド ※カスケード不可
//  arguments => url：記事のデータを取得するサーバサイドスクリプト（文字列）
//  return => 最新記事のnews_id
//  dependent => $.ajax：Ajax通信オブジェクト（jQuery）
//
tetraunit.requestLastestId =
function () {
  var _that;
  
  var _getId =                                                          // Ajax通信メソッド
  function (url) {
    var newsId;
    $.ajax({url: url,
        data: 'table=news_tbl&sort_key=ndate&sort_flag=DESC&limit=1',
        type: 'post',
        dataType: 'xml',
        async: false,
        complete: function (request) {                                  // HTMLを整形出力するメソッド呼出しのコールバック関数 
          _that = tetraunit.xml2Obj(request.responseXML);               // XMLをレコード単位の配列オブジェクトに変換
          if (_that.length) {                                           // 有効なデータが存在するかを判定
            for (var i = 0; i < _that.length; i++) {                    // レコード数分の繰り返し（想定数は"１"）
              newsId = _that[i].news_id;                                // 最新のnews_idを取得
            }
          }
        }
      }
    );
    return newsId;
  };
  
  return function (url) {
    return _getId(url);
  }
}();



// makeNews(response)
//  ニュース記事のデータをHTMLに整形する拡張メソッド ※カスケード不可
//  arguments => response：サーバから取得した記事データMXLオブジェクト（XMLオブジェクト）
//  return => 整形済みHTML文字列
//  delegation => xml2Obj()：XMLをレコードリストオブジェクトに変換するメソッド
//  dependent => nwopen()：ウィンドウオープンメソッド
//
tetraunit.makeNews =
function () {
  var _that;
  
  var _buildHtml =
  function () {
    var html = [], nDate;
    _that = tetraunit.xml2Obj(_that.responseXML);                                // XMLをレコード単位の配列オブジェクトに変換
    if (_that.length) {                                                          // 有効なデータが存在するかを判定
      for (var i = 0; i < _that.length; i++) {                                   // レコード数分の繰り返し（想定数は"１"）
        nDate = new Date(_that[i].ndate * 1000);                                 // 日付を整形
        html.push('<h2 class="sectionHeader">' + _that[i].title + '</h2>');
        html.push('<p class="publishedDay">' + nDate.getFullYear());
        html.push('年' + (nDate.getMonth() + 1));
        html.push('月' + nDate.getDate());
        html.push('日（' + tetraunit.week[nDate.getDay()] + '）&nbsp;掲載</p>');
        if(_that[i].article) {
          var body = _that[i].article.replace(/\r\n/g, "\n");
          body = body.replace(/\r\n/g, "\n");
          body = body.replace(/\r/g, "\n");
          body = body.replace(/\n/g, '</p><p class="articleP">');
          body = body.replace(/\{\{/g, '<');
          body = body.replace(/\}\}/g, '>');
          html.push('<p class="articleP">' + body + '</p>');
        }
      }
    }
    return html.join('');
  };

  return function (response) {
    _that = response;

    return _buildHtml();
  }
}();
