var firstClickRow = -1;
var handlingShiftClick = false;

function tdMouseOver( td )
{
    $( td.parentNode ).addClassName( 'rigaSelezionata' );
}

function tdMouseOut( td )
{
    $( td.parentNode ).removeClassName( 'rigaSelezionata' );
}

function selezionaPrimoInput( td )
{
    var tr = td.parentNode;
    var inputs = $( tr ).getElementsBySelector( 'input' );

	if( inputs && ( inputs.length > 0 ))
		inputs[ 0 ].click();
}

function doAction( act )
{
	var f = document.forms[ 0 ];

	f.elements[ 'act' ].value = act;

	f.submit();
}

function goTo( act )
{
	location.href = getRootPath() + "?act=" + act;
}

function goToPage( pag )
{
	var f = document.forms[ 0 ];
	
	$( 'page' ).value = pag;

	f.submit();
}

function getRootPath()
{
	return( $F( 'rootPath' ));
}

function enableShiftSelection()
{
    var cbs = $$( '.colonnaCheck input' );
    
    cbs.each( function( cb )
              {
                  Event.observe( cb, 'click', tableSelectionHandler.bindAsEventListener( cb ));
              } );
}

function tableSelectionHandler( event )
{
    if( !handlingShiftClick ) {
        var tr = this;

		if( tr.hasClassName( 'noShiftClick' ))
			return;
        
        handlingShiftClick = true;

        while( tr.tagName != 'TR' )
            tr = tr.parentNode;
            
        if( event.shiftKey && ( firstClickRow >= 0 )) {
            var start = Math.min( tr.rowIndex, firstClickRow );
            var end = Math.max( tr.rowIndex, firstClickRow );
            var table = tr;
        
            while( table.tagName != 'TABLE' )
                table = table.parentNode;
            
            while( start <= end ) {
                var input;
                
                tr    = table.rows[ start++ ];
                input = tr.cells[ 0 ].getElementsByTagName( 'input' )[0];
                
                // imposta al contrario del valore desiderato
                input.checked = event.ctrlKey;
                
                // imposta il valore corretto e chiama l'eventuale evento associato al click
                input.click();
            }
                
            if( Prototype.Browser.IE ) {
                
                this.checked = !event.ctrlKey;
                
                this.click();
            }
        
        } else
            firstClickRow = tr.rowIndex;
            
        handlingShiftClick = false;
    }
}

function autoEnableActionButtons()
{
    var forTable = $$( '.attivaSuSelezione' );
    
    if( forTable.length > 0 ) {
    
        forTable.each( function( bt ) {
            var tableId = bt.classNames().grep( /tabella.*/ )[0].substr( 7 );
            var cbs = $$( '#' + tableId + ' .colonnaCheck input' );

            cbs.each( function( cb )
                      {
                          Event.observe( cb, 'click', autoEnableButtonsForTable.bindAsEventListener( cb, tableId ));
                      } );
                      
            autoEnableButtonsForTable( null, tableId );
        } );
    }
}

function autoEnableButtonsForTable( event, tableID )
{
    var list = $$( '#' + tableID + ' .colonnaCheck input' );
    var bts = $$( '.attivaSuSelezione.tabella' + tableID );
    var enable = list.anyIsChecked();
    
    if( enable )
        bts.each( Form.Element.enable );
    else
        bts.each( Form.Element.disable );
}

function makeTablesSortable()
{
    var tables = $$( 'table.sortable' );
    
    for( var i = tables.length - 1; i >= 0; i-- ) {
        var table = tables[ i ];
        
        makeTableSortable( table.id );
    }
}

function makeTableSortable( tableId )
{
    var f = document.forms[ 0 ];
    var sortCol = f.elements[ tableId + 'SortCol' ].value;
    var sortDir = f.elements[ tableId + 'SortDir' ].value;
    var ths = $$( '#' + tableId + ' th.sortable' );
    var img = getSortImg( sortDir );
    var defTH = null, colFound = false;
    
    for( var i = ths.length - 1; i >= 0; i-- ) {
        var th = ths[ i ];
        
        Event.observe( th, 'click', sortTable.bindAsEventListener( th, tableId, th.id ));
        
        if( th.id == sortCol ) {

            th.innerHTML = th.innerHTML + img;
            colFound     = true;
        }
        
        if( Element.hasClassName( th, 'defaultSorting' ) ||
            Element.hasClassName( th, 'defaultSortingDesc' ))
            defTH = th;
    }
    
    if( !colFound && defTH ) {

        sortDir = Element.hasClassName( defTH, 'defaultSortingDesc' ) ? 'desc' : 'asc';
    
        defTH.innerHTML = defTH.innerHTML + getSortImg( sortDir );

        f.elements[ tableId + 'SortCol' ].value = defTH.id;
        f.elements[ tableId + 'SortDir' ].value = sortDir;
    }
}

function getSortImg( sortDir )
{
    var img = '<img src="' + getRootPath() + '/images/Sort';
    
    img += ( sortDir == 'asc' ) ? 'Asc' : 'Dsc';
    img += '.gif">';
    
    return( img );
}

function sortTable( event, tableId, colId )
{
    var f = document.forms[ 0 ];
    var sortCol = f.elements[ tableId + 'SortCol' ].value;
    var sortDir = f.elements[ tableId + 'SortDir' ].value;
    
    if( sortCol == colId )
        f.elements[ tableId + 'SortDir' ].value = ( sortDir == 'asc' ) ? 'desc' : 'asc';
    else {
    
        f.elements[ tableId + 'SortCol' ].value = colId;
        f.elements[ tableId + 'SortDir' ].value = 'asc';
    }
    
    f.submit();
}

function defaultPopupParams( width, height )
{
    var x = parseInt(( screen.availWidth - width ) / 2 );
    var y = parseInt(( screen.availHeight - height ) / 2 );

    return( 'alwaysRaised=yes,dependent=yes,directories=no,hotkeys=no,' +
            'location=no,menubar=no,status=no,scrollbars=yes,toolbar=no,' +
            'resizable=yes,width=' + width + ',height=' + height + ',left=' + x + 
            ',top=' + y );
}

