/* ------------------------------------------------------------ */
/*                                                              */
/*                   Initialize : data loader                   */
/*                                                              */
/* ------------------------------------------------------------ */
var _siteType = "";
/*
$j(function($){

  if($('body.minisite,body.minisite_simple,body.programlist').size()) {
    // iiLoader ------------------------------------------------------------
    var minisiteLoader = new iiLoader_class();
    minisiteLoader.load(
      [ '/XD/_common/xml/program_list_xd.xml',
        '/XD/_common/xml/pid.xml',
        '/XD/_common/data/program/data.xml',
        '/XD/_common/data/video/data.xml',
        '/XD/_common/data/game/data.xml',
        '/XD/_common/data/download/data.xml',
        '/XD/_common/xml/_template.xml',
        '/XD/_common/xml/favorite.xml'
      ],
      function(data){
        xml_cms      = data[0];
        xml_pid      = data[1];
        xml_program  = data[2];
        xml_video    = data[3];
        xml_game     = data[4];
        xml_download = data[5];
        xml_template = data[6];
        xml_favorite = data[7];

        // AJAX表示処理開始
        var bodycls = $('body').attr('class');
        if (bodycls.indexOf('minisite_simple')>-1) { _siteType = 'program';     setMinisiteModules(); } else 
        if (bodycls.indexOf('minisite')>-1)        { _siteType = 'minisite';    setMinisiteModules(); } else
        if (bodycls.indexOf('programlist')>-1)     { _siteType = 'programlist'; $('.tab').tabs(); }
      },
      function(data, XMLHttpRequest, textStatus, errorThrown){
      }
    );

  }
});
*/





/* ------------------------------------------------------------ */
/*                                                              */
/*                          ajax function                       */
/*                                                              */
/* ------------------------------------------------------------ */

