var hh = [];
hh['countcolumns'] = 0;
hh['hhrowindex'] = -1;
window.onload = inittable;

function hhtablecomment(str, a) {
	hh['hhcomment'].childNodes[1].childNodes[2].innerHTML = str;
	labelstr = '';
	label = a.parentNode.parentNode.childNodes[0];
	while (label.childNodes.length > 0) {
		labelstr = label.innerHTML;
		label = label.childNodes[0];
	}
		
	hh['hhcomment'].childNodes[1].childNodes[0].innerHTML = labelstr;
	hh['hhcomment'].style.top = (a.parentNode.offsetTop + 75 - a.parentNode.parentNode.parentNode.offsetTop) + 'px';
	hh['hhcomment'].style.left = (a.parentNode.offsetLeft + 22) + 'px';
	hh['hhcomment'].style.display = 'block';
}

function hidehhtablecomment() {
	hh['hhcomment'].style.display = 'none';
}

function inittable() {
	tables = document.getElementById('tablecontent').getElementsByTagName('table');
	for (var i = 0; i < tables.length; i++) {
		// Create tables for the fixed left-most column ------------------------------ 
		FinancialTable = document.createElement('table');
		FinancialTable.className = 'datatable dynamic';
		FinancialTable.cellSpacing = 0;
		tables[i].className = 'datatable dynamic';
		
		for (var j = 0; j < tables[i].tBodies[0].rows.length; j++) {
			newrow = FinancialTable.insertRow(-1);
			newrow.className = tables[i].tBodies[0].rows[j].className;
			
			// Make group items clickable ------------------------------ 
			if (tables[i].tBodies[0].rows[j].className.indexOf('group') > -1) {
				obj = tables[i].tBodies[0].rows[j].cells[0];
				tmpStr = tables[i].tBodies[0].rows[j].className;
				depth = parseInt(tmpStr.substring(tmpStr.length - 1));
				while (obj.childNodes.length > 0)
				    obj = obj.childNodes[0];
				
				obj = obj.parentNode;
				obj.innerHTML = '<a href="" onclick="swaprows(this); return false;">' + obj.innerHTML + '</a>';
			}
			
			newrow.appendChild(tables[i].tBodies[0].rows[j].cells[0].cloneNode(true));
			radiocell = newrow.insertCell(1);
			radiocell.className = 'radio';
			if (tables[i].tBodies[0].rows[j].cells[1].innerHTML != '&nbsp;' || tables[i].tBodies[0].rows[j].cells[2].innerHTML != '&nbsp;')
			    radiocell.innerHTML = '<input type="radio" name="chart" onclick="hhchart(this);" />';
			
			// make all notes clickable
			for (var k = 0; k < tables[i].tBodies[0].rows[j].cells.length; k++) {
				title = tables[i].tBodies[0].rows[j].cells[k].title;
				if (title) {
					cell = tables[i].tBodies[0].rows[j].cells[k];
					cell.innerHTML = '<a href="#" onclick="hhtablecomment(\'' + title + '\', this); return false;">' + cell.innerHTML + '</a>';
					cell.title = '';
				}	
			}
		}
		countcolumns = tables[i].tBodies[0].rows[0].cells.length;
		
		newhead = FinancialTable.createTHead();
		newrow = newhead.insertRow(0);
		newrow.appendChild(tables[i].rows[0].cells[0].cloneNode(true));
		if (tables[i].rows[0].className == 'multiheading') {
			newrow.className = 'multiheading';
			newrow = newhead.insertRow(1);
			newrow.appendChild(tables[i].rows[1].cells[0].cloneNode(true));
		}
		newcell = document.createElement('th');
		newcell.className = 'radio';
		newcell.innerHTML = '<input checked type="radio" name="chart" onclick="hhunchart(this);" />';
		newrow.appendChild(newcell);
		
		
		// Put the real table into a scrollable div ------------------------------ 
		scrolldiv = document.createElement('div');
		scrolldiv.className = 'tablescroll';
		tmptable = tables[i];
		innerdiv = document.createElement('div');
		innerdiv.style.width = ((tables[i].tBodies[0].rows[0].cells.length * 77) + 247) + 'px';
		scrolldiv.appendChild(innerdiv);
		tables[i].parentNode.insertBefore(scrolldiv, tables[i]);
		scrolldiv.childNodes[0].appendChild(tables[i]);
		FinancialTable.style.position = 'absolute';
		scrolldiv.parentNode.insertBefore(FinancialTable, scrolldiv);
		scrolldiv.style.height = (tmptable.offsetHeight + 30) + 'px';
		
		// hide all but the first table (= full year is default view)
		if (i > 0) {
		    showFullyear = (tmptable.rows[0].cells[1].colSpan == 4); // full year is shown if we are in Q4
		    scrolldiv.style.display = 'none';
			FinancialTable.style.display = 'none';
		}
		else if (document.addEventListener) { // firefox, m fl
	        scrolldiv.style.paddingTop = '32px';
		    FinancialTable.style.marginTop = '32px';
	    }
	    else { // ie
	        scrolldiv.style.paddingTop = '32px';
	        FinancialTable.style.marginTop = '32px';
		}
		i++;
	}
	
	// Create graph bars ------------------------------ 
	div = document.createElement('div');
	div.id = 'bars';
	for (var i = 0; i < countcolumns; i++) {
		img = document.createElement('img');
		img.width = 7;
		div.appendChild(img);
	}
	hh['diagrambars'] = div.childNodes;
	
	// Create comment popup ------------------------------ 
	hh['hhcomment'] = document.createElement('div');
	hh['hhcomment'].id = 'hhcomment';
	div = document.createElement('div');
	div.className = 'hhtop';
	hh['hhcomment'].appendChild(div);
	div = document.createElement('div');
	div.className = 'hhmiddle';
	hh['hhcomment'].appendChild(div);
	div.innerHTML = '<strong></strong><a class="close" href="#" onclick="hidehhtablecomment(); return false;">x</a><p></p>';
	div = document.createElement('div');
	div.className = 'hhbottom';
	hh['hhcomment'].appendChild(div);
	FinancialTable.parentNode.appendChild(hh['hhcomment']);

	if (showFullyear)
		setview('helar', document.getElementById('financialtableheader').getElementsByTagName('a')[0]);
	else
		setview('kvartal', document.getElementById('financialtableheader').getElementsByTagName('a')[1]);
}


