

function elapseTime(serialTime) {
   var now = new Date();
   var diff = ((now.getTime() - serialTime) / 1000);
   if(diff < 60) {
     return diff + '秒前';
   }else if(diff < 60 * 60) {
     return Math.floor(diff / 60) + '分前';
   }else if(diff < 60 * 60 * 24) {
     return Math.floor(diff / 60 / 60) + '時間前';
   }else if(diff < 60 * 60 * 24 * 7) {
     return Math.floor(diff / 60 / 60 / 24) + '日前';
   }else{
     var date = new Date();
     date.setTime(serialTime);
     return 1900 + date.getYear() + '/' + (date.getMonth() + 1)  + '/' + date.getDate();
   }
   return '';
}

function MJTopicWidget(scriptId) {
  this.widgetType = 'topic';
  this.topicId = null;
  this.backgroundColor = null;
  this.border = null;
  this.overflow = null;
  this.showSearchBox = true;
  this.showDate = true;
  this.showViewCount = false;
  this.showTotalCount = true;
  this.of = 'date';
  
  this.titleLength = null;
  this.sumaryLength = null;
  this.fontColor = null;
  this.color = null;
  this.linkTarget = null;
  
  
  this.topicId='118378';
  
  this.showSearchBox = false;
  
  this.showDate = false;
  
  this.showSummary = false;
  
  
  this.classNamePrefix = "mjw_";
  this.scriptId = scriptId;
  var script = document.getElementById(scriptId);  
  this.panel = document.createElement('div');
  this.panelId = scriptId + '_panel'; 
  
  if(this.width) {
    this.panel.style.width = this.width;
  }
  if(this.height) {
    this.panel.style.height = this.height;
  }
  if(this.backgroundColor) {
    this.panel.style.backgroundColor = this.backgroundColor;
  }  
  if(this.color) {
    this.panel.style.color = this.color;
  }
  if(this.border) {
    this.panel.style.border = this.border;
  }
  
  if(this.overflow) {
    this.panel.style.overflow = this.overflow;
  }
  
  this.panel.className = this.classNamePrefix + 'frame';
  if(this.fontSize) {
    this.panel.style.fontSize = this.fontSize;
  }
  script.parentNode.insertBefore(this.panel, script);   
  
  this.content = document.createElement('div');
  this.panel.appendChild(this.content);
  
  var loader = document.createElement('div');
  loader.style.textAlign='center';
  this.content.appendChild(loader);
  
  loader.appendChild(document.createTextNode('Loading...'));
  
  var pageUrl = encodeURI(window.location);
  var pageTitle = encodeURI(document.title);
  var pageRef = encodeURI(document.referrer);
  
  var loadScript = createLoadScript('mjdataloader_'+this.scriptId, 
                                  'http://mediajam.info/blogparts/topic/data.json?jsonp=mjwidget['+"'"+this.scriptId+"'"+'].onLoadData&topicId=' 
                                  + this.topicId + '&wurl=' + pageUrl + '&wtitle=' + pageTitle + '&wtype=' 
                                  + '&enc=UTF-8'
                                  + this.widgetType + '&ref=' + pageRef);

  this.panel.appendChild(loadScript);
}

function createLoadScript(id, src) {
  var loadScript = document.createElement('script');
  loadScript.id = id;
  loadScript.src = src;
  loadScript.type = 'text/javascript';
  return loadScript;
}

MJTopicWidget.prototype.clearContent = function() {
  var nodes = this.content.childNodes;
    for (var i=0; i < nodes.length; i++) {
    this.content.removeChild(nodes[i]);
  }
}


MJTopicWidget.prototype.onLoadData = function(json) {
  this.clearContent();
  
  if(json.result == 'success') {
    this.renderContent(json);
  }else{
    this.renderError(json);
  }
  this.renderFooter(json);
};

