/**
 *
 *
*/
var ivyBBS_XHR = Class.create();
ivyBBS_XHR.prototype = {
  initialize: function(id, options) {
    this.panel = $(id);
    this.prefix = '/Board/xml/';
    this.rows = null;
    this.sleep = null;
    this.options = Object.extend({
      subjectLength:30,
      detailLength:80,
      type:'list',
      target:'_self',
      start:0,
      resize:null
    }, options || {});
      
    this.uiLoading();
  },
  uiLoading:function(){
    this.panel.innerHTML = '<table border="0" height="100%" width="100%" class="init"><tr><td align="center"><img src="/Images/uiComponent/loader_15x15.gif" width="15" height="15" border="0" alt=""/><br/>L o a d i n g ...</td></tr></table>';
    this.sleep = new PeriodicalExecuter(this.xmlLoading.bind(this),1);
  },
  xmlLoading:function(){
    this.sleep.stop();
    var xmlfile = this.prefix+this.options.board+'.xml';
    new Ajax.Request(xmlfile, {method:'post',contentType:'application/xml',encoding:'euc-kr',onComplete:this.getNodes.bind(this)});
  },
  getNodes:function(request){
    if(request.status==200 && request.readyState==4){
      var xml = request.responseXML;
      var infoNode = xml.getElementsByTagName("bbs")[0];
      this.rows = infoNode.getAttribute("rows");
      switch (this.options.type)
      {
      case 'album':
        this.templateAlbum(xml.getElementsByTagName("item"));
        break;
      case 'webzin':
        this.templateWebzin(xml.getElementsByTagName("item"));
        break;
      default:
        this.templateList(xml.getElementsByTagName("item"));
        break;
      }
    } else {
      this.requestHtml(request);
    }
  },
  templateList:function(nodes){
    var html = ''
    var entry = null;
    var j=(this.rows > this.options.rows)?this.options.rows:this.rows;
    j=  Number(j)+Number(this.options.start);
    for (var i=this.options.start; i<j; i++) {
      entry = nodes[i];
      html += '<div class="b_Row b_RowNum'+i+'">';
      html += '<div class="b_Title"><nobr><span class="b_Category">['+entry.getElementsByTagName("category")[0].firstChild.nodeValue+']</span><a href="'+entry.getElementsByTagName("link")[0].firstChild.nodeValue+'" target="'+this.options.target+'">'+this.strOffset(entry.getElementsByTagName("title")[0].firstChild.nodeValue,this.options.subjectLength)+'</a><span class="b_Comment">['+entry.getElementsByTagName("comment")[0].firstChild.nodeValue+']</span></nobr></div>';
      html += '<div class="b_Date">'+entry.getElementsByTagName("date")[0].firstChild.nodeValue+'</div>';
      html += '</div>';
    }
    this.panel.innerHTML = html;
  },
  templateAlbum:function(nodes){
    var html = ''
    var entry = null;
    var j=(this.rows > this.options.rows)?this.options.rows:this.rows;
    j=  Number(j)+Number(this.options.start);
    for (var i=this.options.start; i<j; i++) {
      entry = nodes[i];
      html += '<div class="b_Row b_RowNum'+i+'">';
      html += '<div class="b_Photo"><table border="0" width="100%" height="100%" cellpadding="0" cellspacing="0"><tr><td align="center"><a href="'+entry.getElementsByTagName("link")[0].firstChild.nodeValue+'" target="'+this.options.target+'"><img src="/iData/boards/'+this.options.board+'/thumb/'+entry.getElementsByTagName("thumbnail")[0].firstChild.nodeValue+'"';
      if(this.options.resize!=null){
        html += ' onload="Ivy.imResizeRatio(this,\''+this.options.resize+'\');"';
      }
      html +='/></a></td></tr></table></div>';
      html += '<div class="b_Title"><nobr><a href="'+entry.getElementsByTagName("link")[0].firstChild.nodeValue+'">'+this.strOffset(entry.getElementsByTagName("title")[0].firstChild.nodeValue,this.options.subjectLength)+'</a><span class="b_Comment">['+entry.getElementsByTagName("comment")[0].firstChild.nodeValue+']</span></nobr></div>';
      html += '<div class="b_Date">'+entry.getElementsByTagName("date")[0].firstChild.nodeValue+'</div>';
      html += '</div>';
    }
    this.panel.innerHTML = html;
  },
  templateWebzin:function(nodes){
    var html = ''
    var entry = null;
    var j=(this.rows > this.options.rows)?this.options.rows:this.rows;
    j=  Number(j)+Number(this.options.start);
    for (var i=this.options.start; i<j; i++) {
      entry = nodes[i];
      html += '<div class="b_Row b_RowNum'+i+'">';
      html += '<div class="b_Detail">';
      if(entry.getElementsByTagName("thumbnail")[0]){
        html += '<img class="b_Photo" src="/iData/boards/'+this.options.board+'/thumb/'+entry.getElementsByTagName("thumbnail")[0].firstChild.nodeValue+'"';
        if(this.options.resize!=null){
          html += ' onload="Ivy.imResizeRatio(this,\''+this.options.resize+'\');"';
        }
        html +=' align="left"/>';
      }
      html += '<div class="b_Title"><nobr><span class="b_Category">['+entry.getElementsByTagName("category")[0].firstChild.nodeValue+']</span><a href="'+entry.getElementsByTagName("link")[0].firstChild.nodeValue+'" target="'+this.options.target+'">'+this.strOffset(entry.getElementsByTagName("title")[0].firstChild.nodeValue,this.options.subjectLength)+'</a><span class="b_Comment">['+entry.getElementsByTagName("comment")[0].firstChild.nodeValue+']</span></nobr></div>';
      html += this.strOffset(entry.getElementsByTagName("description")[0].firstChild.nodeValue,this.options.detailLength);
      html += '<span class="b_Date">'+entry.getElementsByTagName("date")[0].firstChild.nodeValue+'</div>';
      html += '</span></div>';
    }
    this.panel.innerHTML = html;
  },
  strOffset:function(str,len){
    if(str.length > len){
      str = str.substring(0,len);
      str += '...';
    }
    return str;
  },
  reload:function(){
    if(arguments.length > 0){
      this.xmlLoading();
    } else {
      this.uiLoading();
    }
  },
  errorPrint: function(req){
    this.panel.innerHTML = '<table border="0" height="100%" width="100%" class="init"><tr><td align="center"><div>Error No. X0HR'+req.status+' '+req.readyState+'</div></td></tr></table>';
  },
  requestHtml: function(req){
    var subjectLength = Math.round(this.options.subjectLength * 1.3);
    var detailLength = Math.round(this.options.detailLength * 1.3);
    var param = 'board='+this.options.board+'&type='+this.options.type+'&rows='+this.options.rows+'&subjectLength='+subjectLength+'&detailLength='+detailLength+'&target='+this.options.target+'&start='+this.options.start+'&resize='+this.options.resize;
    var url = '/htmls/ivy_bbs_xhr.php';
    Ivy.getHtml.send(this.panel,url+'?'+param);
  }
}