/* ================================================================================================================================== */
function swaprows(a) {
	if (document.addEventListener) // firefox, m fl
		viewtype = 'table-row';
	else // ie
		viewtype = 'block';
		
	if (a.className != 'expanded') {
		a.className = 'expanded';
	}
	else {
		a.className = '';
		viewtype = 'none';
	}
	
	tr = a.parentNode.parentNode;
	while (tr.tagName.toLowerCase() != 'tr')
	    tr = tr.parentNode;
	
	siblingDiv = tr.parentNode.parentNode.nextSibling;
	siblingTable = siblingDiv.getElementsByTagName('TBODY')[0];
	textindex = tr.className.indexOf('lev');
	startlevel = parseInt(tr.className.substring(textindex + 3, textindex + 4));
	level = startlevel + 1;
	
	var rowindex = tr.rowIndex;
	// remove the header rows (full year table: 1 row, the rest: 2 rows)
	rowindex -= tr.parentNode.previousSibling.rows.length - 1;
	tr = tr.parentNode.rows[rowindex];
	
	while (startlevel < level) {
		if (startlevel == level - 1 || viewtype == 'none') {
			tr.style.display = viewtype;
			siblingTable.rows[rowindex].style.display = viewtype;
		}
		
		/*a = tr.cells[0].getElementsByTagName('a');
		if (a.length > 0) {
			a[0].className = ''; // this will collapse all sub-items
			tr.className = tr.className.replace(' expanded', '');
		}*/
		
		if (tr.parentNode.rows.length <= rowindex + 1)
			break;
			
		rowindex++;
		tr = tr.parentNode.rows[rowindex];
		textindex = tr.className.indexOf('lev');
		level = parseInt(tr.className.substring(textindex + 3, textindex + 4));
	}
	siblingDiv.style.height = (siblingTable.parentNode.offsetHeight + 30) + 'px';
	resetHeights();
}



var diagramrow;

function hhchart(obj) {
	row = obj.parentNode.parentNode;
	hh['hhrowindex'] = row.rowIndex;
	if (hh['currenttab'] == 'helar')
	    hh['hhrowindex']++;
	    
	table = row.parentNode.parentNode;
	table = table.nextSibling.childNodes[0].childNodes[0];
	table.parentNode.appendChild(hh['diagrambars'][0].parentNode);
	showdiagram(table.rows[row.rowIndex]);
}

function hhunchart(obj) {
    diagramrow.className = diagramrow.className.replace('diagram', '');
	for (var i = 0; i < hh['diagrambars'].length; i++) {
		hh['diagrambars'][i].style.display = 'none';
	}
}

