//----------------------------------------------------------
// Opera fast navigation mode.
//----------------------------------------------------------

if(typeof(history.navigationMode) != 'undifined')
{
  history.navigationMode = 'fast';
}


//----------------------------------------------------------
// Create namespace for template code.
//----------------------------------------------------------

var template = new Object;
template.baseUrl = 'http://webos-goodies.jp';


//----------------------------------------------------------
// Utility functions.
//----------------------------------------------------------

template.windowOnLoad = [];

template.addWindowEvent = function(name, handler)
{
  template.windowOnLoad[template.windowOnLoad.length] = handler;
};

window.onload = function()
{
  for(var i = 0 ; i < template.windowOnLoad.length ; i++)
  {
    template.windowOnLoad[i]();
  }
};

template.getElementText = function(e) {
  return (e.innerText ? e.innerText : (e.textContent ? e.textContent : ''));
};

template.escapeHTML = function(s) {
  return s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/, '&quot;').replace(/\'/, '&#39;');
};

template.gel = function(id) {
  return document.getElementById(id);
};

template.nel = function(tag) {
  return document.createElement(tag);
};

template.tinyTemplate = function(template, args) {
  return template.replace(/\$(\d+)/g, function(str, p1) {
	return args[parseInt(p1, 10)];
  });
}

template.formatText = function(str) {
  return this.escapeHTML(str||'').replace(/\r\n|\r|\n/g, '<br />');
}

template.formatDate = function(d) {
  if(d instanceof(Date)) {
	return this.tinyTemplate(
	  '$0年$1月$2日 $3:$4',
	  [d.getFullYear(), d.getMonth()+1, d.getDate(), d.getHours(), d.getMinutes()]);
  } else {
	return '';
  }
}


//----------------------------------------------------------
// Notification for old url.
//----------------------------------------------------------

template.oldSite = function()
{
  if(document.location.href.match(/^http\:\/\/blog\.livedoor\.jp\/sourcewalker\/?(.*)$/i))
  {
	  var rel = RegExp.$1;
	  if(!rel) rel = '';
	  var pageUrl = 'http://webos-goodies.jp/' + rel;
	  document.open();
	  document.write(
	    '<div style="text-align:center; color:red; font-weight:bold; margin:16px 0px;">' +
	    'サイトを移転しました。<br/>' +
	    '移転先：<a href="' + pageUrl + '">' + pageUrl + '</a>'+
		'</div>');
	  document.close();
  }
}


//----------------------------------------------------------
// Generating related links of the article.
//----------------------------------------------------------

template.generateLink = function(text, url)
{
  var a = document.createElement('A');
  a.href = url;
  a.appendChild(document.createTextNode(text));
  return a;
};

template.generateRelatedLinks = function(json, root)
{
  var parent  = document.createDocumentFragment();
  var catURL  = root + 'categories/' + json.t + '.html'
  var caption = document.createElement('H1');
  caption.appendChild(this.generateLink(json.c, catURL));
  parent.appendChild(caption);

  var docIdMatch = /(\w+)\.html$/;
  var docId = 0;
  if(window.location.href.match(docIdMatch)) {
    docId = RegExp.$1;
  }
  var num = Math.min(json.p.length, 5);
  var ul = document.createElement('UL');
  for(var i = 0 ; i < num ; ++i)
  {
    var li = document.createElement('LI');
    var text = document.createTextNode(json.p[i].t);
    if(json.p[i].u.match(docIdMatch) && RegExp.$1 == docId) {
      li.appendChild(text);
    } else {
      var a = document.createElement('A');
      a.href = json.p[i].u
      a.appendChild(text);
      li.appendChild(a);
    }
    ul.appendChild(li);
  }
  parent.appendChild(ul);

  var morelink = document.createElement('DIV');
  morelink.className = 'morecategory';
  morelink.appendChild(this.generateLink('>> もっと読む', catURL));
  parent.appendChild(morelink);

  return parent;
};


//----------------------------------------------------------
// rendering comments
//----------------------------------------------------------

template.commentTemplate = [
  '<div class="comment_item">',
  '<h2>$0.&nbsp;Posted by $1 &nbsp;&nbsp;&nbsp;$2</h2>',
  '<p>$3</p>',
  '</div>'].join('');

