table = {
	init: function() {
		var obj = $('content').select('table.table');
		for (i = 0; i < obj.length; i++){
			obj[i].observe('click', table.clicked);
		}
		
		var obj = $('content').select('div.export input');
		for (i = 0; i < obj.length; i++){
			obj[i].observe('click', table.exportClicked);
		}
	},
	
	getTrLevel: function(tr) {
		var level = tr.className.match(/level(\d+)/);
		return parseInt(level[1]);
	},
	
	clicked: function(e) {
		var obj = Event.element(e);
		if (obj.hasClassName('childs')){
			var parentLevel = table.getTrLevel(obj.up('tr'));
			var collapse = obj.hasClassName('expanded');
			var tr = obj.up('tr').next();
			while (tr && !tr.hasClassName('total') && ((trLevel = table.getTrLevel(tr)) > parentLevel)) {
				if (collapse) {
					if ((btn = tr.down('span.childs')) && btn.hasClassName('expanded')){
						btn.removeClassName('expanded');
					}
					tr.addClassName('hidden');
				}
				else if (trLevel == (parentLevel + 1)){
					tr.removeClassName('hidden');
				}
				tr = tr.next();
			}			
			general.switchClass(obj, 'expanded');
		}
		var obj = obj.up('tr');
		if (!obj){
			return;
		}
		general.switchClass(obj, 'marked');
	},

	exportClicked: function(e) {
		window.location = $F(Event.element(e).previous());
	}
}

general = {
	
	switchClass: function(obj, className) {
		if (obj.hasClassName(className)) obj.removeClassName(className);
		else obj.addClassName(className);
	},
	
	switchClassCond: function(obj, className, cond) {
		if (cond) obj.addClassName(className);
		else obj.removeClassName(className);
	}	
}

document.observe(
	'dom:loaded',
	function() {
		table.init();
	}
);