
var containerElements = [];

Event.observe(window, 'load', loadData, false);

var bbsLoader = {
  single: function(allData) {
	  var board_id = getBoardIdsFromId(this)[0];
	  var topics = allData[board_id] || [];
	  buildList(this, topics);
  },
  multi:  function(allData) {
	  var board_id = getBoardIdsFromId(this);
	  var topics = $H(allData).findAll(function(e){
		  return board_id.include(e.key) }).pluck('value').flatten()
	  		.sortBy(function(t){ return -1 * t.updated }).splice(0, 3);
	  buildList(this, topics, true);
  }
};

function bbsCallback(allData) {
	containerElements.invoke('_bbsLoader', allData);
}

function getBoardIdsFromId(elm) {
	return elm.id.replace(/^bbs\-/, '').split('-');
}

function loadData() {
	var allIds = [];
	
	$A(document.getElementsByClassName('load-bbs')).each(function (elm) {
		containerElements.push(elm);
		var bids = getBoardIdsFromId(elm);
		if(bids.length > 1) {
			elm._bbsLoader = bbsLoader.multi;
			allIds = allIds.concat(bids);
		} else {
			elm._bbsLoader = bbsLoader.single;
			allIds.push(bids[0]);
		}
	});

	var url = BBS_URL +'callback=bbsCallback&board_id=' +
		allIds.select(function(id){ return /^\d+$/.test(id) }).join(',') +
   		'&uniqid='+ (new Date().getTime());
	// append unique id to prevent IE from using cache.

	loadScript(url);
}

function loadScript(url) {
	var script = document.createElement('script');
		script.setAttribute('type', 'text/javascript');
		script.setAttribute('src', url);
		script.setAttribute('charset', 'EUC-JP');

	document.getElementsByTagName('head')[0].appendChild(script);
}

function buildList(cont, topics, addBoardTitle) {
	var li_list = topics.map(
		function(topic) {
			var li = document.createElement('li');
			var a  = document.createElement('a');
			var txt = topic.title + (addBoardTitle ? ' ('+ topic.board +')' : '');
			
			a.href = topic.url;
			a.target = '_blank';
			a.appendChild(document.createTextNode(txt));

			li.appendChild(a);

			var now = (new Date()).getTime() / 1000;
			if(now - topic.updated < NEW_TOPIC_TIME) {
				var sup = document.createElement('sup');
				sup.innerHTML = 'NEW';
				sup.className = 'new';
				li.appendChild(sup);
		    }
			return li;
		});

	if(li_list.length == 0) {
		return ;
	}

	li_list.last().className = 'list-end';

	var ul = li_list.inject(
			document.createElement('ul'), function(ul, li){ ul.appendChild(li); return ul; });
	cont.appendChild(ul);
}

