var _sortingCell = -1;
var _sortingAsc = true;
var _currentCol = null;
 
var _NONDATE_YEAR = 1880;
var _NONDATE_MONTH = 1;
var _NONDATE_DAY = 1;

var _maskString = "";
var _maskZeroCount = 10;

function getUKDateValue( inValue ) {
	//This function gets the value of the date, assuming that it is in UK format
	//BL - 29/10/2004		
	

	temp = inValue.split("/");				
	if ( temp.length == 3 ) {
		iDay = temp[0];
		iMonth = temp[1];
		iYear = temp[2];

		temp = new Date( iYear, iMonth, iDay );
		
		if ( temp == NaN ) {
			r = Date.UTC( _NONDATE_YEAR, _NONDATE_MONTH, _NONDATE_DAY );
		} else {
			r = Date.UTC( iYear, iMonth, iDay );
		}
	} else {
			r = Date.UTC( _NONDATE_YEAR, _NONDATE_MONTH, _NONDATE_DAY );	
	}
	
	return r;
}

function sort_dateOrder(a,b){
	var date1;
	var date2;
	
	if ( a.cells[_sortingCell].innerText )
    {
        date1 = a.cells[_sortingCell].innerText;
	    date2 = b.cells[_sortingCell].innerText;
    }
    else
    {
        date1 = a.cells[_sortingCell].textContent;
	    date2 = b.cells[_sortingCell].textContent;    
    }
	
	_sortingAsc ? rVal = getUKDateValue(date1) - getUKDateValue(date2) : rVal = getUKDateValue(date2) - getUKDateValue(date1)
	return rVal
}	

function sort_numberOrder(a,b){
    var av;
    var bv;
    if ( a.cells[_sortingCell].innerText )
    {
        av = a.cells[_sortingCell].innerText;
        bv = b.cells[_sortingCell].innerText;
    }
    else
    {
        av = a.cells[_sortingCell].textContent;
        bv = b.cells[_sortingCell].textContent;    
    }

	_sortingAsc ? rVal = av - bv : rVal = bv - av;
	return rVal
}

function sort_stringOrder(a,b){
    var av;
    var bv;
    if ( a.cells[_sortingCell].innerText )
    {
        av = a.cells[_sortingCell].innerText.toString();
        bv = b.cells[_sortingCell].innerText.toString();
    }
    else
    {
        av = a.cells[_sortingCell].textContent.toString();
        bv = b.cells[_sortingCell].textContent.toString();    
    }

    if (av < bv){
        _sortingAsc ? rVal = -1 : rVal = 1
    }
    else{
        _sortingAsc ? rVal = 1 : rVal = -1
    }
    return rVal
}	

function addPrefixZeros( numberString, zeroCount ) {
	var i;
	var r = numberString;
	for ( i = numberString.length; i < zeroCount; i++ ) {
		r = "0" + r;
	}
	return r;
}

function sort_stringNumberMaskOrder_addMask( inString ) {
	var r = inString;
	var temp;
	if ( _maskString != "" ) {
		if ( inString.indexOf( _maskString ) > -1 ) {
			temp = inString.split( _maskString );
			r = temp[0] + _maskString + addPrefixZeros( temp[1], _maskZeroCount );
		}
	}	
	
	return r;
}

function sort_stringNumberMaskOrder(a,b){
	text1 = sort_stringNumberMaskOrder_addMask(a.cells[_sortingCell].innerText.toString());
	text2 = sort_stringNumberMaskOrder_addMask(b.cells[_sortingCell].innerText.toString());
	
    if (text1 < text2){
        _sortingAsc ? rVal = -1 : rVal = 1
    }
    else{
        _sortingAsc ? rVal = 1 : rVal = -1
    }
    return rVal
}	

function removeSortSettings()
{
	if ( _currentCol != null ) {
		_currentCol.sortingAsc = null;
		_currentCol.className = "RecordListHeaderCell";
	}
	_currentCol = null;
}

function sortColumn( headerCell, tableId, column, sortType ) {
	var newRows = new Array();
	var dataTable = document.getElementById( tableId );

	if ( headerCell != _currentCol ) {
		if ( _currentCol != null ) {
			_currentCol.sortingAsc = null;
			_currentCol.className = "RecordListHeaderCell";
		}
		_currentCol = headerCell;
		_currentCol.className = "RecordListHeaderCellSelected";

	}
	if ( headerCell.sortingAsc == "Yes" ) {
		headerCell.sortingAsc = "No";
		_sortingAsc = false;
	} else {
		headerCell.sortingAsc = "Yes";
		_sortingAsc = true;	
	}
	
	if ( _sortingAsc ) {
		window.status = "Sorting Ascending";
	} else {
		window.status = "Sorting Descending";
	}
	
	if ( dataTable != null ) {
		_sortingCell = column;
		for (j=1;j<dataTable.rows.length;j++) { 
			if ( dataTable.rows[j].cells[0].innerText != "" ) {
				newRows[j-1] = dataTable.rows[j]; 
			}
		}
		switch ( sortType ) {
			case "date":
				newRows.sort(sort_dateOrder);
				break;
			case "number":
				newRows.sort(sort_numberOrder);
				break;				
			default:
				if ( sortType.indexOf( "text/number-masked$" ) > -1 ) {
					temp = sortType.split("$");
					_maskString = temp[1];
					newRows.sort(sort_stringNumberMaskOrder);
				} else {
					newRows.sort(sort_stringOrder);
				}
				break;
		}
		
		for (i=0;i<newRows.length;i++) {
			dataTable.tBodies[0].appendChild(newRows[i]);
		}					
	}
}

