        
function list_view_over(row)
{
    return set_pointer(row, 'over', 0);
}   


function list_view_out(row)
{
    return set_pointer(row, 'out', 0);
}


function list_view_click(row)
{
    return set_pointer(row, 'click', 0);
}
 
   
function list_view_over_pre_marked(row)
{
    return set_pointer(row, 'over', 1);
}   


function list_view_out_pre_marked(row)
{
    return set_pointer(row, 'out', 1);
}   
   
   
/**
* Sets/unsets the pointer and marker in browse mode
*
* @param   object    the table row
* @param   string    the action calling this script (over, out)
*
* @return  boolean  whether pointer is set or not
*/
 
// Index of marked row	
var marked_row_index = -1;	 
 
function set_pointer(row, action, pre_marked)
{
    // Define colours
    var default_colour = '#ffffff';
    var pointer_colour = '#f2f5f2';
    var marked_colour  = '#edf2ed';

    // Browser cannot get the row, exit
    if (typeof(row.style) == 'undefined') {
        return;
    }

    // Get the current row or exit
    var cells = null;
    if (typeof(document.getElementsByTagName) != 'undefined') {
        cells = row.getElementsByTagName('td');
    }
    else if (typeof(row.cells) != 'undefined') {
        cells = row.cells;
    }
    else {
        return;
    }

    // Detech COM ... with DOM compatible browsers except Opera that does not return  valid values with "getAttribute"
    dom_detect = typeof(window.opera) == 'undefined'  && typeof(cells[0].getAttribute) != 'undefined';

    // Count cells
    var row_cell_count = cells.length;
    
    // Determine what to do by action
    if (action == 'over') {

        // Current row is marked - disable over 
        if (row.rowIndex == marked_row_index) {
            return;
        }
        
        // Current row was marked from beginning - disable over until click
        if (pre_marked && marked_row_index == -1) {
            return;
        }
        
        // Mouse over - set pointer colour
        new_colour = pointer_colour;
    }
    else if (action == 'out') {
   
        // Current row is marked - disable over 
        if (row.rowIndex == marked_row_index) {
            return;
        }
        
        // Current row was marked from beginning - disable over until click
        if (pre_marked && marked_row_index == -1) {
            return;
        }
        
        // Mouse out - set default colour
        new_colour = default_colour;
    }
    else if (action == 'click') {

        // Unmark previous (if any)
        if (marked_row_index > -1) {
            set_pointer(row.parentNode.rows[marked_row_index], 'clear', pre_marked)
        }
        
        // Unmark pre_marked (if exists)
        if (document.getElementById('pre_marked')) {
            document.getElementById('pre_marked').style.background = default_colour;
        }
        
        // Mouse click - set marked colour
        new_colour = marked_colour;
        
        // Save rowIndex
        marked_row_index = row.rowIndex;
    }
    else if (action == 'clear') {
    	
    	// Clear marking - set default colour
        new_colour = default_colour;
    }
    else {
    	return;
    }

    // Set the new color...
    if (new_colour) {
      
        var c = null;
        
        for (c = 0; c < row_cell_count; c++) {
        
            // ... with DOM compatible browsers except Opera
	    if (dom_detect) {
                cells[c].setAttribute('bgcolor', new_colour, 0);
            } 
        
            // ... with other browsers
            else {
                cells[c].style.backgroundColor = new_colour;
            }
        } 
    }

    return true;
} 

