var sortColumnIndex;
function initSorTables()
{
	if (!document.getElementsByTagName) return;
	var tables = document.getElementsByTagName("table");
	var n = tables.length;
	for (i = 0; i < n; i++)
	{
		if ((' ' + tables[i].className + ' ').indexOf(' sortable ') > -1)
			sorTable(tables[i], i);
	}
}

var sorTableCookie = true;
function sorTable(table, id)
{
	var sort, value, cookieIndex, cookieDirection, tHead;

	if (table.rows && table.rows.length > 0 && !(tHead = table.tHead)) return;

	id = 'sortable_' + id;
	if (sorTableCookie && (value = getCookie(id)))
	{
		value = value.split(',');
		if (value.length > 0)
		{
			cookieIndex = value[0];
			cookieDirection = value[1];
		}
	}

	var tHeadCells = tHead.rows[0].cells;
	var i, cell, txt, n = tHeadCells.length;
	for (i = 0; i < n; i++)
	{
		cell = tHeadCells[i];
		if (getSortValue(cell) == 0) continue;
		cell.innerHTML = '<img src="./images/sortable/blank.gif" border="0" /><a href="#" id="' + id + '" onclick="resorTable(this);return false;" style="color: ' + getStyle(cell, 'color') + '; cursor: pointer; text-decoration: none;">' + cell.innerHTML + '<img src="./images/sortable/blank.gif" border="0" align="absmiddle" /></a>';
		if (cookieIndex == i) sort = cell.getElementsByTagName('a')[0];
	}

	if (sort)
	{
		if (cookieDirection == 1)
		{
			resorTable(sort);
			resorTable(sort);
		}
		else resorTable(sort);
	}
}

var lastLink = null;
function resorTable(lnk)
{
	var i, node;
	var td = lnk.parentNode;
	var table = getParent(td, 'table');
	if (table.rows.length <= 1) return;

	sortColumnIndex = td.cellIndex;
	var newRow, newRows = [];
	var tBody = table.tBodies[0], tBodyRows = tBody.rows;
	n = tBodyRows.length;
	for (i = 0; i < n; i++)
		newRows.push(tBodyRows[i]);
	newRows.sort(sortFunction);

	var id = lnk.getAttribute('id');
	if (lastLink)
		lastLink.innerHTML = lastLink.innerHTML.replace(/(?:up|down)_arrow.gif/i, 'blank.gif');
	if (sorTableCookie)
	{
		if (lnk.getAttribute('sortdir') == 'down')
		{
			lnk.innerHTML = lnk.innerHTML.replace(/(?:up_arrow|blank).gif/i, 'down_arrow.gif');
			newRows.reverse();
			lnk.setAttribute('sortdir', 'up');
			setCookie(id, sortColumnIndex + ',1', 365);
		}
		else
		{
			lnk.innerHTML = lnk.innerHTML.replace(/(?:down_arrow|blank).gif/i, 'up_arrow.gif');
			lnk.setAttribute('sortdir', 'down');
			setCookie(id, sortColumnIndex + ',0', 365);
		}
	}
	lastLink = lnk;

	n = newRows.length;
	for (i = 0; i < n; i++)
		tBody.appendChild(newRows[i]);
}

function getParent(el, tagName)
{
	if (!el) return null;
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == tagName.toLowerCase()) return el;
	else return getParent(el.parentNode, tagName);
}

function sortFunction(a, b)
{
	a = getSortValue(a.cells[sortColumnIndex]);
	b = getSortValue(b.cells[sortColumnIndex]);
	if (a == b) return 0;
	else if (a < b) return -1;
	else return 1;
}

function getSortValue(el)
{
	var value;
	if (value = el.className.match(/(?:^|\s)sort-([0-9]+)(?:\s|$)/)) return parseInt(value[1]);
}
domReady(initSorTables);