MJTopicWidget.prototype.renderContent = function(topic) {

  var src = document.getElementById(this.scriptId + '_info');
  var articleLink = document.createElement('a');
  articleLink.href = topic.article.url;
  articleLink.appendChild(document.createTextNode(' - ' + elapseTime(topic.date) + ' | ' +topic.article.source));
  src.appendChild(articleLink);
  
  var commentLink = document.createElement('a');
  commentLink.href = topic.url + '#comment';
  commentLink.appendChild(document.createTextNode(topic.commentCount + ' comments'));
  
  src.appendChild(document.createTextNode(' | '));
  src.appendChild(commentLink);
  src.appendChild(document.createTextNode(' | ' + topic.viewCount + ' views'));
  
  var t = document.createElement('div');
  this.content.appendChild(t);
  t.className = this.classNamePrefix + 'topicInfo';
  if(this.border) {
    t.style.borderTop = this.border;
  }
  var i;
  if(topic.article.isAllowSummary) {
    var quote = document.createElement('blockquote');
    quote.cite = topic.article.url;
    var summary = topic.article.summary.replace(new RegExp('\r\n|[\r\n]', 'gm'), '\n');
    summary = summary.replace(new RegExp('[\s　]', 'gm'), '');
    var lines = summary.split('\n');
    for(i = 0;i < lines.length;i++) {
      quote.appendChild(document.createTextNode(lines[i]));
      if(i + 1 < lines.length) {
        quote.appendChild(document.createElement('br'));
      }
    }
    t.appendChild(quote);
  }
  
  var span;
  var a;
  
  
  
  var div = document.createElement('div');
  div.className=this.classNamePrefix + 'articles';
  
  a = document.createElement("a");
  a.href="http://mediajam.info/topic/" + topic.id + "#relatedArticle";
  a.appendChild(document.createTextNode('関連記事(' + topic.articleCount + ')'));
  div.appendChild(a);
  
  if(topic.articles.length > 0) {
    var ul = document.createElement('ul');
    div.appendChild(ul);
    
    for(i = 0;i < topic.articles.length;i++) {
      var art = topic.articles[i];
      var li = document.createElement('li');
      a = document.createElement('a');
      a.href=art.url;
      a.appendChild(document.createTextNode(art.title));
      li.appendChild(a);
      li.appendChild(document.createTextNode(' - ' + art.source));
      ul.appendChild(li);
    } 
  }
  t.appendChild(div);
  
  
};

MJTopicWidget.prototype.renderEmptyResult = function(json) {
  var t = document.createElement('div');
  t.className = this.classNamePrefix + 'error';
  t.appendChild(document.createTextNode('該当する記事は見つかりませんでした。'));
  if(this.border) {
    t.style.borderTop = this.border;
  }
  this.content.appendChild(t);
};

MJTopicWidget.prototype.renderError = function(json) {
  var t = document.createElement('div');
  this.content.appendChild(t);
  t.className = this.classNamePrefix + 'error';
  if(json && json.exception.className == 'com.ubicast.gaia.service.impl.BlankQueryException') {
    t.appendChild(document.createTextNode('該当する記事は見つかりませんでした。'));
  }else if(json && json.exception.className == 'com.ubicast.gaia.service.ResourceNotFoundException') {
    t.appendChild(document.createTextNode('このトピックは削除されたか、公開期限が切れました。'));
  }else{
    t.appendChild(document.createTextNode('Error...'));
  }
};


