function cnnSortData(id, col, series, order) {
	var elToSort = d.getElementById(id);

    if (elToSort.reverseSort == null) {
    	elToSort.reverseSort = new Array();
      	elToSort.lastColumn = -1;
    }

    if (elToSort.reverseSort[col] == null) {
		if (order) {
			elToSort.reverseSort[col] = false;
		} else {
			elToSort.reverseSort[col] = true;
		}
	}

    if (col == elToSort.lastColumn) {
	   elToSort.reverseSort[col] = !elToSort.reverseSort[col];
	}
	elToSort.lastColumn = col;

	var tmpEl;
	var i, j;
	var minVal, minIdx;
	var testVal;
	var cmp;

	for (i = 0; i < elToSort.rows.length - 1; i++) {
		minIdx = i;
		minVal = cnnGetTextValue(elToSort.rows[i].cells[col]);

      	for (j = i + 1; j < elToSort.rows.length; j++) {
			testVal = cnnGetTextValue(elToSort.rows[j].cells[col]);
			cmp = cnnCompareValues(minVal, testVal);
         	if (elToSort.reverseSort[col]) {
				cmp = -cmp;
			}
         	if (cmp > 0) {
            	minIdx = j;
            	minVal = testVal;
			}
		}

		if (minIdx > i) {
			tmpEl = elToSort.removeChild(elToSort.rows[minIdx]);
			elToSort.insertBefore(tmpEl, elToSort.rows[i]);
		}
	}
	cnnSetTableBG(id, series);
	cnnSetActive('cnnDataTable', col);
	return false;
}

if (d.ELEMENT_NODE == null) {
	d.ELEMENT_NODE = 1;
	d.TEXT_NODE = 3;
}

function cnnGetTextValue(el) {
	var i;
	var s;

	s = "";
	for (i = 0; i < el.childNodes.length; i++) {
		if (el.childNodes[i].nodeType == d.TEXT_NODE) {
	    	s += el.childNodes[i].nodeValue;
      	} else if ((el.childNodes[i].nodeType == d.ELEMENT_NODE) && (el.childNodes[i].tagName == "BR")) {
        	s += " ";
      	} else {
         	s += cnnGetTextValue(el.childNodes[i]);
		}
		return cnnNormString(s);
   	}
}

function cnnCompareValues(v1, v2) {
	var f1, f2; 
	if (v1.indexOf(',') != -1) {
		v1 = v1.replace(/,/g, "");
		v2 = v2.replace(/,/g, "");
	}
	if (v1.indexOf('/') != -1) { 
		if (v1.lastIndexOf('/') != v1.indexOf('/')) {
			v1 = (v1.substr(6,1) < "4" ? "20" : "19") + v1.slice(6) + v1.substr(0,2) + v1.substr(3,2);
			v2 = (v2.substr(6,1) < "4" ? "20" : "19") + v2.slice(6) + v2.substr(0,2) + v2.substr(3,2);
		} else {           
			v1 = v1.substr(0,v1.indexOf('/'));
			v2 = v2.substr(0,v2.indexOf('/'));
		}
	} 
    f1 = parseFloat(v1);
    f2 = parseFloat(v2);
    if (!cnnIsDate(v1) && !isNaN(f1)) {
		v1 = f1;	  
    }
    if (!cnnIsDate(v2) && !isNaN(f2)) {
		v2 = f2;
	}
    if (v1 == v2) {
		return 0;
   	}
	if (v1 > v2) {
    	return 1
	}
   	return -1;
}

function cnnIsDate(str) {
	var re = /^[01]?[0-9]\/[0-9]?[0-9]\/[12][0-9][0-9][0-9]$/;
	if (!str || str.length<1) { 
		return false; 
	}
	if (!re.test(str)) { 
		return false;
	} else {
		return true;
	}
}      

var whtSpEnds = new RegExp("^\\s*|\\s*$", "g");
var whtSpMult = new RegExp("\\s\\s+", "g");

function cnnNormString(s) {
	s = s.replace(whtSpMult, " ");
	s = s.replace(whtSpEnds, "");
	return s;
}


function cnnSetActive(id, col) {
	var THs = d.getElementById(id).getElementsByTagName('th');
	for (var i = 0; i < THs.length; i++) {
		var th = THs[i];
		if (i == col) {
			th.className = 'cnnActive';
		} else {
			th.className = '';
		}
		if (i == 9) {
			th.className += ' cnnLast';
		}
	}
	var topTDs = d.getElementById('cnnTopTR').getElementsByTagName('td');
	for (var i = 0; i < topTDs.length; i++) {
		var td = topTDs[i];
		if (i == col) {
			td.className = 'cnnActive';
		} else {
			td.className = '';
		}
	}
}