function toolBarJSClick( toolButtonID, e )
{
    var buttonID = toolButtonID;
    if( buttonID == "JTToolBar1_QuickAddToolButton" )
    {
        // Switch the grid into insert mode.
        grid.Insert();

        // Enable the post and cancel buttons.
        JTToolBarSetEnabledState( "JTToolBar1_SaveToolButton", true );
        JTToolBarSetEnabledState( "JTToolBar1_CancelToolButton", true );

        // Disable the insert button.
        JTToolBarSetEnabledState( buttonID, false );
        JTToolBarSetEnabledState( "JTToolBar1_AddToolButton", false );
    }
    else if( buttonID == "JTToolBar1_AddToolButton" )
    {
        // Initialize the window.
        taskWindow.setCaption( "Adding Task" );

        document.forms[0].title.value = "";
        document.forms[0].priority.selectedIndex = 0;

        document.forms[0].startDatePicker.setDate( new Date() );
        document.forms[0].dueDatePicker.setDate( new Date() );

        document.forms[0].description.value = "";
        document.forms[0].ID.value = "";

        taskWindow.ShowModal();
    }
    else if( buttonID == "JTToolBar1_DeleteToolButton" )
    {
        // Delete the currently selected record.
        grid.Delete( grid.SelectedRow );

        // Disable the delete button.
        JTToolBarSetEnabledState( "JTToolBar1_DeleteToolButton", false );
    }
    else if( buttonID == "JTToolBar1_SaveToolButton" )
    {
        // Execute the post.
        grid.Post();

        // Disable the post and cancel buttons.
        JTToolBarSetEnabledState( "JTToolBar1_SaveToolButton", false );
        JTToolBarSetEnabledState( "JTToolBar1_CancelToolButton", false );

        // Enable the insert button.
        JTToolBarSetEnabledState( "JTToolBar1_QuickAddToolButton", true );
        JTToolBarSetEnabledState( "JTToolBar1_AddToolButton", true );
    }
    else if( buttonID == "JTToolBar1_CancelToolButton" )
    {
        // Cancel the insert operation.
        grid.Cancel();

        // Disable the post and cancel buttons.
        JTToolBarSetEnabledState( "JTToolBar1_SaveToolButton", false );
        JTToolBarSetEnabledState( "JTToolBar1_CancelToolButton", false );

        // Enable the insert button.
        JTToolBarSetEnabledState( "JTToolBar1_QuickAddToolButton", true );
        JTToolBarSetEnabledState( "JTToolBar1_AddToolButton", true );
    }

    return false;
}

function gridJSSelect( grid, row, col, selected )
{
    // If the row is being selected, enable the Delete Task button.
    JTToolBarSetEnabledState( "JTToolBar1_DeleteToolButton", selected );
}

function editTask( id )
{
    ajaxCall( 'edit', id );
}

// ajaxCall is defined by the PHP script.
// function ajaxCall( action, parameters )

function processAjaxResponse( responseText, callBackParameters )
{
    var elements = eval( responseText );
    for( var i = 0; i < elements.length; ++i )
    {
        document.getElementById( elements[ i ].id ).innerHTML = elements[ i ].html;
        eval( elements[ i ].jsCode );
    }
}

function getFormValuesAsPost()
{
    var form = document.forms[ 0 ];
    var result = new Array();
    for( var i = 0; i < form.elements.length; ++i )
    {
        if( form.elements[ i ].type == "checkbox" && !form.elements[ i ].checked )
            continue;

        result.push( form.elements[ i ].name + "=" + encodeURIComponent( form.elements[ i ].value ) );
    }

    return result.join( "&" );
}

function sendAjaxRequest( url, data, callBack, callBackParameters )
{
    var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject( "Microsoft.XMLHTTP" );
    var ifModifiedSince = new Date( 0 );

    request.open( "POST", url, true );
    request.setRequestHeader( "If-Modified-Since", ifModifiedSince );
    request.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
    request.setRequestHeader( "Content-length", data.length );

    request.onreadystatechange = function()
    {
        if( request.readyState == 4 && request.status == 200 )
        {
            if( request.responseText )
                callBack( request.responseText, callBackParameters );
        }
	}

	request.send( data );
}

