
//Table Manager
var emwTableManager = {
	
	SORT_COLUMN_INDEX : 0,
	
	ALLOW_SCROLLING : false,
	
	SHOW_GROUP_HEADINGS: false,
	
	addEvent : function(elm, evType, fn, useCapture)
	{
	  if (elm.addEventListener) { 
	    elm.addEventListener(evType, fn, useCapture); 
	    return true; 
	  } else if (elm.attachEvent) { 
	    var r = elm.attachEvent('on' + evType, fn); 
	    return r; 
	  } else {
	    elm['on' + evType] = fn;
	  }
	},
	
	// climb up the tree to the supplied tag.
	ascendDOM : function(e, target)
	{
	  while (e.nodeName.toLowerCase() != target.toLowerCase() && e.nodeName.toLowerCase() != 'html')
	    e = e.parentNode;
	  
	  return (e.nodeName.toLowerCase() == 'html') ? null : e;
	},
	
	ascendDOMIgnoreCurrent : function(e, target)
	{
	  e = e.parentNode;
	  while (e.nodeName.toLowerCase() != target.toLowerCase() && e.nodeName.toLowerCase() != 'html')
	    e = e.parentNode;
	  
	  return (e.nodeName.toLowerCase() == 'html') ? null : e;
	},
	
	// turn on row and column highlighting
	hi_cell : function(e)
	{
		var el;
		if (window.event && window.event.srcElement)
			el = window.event.srcElement;
		if (e && e.target)
			el = e.target;
		if (!el) return;
		
		el = emwTableManager.ascendDOM(el, 'td');
		if (el == null) return;
		
		var parent_row = emwTableManager.ascendDOM(el, 'tr');
		if (parent_row == null) return;
		
		var parent_table = emwTableManager.ascendDOM(parent_row, 'table');
		if (parent_table == null) return;
		
		// row styling
		parent_row.className += ' hi';
		
		// column styling
		var ci = -1;
		for (var i = 0; i < parent_row.cells.length; i++)
		{
			if (el === parent_row.cells[i])
			{
				ci = i;
			}
		}
		if (ci == -1) return; // this should never happen
		
		for (var i = 0; i < parent_table.rows.length; i++)
		{
			var cell = parent_table.rows[i].cells[ci];
			cell.className += ' hi';
		}
	},
	
	// turn off row and column highlighting
	lo_cell : function(e)
	{
		var el;
		if (window.event && window.event.srcElement)
			el = window.event.srcElement;
		if (e && e.target)
			el = e.target;
		if (!el) return;
		
		el = emwTableManager.ascendDOM(el, 'td');
		if (el == null) return;
		
		var parent_row = emwTableManager.ascendDOM(el, 'tr');
		if (el == null) return;
		
		var parent_table = emwTableManager.ascendDOM(parent_row, 'table');
		if (el == null) return;
		
		// row de-styling
		parent_row.className = parent_row.className.replace(/\b ?hi\b/, '');
		
		// column de-styling
		var ci = -1;
		for (var i = 0; i < parent_row.cells.length; i++)
		{
			if (el === parent_row.cells[i])
			{
				ci = i;
			}
		}
		if (ci == -1) return; // this should never happen
		
		for (var i = 0; i < parent_table.rows.length; i++)
		{
			var cell = parent_table.rows[i].cells[ci];
			cell.className = cell.className.replace(/\b ?hi\b/, '');
		}
	},
	
	// turn on row highlighting
	hi_row : function(e) {
	  var el;
	  if (window.event && window.event.srcElement)
	    el = window.event.srcElement;
	  if (e && e.target)
	    el = e.target;
	  if (!el) return;
	  
	  el = emwTableManager.ascendDOM(el, 'td');
	  if (el == null) return;
	
	  var parent_row = emwTableManager.ascendDOM(el, 'tr');
	  if (parent_row == null) return;
	
	  var parent_table = emwTableManager.ascendDOM(parent_row, 'table');
	  if (parent_table == null) return;
	
	  // row styling
	  parent_row.className += ' hi';
	},
	
	// turn off row highlighting
	lo_row : function(e) {
	  var el;
	  if (window.event && window.event.srcElement)
	    el = window.event.srcElement;
	  if (e && e.target)
	    el = e.target;
	  if (!el) return;
	
	  el = emwTableManager.ascendDOM(el, 'td');
	  if (el == null) return;
	  
	  var parent_row = emwTableManager.ascendDOM(el, 'tr');
	  if (el == null) return;
	
	  var parent_table = emwTableManager.ascendDOM(parent_row, 'table');
	  if (el == null) return;
	
	  // row de-styling
	  parent_row.className = parent_row.className.replace(/\b ?hi\b/, '');
	},
	
	// turn on column highlighting
	hi_col : function(e)
	{
		var el;
		if (window.event && window.event.srcElement)
			el = window.event.srcElement;
		if (e && e.target)
			el = e.target;
		if (!el) return;
		
		el = emwTableManager.ascendDOM(el, 'td');
		if (el == null) return;
		
		var parent_row = emwTableManager.ascendDOM(el, 'tr');
		if (parent_row == null) return;
		
		var parent_table = emwTableManager.ascendDOM(parent_row, 'table');
		if (parent_table == null) return;
		
		// column styling
		var ci = -1;
		for (var i = 0; i < parent_row.cells.length; i++)
		{
			if (el === parent_row.cells[i])
			{
				ci = i;
			}
		}
		if (ci == -1) return; // this should never happen
		
		for (var i = 0; i < parent_table.rows.length; i++)
		{
			var cell = parent_table.rows[i].cells[ci];
			cell.className += ' hi';
		}
	},
	
	// turn off column highlighting
	lo_col: function(e)
	{
		var el;
		if (window.event && window.event.srcElement)
			el = window.event.srcElement;
		if (e && e.target)
			el = e.target;
		if (!el) return;
		
		el = emwTableManager.ascendDOM(el, 'td');
		if (el == null) return;
		
		var parent_row = emwTableManager.ascendDOM(el, 'tr');
		if (el == null) return;
		
		var parent_table = emwTableManager.ascendDOM(parent_row, 'table');
		if (el == null) return;
		
		// column de-styling
		var ci = -1;
		for (var i = 0; i < parent_row.cells.length; i++)
		{
			if (el === parent_row.cells[i])
			{
				ci = i;
			}
		}
		if (ci == -1) return; // this should never happen
		
		for (var i = 0; i < parent_table.rows.length; i++)
		{
			var cell = parent_table.rows[i].cells[ci];
			cell.className = cell.className.replace(/\b ?hi\b/, '');
		}
	},
	
	makeScrollable : function(objTable)
	{
		if(objTable.rows && objTable.rows.length > 0)
		{
        		var firstRow = objTable.rows[0];
   		}
   		
		if (!firstRow) return;
		
		var objHead = emwTableManager.makeScrollableFirstRow(firstRow);
		
		var objBody = emwTableManager.makeScrollableTableBody(objTable);
		
		if(objTable.firstChild.parentNode)
		{
			objTable.firstChild.parentNode.removeChild(objTable.firstChild);	
		}
		
		if(objTable.innerHTML != '')
		{
			objTable.innerHTML = "";
		}
				
		objTable.appendChild(objHead);
		objTable.appendChild(objBody);
	},
	
	makeScrollableFirstRow : function(objRow)
	{
		var thead = document.createElement('thead');
		thead.className = "fixedHeader";
				
		thead.appendChild(objRow);
		
		//objRow.parentNode.removeChild(objRow);
		
		return thead;
	},
	
	makeScrollableTableBody : function(objTable)
	{
		var tbody = document.createElement('tbody');
		tbody.className = "scrollContent";
		
		
		while(objTable.rows.length > 0)
		{
			row = objTable.rows[0];
			tbody.appendChild(row);
			//row.parentNode.removeChild(row);
		}
		
		return tbody;
	},
	
	alternateRowColour : function(objRow)
	{
		objRow.className = objRow.className + "Alt";
		
		for (var i = 0; i < objRow.childNodes.length; i++)
		{
			var cell = objRow.childNodes[i];
			if(cell.tagName != null && cell.tagName.toLowerCase() == 'td')
			{				
				cell.className += 'Alt';				
			}
		}
	},
	
	makeSortable : function(objTable,sortColumnIndex)
	{
		if (objTable.rows && objTable.rows.length > 0)
		{
		    if(emwTableManager.SHOW_GROUP_HEADINGS == true)
		    {
		        var firstRow = objTable.rows[1];
		    }
		    else
		    {
			    var firstRow = objTable.rows[0];
			}
		}
		if (!firstRow) return;
		
		// We have a first row: assume it's the header, and make its contents clickable links
		for (var i=0;i<firstRow.cells.length;i++)
		{
			var cell = firstRow.cells[i];
			cell.style.cursor = "pointer";
			var txt = emwTableManager.getInnerText(cell);
			var txtTrim = emwTableManager.trimAll(txt);
			
			if(txtTrim.length > 0)
			{
				//cell.innerHTML = '<a href="#" class="TableSortHeader" onclick="emwTableManager.doSortTable(this);return false;">'+txt+'<span class="SortArrowUnsorted"></span></a>';
				var arrowClass = "SortArrowUnsorted";
				if(sortColumnIndex != null && sortColumnIndex == i)
				{
					arrowClass = 	"SortArrowDown";
				}				
				//cell.innerHTML = txt + '<span id="SortTableSpanArrow_' + i + '" class="' + arrowClass + '"></span>';
				cell.innerHTML     = '<table class="SortTableHeader" border="0" cellspacing="0" cellpadding="0"><tr disallowalternaterowcolour="true"><td class="SortTableHeaderText" itemKey="' + txt + '">' + txt + '</td></tr><tr disallowalternaterowcolour="true"><td class="SortTableHeaderArrow"><span id="SortTableSpanArrow_' + i + '" class="' + arrowClass + '">'
                           + '&nbsp;&nbsp;&nbsp;</span></td></tr></table>';
                
			                        
			}
			emwTableManager.addEvent(cell, 'click', emwTableManager.doSortTable, false);
		}
	},
	
	getInnerText : function(el)
	{
		if (typeof el == "string") return el;
		if (typeof el == "undefined") { return el };
		if (el.innerText) return el.innerText;	//Not needed but it is faster
		var str = "";
		
		var cs = el.childNodes;
		var l = cs.length;
		for (var i = 0; i < l; i++)
		{
			switch (cs[i].nodeType)
			{
				case 1: //ELEMENT_NODE
					str += emwTableManager.getInnerText(cs[i]);
					break;
				case 3:	//TEXT_NODE
					str += cs[i].nodeValue;
					break;
			}
		}
		return str;
	},
	
	doSortTable : function(e)
	{
		var el;
		if (window.event && window.event.srcElement)
			el = window.event.srcElement;
		if (e && e.target)
			el = e.target;
		if (!el) return;
		
		var selectedEl = el;		
		if(selectedEl.cellIndex >= 0)
		{
			td = selectedEl;	
		}
		else
		{
			td = selectedEl.parentNode;
		}
		
		// get the span
		var span;
		childNodes = td.getElementsByTagName('span');
		
		if(childNodes.length > 0)
		{
		    span = childNodes[0];
	    }
	    
	    if(span != null && span.id != null)
	    {
		    for (var ci=0;ci<td.childNodes.length;ci++)
		    {
			    if (td.childNodes[ci].tagName && td.childNodes[ci].tagName.toLowerCase() == 'span')
			    {
				    //span = td.childNodes[ci];
			    }
		    }
		    //var spantext = emwTableManager.getInnerText(span);
    				
		    //var td = lnk.parentNode;
		    var columnIndex = span.id.split('_')[1];
		    
		    var table = emwTableManager.ascendDOM(td,'table');
		    if(table.rows.length <= 2)
			    table = emwTableManager.ascendDOMIgnoreCurrent(table,'table');
    		
		    // Work out a type for the column
		    if(emwTableManager.SHOW_GROUP_HEADINGS == true && table.rows.length <= 2)
		        return;
		    if (table.rows.length <= 1) 
		        return;
    		
		    var headingRowIndex = 0;
		    if(emwTableManager.SHOW_GROUP_HEADINGS == true)
		        headingRowIndex = 1;
    		
		    var itm = emwTableManager.trimAll(emwTableManager.getInnerText(table.rows[headingRowIndex + 1].cells[columnIndex]));
		    sortfn = emwTableManager.tableSortCaseInsensitive;
    				
		    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = emwTableManager.tableSortDate;
		    else if (itm.match(/^\d\d(\-|\/|\.)\d\d(\-|\/|\.)\d\d\d\d$/)) sortfn = emwTableManager.tableSortDate;
		    else if (itm.match(/^\d{1,2}(\-|\/|\.)\d{1,2}(\-|\/|\.)\d{4}$/)) sortfn = emwTableManager.tableSortDate;
		    else if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = emwTableManager.tableSortDate;
		    else if (itm.match(/^\d+(\/|-|\s)+\w{2,}(\/|-|\s)+\d\d\d\d/)) sortfn = emwTableManager.tableSortDateWords;
		    else if (itm.match(/^[£$]/)) sortfn = emwTableManager.tableSortCurrency;
		    else if (itm.match(/^[\d\.]+/)) sortfn = emwTableManager.tableSortNumeric;
		    emwTableManager.SORT_COLUMN_INDEX = columnIndex;
		    var firstRow = new Array();
		    var newRows = new Array();
		    var styleClasses = new Array();
		    var k = 0;
		    for (i=0;i<table.rows[headingRowIndex].length;i++)
		    {
			    firstRow[i] = table.rows[headingRowIndex][i];
		    }
    		
		    var newRowCounter = 0;
		    for (j=headingRowIndex+1;j<table.rows.length;j++)
		    {
			    newRows[newRowCounter] = table.rows[j];
    			
			    if(styleClasses.length == 0)
			    {
				    styleClasses[0] = newRows[newRowCounter].className;
				    k++;
			    }
			    else
			    {	
				    include = true;
				    for(l=0;l<styleClasses.length;l++)
				    {
					    if(styleClasses[l] == newRows[newRowCounter].className)
					    {
						    include = false;
						    break;	
					    }
				    }
				    if(include == true)
				    {
					    styleClasses[k] = newRows[newRowCounter].className;
					    k++;
				    }
			    }
			    newRowCounter++;
		    }
    		
		    newRows.sort(sortfn);
		    var ARROW = "";
		    var curSortDirection;
		    var selectedSortArrowIndex = "SortTableSpanArrow_" + columnIndex;
		    if (span.getAttribute("sortdirection") == 'up')
		    {
			    //ARROW = '&nbsp;&nbsp;&uarr;';
			    //ARROW = '<img src="images/ico_sort_ascending.gif" width="11" height="16" border="0" align="absmiddle" vspace="0" hspace="0" alt="Sort ascending" />';
			    newRows.reverse();
			    span.className = "SortArrowUp";
			    span.setAttribute('sortdirection','down');
			    curSortDirection = "down";
		    }
		    else
		    {
			    //ARROW = '&nbsp;&nbsp;&darr;';
			    //ARROW = '<img src="images/ico_sort_descending.gif" width="11" height="16" border="0" align="absmiddle" vspace="0" hspace="0" alt="Sort descending" />';
			    span.className = "SortArrowDown";
			    span.setAttribute('sortdirection','up');
			    curSortDirection = "up";
		    }
    		
		    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
		    // don't do sortbottom rows
		    for (i=0;i<newRows.length;i++)
		    {
		        if (newRows[i] != null && !newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1)))
			    {
			    	    if(styleClasses.length > 0)
				        {
				    	    if(i % 2 > 0)
				    		    newRows[i].className = styleClasses[0];
				    	    else
			    			    newRows[i].className = styleClasses[1];
			    	    }
				        table.tBodies[0].appendChild(newRows[i]);
			    }
		    }
		    // do sortbottom rows only
		    for (i=0;i<newRows.length;i++) 
		    {
			    if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1))
			    {
				    if(styleClasses.length > 0)
				    {
			    	    if(i % 2 > 0)
			    		    newRows[i].className = styleClasses[0];
			    	    else
		    			    newRows[i].className = styleClasses[1];
		    	    }
				    table.tBodies[0].appendChild(newRows[i]);
			    }
		    }
    		
		    // Delete any other arrows there may be showing
		    var allspans = table.rows[headingRowIndex].getElementsByTagName("span");
		    for (var ci=0;ci<allspans.length;ci++)
		    {
		        if(allspans[ci].getAttribute('id') != selectedSortArrowIndex)
			    {
		    		    //if (emwTableManager.ascendDOM(allspans[ci],"table") == emwTableManager.ascendDOM(td,"table"))
		    		    //{ // in the same table as us?
		        		    //allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';
		        		    allspans[ci].className = "SortArrowUnsorted";
		    		    //}
			    }
		    }
		    span.innerHTML = ARROW;
        }
	},
	
	tableSortDate : function(a,b)
	{
		// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
		aa = emwTableManager.getInnerText(a.cells[emwTableManager.SORT_COLUMN_INDEX]);
		bb = emwTableManager.getInnerText(b.cells[emwTableManager.SORT_COLUMN_INDEX]);
		
		if (aa.length == 10)
		{
			dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
		}
		else
		{
			yr = aa.substr(6,2);
			if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
			dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
		}
		
		if (bb.length == 10)
		{
			dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
		}
		else
		{
			yr = bb.substr(6,2);
			if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
			dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
		}
		if (dt1==dt2) return 0;
		if (dt1<dt2) return -1;
		return 1;
	},
	
	tableSortDateWords : function(a,b)
	{
		// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
		aa = emwTableManager.getInnerText(a.cells[emwTableManager.SORT_COLUMN_INDEX]);
		bb = emwTableManager.getInnerText(b.cells[emwTableManager.SORT_COLUMN_INDEX]);
		var aaArray = new Array();
		var bbArray = new Array();
		
		if (aa.match(/(\s)+/))
		{
			aaArray = aa.split(" ");
		}
		
		yr = aaArray[2];
		mths = mthsIndex(aaArray[1]);
		dy = parseFloat(aaArray[0]);
		if(dy < 10)
			dy = "0" + dy;   
		
		dt1 = yr+mths+dy;
		
		if (bb.match(/(\s)+/))
		{
			bbArray = bb.split(" ");
		}
		
		yr = bbArray[2];
		mths = mthsIndex(bbArray[1]);
		dy = parseFloat(bbArray[0]);
		if(dy < 10)
			dy = "0" + dy;
		
		dt2 = yr+mths+dy;
		
		if (dt1==dt2) return 0;
		if (dt1<dt2) return -1;
		return 1;
	},
	
	mthsIndex : function(mths)
	{
		var mthsFullArray = new Array("January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", "December");
		var mthsArray = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
		var mthIndex = '';
		
		for(i=0;i<mthsArray.length;i++)
		{
		if(mths.toUpperCase() == mthsArray[i].toUpperCase())
		{
			mthIndex = i + 1;
			
			if(mthIndex < 10)
				mthIndex = "0" + mthIndex;
			break;
		}
		else if(mths.toUpperCase() == mthsFullArray[i].toUpperCase())
		{
			mthIndex = i + 1;
			if(mthIndex < 10)
				mthIndex = "0" + mthIndex;
			break;
		}
		}
		return mthIndex;
	},

	tableSortCurrency : function(a,b)
	{
	    aa = emwTableManager.getInnerText(a.cells[emwTableManager.SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
	    bb = emwTableManager.getInnerText(b.cells[emwTableManager.SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
	    return parseFloat(aa) - parseFloat(bb);
	},

	tableSortNumeric : function(a,b)
	{
	    aa = parseFloat(emwTableManager.getInnerText(a.cells[emwTableManager.SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,''));
	    if (isNaN(aa)) aa = 0;
	    bb = parseFloat(emwTableManager.getInnerText(b.cells[emwTableManager.SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'')); 
	    if (isNaN(bb)) bb = 0;
	    return aa-bb;
	},

	tableSortCaseInsensitive : function(a,b)
	{
	    aa = emwTableManager.getInnerText(a.cells[emwTableManager.SORT_COLUMN_INDEX]).toLowerCase();
	    bb = emwTableManager.getInnerText(b.cells[emwTableManager.SORT_COLUMN_INDEX]).toLowerCase();
	    if (aa==bb) return 0;
	    if (aa<bb) return -1;
	    return 1;
	},

	tableSortDefault : function(a,b)
	{
	    aa = emwTableManager.getInnerText(a.cells[emwTableManager.SORT_COLUMN_INDEX]);
	    bb = emwTableManager.getInnerText(b.cells[emwTableManager.SORT_COLUMN_INDEX]);
	    if (aa==bb) return 0;
	    if (aa<bb) return -1;
	    return 1;
	},
	
	leftTrim : function(sString) 
	{
		while (sString.substring(0,1) == ' ')
		{
			sString = sString.substring(1, sString.length);
		}
		return sString;
	},
	
	rightTrim : function(sString) 
	{
		while (sString.substring(sString.length-1, sString.length) == ' ')
		{
			sString = sString.substring(0,sString.length-1);
		}
		return sString;
	},
	
	trimAll : function(sString) 
	{
		while (sString.substring(0,1) == ' ')
		{
			sString = sString.substring(1, sString.length);
		}
		while (sString.substring(sString.length-1, sString.length) == ' ')
		{
			sString = sString.substring(0,sString.length-1);
		}
		return sString;
	},
	
	//Event Listeners
	addListeners: function()
	{
	  	if (!document.getElementsByTagName) return;
	  
		var all_tables = document.getElementsByTagName('table');
				
		for (var i = 0; i < all_tables.length; i++)
		{
		    //Table Highlighting
			if(all_tables[i].getAttribute('allowrowhighlight') != null && all_tables[i].getAttribute('allowcolhighlight') != null && all_tables[i].getAttribute('allowrowhighlight')=="true" && all_tables[i].getAttribute('allowcolhighlight')=="true")
			{
				var all_cells = all_tables[i].getElementsByTagName('td');
				
				for(var j = 0; j < all_cells.length; j++)
				{
				    changeRow = true;
				    if((all_cells[j].getAttribute('disallowalternaterowcolour') != null && all_cells[j].getAttribute('disallowalternaterowcolour')=="true"))
				    {
				        changeRow = false;
				    }
				    if(changeRow == true)
				    {
					    emwTableManager.addEvent(all_cells[j], 'mouseover', emwTableManager.hi_cell, false);
	    			    emwTableManager.addEvent(all_cells[j], 'mouseout', emwTableManager.lo_cell, false);					
	    			}
				}
			}
			else if(all_tables[i].getAttribute('allowrowhighlight') != null && all_tables[i].getAttribute('allowrowhighlight')=="true")
			{
				var all_cells = all_tables[i].getElementsByTagName('tr');
				
				for(var j = 0; j < all_cells.length; j++)
				{
				    changeRow = true;
				    if((all_cells[j].getAttribute('disallowalternaterowcolour') != null && all_cells[j].getAttribute('disallowalternaterowcolour')=="true"))
				    {
				        changeRow = false;
				    }
				    if(changeRow == true)
				    {
					    emwTableManager.addEvent(all_cells[j], 'mouseover', emwTableManager.hi_row, false);
	    			    emwTableManager.addEvent(all_cells[j], 'mouseout', emwTableManager.lo_row, false);					
	    			}
				}
			}
			else if(all_tables[i].getAttribute('allowcolhighlight') != null && all_tables[i].getAttribute('allowcolhighlight')=="true")
			{
				var all_cells = all_tables[i].getElementsByTagName('td');
				
				for(var j = 0; j < all_cells.length; j++)
				{
				    changeRow = true;
				    if((all_cells[j].getAttribute('disallowalternaterowcolour') != null && all_cells[j].getAttribute('disallowalternaterowcolour')=="true"))
				    {
				        changeRow = false;
				    }
				    if(changeRow == true)
				    {
					    emwTableManager.addEvent(all_cells[j], 'mouseover', emwTableManager.hi_col, false);
	    			    emwTableManager.addEvent(all_cells[j], 'mouseout', emwTableManager.lo_col, false);					
	    			}
				}
			}
			
			//Table Scrolling
			if(all_tables[i].getAttribute('allowscrolling') != null && all_tables[i].getAttribute('allowscrolling')=="true")
			{
				emwTableManager.makeScrollable(all_tables[i]);	
			}
			
			//Table Group Headings
			if(all_tables[i].getAttribute('showgroupheadings') != null && all_tables[i].getAttribute('showgroupheadings')=="true")
			{
			    emwTableManager.SHOW_GROUP_HEADINGS = true;
		    }
			
			//Table Sorting
			if(all_tables[i].getAttribute('allowsorting') != null && all_tables[i].getAttribute('allowsorting')=="true")
			{
				var sortColumnIndex = null;
				if(all_tables[i].getAttribute('sortcolumnindex') != null)
				{
					sortColumnIndex = parseInt(all_tables[i].getAttribute('sortcolumnindex'));
				}
				
				emwTableManager.makeSortable(all_tables[i],sortColumnIndex);
				emwTableManager.ALLOW_SCROLLING = true;
			}
			
			//Table Alternating Row Colours
			if(all_tables[i].getAttribute('allowalternaterowcolour') != null && all_tables[i].getAttribute('allowalternaterowcolour')=="true")
			{
				var trs = all_tables[i].getElementsByTagName("tr");
				var startIndex = 0;
				
				if(emwTableManager.SHOW_GROUP_HEADINGS == true)
				{
				    var startIndex = 2;
				}
				
				for (var j = startIndex; j < trs.length; j++)
				{
				    changeRow = true;
				    if(trs[j].getAttribute('disallowalternaterowcolour') != null && trs[j].getAttribute('disallowalternaterowcolour')=="true")
				    {
				        changeRow = false;
				    }
				    if((j % 2) == 0 && changeRow == true)
					{
						emwTableManager.alternateRowColour(trs[j]);
					}
				}
			}
		}
	}
}

emwTableManager.addEvent(window, 'load', emwTableManager.addListeners, false);



