/**
 * Initialize OnloadScheduler (patched for manual init)
 */
window.onload = function() { OnloadScheduler.load(); };


/**
 * Init script for orderable tables, detects tables and registers eventListeners for columns
 */

/* required variables */
var headerStates = new Array();
var orderable = new Array();


/* schedule for onload event */
OnloadScheduler.schedule(
    function()
    {
        /* create and return listener function for sorting columns */
        function createListener(element, column, comparsionFunction)
        {
            return function()
            {
                if (headerStates[element][column] == true) headerStates[element][column] = false;
                else headerStates[element][column] = true;
                orderable[element].sort(column, comparsionFunction, headerStates[element][column]);
            }
        }

        var e = document.getElementsByTagName('table');
        /* iterate all <table> elements */
        for (var t = 0; t < e.length; t++) {
            /* process only orderable class */
            if (e[t].className.indexOf('orderable') == -1) continue;

            /* add support for tr:hover via JavaScript (IE bug) */
            var tr = e[t].getElementsByTagName('tr');
            for (r = 0; r < tr.length; r++) {
                tr[r].onmouseover = function() {
                    /* diferent highlight for alted and normal rows */
                    this.className = (this.className.indexOf('alt') == -1 ? 'highlight1' : 'highlight2');
                }
                tr[r].onmouseout = function() {
                    /* rollback for alted and normal rows */
                    this.className = (this.className.indexOf('highlight2') == -1 ? '' : 'alt');
                }
            }

            orderable[t] = new SortableTable(e[t]);
            var headers = e[t].getElementsByTagName('thead')[0].getElementsByTagName('th');

            /* iterate <th> and handle onclick event */
            for (var i = 0; i < headers.length; i++) {
                headerStates[t] = new Array();
                headerStates[t][i] = false;
                if (headers[i].addEventListener) headers[i].addEventListener('click', createListener(t, i, SortableTable.SORT.ALPHANUMERICAL), false);
                else if (headers[i].attachEvent) headers[i].attachEvent('onclick', createListener(t, i, SortableTable.SORT.ALPHANUMERICAL));
            }
        }
    }
);