MJTopicWidget.prototype.renderFooter = function(item) {

  if(item.result == 'success') {
    var info = document.createElement('div');
    info.className = this.classNamePrefix + 'getit';
    info.style.marginTop = '5px';
    var a = document.createElement('a');
    a.href = 'javascript:void(0);';
    var _this = this;
    a.onclick = function() {
      var code = document.getElementById(_this.panelId + '_code');
      if(code.style.display == 'block') {
        code.style.display = 'none';
      }else{
        code.style.display = 'block';
      }
    };

    var button = document.createElement('img');
    button.src = 'http://mediajam.info/compo/images/main/btn_add-blogtopic_o.gif';
    button.alt = 'このトピックでブログを書く';
    button.border = 0;
    button.onmouseover = function() { this.src = 'http://mediajam.info/compo/images/main/btn_add-blogtopic_ov.gif'; };
    button.onmouseout = function() { this.src = 'http://mediajam.info/compo/images/main/btn_add-blogtopic_o.gif'; };
    
    a.appendChild(button);
    info.appendChild(a);
    this.content.appendChild(info);
    
    var codeDiv = document.createElement('div');
    codeDiv.id = this.panelId + '_code';
    codeDiv.style.display = 'none';    
    
    var p = document.createElement('p');
    p.appendChild(document.createTextNode('このHTMLコードをページに埋め込んでください。'));
    codeDiv.appendChild(p);
    p = document.createElement('p');
    p.appendChild(document.createTextNode('利用者は本ブログパーツを利用することをもって'));
    a = document.createElement('a');
    a.href = 'http://mediajam.info/siteinfo/terms.html';
    a.appendChild(document.createTextNode('利用規約'));
    p.appendChild(a);
    p.appendChild(document.createTextNode('の内容に同意したものとみなします。また、利用いただいているすべてのブログ・サイトはmediajamに"ブログつながり"として表示されます。'));
    codeDiv.appendChild(p);  
    
    var code = document.createElement('textarea');
    code.style.fontSize = '10px';
    code.rows=10;
    code.cols=50;
    code.onclick=function() {this.select();};
    code.readOnly=true;
    var topicUrl = 'http://mediajam.info/topic/' + item.id;
    var htmlCode = '<div class="mj_topic"><span class="mj_title"><a href="'+topicUrl+'"><img src="http://mediajam.info/compo/images/widget/icon_favicon.gif" border="0" alt="Generated by mediajam" />' + item.article.title + '</a></span><span class="mj_source"></span></div>\r\n';
    htmlCode += '<script id="mjw_topic' + item.id + '" type="text/javascript" src="http://mediajam.info/blogparts/topic/script.js?sid=mjw_topic'+item.id+'&tid='+item.id+'"></script>'
    code.appendChild(document.createTextNode(htmlCode));
    codeDiv.appendChild(code);  
    
    info.appendChild(codeDiv);

  }
  if(this.showSearchBox) {
    var form = document.createElement('form');
    form.className = this.classNamePrefix + 'searchForm';
    
    if(this.border) {
      form.style.borderTop = this.border;
    }
    form.action = 'http://mediajam.info/topic/';
    form.method = 'GET';
    
    var input = document.createElement('input');
    input.name = 'query';
    input.type = 'text';
    input.value = this.query;
    input.size = 10;
    form.appendChild(input);
    
    var submit = document.createElement('input');
    submit.type = 'submit';
    submit.value = '検索';
    
    form.appendChild(submit);
    
    this.content.appendChild(form);
  }
  
  if(item && item.pr) {
    var pr = document.createElement('div');
    pr.className = this.classNamePrefix + 'pr';
    if(this.border) {
      pr.style.borderTop = this.border;
    }
    
    for(i = 0;i < item.pr.length;i++) {
      var item = item.pr[i];
      var d = document.createElement('div');
      if(item.type == 'announcement') {
        d.appendChild(document.createTextNode('[告知]'));
      }else if(item.type == 'advertisement') {
        d.appendChild(document.createTextNode('[PR]'));
      }
      var a = document.createElement('a');
      a.href = item.url;
      if(this.linkTarget) {
        a.target = this.linkTarget;
      }
      a.appendChild(document.createTextNode(item.title));
      d.appendChild(a);
      
      pr.appendChild(d);
    }   
    
    this.content.appendChild(pr);
  }
  
  // generated by mediajam
  var p = document.createElement('p');
  p.style.marginTop = '6px';
  p.style.padding = '3px 3px 0';
  p.style.fontSize = '10px';
  p.appendChild(document.createTextNode('Generated by '));
  a = document.createElement('a');
  a.href='http://mediajam.info/';
  a.appendChild(document.createTextNode('mediajam'));
  p.appendChild(a);
  this.content.appendChild(p);
  
};


MJTopicWidget.prototype.createXmlHttpRequest = function() {
  var xmlhttp = false;
  if( window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
  } else if(window.ActiveXObject) {
    try {
      xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
    } catch(e) {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return xmlhttp;
};

var mjwidget;

(function() {
  if(mjwidget == undefined) {
    mjwidget = new Object();
  }

  scriptId = 'mjw_topic118378';
  mjwidget[scriptId] = new MJTopicWidget(scriptId);
})()