template.renderComments = function(pageId) {
  var url   = 'http://spreadsheets.google.com/tq?key=pMIBrnJ4PHK_Tnb_IAz3cTQ&gid=0&pub=1';
  var query = new google.visualization.Query(url);
  query.setQuery("select * WHERE B = '" + pageId + "' ORDER BY A");
  query.send(function(response) {
	var data  = response.getDataTable();
	var nRows = data.getNumberOfRows();
	if(nRows > 0) {
	  var html  = [
		'<h1>この記事へのコメント</h1>',
		'<div class="comment_body">'];
	  for(var row = 0 ; row < nRows ; ++row) {
		var time  = template.formatDate(data.getValue(row, 0));
		var name  = template.escapeHTML(data.getFormattedValue(row, 3) || '');
		var url   = template.escapeHTML(data.getFormattedValue(row, 4) || '');
		var text  = template.formatText(data.getFormattedValue(row, 5) || '');
		if(url && /^https?:\/\//.test(url)) {
		  name = '<a href="' + url + '">' + name + '</a>';
		}
		html.push(template.tinyTemplate(template.commentTemplate, [row + 1, name, time, text]));
	  }
	  html.push('</div>');
	  template.gel('tpl_comments').innerHTML = html.join('');
	}
	template.gel('tpl_num_comments').innerHTML = nRows;
  });
};

template.trackbackTemplate = [
  '<div class="trackback_item">',
  '<h2>$0.&nbsp;$1&nbsp;&nbsp;[&nbsp;$2&nbsp;]&nbsp;&nbsp;&nbsp;$3</h2>',
  '<p>$4</p>',
  '</div>'].join('');

template.renderTrackbacks = function(pageId) {
  var url   = 'http://spreadsheets.google.com/tq?key=pMIBrnJ4PHK_XSOfGkVhjTQ&gid=0&pub=1';
  var query = new google.visualization.Query(url);
  query.setQuery("select * WHERE B = '" + pageId + "' ORDER BY A");
  query.send(function(response) {
	var data  = response.getDataTable();
	var nRows = data.getNumberOfRows();
	if(nRows > 0) {
	  var html  = [
		'<h1>この記事へのトラックバック</h1>',
		'<div class="trackback_body">'];
	  for(var row = 0 ; row < nRows ; ++row) {
		var time   = template.formatDate(data.getValue(row, 0));
		var site   = template.escapeHTML(data.getFormattedValue(row, 3) || '');
		var source = template.escapeHTML(data.getFormattedValue(row, 4) || '');
		var url    = template.escapeHTML(data.getFormattedValue(row, 5) || '');
		var text   = template.formatText(data.getFormattedValue(row, 7) || '');
		if(url && /^https?:\/\//.test(url)) {
		  source = '<a href="' + url + '">' + source + '</a>';
		}
		html.push(template.tinyTemplate(template.trackbackTemplate, [row + 1, source, site, time, text]));
	  }
	  html.push('</div>');
	  template.gel('tpl_trackbacks').innerHTML = html.join('');
	}
	template.gel('tpl_num_trackbacks').innerHTML = nRows;
  });
};

template.recentArticlesTemplate = '<div class="sidebody"><a href="$0">$1</a></div>';

template.renderRecentArticles = function(context, response, status) {
  if(status != 200 || !response.feed || !response.feed.entries) return;
  var entries = response['feed']['entries'];
  var html    = [];
  for(var i = 0, l = entries.length ; i < l ; ++i) {
	var entry = entries[i];
	html.push(this.tinyTemplate(this.recentArticlesTemplate,
								[this.escapeHTML(entry.link), this.escapeHTML(entry.title)]));
  }
  this.gel('tpl_recent_articles').innerHTML = html.join('');
};

//----------------------------------------------------------
// friend connect
//----------------------------------------------------------

template.friendconnect = {};
template.friendconnect.siteId = '15604737560590832653';
template.friendconnect.skin = {
  'BORDER_COLOR' : '#cccccc',
  'ENDCAP_BG_COLOR' : '#e0ecff',
  'ENDCAP_TEXT_COLOR' : '#333333',
  'ENDCAP_LINK_COLOR' : '#0000cc',
  'ALTERNATE_BG_COLOR' : '#ffffff',
  'CONTENT_BG_COLOR' : '#ffffff',
  'CONTENT_LINK_COLOR' : '#0000cc',
  'CONTENT_TEXT_COLOR' : '#333333',
  'CONTENT_SECONDARY_LINK_COLOR' : '#7777cc',
  'CONTENT_SECONDARY_TEXT_COLOR' : '#666666',
  'CONTENT_HEADLINE_COLOR' : '#333333',
  'ALIGNMENT' : 'right'
};
