var currentCol = 0;
var previousCol = -1;

function TMyItem(itext,ihtml)
{   
  this.itext = itext;
  this.ihtml = ihtml;
}

function CompareAlpha(a, b) {
	if (a[currentCol].itext < b[currentCol].itext) { return -1; }
	if (a[currentCol].itext > b[currentCol].itext) { return 1; }
	return 0;
}

function CompareAlphaIgnore(a, b) {
	strA = a[currentCol].itext.toLowerCase();
	strB = b[currentCol].itext.toLowerCase();
	if (strA < strB) { return -1; }
	else {
		if (strA > strB) { return 1; }
		else { return 0; }
	}
}
function CompareDate(a, b) {
	// this one works with date formats conforming to Javascript specifications, e.g. m/d/yyyy
	datA = new Date(a[currentCol].itext);
	datB = new Date(b[currentCol].itext);
	if (datA < datB) { return -1; }
	else {
		if (datA > datB) { return 1; }
		else { return 0; }
	}
}
function CompareDateEuro(a, b) {
	// this one works with european date formats, e.g. d.m.yyyy
	strA = a[currentCol].itext.split(".");
	strB = b[currentCol].itext.split(".")
	datA = new Date(strA[2], strA[1], strA[0]);
	datB = new Date(strB[2], strB[1], strB[0]);
	if (datA < datB) { return -1; }
	else {
		if (datA > datB) { return 1; }
		else { return 0; }
	}
}
function CompareNumeric(a, b) {
	numA = a[currentCol].itext;
	numB = b[currentCol].itext;
	if (isNaN(numA)) { return 0;}
	else {
		if (isNaN(numB)) { return 0; }
		else { return numA - numB; }
	}
}
function CompareCurrency(a, b) {
	numA = a[currentCol].itext.replace("R","");
	numB = b[currentCol].itext.replace("R","");
	numA = numA.replace(" ","");
	numB = numB.replace(" ","");
	numA = numA.replace(",","");
	numB = numB.replace(",","");
	if (isNaN(numA)) { return 0;}
	else {
		if (isNaN(numB)) { return 0; }
		else { return numA - numB; }
	}

}

function CompareOdo(a, b) {
	numA = a[currentCol].itext.replace(" km","");
	numB = b[currentCol].itext.replace(" km","");
	numA = numA.replace("km","");
	numB = numB.replace("km","");

	if (isNaN(numA)) { return 0;}
	else {
		if (isNaN(numB)) { return 0; }
		else { return numA - numB; }
	}

}

function CompareEngine(a, b) {
	numA = a[currentCol].itext.replace("cc","");
	numB = b[currentCol].itext.replace("cc","");
	if (isNaN(numA)) { return 0;}
	else {
		if (isNaN(numB)) { return 0; }
		else { return numA - numB; }
	}

}


function TableSort(myTable, myCol, myType, myStripChar) {
	// Create a two-dimensional array and fill it with the table's content
	var mySource = document.all(myTable);
	var myRows = mySource.rows.length;
	var myCols = mySource.rows[0].cells.length;
	if (myType == "-") return 0; 
	this.currentCol = myCol;
	myArray = new Array(myRows);	
	for (i=0; i < myRows; i++) {
		myArray[i] = new Array(myCols)
		for (j=0; j < myCols; j++) {
		    myArrayItem = new TMyItem(document.all(myTable).rows[i].cells[j].innerText,document.all(myTable).rows[i].cells[j].innerHTML);
			myArray[i][j] = myArrayItem;
		}
	}
    currentCol = this.currentCol;
    previousCol = this.previousCol;
	
	if (myCol == this.previousCol) {
		myArray.reverse(); // clicked the same column as previously - reverse the sort
	}
	else { // clicked on a new column - sort as indicated
		switch (myType) {
			case "a":
				myArray.sort(CompareAlpha);
				break;
			case "ai":
				myArray.sort(CompareAlphaIgnore);
				break;
			case "d":
				myArray.sort(CompareDate);
				break;
			case "de":
				myArray.sort(CompareDateEuro);
				break;
			case "n":
				myArray.sort(CompareNumeric);
				break;			
			case "c":
				myArray.sort(CompareCurrency);
				break;			
			case "o":
				myArray.sort(CompareOdo);
				break;			
			case "e":
				myArray.sort(CompareEngine);
				break;			
				
				
				
		}
	}
	// Re-write the table contents
	for (i=0; i < myRows; i++) {
		for (j=0; j < myCols; j++) {
			mySource.rows[i].cells[j].innerHTML = myArray[i][j].ihtml;
		}
	}
	this.previousCol = myCol; // remember the current sort column for the next pass
	return 0;
}

function TmySort()
{
	this.currentCol = 0;
	this.previousCol = -1;
	this.TableSort = TableSort;
}
