/*
 * Table sort script
 * Copyright © 2005 Hristo Drumev [www.hdrumev.com]
 *
 */

var column;

function getText( obj )
{
	for( var i = 0, result = ''; i < obj.childNodes.length; i++)
		result += ( ( type = obj.childNodes[i].nodeType ) == 3 ) ? obj.childNodes[i].nodeValue : type == 1 ? getText( obj.childNodes[i] ) : '';
	return result;
}

function table( id )
{
	eval( ( this.id = id ) + '=this' );
	if( !document.getElementsByTagName )
		return null;
	this.tables = document.getElementsByTagName( 'table' );
	for( var i = 0; i < this.tables.length; i++ )
		if( this.tables[i].id && ( ( ' ' + this.tables[i].className + ' ' ).indexOf( 'sortable' ) != -1 ) )
			this.initTable( this.tables[i] );
	return this;
}

table.prototype.initTable = function( table )
{
	if( table.rows && table.rows.length > 0 )
		table.headerRow = table.rows[0];
	else
		return;
	for( var i = 0; i < table.headerRow.cells.length; i++ )
	{
		var cell = table.headerRow.cells[i], node;
		cell.sortOrder = 1;
		cell.innerHTML = '<a href="#" class="sortheader" onclick="' + this.id + '.sort( \'' + table.id + '\', ' + i + ' ); return false;" title="Сортиране на данните по тази колона">' + cell.innerHTML + '<span>&nbsp;&nbsp;</span></a>';
		for( var j = 0; j < cell.childNodes.length; j++ )
			if( ( node = cell.childNodes[j] ).tagName.toLowerCase() == 'a' )
				for( var k = 0; k < node.childNodes.length; k++ )
					if( node.childNodes[k].tagName && node.childNodes[k].tagName.toLowerCase() == 'span' )
						cell.span = node.childNodes[k];
	}
	this.sort( table.id, 0 );
}

table.prototype.sort = function( tableId, colNo )
{
	column = colNo;
	var table = document.getElementById( tableId );
	if( table.rows.length < 2 )
	{
		this.setZebraEffect( table );
		return;
	}
	var headerCell = table.headerRow.cells[colNo];
	var order = headerCell.sortOrder = !headerCell.sortOrder;
	for( var i = 0; i < table.headerRow.cells.length; i++ )
	{
		table.headerRow.cells[i].span.innerHTML = '&nbsp;&nbsp;';
		table.headerRow.cells[i].sortOrder = i != colNo ? 1 : order;
	}
	headerCell.span.innerHTML = order ? '&nbsp;<img src="img/order_desc.png" width="5" height=5" alt="Sort order" style="border: none;" />' : '&nbsp;<img src="img/order.png" width="5" height=5" alt="Sort order" style="border: none;" />';
	this.sorted = new Array;
	for( var i = 1; i < table.rows.length; i++ )
		this.sorted[i-1] = table.rows[i];
	this.sorted.sort( this.sortFunction );
	if( order )
		this.sorted.reverse();
	for( var i = 1; i < table.rows.length; i++ )
		table.tBodies[0].appendChild( this.sorted[i - 1] );
	this.setZebraEffect( table );
}

table.prototype.sortFunction = function( alpha, beta )
{
	return ( a = getText( alpha.cells[column] ) ) > ( b = getText( beta.cells[column] ) ) ? 1 : -( a < b );
}

table.prototype.setZebraEffect = function( table )
{
	for( var i = 1; i < table.rows.length; i++ )
		table.rows[i].style.backgroundColor = ( i & 1 ) ? '#eeeeee' : '#dddddd';
}