(function($) {
  
  // minisite ------------------------------------------------------------
  setMinisiteModules = function() {
    var pid = _pageID;
    
    // #mod-schedule（放送時間）
    var targ = $('#mod-schedule .body').empty().append('<dl class="list-datetime"></dl>');
    var timeMsg = getProgramData(pid).attr('time');
    if (timeMsg!='') {
      targ.children('dl').append('<dt class="wide">'+timeMsg+'</dt>');
    } else {
      getProgramData(pid).find('program_list program').tsort({attr:"air_datetime"}).each(function(j){
        var d = $(this).attr('air_date');
        var t = $(this).attr('air_time');
        var class_first = (j<1) ? ' class="first"':'';
        var epnum = ($('ep',this).text()!='') ? '#'+$('ep',this).text() : '&nbsp;';
        targ.children('dl').append('<dt'+class_first+'>'+formatDate(d).md_jp+' '+t.substr(0,2)+':'+t.substr(2,2)+'</dt><dd'+class_first+'><span>'+epnum+' '+$('episode_ja',this).text()+'</span></dd>');
      });
      if (targ.find('dt').size()<1) {
        targ.children('dl').append('<dt class="wide">2週間以内の放送予定はありません</dt>');
      }
    }
    targ.height('100px');
    
    // #mod-video - #mod-contenst - #mod-program - #mod-favorite
    setProgramlist(pid,getProgramData(pid).eq(0).find('zone').text());

    // minisite_simple ONLY
    if (_siteType != 'minisite') {
      getProgramData(pid).each(function(){
        $('#hero').append('<div id="heroimage"><img src="/XD/_common/data/program/img/'+pid+'_480.jpg" alt="" width="480" height="271" /></div>');
        $('#hero').append('<div id="herodesc"><h3>'+$('title_ja',this).text()+'</h3><p>'+$('info',this).text()+'</p></div>');
        if($(this).attr('supersite') != '') {
          var window  = ($(this).attr('supersite_trg') == '') ? '' : ' target="'+$(this).attr('supersite_trg')+'"';
          $('#hero').append('<a class="smlbtn smlbtn-supersite" href="'+$(this).attr('supersite')+'"'+window+' type="custom" onclick="cto.tracklink(this)">番組サイト</a>');
        } else {
          $('#heros').addClass('nobtn');
        }
        return false;
      });
    }

    
    // SiteCatalist
    $('a.smlbtn-supersite').attr('name', pid+'-supersite');
    $('a.smlbtn-programguide').attr('name', pid+'-programguide');
    $('a.txt-programlist').attr('name', pid+'-programlist');
  };





  // ---------------------------------------------------------------------------
  // getProgramData ------------------------------------------------------------
  // ---------------------------------------------------------------------------

  var getProgramData = function(pid) {
    var gid = $(xml_pid).find('item[pid='+pid+']').attr('gid');
//    $('body').prepend('GID:'+gid+' / PID:'+pid+'  ');
    var progDataObj = $('group_id',xml_cms).filter(function(){return $(this).text() == gid; }).parent('group');
    if (progDataObj.size()<1) progDataObj = $(xml_template).find('group').clone();
    
    var overWriter = $(xml_program).find('prog[pid='+pid+']');
    setProgramData(progDataObj,'title_ja',overWriter.attr('name'));
    setProgramData(progDataObj,'zone',overWriter.attr('zone'));
    setProgramData(progDataObj,'url_featured',overWriter.attr('url'));
    setProgramData(progDataObj,'info',overWriter.attr('syn'));
// 以下は上書きでなくフィールド追加となるため、attr 扱い
    setProgramData(progDataObj,'kana',overWriter.attr('kana'));
    setProgramData(progDataObj,'time',overWriter.attr('time'));
    setProgramData(progDataObj,'trg',overWriter.attr('trg'));
    setProgramData(progDataObj,'supersite',overWriter.attr('supersite'));
    setProgramData(progDataObj,'supersite_trg',overWriter.attr('supersite_trg'));

// 放送時間 2週間分のソート用キーを作成
    progDataObj.find('program_list program').each(function(){
      $(this).attr('air_datetime',$(this).attr('air_date')+$(this).attr('air_time'));
    });

// 【追加対応】id=mymap等の意図的な同IDで複数番組の場合
    var sameIdItem_size = $(xml_pid).find('item[pid='+pid+']').size();
    if (sameIdItem_size>1) {
      $(xml_pid).find('item[pid='+pid+']').each(function(k){
        if(k<1) { return null; }
        var gid2 = $(this).attr('gid');
        $(this).remove();
        var program_list_for_append = $('group_id',xml_cms).filter(function(){return $(this).text() == gid2; }).parent('group').children('program_list').children();
        progDataObj.find('program_list').eq(0).append(program_list_for_append);
      });
    }
    return progDataObj;
  }
  var setProgramData = function(obj,node,data) {
    data = $.fn.doClean(data);
    if (obj.find(node).size()>0) {
//      $('body').prepend('NODE:'+node+' = '+data+' ____ ');
      if (data!='') obj.find(node).empty().text(data);
    } else {
      // IE対策...
      obj.attr(node,data);
    }
  }



  // minisiteの関連番組など 
  var setProgramlist = function(pid,zone) {
    var infoItems = [
      {areaId:'video',block:1,carousel:1},
      {areaId:'contents',block:2,carousel:1},
      {areaId:'program',block:3,carousel:0},
      {areaId:'favorite',block:3,carousel:0}
    ];
    for (var i in infoItems) {
      var item = infoItems[i];

      // Carouselの場合
      if (item.carousel) {
        var targ = $('div#mod-'+item.areaId+' div.carousel');
        targ.empty().append('<ol></ol><ul class="temp"></ul>');
        
        if (item.areaId == 'contents') {
          var contentsList = $(xml_game).find('prog[pid='+pid+']').nextAll().each(function(j){
            var link     = $.fn.setLink($(this).attr('url'));
            var window   = ($(this).attr('trg') == '') ? '' : ' target="'+$(this).attr('trg')+'"';
            var tracking = $.fn.setTrackingMS($(this).attr('cid'), pid+'-G');
            targ.children('ul.temp').append('<li rel="'+$(this).attr('kana')+'"><a href="'+link+'"'+window+tracking+'><img src="'+$(xml_game).find('config').attr('path')+$(this).attr('cid')+'_72.jpg" alt="" width="72" height="60" />'+$.fn.doTrim($(this).attr('name'),20)+'</a></li>');
          });
          var targChild = targ.find('ol');
          targ.find("ul.temp>li").tsort({attr:"rel"}).appendTo(targChild);
          targ.children('ul.temp').empty();
          
          var contentsList = $(xml_download).find('prog[pid='+pid+']').nextAll().each(function(j){
            var link     = $.fn.setLink($(this).attr('url'));
            var window   = ($(this).attr('trg') == '') ? '' : ' target="'+$(this).attr('trg')+'"';
            var tracking = $.fn.setTrackingMS($(this).attr('cid'), pid+'-D');
            targ.children('ul.temp').append('<li rel="'+$(this).attr('kana')+'"><a href="'+link+'"'+window+tracking+'><img src="'+$(xml_download).find('config').attr('path')+$(this).attr('cid')+'_72.jpg" alt="" width="72" height="60" />'+$.fn.doTrim($(this).attr('name'),20)+'</a></li>');
          });
          targ.find("ul.temp>li").tsort({attr:"rel"}).appendTo(targChild);
          targ.children('ul.temp').empty();
        } else {
          var contentsList = $(xml_video).find('prog[pid='+pid+']').nextAll().each(function(j){
            var link     = $.fn.setLink($(this).attr('url'));
            var window   = ($(this).attr('trg') == '') ? '' : ' target="'+$(this).attr('trg')+'"';
            var tracking = $.fn.setTrackingMS($(this).attr('cid'), pid+'-V');
            targ.children('ul.temp').append('<li rel="'+$(this).attr('kana')+'"><a href="'+link+'"'+window+tracking+'><img src="'+$(xml_video).find('config').attr('path')+$(this).attr('cid')+'_72.jpg" alt="" width="72" height="60" />'+$.fn.doTrim($(this).attr('name'),20)+'</a></li>');
          });
          var targChild = targ.find('ol');
          targ.find("ul.temp>li").tsort({attr:"rel"}).appendTo(targChild);
          targ.children('ul.temp').empty();
        }

        var itemLength = targ.children('ol').children().size();
        targ.children('ol').children().each(function(k){
          $(this).addClass('item'+(k+1));
        });
        if (itemLength>0) {
          $('div#mod-'+item.areaId).show();
          var restCnt = ((5-itemLength%5)==5) ? 0:(5-itemLength%5);
          for (var j=1;j<=restCnt;j++){
            targ.children('ol').append('<li class="nobg"></li>');
          }
          targ.startCarousel(item.areaId,itemLength);
        }
      } else {

      // carousel以外の場合
        var targ = $('div#mod-'+item.areaId+' div.body');
        targ.empty().append('<ol></ol>');

        // programの場合
        if (item.areaId=='program') {
          var programPidList = $(xml_program).find('prog[zone='+zone+']').each(function(j){
            var item_pid = $(this).attr('pid');
            if (item_pid != pid) {
              getProgramData(item_pid).each(function(k){
                var proglink = $.fn.setProgLink($('url_featured',this).text(),item_pid);
                var progwin  = $.fn.setProgWin($(this).attr('trg'));
                var tracking = $.fn.setTrackingMS(item_pid, pid+'-P');
                targ.children('ol').append('<li class="item'+(j+1)+'">\
                <dl class="list-block dtsize-m"><dt><a href="'+proglink+'"'+progwin+tracking+'><img src="'+$(xml_program).find('config').attr('path')+item_pid+'_72.jpg" alt="" width="72" height="60" /></dt>\
                <dd class="title"><a href="'+proglink+'"'+progwin+tracking+'>'+$('title_ja',this).text()+'</a></dd>\
                <dd>'+$.fn.doTrim($('info',this).text(),50)+'</dd></dl></li>');
                return false;
              });
            }
          });
        }

        // favoriteの場合
        if (item.areaId=='favorite') {
          var favoriteList = $(xml_favorite).find('item').each(function(j){
            var item_pid = $(this).attr('pid');
            var proglink = $.fn.setProgLink($(this).attr('url'),item_pid);
            var progwin  = $.fn.setProgWin($(this).attr('trg'));
            var tracking = $.fn.setTrackingMS(item_pid, pid+'-P');
            targ.children('ol').append('<li class="item'+(j+1)+'">\
            <dl class="list-block dtsize-m"><dt><a href="'+proglink+'"'+progwin+tracking+'><img src="/XD/_common/thumb/favorite/'+$(this).attr('img')+'" alt="" width="72" height="60" /></dt>\
            <dd class="title"><a href="'+proglink+'"'+progwin+tracking+'>'+$(this).attr('title')+'</a></dd>\
            <dd>'+$.fn.doTrim($(this).attr('desc'),50)+'</dd></dl></li>');
          });
        }
        if (targ.children('ol').children().size()>0) {
          $('div#mod-'+item.areaId).show();
          targ.find('ol').each(function(){
//            $(this).doShuffle();
            $(this).children('li:gt(2)').remove();
          });
          var zone_alt = (zone == 'playhouse') ? 'phd' : zone;
          $('div#mod-program div.foot a.txt-programlist, div#mod-favorite div.foot a.txt-programlist, #breadcrumbs a[href*="/XD/program/list/"]').attr('href','/XD/program/list/?'+zone_alt);
        }

      }
    }
  };






  // 番組一覧 ------------------------------------------------------------

  getProgramlist = function(zone,targ) {
    var pid = _pageID;
    var targ = $('div#tab-'+targ).empty();
    if (targ.children().size() > 0) { return false; }
    targ.append('<ol class="content"></ol><div class="page_navigation"></div>');
    var programPidList = $(xml_program).find('prog[zone'+zone+']').each(function(j){
      var item_pid = $(this).attr('pid');
      var proglink = $.fn.setProgLink(getProgramData(item_pid).eq(0).find('url_featured').text(),item_pid);
      var progwin  = $.fn.setProgWin($(this).attr('trg'));
      targ.children('ol').append('<li class="item'+(j+1)+'" rel="'+$(this).attr('kana')+'"><a href="'+proglink+'"'+progwin+'><img src="'+$(xml_program).find('config').attr('path')+item_pid+'_144.jpg" alt="" width="144" height="120" />'+$(this).attr('name')+'</a></li>');
    });
    // 3つ毎に高さを揃える
    var maxH=0;
    targ.find('ol>li').tsort({attr:"rel"}).each(function(k){
      maxH = Math.max(maxH,$(this).height());
      if(k%3==2) {
        $('li:eq('+(k-2)+'),li:eq('+(k-1)+'),li:eq('+(k)+')',targ).height(maxH);
        maxH=0;
      }
    });
    targ.pajinate({
      items_per_page: 15,
      item_container_id: '.content',
      nav_panel_id: '.page_navigation',
      nav_label_prev: '&lt; 前のページ',
      nav_label_next: '次のページ &gt;'
    });
  };





  // Newslist ------------------------------------------------------------
  getTickerlist = function() {
    $.ajax({
      type:"GET",
      url: '/jsp/ticker_list.jsp',
      data: 'CHANNEL_ID=4',
      cache: false,
      dataType: 'xml',
      timeout: 30000,
      error: function() {
        $('div#ticker').remove();
//        alert('ティッカーニュースのデータ読み込みに失敗しました。お手数ですが、ブラウザの再読み込みを行ってください。');
      },
      success: function(xml) {
        ajaxXML = xml;
        setTickerlist();
      }
    });
  };
  var setTickerlist = function() {
    var targ = $('div#ticker');
    targ.empty().append('<ol></ol>');
    $(ajaxXML).find('ticker headline').each(function(j) {
      var link     = $.fn.setLink($('link',this).text());
      var window   = ($('window',this).text() == '') ? '' : ' target="'+$('window',this).text()+'"';
      var tracking = (_pageID=='home') ? $.fn.setTracking($('ticker_id',this).text(), 'ticker') : $.fn.setTrackingMS($('ticker_id',this).text(), _pageID+'-_ticker');

      targ.children('ol').append('<li><a href="'+link+'"'+window+tracking+'>'+$('text',this).text()+'</a></li>');
    });
    ($('ticker headline',ajaxXML).size()<1) ? targ.remove() : targ.startTicker();
  };





  // Toppageinfolist ------------------------------------------------------------
  getToppageinfolist = function(blockNum) {
    var paramBlock = (typeof blockNum != 'undefined') ? ('&block='+blockNum) : '';
    $.ajax({
      type:"GET",
      url: '/jsp/toppageinfo_list.jsp',
      data: 'TOP_ID=4'+paramBlock,
      cache: false,
      dataType: 'xml',
      timeout: 30000,
      error: function() {
        // alert('おすすめ情報のデータ読み込みに失敗しました。お手数ですが、ブラウザの再読み込みを行ってください。');
      },
      success: function(xml) {
        ajaxXML = xml;
        setToppageinfolist();
      }
    });
  };
  var setToppageinfolist = function() {
    var infoItems = [
      {areaId:'programlist',block:1,carousel:1},
      {areaId:'pickup',block:2,carousel:0},
      {areaId:'related',block:3,carousel:1}
    ];
    for (var i in infoItems) {
      var item = infoItems[i];
      // if(item.areaId=='related') return false;

      // Carouselの場合
      if (item.carousel) {
        var targ = $('div#mod-'+item.areaId+' div.carousel');
        targ.empty().append('<ol></ol>');
        $(ajaxXML).find('toppageinfo info').filter(function() {return $('block',this).text()==item.block}).each(function(j) {
          var link     = $.fn.setLink($('link',this).text());
          var window   = $.fn.setWindow($('window',this).text());
          var tracking = $.fn.setTracking($('info_id',this).text(), item.areaId);
          targ.children('ol').append('<li class="item'+(j+1)+'"><a href="'+link+'"'+window+tracking+'><img src="./_common/thumb/'+item.areaId+'/'+$('info_id',this).text()+'.jpg" alt="" width="72" height="60" />'+$.fn.doTrim($('title',this).text(),20)+'</a></li>');
        });
        var itemLength = targ.children('ol').children().size();
        if (itemLength<1) {
          $('div#mod-'+item.areaId).remove();
        } else {
          var restCnt = ((5-itemLength%5)==5) ? 0:(5-itemLength%5);
          for (var j=1;j<=restCnt;j++){
            targ.children('ol').append('<li class="nobg"></li>');
          }
          targ.startCarousel(item.areaId,itemLength);
        }
      } else {
      // pickupの場合
        var targ = $('div#mod-'+item.areaId+' div.body');
        targ.empty();
        $(ajaxXML).find('toppageinfo info').filter(function() {return $('block',this).text()==item.block}).each(function(j) {
          if (j%3<1) targ.append('<ol class="ol'+Math.floor(j/3)+'"></ol>');
          var link     = $.fn.setLink($('link',this).text());
          var window   = $.fn.setWindow($('window',this).text());
          var tracking = $.fn.setTracking($('info_id',this).text(), item.areaId);
          targ.children('ol.ol'+Math.floor(j/3)).append('<li><a href="'+link+'"'+window+tracking+'><img src="./_common/thumb/'+item.areaId+'/'+$('info_id',this).text()+'.jpg" alt="" width="144" height="120" />'+$('title',this).text()+'</a><p>'+$('text',this).text()+'</p><p class="more"><a class="smlbtn smlbtn-more" href="'+link+'"'+window+tracking+'>もっと見る</a></p></li>');
        });
        (targ.children('ol').children().size()<1) ? $('div#mod-'+item.areaId).remove() : targ.find('ol').each(function(){
          $(this).children('li').flatHeights();
        });
      }
    }
  };


  $.fn.extend({
    setProgLink: function(url,pid) {
      return (url != '') ? url : '/XD/program/detail/?pid='+pid;
    },
    setProgWin: function(trg) {
      return (trg != '') ? ' target="'+trg+'"' : '';
    },
    setLink: function(val) {
      return ((val.length)&&(val!='cms')) ? val : '#';
    },
    setWindow: function(val) {
      return (val == '1') ? '' : ' target="_blank"';
    },
    setTracking: function(val, id) {
      return (val == '') ? '' : ' name="jupiter_tvxd_'+id+'-'+val+'" type="custom" onclick="cto.tracklink(this)"';
    },
    setTrackingMS: function(val, id) {
      return (val == '') ? '' : ' name="'+id+'-'+val+'" type="custom" onclick="cto.tracklink(this)"';
    },
    doTrim: function(val,threshold) {
      if (val.length>threshold) {
        return val.substr(0,threshold)+'...';
      } else {
        return val;
      }
    },
    // Remove "undefined" & Trim
    doClean: function(val) {
      return (val == null) ? '' : val.replace(/(^\s+)|(\s+$)/g,'');
    }
  });





  // NowOnAirlist ------------------------------------------------------------
  getNowonairlist = function(chId) {
    $.ajax({
      type:"GET",
      url: '/jsp/nowonair_list.jsp',
      data: 'COUNT=3&CHANNEL_ID='+chId,
      cache: false,
      dataType: 'xml',
      timeout: 30000,
      error: function() {
//        alert('放送中の番組のデータ読み込みに失敗しました。お手数ですが、ブラウザの再読み込みを行ってください。');
      },
      success: function(xml) {
        ajaxXML = xml;
        setNowonairlist(chId);
      }
    });
  };
  var setNowonairlist = function(chId) {
    var targ;
    targ = $('#mod-onair .nowonairlist');
    targ.empty().append('<dl class="list-time"></dl>');
    $('#mod-onair .extra').empty();
    $(ajaxXML).find('onair program').each(function(j) {
      $('#mod-onair .extra:empty').text(formatDate($(this).attr('air_date')).format);
      var t = $(this).attr('air_time');
      var class_first = (j<1) ? ' class="first"':'';
      targ.children('dl').append('<dt'+class_first+'>'+t.substr(0,2)+':'+t.substr(2,2)+'～</dt><dd'+class_first+'><span>'+$('title_ja',this).text()+'</span></dd>');
    });
  };





  // Utility ------------------------------------------------------------
  var wd    = new Array('(日)','(月)','(火)','(水)','(木)','(金)','(土)');
  var wd_en = new Array('(Sun)','(Mon)','(Tue)','(Web)','(Thu)','(Fri)','(Sat)');
  
  formatDate = function(ymd,days) {
    var ret = {};
    var d = new Date(ymd.substr(0,4),ymd.substr(4,2)-1,ymd.substr(6,2));
    if (days) d.setDate(d.getDate()+days);
    ret.ymd = (days) ? (d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate()) : ymd;
    ret.format = (d.getFullYear())+'/'+(d.getMonth()+1)+'/'+d.getDate()+wd[d.getDay()];
    ret.md_jp = (d.getMonth()+1)+'月'+d.getDate()+'日'+wd[d.getDay()];

    return ret;
  }
})(jQuery);

