irpocket.addComma = function(s) {
	var to = String(s);
	var tmp = "";
	while(to != (tmp = to.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2"))) {
		to = tmp;
	}
	return to;
};

irpocket.formatDate = function(date, format) {
	var ymd = (new String(date)).replace(/ .+$/, '').split(/[-\/ ]/);
	var f = format || "YYYY.MM.DD";
	return f.replace(/YYYY/, ymd[0]).replace(/MM/, ymd[1]).replace(/DD/, ymd[2])
			.replace(/YY/, ymd[0]%100).replace(/M/, 1*ymd[1]).replace(/D/, 1*ymd[2]);
}

irpocket.handlerTable = function(data) {
	// TR
	//  TH yn: year name
	// TR ft ot: First term, Other term
	//    q1 q2 q3 q4: quarter name
	//  TH qn: quarter name
	//  TH cn: data type name
	//  TD latest past: for value cell
	
	var target = (irpocket && irpocket.table_target) || document;
	
	var latest_year = (0 < data.times.length) ? data.times[0].year : undefined;
	var years = [ ];
	var values = { };	// by year, term
	for(var t=0 ; t<data.times.length ; t++) {
		var d = data.times[t];
		if(values[d.year] == undefined) {
			values[d.year] = [ ];
			years.unshift(d.year);
		}
		values[d.year][d.term] = d;
	}
	
	var yi_size = irpocket.highlight.years || 5;
	var yi_min = (0 < yi_size) ? Math.max(0, years.length - yi_size) : 0;
	
	var terms_base = [ ];
	var terms_status = { };
	for(var t=0 ; t<data.times.length ; t++) {
		if(!terms_status[data.times[t].term]) {
			terms_status[data.times[t].term] = 1;
			terms_base.push(data.times[t].term);
		}
	}
	terms_base.sort().reverse();
	
	target.write('<table><tr><th colspan="2">&nbsp;</th>');
	for(var yi=yi_min ; yi < years.length ; yi++) {
		var ym = years[yi];
		if(irpocket.highlight.termFormat) {
			ym = irpocket.formatDate(ym+"/1", irpocket.highlight.termFormat);
		}
		target.write('<th class="yn">'+ym+'</th>');
	}
	target.write('</tr>');
	
	var title_conf = irpocket.highlight.title || { };
	var terms_conf = irpocket.highlight.term || { };
	var quarter = (irpocket.message && irpocket.message.quarter) || { };
	for(var ci=0 ; ci < data.cols.length ; ci++) {
		var hl_code = data.cols[ci];
		var title = title_conf[hl_code] || hl_code;
		var unit = irpocket.highlight.unit[data.units[ci]] || "";
		var terms = terms_conf[hl_code] || terms_base;
		for(var qi=0 ; qi < terms.length ; qi++) {
			var tr_class = (terms[qi]==4) ? 'ft' : 'ot';
			tr_class += ' q'+(qi+1);
			target.write('<tr class="'+tr_class+'">');
			if(qi == 0) {
				target.write('<th class="cn" rowspan="'+terms.length+'">'+title+'<br>'+unit+'</th>');
			}
			target.write('<th class="qn">'+quarter[terms[qi]-1]+'</th>');
			
			for(var yi=yi_min ; yi < years.length ; yi++) {
				var td_class = (years[yi]==latest_year) ? 'latest' : 'past';
				var value = '&nbsp;';
				if(values[years[yi]][terms[qi]]) {
					value = irpocket.addComma(values[years[yi]][terms[qi]].data[ci]);
				}
				target.write('<td class="'+td_class+'">'+value+'</td>');
			}
			target.write('</tr>');
		}
	}
	target.write('</table>');
	
	target.finish && target.finish();
};

if(!window.ir20_handler) {
	window.ir20_handler = function(data) { irpocket.handlerTable(data); }
}

if(!window.table_builder) {
	window.table_builder = function(data) { irpocket.handlerTable(data); }
}

(function() {
	var ss = document.getElementsByTagName('SCRIPT');
	var parent = ss[ss.length-1].parentNode;
	
	if(!irpocket
	|| typeof irpocket.code == 'undefined'
	|| parent.id.indexOf("irp-highlight-table-") != 0) {
		return;
	}
	
	var url = irpocket.base + irpocket.code + "/JS/" + parent.id.substr(14) + ".js";
	document.write('<script src="'+url+'" type="text/javascript" charset="UTF-8"></script>');
})();

