// ===================================================
// RSS Reader customed by Symphony
// ===================================================

//Global Variable
RSS_ReadItem = [];
RSS_MergeItem = [];
RSS_ReadCount = 0;
RSS_LoadFailedMsg = "";

//String sub function
function strGetMultiByteLength(str)
{
  var i,len;
  for(i = 0,len = 0;i < str.length;i++){
    var c = str.charCodeAt(i);
    if(c < 0x100){ len += 1; }
    else{ len += 2; }
  }
  return len;
}

function strSubStrMultiByte(str,index,length)
{
  var i,len,ret;

  for(i = 0,len = 0,ret = "";i < str.length;i++){
    if(len >= index){ break; }
    var c = str.charCodeAt(i);
    if(c < 0x100){ len += 1; }
    else{ len += 2; }
  }

  for(len = 0;i < str.length;i++){
    if(len >= length) break;
    var c = str.charCodeAt(i);
    ret = ret + String.fromCharCode(c);
    if(c < 0x100){ len += 1; }
    else{ len += 2; }
  }
  return ret;
}

//RSS Read Callback
function RSS_ReadCallback(data)
{
  var item,itemdata,len;
  var rsstitle,rsslink,rssdescription,rssversion;
  
  if(data != undefined && data != null){
    item = data['rss'];
    rssversion = 0;
    if(item != undefined){
      itemdata = data['rss'].channel[0].item;
      rsstitle = data['rss'].channel[0].title;
      rsslink = data['rss'].channel[0].link;
      rssdescription = data['rss'].channel[0].description;
      rssversion = 2;
    }
  
    else{
      item = data['rdf:RDF'];
      if(item != undefined){
        itemdata = data['rdf:RDF'].item;
        rsstitle = data['rdf:RDF'].channel[0].title;
        rsslink = data['rdf:RDF'].channel[0].link;
        rssdescription = data['rdf:RDF'].channel[0].description;
        rssversion = 1;
      }
    }
  
    if(rssdescription == undefined && rsstitle != undefined){ rssdescription = rsstitle; }
    if(typeof(RSS_ReadItem[RSS_ReadCount].url) == "string"){ len = 1; }
    else{ len = RSS_ReadItem[RSS_ReadCount].url.length; }

    if(rssversion > 0){
      for(i = 0;i < itemdata.length;i++){
        if(rssversion == 1){
          var tmp;
          tmp = itemdata[i]["dc:date"].replace(/T/g," ");
          tmp = tmp.replace(/([0-9]{4})-([0-9]{2})-([0-9]{2})/g,"$2/$3/$1");
          itemdata[i].category = itemdata[i]["dc:subject"];
          itemdata[i].pubDate = tmp;
          itemdata[i].auther = itemdata[i]["dc:creator"];
        }
        if(len > 1){
          if(rsstitle != undefined) itemdata[i].rsstitle = rsstitle;
          if(rsslink != undefined) itemdata[i].rsslink = rsslink;
          if(rssdescription != undefined) itemdata[i].rssdescription = rssdescription;
        }
      }
      RSS_MergeItem = RSS_MergeItem.concat(itemdata);
    }
  }

  RSS_ReadItem[RSS_ReadCount].count++;
  if(RSS_ReadItem[RSS_ReadCount].count >= len){
    var itemdata = RSS_MergeItem;
    var tag = RSS_ReadItem[RSS_ReadCount].tag;
    var name = RSS_ReadItem[RSS_ReadCount].name;
    var maxitem = RSS_ReadItem[RSS_ReadCount].maxitem;
    var maxlen = RSS_ReadItem[RSS_ReadCount].maxlen;
    var category = RSS_ReadItem[RSS_ReadCount].category;
    var width = RSS_ReadItem[RSS_ReadCount].width;
    var readtitle = false;
    if(RSS_ReadItem[RSS_ReadCount].readtitle != undefined && RSS_ReadItem[RSS_ReadCount].readtitle != 0){ readtitle = true; }
    RSS_WriteItem(itemdata,tag,name,maxitem,maxlen,category,width,readtitle);
    RSS_MergeItem = [];
    RSS_ReadCount++;
  }
  
  RSS_ReadURLItem();
}

function RSS_ReadCallback_NG(http)
{
  var msg = RSS_LoadFailedMsg + " (" + http.status + ")";
  document.getElementById(RSS_ReadURL[RSS_ReadCount].tag).innerHTML = msg;

  RSS_ReadCount++;
  RSS_ReadURLItem();
}

function RSS_SortItemByTime(item1,item2)
{
  return Date.parse(item2.pubDate) - Date.parse(item1.pubDate);
}

