
<!--	
	var sortedOn = 9999999;
			var sortType = "text";
			var tableHasChanged = false;  // this is used to determine if the table has been changed 
								// since the last sort.  We need this in case sortedOn == sortOn
								// if it does and the table has been changed, we still need to 
								// resort.  We can't just do a reverse.
								//************** NOT USED IN C# - - JB - - b/c only way to change table in C# is by postback 
								// in which case the table is refreshed and all sorting lost.
	
			function SortTable(sortOn,sortType) {
				var table = document.getElementById('results');
				var tbody = table.getElementsByTagName('tbody')[0];
				var rows = tbody.getElementsByTagName('tr');
				
				var rowArray = new Array();
				var length = rows.length;
				for (var i=0; i < length; i++) {
					rowArray[i] = rows[i].cloneNode(true);
				}
				
				if (sortOn == sortedOn) { rowArray.reverse(); }
				else {
					sortedOn = sortOn;
					if (sortType == "integer") {
						rowArray.sort(RowCompareNumbers);
					}
					else if (sortType == "float") {
						rowArray.sort(RowCompareDollars);
					}
					else {
						rowArray.sort(RowCompare);
					}
				}
				
				var newTbody = document.createElement('tbody');
				for (var i=0, length=rowArray.length; i < length; i++) {
					newTbody.appendChild(rowArray[i]);
				}
				
				table.replaceChild(newTbody, tbody);
			}
			
			function SortTableNamed(sortOn,sortType,tableName) {
				var table = document.getElementById(tableName);
				var tbody = table.getElementsByTagName('tbody')[0];
				var rows = tbody.getElementsByTagName('tr');
				//alert(""+hasChanged);
				var rowArray = new Array();
				
				for (var i=0, length=rows.length; i<length; i++) {
					rowArray[i] = rows[i].cloneNode(true);
				}
				
				if (sortOn == sortedOn) { 
					if(tableHasChanged){ // if new measures have been inserted, we must first
									// first resort it before reversing it.
									
						if (sortType == "integer") {
							rowArray.sort(RowCompareNumbers);
						}
						else if (sortType == "float") {
							rowArray.sort(RowCompareDollars);
						}
						else if (sortType == "link") { // sorts by link's text
							rowArray.sort(RowCompareLinks);
						}
						else if (sortType == "date") {
							rowArray.sort(RowCompareDates);
						}
						else if (sortType == "datetimemilitary") {
							rowArray.sort(RowCompareDateTimeMilitary);
						}
						else {
							rowArray.sort(RowCompare);
						}		
					}
					rowArray.reverse(); 
				}
				else {
					
					sortedOn = sortOn;
					if (sortType == "integer") {
						rowArray.sort(RowCompareNumbers);
					}
					else if (sortType == "float") {
						rowArray.sort(RowCompareDollars);
					}
					else if (sortType == "link") { // sorts by link's text
						rowArray.sort(RowCompareLinks);
					}
					else if (sortType == "date") {
						rowArray.sort(RowCompareDates);
					}
					else if (sortType == "datetimemilitary") {
						rowArray.sort(RowCompareDateTimeMilitary);
					}
					else {
						rowArray.sort(RowCompare);
					}
				}
				
				var newTbody = document.createElement('tbody');
				for (var i=0, length=rowArray.length; i<length; i++) {
					newTbody.appendChild(rowArray[i]);
				}
				
				table.replaceChild(newTbody, tbody);
				tableHasChanged = false;
				
				// Make table pretty
			//	var i;
			//	i = 0
			//	while (i < table.rows.length)
			//	{
			//		if (i%2 == 0){ // then it's even
			//		table.rows(i).className = "row";
			//		}
			//		else{
			//			table.rows(i).className = "row-alt";
			//		}
			//		i++;
			//	}	
			}
			function RowCompare(a, b) {
				//alert("Here. a:"+a.innerhtml+", b:"+b.innerhtml);
				var aVal = a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.toUpperCase();
				var bVal = b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.toUpperCase();
				//alert("Here. aVal:"+aVal+", bVal:"+bVal+"  ,  "+(aVal == bVal ? 0 : (aVal > bVal ? 1 : -1)));
				return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));
			}

			function RowCompareNumbers(a, b) {
			
				var aVal = parseInt(a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue);
				var bVal = parseInt(b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue);
				return (aVal - bVal);
			}

		/*	function RowCompareDollars(a, b) {
			
				var aVal = parseFloat(a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.substr(1));
				var bVal = parseFloat(b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.substr(1));
				return (aVal - bVal);
			}
		*/
			function RowCompareDollars(a, b) {
				
				var aVal = a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.substr(1);
				var bVal = b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.substr(1);
				var comma = aVal.indexOf(',');
				while(comma != -1)
				{
					aVal = aVal.substring(0, comma) + aVal.substring(comma+1, aVal.length-1);
					var comma = aVal.indexOf(',');
				}
				comma = bVal.indexOf(',');
				while(comma != -1)
				{
					bVal = bVal.substring(0, comma) + bVal.substring(comma+1, bVal.length-1);
					comma = bVal.indexOf(',');
				}
				aVal = parseFloat(aVal);
				bVal = parseFloat(bVal);
				return (aVal - bVal);
			}
			function RowCompareDates(a,b) {
				var strMonthA, strDayA, strYearA, strMonthB, strDayB, strYearB;
				var aVal = a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.toUpperCase();
				var bVal = b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.toUpperCase();
				
					var intSlashA = aVal.indexOf("/");
					var intSlashB = bVal.search("/");
					strMonthA = aVal.substr(0,intSlashA);
					strMonthB = bVal.substr(0,intSlashB);
					aVal = aVal.substr(intSlashA+1);
					bVal = bVal.substr(intSlashB+1);
					intSlashA = aVal.search("/");
					intSlashB = bVal.search("/");
					strDayA = aVal.substr(0,intSlashA);
					strDayB = bVal.substr(0,intSlashB);
					strYearA = aVal.substr(intSlashA+1);
					strYearB = bVal.substr(intSlashB+1);
					if(strYearA != strYearB)
						{ 
							return (strYearA - strYearB); 
						}
					else
					{
						if(strMonthA != strMonthB)
						{ 
							return (strMonthA - strMonthB); 
						}
						else
						{
							return (strDayA - strDayB);
						}
					}
			}
			
			function RowCompareDateTimeMilitary(a,b) 
			{
				
				// Format = MM/dd/yyyy HH:mm
				
				var strMonthA, strDayA, strYearA, strMonthB, strDayB, strYearB, strHourA, strHourA, strMinA, strMinB;
				var aVal = a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.toUpperCase();
				var bVal = b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.toUpperCase();
				// There's always a trailing space in my tables in case cell contents are null.  Cut it off
				aVal = aVal.substr(0,aVal.length-1);
				bVal = bVal.substr(0,bVal.length-1);
				//alert("aVal:"+aVal+", bVal:"+bVal);
				if(aVal == "" || aVal == " ")
				{
					return -1;
				}
				if(bVal == "" || bVal == " ")
				{
					return 1;
				}
				var intSlashA = aVal.indexOf("/");
				var intSlashB = bVal.search("/");
				
				strMonthA = aVal.substr(0,intSlashA);
				strMonthB = bVal.substr(0,intSlashB);
				aVal = aVal.substr(intSlashA+1);
				bVal = bVal.substr(intSlashB+1);
				intSlashA = aVal.search("/");
				intSlashB = bVal.search("/");
				strDayA = aVal.substr(0,intSlashA);
				strDayB = bVal.substr(0,intSlashB);
				var intSpaceA = aVal.indexOf(" ");
				var intSpaceB = bVal.indexOf(" ");
				strYearA = aVal.substring(intSlashA+1, intSpaceA);
				strYearB = bVal.substring(intSlashB+1, intSpaceB);
				var intColonA = aVal.indexOf(":");
				var intColonB = bVal.indexOf(":");
				strHourA = aVal.substring(intSpaceA+1, intColonA);
				strHourB = bVal.substring(intSpaceB+1, intColonB);
				strMinA = aVal.substr(intColonA+1);
				strMinB = bVal.substr(intColonB+1);
	//			strTimeA = aVal.substr(intSpaceA+1);
	//			strTimeB = bVal.substr(intSpaceB+1);
	//			alert("space:"+intSpaceA+",colon:"+intColonA);
	//			alert("YearA:"+strYearA+". MonthA:"+strMonthA+". DayA:"+strDayA+". HourA:"+strHourA+". MinA:"+strMinA+". YearB:"+strYearB+". MonthB:"+strMonthB+". DayB:"+strDayB+". DayA:"+strDayA+". HourA:"+strHourA+". MinA:"+strMinA+".");
				if(strYearA != strYearB)
				{ 
					return (strYearA - strYearB); 
				}
				else
				{
					if(strMonthA != strMonthB)
					{ 
						return (strMonthA - strMonthB); 
					}
					else
					{
						if(strDayA != strDayB)
						{
							return (strDayA - strDayB);
						}
						else
						{
							if(strHourA != strHourB)
							{
								return (strHourA - strHourB);
							}
							else
							{
								return (strMinA - strMinB);
							}
						}
					}
				}
			}
			
		
			function RowCompareLinks(a,b){ // parse links to get texts and then compare texts
				//alert("Comparing, a:"+a.innerhtml+" , and b:"+b.innerhtml);
				var aLink =  ""+a.getElementsByTagName('TD')[sortedOn].firstChild.innerhtml;
				var bLink = ""+b.getElementsByTagName('TD')[sortedOn].firstChild.innerhtml;
				var aVal =  ""+a.getElementsByTagName('TD')[sortedOn].firstChild.innerhtml;
				var bVal = ""+b.getElementsByTagName('TD')[sortedOn].firstChild.innerhtml;
				//alert("Comparing, aVal:"+aVal+" , and bVal:"+bVal);
				//alert("aLink:"+aLink+",         bLink:"+bLink);
				
				//var aStart = aLink.indexOf('>');
				//var aEnd = aLink.indexOf('<', aStart);
				//var aVal = aLink.substring(aStart+1, aEnd);
				//var bStart = bLink.indexOf('>');
				//var bEnd = bLink.indexOf('<', bStart);
				//var bVal = bLink.substring(bStart+1, bEnd);
				//alert("Comparing, aVal("+aStart+","+aEnd+"):"+aVal+" , and bVal("+bStart+","+bEnd+"):"+bVal);
				return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));
			}
//-->		

