$(function(){
/**================================================================================================================================
 *
 *
 *  newsloader.js
 *
 *  required: jquery.js ( >= 1.2.6 )
 *  
 *
 *================================================================================================================================**/

/**
 *
 *  グローバル変数
 *
 **/
window.__FOOMA_NEWSLOADER = {
  NUM_PER_PAGE: {
    RECENT: 5,
    LIST:   20
  },
  PAGE_CURRENT: 1,
  PAGES:        1,
  NEWS_COUNT:   0
};
var NEWSLOADER = window.__FOOMA_NEWSLOADER;  // グローバル変数の呼び出しを簡略化


/*@cc_on _d=document;eval('var document=_d')@*/
var isIE = /*@cc_on!@*/false;

var _e = function( tagName )    { return document.createElement( tagName ); }  // document.createElement のシノニム
  , _a = function( e, target )  { e.appendChild( target ); }                   // Element#appendChild の関数型簡略形
  , _t = function( e, tagName ) { return e.getElementsByTagName( tagName ); }  //
  , _v = function( e, tagName ) { return ( _t( e, tagName )[0]  &&  _t( e, tagName )[0].childNodes[0] )  ?   _t( e, tagName )[0].childNodes[0].nodeValue  :  undefined; }
;



var load_news = function( param ) {
  var mode   = param.mode  ||  'index'
    , num    = param.num   ||  5
    , page   = param.page  ||  1
    , target = param.target
  ;
  if( ! target ) { return false; }

  var url_xml = 'newslist_eng.xml';


  $( param.target ).empty().append(
      $( '<tbody></tbody>' ).append(
          $( '<tr></tr>' ).append(
              $( '<th></th>' )
                .html( '&nbsp;')
          ).append(
              $( '<td></td>' )
                .text( 'データを読み込んでいます・・・' )
          )
      )
  )
  ;


  if( $( '#newsloader-list' ).get( 0 ) ) {  url_xml = '../' + url_xml; }  // info/news.html は 1階層下なので

  $.ajax( {
    url: url_xml,
    type: 'get',
    dataType: 'xml',
    data: {
    },
    success: function( xml ) {
      list_news( xml, { mode: mode, num: num, page: page, target: target } );
    },
    error: function( xhr ) {
      alert( 'error has occured >< : ' + xhr.status );

    }
  } );
};


var list_news = function( xml, opts ) {
  var mode   = opts.mode
    , num    = opts.num
    , page   = opts.page
    , target = opts.target
  ;
  var newslist = _t( xml, 'item' );
  var num_total = newslist.length;

  var i_from = ( page - 1 ) * num
    , i_to   = page * num < num_total  ?  page * num  :  num_total
  ;

  $( '#contents_area' ).height( 'auto' );  // footerfix.js で固定された高さをいったん解除する

  NEWSLOADER.NEWS_COUNT = newslist.length;
  NEWSLOADER.PAGES = Math.ceil( NEWSLOADER.NEWS_COUNT / num );

  var tbody = _e( 'tbody' );

  for( var i = i_from; i < i_to; i++ ) {
    // ループ内の変数を閉じ込める
    (function(){
      var n = newslist[i];
      var news = {
        date:        _v( n, 'pubDate' ),
				month:        _v( n, 'Month' ),
        title:       _v( n, 'title' ),
        link:        _v( n, 'link' ),
        linkType:    _v( n, 'linkType' )  ||  'internal',
        linkText:    _v( n, 'linkText' ),
        description: _v( n, 'description' )
      };
      var matched = news.date.match( /^\s*(\d{4})-0?([1-9]?\d)-0?([1-9]?\d)\s*$/ );  // 月日それぞれにおける先頭の0を拾わないようにする
			news.date = [ news.month, '&nbsp;', matched[3],',','&nbsp;',matched[1],'&nbsp;' ].join( '' );

      var tr = _e( 'tr' )
        , th = _e( 'th' )
        , td = _e( 'td' )
      ;
      var td_title       = _e( 'div' )
        , td_description = _e( 'div' )
        , td_link        = _e( 'div' )
      ;
      td_title.className       = 'title';
      td_description.className = 'description';
      td_link.className        = 'link';

      th.innerHTML = news.date  ||  '不明';

      var a_td_title = _e( 'a' );
      a_td_title.innerHTML = news.title;
      //
      //  本文が定義されている場合
      //
      if( news.description ) {
        a_td_title.className = 'news_link_text';

        // お知らせタイトルをクリックしたときの処理
        $( a_td_title ).toggle(
          function() {
            // 本文・リンクを表示する
            $( td_description ).slideDown( function() {
              $( '#contents_area' ).height( 'auto' );  // footerfix.js で固定された高さをいったん解除する
              window.__FOOMA_HEIGHT_CONTENTS_DEFAULT = $( '#contents_area').height();  // #contents_area のデフォルト高さを更新する
              window.onresize();
            } );
          },
          // 本文・リンクを非表示にする
          function() {
            $( '#contents_area' ).height( 'auto' );  // footerfix.js で固定された高さをいったん解除する
            $( td_description ).slideUp( function() {
              window.__FOOMA_HEIGHT_CONTENTS_DEFAULT = $( '#contents_area').height();  // #contents_area のデフォルト高さを更新する
              window.onresize();
            } );
          }
        );

        td_description.innerHTML = news.description  ||  '本文がありません。';

        // リンク先がある場合
        if( news.link ) {
          var a_td_link = _e( 'a' );
          a_td_link.setAttribute( 'href', news.link );
          a_td_link.innerHTML = news.linkText  ||  news.link;
          switch( news.linkType ) {
          // 内部リンク
          case 'internal':
            break;
          // 外部リンク
          case 'external':
            a_td_link.setAttribute( 'target', '_blank' );
            break;
          }
          _a( td_link, a_td_link );
        }
      }
      //
      //  本文が定義されておらず，かつ，リンクは定義されている場合
      //
      else if( news.link ) {
        a_td_title.setAttribute( 'href', news.link );
        switch( news.linkType ) {
        // 内部リンク
        case 'internal':
          a_td_title.className = 'news_link_internal';
          break;
        // 外部リンク
        case 'external':
          a_td_title.className = 'news_link_external';
          a_td_title.setAttribute( 'target', '_blank' );
          break;
        }
      }
      //
      //  その他
      //
      else {
        a_td_title.className = 'news_nolink';
      }

      _a( td_title, a_td_title );
      _a( td_description, td_link);

      _a( td, td_title );
      _a( td, td_description );

      _a( tr, th );
      _a( tr, td );

      _a( tbody, tr );
    })();
  }
  var table = $( target ).get( 0 ); $( table ).empty();  // 一度空にする
  _a( table, tbody );
  window.__FOOMA_HEIGHT_CONTENTS_DEFAULT = $( '#contents_area').height();  // #contents_area のデフォルト高さを更新する
  window.onresize();

  //
  //  「前の一覧」「次の一覧」
  //
  if( $( '#news_navi' ).get( 0 ) ) {
    if( NEWSLOADER.PAGE_CURRENT == 1 )                { $( '#news_navi li#before a' ).hide(); }
    if( NEWSLOADER.PAGE_CURRENT > 1 )                 { $( '#news_navi li#before a' ).show(); }
    if( NEWSLOADER.PAGE_CURRENT < NEWSLOADER.PAGES )  { $( '#news_navi li#after a' ).show(); }
    if( NEWSLOADER.PAGE_CURRENT == NEWSLOADER.PAGES ) { $( '#news_navi li#after a' ).hide(); }
  }
};


//
//
//  #newsloader-recent @ index.html
//
//
if( $( '#newsloader-recent' ).get( 0 ) ) {
  load_news( { num: NEWSLOADER.NUM_PER_PAGE.RECENT, target: '#newsloader-recent' } );
}
//
//
//  #newsloader-list @ info/news.html
//
//
else if( $( '#newsloader-list' ).get( 0 ) ) {
  load_news( { num: NEWSLOADER.NUM_PER_PAGE.LIST, target: '#newsloader-list' } );

  $( '#news_navi ul li#before a' ).click( function( e ) {
    if( NEWSLOADER.PAGE_CURRENT > 1 ) {
      --NEWSLOADER.PAGE_CURRENT;
      $( '#news_navi ul li#before a' ).show();
    }
    else {
      NEWSLOADER.PAGE_CURRENT;
      // 「前の一覧」ボタンを隠す
      $( '#news_navi ul li#before a' ).hide();
    }
    
    load_news( { num: NEWSLOADER.NUM_PER_PAGE.LIST, page: NEWSLOADER.PAGE_CURRENT, target: '#newsloader-list' } );

  } );

  $( '#news_navi ul li#after a' ).click( function( e ) {
    if( NEWSLOADER.PAGE_CURRENT >= NEWSLOADER.PAGES ) {
      NEWSLOADER.PAGE_CURRENT = NEWSLOADER.PAGES;
      // 「次の一覧」ボタンを隠す
      $( '#news_navi ul li#after a' ).hide();
    }
    else {
      ++NEWSLOADER.PAGE_CURRENT;
    }
    load_news( { num: NEWSLOADER.NUM_PER_PAGE.LIST, page: NEWSLOADER.PAGE_CURRENT, target: '#newsloader-list' } );
  } );
}
  



/**================================================================================================================================**/
});