function RSS_WriteItem(itemdata,tag,name,maxitem,maxlen,category,width,readtitle)
{
  var i,j;

  for(i = 0;i < itemdata.length;i++){
    itemdata[i].pubDate = itemdata[i].pubDate.replace(/[+-][0-9][0-9]\:{0,1}[0-9][0-9]/g,"");
  }
  itemdata.sort(RSS_SortItemByTime);

  var tableitem = document.createElement('table');
  for(i = 0,j = 0;i < itemdata.length && j < maxitem;i++){
    if(category.length > 0){
      var category_flag = false;
      var k;
      for(k = 0;k < category.length;k++){
        if(itemdata[i].category == category[k]){ category_flag = true; break; }
      }
      if(!category_flag) continue;
    }
    var tr = document.createElement('tr');
    var td = document.createElement('td');
    var a = document.createElement('a');
    var div = document.createElement('div');
    var text = document.createTextNode(itemdata[i].title);

    if(maxlen > 0){
//      if(itemdata[i].title.length > maxlen){
//        tmp = itemdata[i].title.substr(0,maxlen - 1);
      if(strGetMultiByteLength(itemdata[i].title) > maxlen){
        tmp = strSubStrMultiByte(itemdata[i].title,0,maxlen - 3);
        tmp = tmp.concat("...");
        text = document.createTextNode(tmp);
      }
    }
    var description = itemdata[i].description;
    if(description == undefined){ description = itemdata[i].title; }
    var nowdate = new Date();
    var itemdiff = nowdate.getTime() - Date.parse(itemdata[i].pubDate);
    if(itemdiff <= 1000 * 60 * 60 * 12){ a.className = "latest"; }
    a.href = itemdata[i].link;
    a.title = description;
    a.target = "_blank";
    a.appendChild(text);
    div.align = "left";
    div.appendChild(a);
    td.appendChild(div);

    var titlestring,titlelink,titledesc;
    titlestring = "";
    if(readtitle){
      if(itemdata[i].auther != undefined){
	    titlestring = itemdata[i].auther;
	    titlelink = itemdata[i].link;
	  }
      else if(itemdata[i].rsstitle != undefined){
        titlestring = itemdata[i].rsstitle;
        titlelink = itemdata[i].rsslink;
        titledesc = itemdata[i].rssdescription;
      }
    }
    else{
      if(itemdata[i].rsstitle != undefined){
        titlestring = itemdata[i].rsstitle;
        titlelink = itemdata[i].rsslink;
        titledesc = itemdata[i].rssdescription;
      }
      else if(itemdata[i].auther != undefined){
	    titlestring = itemdata[i].auther;
	    titlelink = itemdata[i].link;
	  }
	}
    if(titlestring != ""){
      var title = document.createTextNode("(" + titlestring + ")");
      div = document.createElement('div');
      a = document.createElement('a');
      if(titlelink != undefined){ a.href = titlelink; }
      if(titledesc != undefined){ a.title = titledesc; }
      if(itemdiff <= 1000 * 60 * 60 * 12){ a.className = "latest"; }
      a.target = "_blank";
      a.appendChild(title);
      div.align = "right";
      div.appendChild(a);
      td.appendChild(div);
    }
    tr.appendChild(td);
    tableitem.appendChild(tr);
    j++;
  }
  var tagitem = "<table class = " + name + " width = " + width + ">";
  tagitem = tagitem + tableitem.innerHTML + "</table>";
  document.getElementById(tag).innerHTML = tagitem;
}

//RSS Read

function RSS_ReadURLItem()
{
  if(RSS_ReadItem.length <= RSS_ReadCount) return false;

  var url;
  if(typeof(RSS_ReadItem[RSS_ReadCount].url) == "string"){ url = RSS_ReadItem[RSS_ReadCount].url; }
  else{ url = RSS_ReadItem[RSS_ReadCount].url[RSS_ReadItem[RSS_ReadCount].count]; }

  var xotree = new XML.ObjTree();
  var opt = { method: 'post', onFailure: RSS_ReadCallback_NG, parameters: 'rss=read' };
  xotree.force_array = ["rdf:li","channel","item"];
  xotree.parseHTTP(url,opt,RSS_ReadCallback);
  return true;
}

function RSS_Read(rssurl,failedmsg)
{
  if(rssurl.length <= 0) return;

  var i;
  for(i = 0;i < rssurl.length;i++){ rssurl[i].count = 0; }
  RSS_ReadItem = rssurl;
  RSS_MergeItem = [];
  RSS_ReadCount = 0;
  RSS_LoadFailedMsg = failedmsg;
  RSS_ReadURLItem();
}
