var oldSpan;
var sorted=0;
function sortTable(id, obj, col, rev) {
	sorted=1;
	var tblEl = document.getElementById(id);
	if (tblEl.reverseSort == null) {
		tblEl.reverseSort = new Array();
		tblEl.lastColumn = 1;
	}
	if (tblEl.reverseSort[col] == null)
		tblEl.reverseSort[col] = rev;
	if (col == tblEl.lastColumn)
		tblEl.reverseSort[col] = !tblEl.reverseSort[col];
	tblEl.lastColumn = col;
	var oldDsply = tblEl.style.display;
	tblEl.style.display = "none";
	if (oldSpan) oldSpan.innerHTML = "";
	var sortfwdind;
	var os = document.getElementById('sorttable_' + col);
	if (os == null) {
		sortfwdind = document.createElement('span');
		sortfwdind.id = "sorttable_" + col;
		obj.appendChild(sortfwdind);
		oldSpan = sortfwdind;
	}
	if (tblEl.reverseSort[col]) {
		oldSpan.innerHTML = exIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
	} else {
		oldSpan.innerHTML = exIE ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
	}
	if (sortHots) {
		if (aHots.length > 0)
			doSort(tblEl, col, 0, aHots.length);
		doSort(tblEl, col, aHots.length+1, tblEl.rows.length);
	} else {
		if (aHots.length==0)
			doSort(tblEl, col, 1, tblEl.rows.length);
		else
			doSort(tblEl, col, 0, tblEl.rows.length);
	}
	makePretty(tblEl);
	tblEl.style.display = oldDsply;
	return false;
}

function doSort(tblEl,col,a,b) {
//	if (getTextValue(tblEl.rows[0].cells[1])=="") return;

	var tmpEl;
	var i, j;
	var minVal, minIdx;
	var testVal;
	var cmp;

	for (i=a; i<b-1; i++) {
		if (tblEl.rows[i].id=="bar") continue;
		minIdx = i;
		minVal = getTextValue(tblEl.rows[i].cells[col]);
		for (j=i+1; j<b; j++) {
			if (tblEl.rows[j].id=="bar") continue;
			testVal = getTextValue(tblEl.rows[j].cells[col]);
			cmp = compareValues(minVal, testVal);
			if (tblEl.reverseSort[col])
				cmp = -cmp;
			if (cmp == 0 && col != 1)
				cmp = compareValues(getTextValue(tblEl.rows[minIdx].cells[1]),getTextValue(tblEl.rows[j].cells[1]));
			if (cmp > 0) {
				minIdx = j;
				minVal = testVal;
			}
		}
		if (minIdx > i) {
			tmpEl = tblEl.removeChild(tblEl.rows[minIdx]);
			tblEl.insertBefore(tmpEl, tblEl.rows[i]);
		}
	}
}

if (document.ELEMENT_NODE == null) {
	document.ELEMENT_NODE = 1;
	document.TEXT_NODE = 3;
}

function getTextValue(el) {
	var i;
	var s;
	s = "";
	for (i = 0; i < el.childNodes.length; i++)
		if (el.childNodes[i].nodeType == document.TEXT_NODE)
			s += el.childNodes[i].nodeValue;
		else if (el.childNodes[i].nodeType == document.ELEMENT_NODE && el.childNodes[i].tagName == "BR")
			s += " ";
		else
			s += getTextValue(el.childNodes[i]);
	return normalizeString(s);
}

function compareValues(v1, v2) {
	var f1, f2;
	f1 = parseFloat(v1);
	f2 = parseFloat(v2);
	if (!isNaN(f1) && !isNaN(f2)) {
		v1 = f1;
		v2 = f2;
	}
	if (v1 == v2)
		return 0;
	if (v1 > v2)
		return 1
	return -1;
}

var whtSpEnds = new RegExp("^\\s*|\\s*$", "g");
var whtSpMult = new RegExp("\\s\\s+", "g");

function normalizeString(s) {
	s = s.replace(whtSpMult, " ");  // Collapse any multiple whites space.
	s = s.replace(whtSpEnds, "");   // Remove leading or trailing white space.
	return s;
}

function makePretty(tblEl) {
	var r=true;
	for (i=0; i<tblEl.rows.length; i++) {
		if (tblEl.rows[i].id=="bar")
			continue;
		var suff = (r) ? "A" : "B";
		r = !r;
		changeRowStyle(tblEl.rows[i], suff);
//		tblEl.rows[i].className = "avrow" + suff;
	}
//	if (aHots.length>0)
//		tblEl.rows[aHots.length-1].className = "avrowX";
}
function hotStock(id, row) {
	if ((!sortHots) && (sorted)) return;
	var tblEl = document.getElementById(id);
	stock = getTextValue(row.cells[1]);
	if (stock=="") return;
	var n = stock.indexOf(" *");
	if (n > 0)
		stock = stock.substr(0,n);

	if (aHots.hasKey(stock)) {
		aHots.remove(stock);
		aTickers.hashtable[stock].hot=0;
		var tmpEl = tblEl.removeChild(row);
		for (var i=aHots.length+1; i < tblEl.rows.length; i++) {
			other = getTextValue(tblEl.rows[i].cells[1]);
			cmp = compareValues(stock, other);
			if (cmp < 0) break;
		}
		tblEl.insertBefore(tmpEl, tblEl.rows[i]);
	} else {
		var tmpEl = tblEl.removeChild(row);
		for (var i=0; i < aHots.length; i++) {
			other = getTextValue(tblEl.rows[i].cells[1]);
			cmp = compareValues(stock, other);
			if (cmp < 0) break;
		}
		tblEl.insertBefore(tmpEl, tblEl.rows[i]);
		aHots.put(stock, 1);
		aTickers.hashtable[stock].hot=1;
	}
	saveHots();
	makePretty(tblEl);
}