function showdiagram(row) {
	if (row.rowIndex == 0) {
	    alert();
		if (hh['diagrambars'] != null) {
			for (var i = 0; i < hh['diagrambars'].length; i++) {
				hh['diagrambars'][i].style.display = 'none';
			}
		}
		if (diagramrow != null) {
			diagramrow.className = diagramrow.className.replace('diagram', '');
			diagramrow = null;
		}
		return;
	}
	if (diagramrow != null) {
		diagramrow.className = diagramrow.className.replace('diagram', '');
	}
	else {
		hh['diagrambars'] = document.getElementById('bars').getElementsByTagName('IMG');
	}
	marginTop = 0;
	if (document.addEventListener) {
		//marginTop = 0;
	}
	else {
		//marginTop = 1;
	}
	
	diagramrow = row;
	
	diagramrow.className = diagramrow.className + ' diagram';
	diagramcells = diagramrow.cells;
	cellvalue = new Array();
	max = -1000000;
	min = 1000000;
	
	for (var i = 1; i < diagramcells.length; i++) {
		if (diagramcells[i].childNodes[0].innerHTML)
			cellvalue[i] = diagramcells[i].childNodes[0].innerHTML;
		else
			cellvalue[i] = diagramcells[i].innerHTML;
		if (lang == 'en')
			cellvalue[i] = cellvalue[i].replace(',', '');
		else
			cellvalue[i] = cellvalue[i].replace('&nbsp;', '').replace(',', '.').replace(' ', '').replace(' ', '');

		
		cellvalue[i] = parseFloat(cellvalue[i]);
		if (isNaN(cellvalue[i]))
		    cellvalue[i] = 0;
		
		if (cellvalue[i] < min)
			min = cellvalue[i];
		if (cellvalue[i] > max)
			max = cellvalue[i];
	}
	scale = 1;
	
	if (Math.abs(min) > max) {
		scale = -min;
	}
	else {
		scale = max;
	}
	
	if(scale == 0) {
		for (var i = 1; i < hh['diagrambars'].length; i++) {
	    	hh['diagrambars'][i-1].style.display = 'none';
	    }
	    return;
	}

	marginTop += diagramrow.offsetTop - diagramrow.parentNode.offsetTop + 101;
	if (diagramcells.length < hh['diagrambars'].length) {
		marginTop -= parseInt(hh['diagrambars'][0].parentNode.parentNode.parentNode.style.paddingTop);
	}
	
	for (var i = 1; i < diagramcells.length; i++) {
		height = parseInt((Math.abs(cellvalue[i]) / scale) * 64);
		hh['diagrambars'][i-1].style.height = height + 'px';
		
		if (cellvalue[i] < 0)  {
			hh['diagrambars'][i-1].className = 'negative';
			hh['diagrambars'][i-1].style.marginTop = (marginTop + 1) + 'px';
			hh['diagrambars'][i - 1].src = '/templates/FinancialTables/css/graphics/diagram-negative.gif';
		}
		else {
			hh['diagrambars'][i-1].className = '';
			hh['diagrambars'][i-1].style.marginTop = (marginTop - height) + 'px';
			hh['diagrambars'][i - 1].src = '/templates/FinancialTables/css/graphics/diagram-positive.gif';
		}
		hh['diagrambars'][i-1].style.display = 'block';
	}
	for (var i = diagramcells.length; i < hh['diagrambars'].length; i++) {
		hh['diagrambars'][i-1].style.display = 'none';
	}
}

function setview(id, a) {
    if (hh['currenttab'] == id)
        return;
    else
        hh['currenttab'] = id;
        
    table = document.getElementById(id);
	elements = table.parentNode.parentNode.parentNode.childNodes;
	for (i = 0; i < elements.length; i++) {
		if (elements[i].style)
			elements[i].style.display = 'none';
	}
	
	
	if (a) {
		for (var i = 0; i < a.parentNode.parentNode.childNodes.length; i++) {
			a.parentNode.parentNode.childNodes[i].className = '';
		}
		a.parentNode.className = 'selected';
	}
	
	hh['scrolldiv'] = table.parentNode.parentNode;
	hh['scrolldiv'].style.display = 'block';
	hh['scrolldiv'].previousSibling.style.display = 'block';
	resetHeights();
}

function resetHeights() {
    if (hh['hhrowindex'] > 0) {
	    if (hh['currenttab'] == 'helar')
	        hh['scrolldiv'].previousSibling.rows[hh['hhrowindex'] - 1].cells[1].childNodes[0].click();
	    else
	        hh['scrolldiv'].previousSibling.rows[hh['hhrowindex']].cells[1].childNodes[0].click();
	}
    diagramDiv = hh['diagrambars'][0].parentNode;
	diagramDiv.style.width = (parseInt(hh['scrolldiv'].childNodes[0].style.width) - 244) + 'px';
	diagramDiv.style.height = hh['scrolldiv'].style.height;
	diagramDiv.style.marginTop = -parseInt(hh['scrolldiv'].style.height) + 'px';
}
