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


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

//  requestDiaryHeadline(url, diaryId, ym)
//  日記（ブログ）記事頭出し表示のHTMLを出力する拡張メソッド（ブログページ用） ※カスケード不可
//  arguments => url：記事頭出し表示のデータを取得するサーバサイドスクリプト（文字列）
//               diaryId：別表示するため除外する記事のID
//               ym：4桁西暦年号 + 2桁月（整数）
//  return => 整形済みHTML文字列
//  delegation => makeDiaryHeadlinePage()：記事のHTML整形メソッド
//  dependent => $.ajax：Ajax通信オブジェクト（jQuery）
//
tetraunit.requestDiaryHeadline =
function () {
//  var _diaryId;

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

    return _getHtml(url, diaryId, ym);
  }
}();



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

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

  return function (response, diaryId) {
    _that = response;
    _diaryId = diaryId;

    return _buildHtml(diaryId);
  }
}();



//  requestLastestIdMonth(url, ym)
//  最新ブログ記事のidを取得する拡張メソッド ※カスケード不可
//  arguments => url：記事のデータを取得するサーバサイドスクリプト（文字列）
//               ym：4桁西暦年号 + 2桁月（整数）
//  return => 最新記事のdiary_id
//  dependent => $.ajax：Ajax通信オブジェクト（jQuery）
//
tetraunit.requestLastestId =
function () {
  var _that, _itemObj;
  _itemObj = {};
  _itemObj.id = false;
  _itemObj.ym = false;
  
  var _getId =                                                          // Ajax通信メソッド
  function (url) {
    var diaryId, dDate;
    $.ajax({url: url,
        data: 'table=diary_tbl&key=ddate&sort_key=ddate&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++) {                    // レコード数分の繰り返し（想定数は"１"）
              _itemObj.id = _that[i].diary_id;                          // 最新のdiary_idを取得
              dDate = new Date(_that[i].ddate * 1000);                  // 年月を取得
              _itemObj.ym = dDate.getFullYear() + ('0' + (dDate.getMonth() + 1)).slice(-2);                          // 最新のdiary_idを取得
            }
          }
        }
      }
    );
    return _itemObj;
  };
  
  return function (url) {
    return _getId(url);
  }
}();



//  requestLastestIdMonth(url, ym)
//  当該月の最新ブログ記事のidを取得する拡張メソッド ※カスケード不可
//  arguments => url：記事のデータを取得するサーバサイドスクリプト（文字列）
//               ym：4桁西暦年号 + 2桁月（整数）
//  return => 最新記事のdiary_id
//  dependent => $.ajax：Ajax通信オブジェクト（jQuery）
//
tetraunit.requestLastestIdMonth =
function () {
  var _that;
  
  var _getId =                                                          // Ajax通信メソッド
  function (url, ym) {
    var diaryId;
    $.ajax({url: url,
        data: 'table=diary_tbl&key=ddate&ym=' + ym + '&sort_key=ddate&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++) {                    // レコード数分の繰り返し（想定数は"１"）
              diaryId = _that[i].diary_id;                              // 最新のdiary_idを取得
            }
          }
        }
      }
    );
    return diaryId;
  };
  
  return function (url, ym) {
    return _getId(url, ym);
  }
}();



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



// makeDiary(response, diaryId)
//  日記（ブログ）記事のデータをHTMLに整形する拡張メソッド ※カスケード不可
//  arguments => response：サーバから取得した記事データMXLオブジェクト（XMLオブジェクト）
//               diaryId：記事のdiary_Id
//  return => 整形済みHTML文字列
//  delegation => xml2Obj()：XMLをレコードリストオブジェクトに変換するメソッド
//  dependent => nwopen()：ウィンドウオープンメソッド
//
tetraunit.makeDiary =
function () {
  var _that, _itemObj;
  _itemObj = {};
  _itemObj.html = false;
  
  var _buildHtml =
  function (diaryId, ym) {
    var dDate, html = [];
    _itemObj.id = diaryId;
    if (_that.responseXML) {                                                           // 有効なデータが存在するかを判定
      _that = tetraunit.xml2Obj(_that.responseXML);                                // XMLをレコード単位の配列オブジェクトに変換
      for (var i = 0; i < _that.length; i++) {                                    // レコード数分の繰り返し（想定数は"１"）
        dDate = new Date(_that[i].ddate * 1000);                                 // 日付を整形
        html.push('<h2 class="sectionHeader">' + _that[i].title + '</h2>');
        html.push('<p class="publishedDay">' + dDate.getFullYear());
        html.push('年' + (dDate.getMonth() + 1));
        html.push('月' + dDate.getDate());
        html.push('日（' + tetraunit.week[dDate.getDay()] + '）&nbsp;投稿</p>');
        html.push('<p class="backLink4Item"><a class="goback" href="blog.html">最新記事へ</a></p>');
        if(_that[i].imagepath1 || _that[i].imagepath2 || _that[i].imagepath3) {
          html.push('<div class="imgBox">');                                     // 写真の登録があればその分だけ整形
          for (var j = 1; j < 4; j++) {
            if (_that[i]['imagepath' + j]) {
              html.push('<a href="photo.html?p=' + _that[i]['imagepath' + j].slice(0, -4) + '_l.jpg">');
              html.push('<img src="' + _that[i]['imagepath' + j] + '" title="');
              if (_that[i]['alternate' + j]) {
                html.push(_that[i]['alternate' + j] + '" alt="');
                html.push(_that[i]['alternate' + j] + '" /></a>');
              } else {
                html.push('" alt="" /></a>');
              }
            }
          }
          html.push('</div>');
        }
        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>');
        }
        html.push('<p class="permaLink">この記事のリンク　http://wakatake.org/blog.html?id=' + diaryId + '</p></div>');
        _itemObj.ym = dDate.getFullYear() + ('0' + (dDate.getMonth() + 1)).slice(-2);
        _itemObj.html = html.join('');
      }
    }
    return _itemObj;
  };

  return function (response, diaryId) {
    _that = response;

    return _buildHtml(diaryId);
  }
}();

