// JavaScript Document

window.onload = function(){ findFixedTable(); formatNumberCells(); }

function findFixedTable() {
	var tables = document.getElementsByTagName('TABLE');
	for( i=0; i<tables.length; i++ ) {
		if( elementHasClassName(tables[i],'fixed') ) {
			var table = tables[i];
			var thead = table.getElementsByTagName('THEAD')[0];
			var tbody = table.getElementsByTagName('TBODY')[0];
			if( table.getElementsByTagName('TFOOT') ) var tfoot = table.getElementsByTagName('TFOOT')[0];
		
			// Add wrapper for positioning
			var tableHolder = document.createElement('DIV');
			tableHolder.className="tableholder";
			table.parentNode.replaceChild(tableHolder,table);
			tableHolder.appendChild(table);
			
			// Assign IDs to header cells
			var colheaders = thead.getElementsByTagName('TH');
			for( j=0; j<colheaders.length; j++ ) {
				colheaders[j].setAttribute('id','colhead-' + strpad(j+1,2,'0','left'));
			}
			
			// Assign headers attributes
			// IMPORTANT: This will not work if we have nested cells!
			var rows = table.getElementsByTagName('TR');
			for( j=0; j<rows.length; j++ ) {
				if( rows[j].parentNode.nodeName != 'THEAD' ) {
					var cells = rows[j].childNodes;
					var m = 0;
					for( k=0; k<cells.length; k++ ) {
						if( cells[k].nodeName == 'TH' || cells[k].nodeName == 'TD' ) {
							cells[k].setAttribute('headers',colheaders[m].id); // assign headers attribute
							cells[k].className = colheaders[m].className; // assign header cell's class(es)
							m++;
							
						}
					}
				}
			}
			
		}
	}
}

function formatNumberCells() {
	var cells= document.getElementsByTagName('TD');
	for( i=0; i<cells.length; i++ ) {
		for( j=0; j<cells[i].childNodes.length; j++ ) {
			if( cells[i].childNodes[j].nodeType == 3 && !isNaN(cells[i].childNodes[j].nodeValue) ) { // if the nodeValue is a number
				var separator = (elementHasClassName(cells[i],'comma')) ? ',' : ( (elementHasClassName(cells[i],'space')) ? ' ' : '' );
				if( cells[i].className.indexOf('decimal-') != -1 ) {
					var decimals = cells[i].className.substr(cells[i].className.indexOf('decimal-'+8),1);
				}
				else var decimals = '';
				
				if( !isNaN(cells[i].childNodes[j].nodeValue) ) {
					var formatted = document.createTextNode(formatNumber(cells[i].childNodes[j].nodeValue,decimals,separator));
					cells[i].replaceChild(formatted,cells[i].childNodes[j]);
				}
			}
		}
	}
}

function formatNumber(data,decimals,separator) {
	if( isNaN(data) ) return data;
	
	data = parseFloat(data); // make sure we're dealing with a number

	// Fix decimal places if requested; convert to string
	if( !isNaN(decimals) ) data = data.toFixed(decimals);
	else data = data.toString;
	
	// add thousands separators, if requested
	
	if( separator != '' ) {
		if( data.indexOf('.') != -1 ) {
			var dataInt = data.substring(0,data.indexOf('.'));
			var dataFrac = data.substring(data.indexOf('.'));
		}
		else {
			var dataInt = data;
			var dataFrac = '';
		}
			
		n=3;
		while( dataInt.length > n ) {
			dataInt = dataInt.substring(0,dataInt.length-n) + separator + dataInt.substring(dataInt.length-n);
			n+=separator.length;
			n+=3;
		}
		
		data = dataInt + dataFrac;
	}
	
	
	return data;
}
