<?php
require_once( "../xajax_core/xajax.inc.php" );

function saySomething( )
{
    $objResponse=new xajaxResponse();
    $objResponse->alert( "Hello world!" );
    $objResponse->assign( "submittedDiv", "style.visibility", "inherit" );
    return $objResponse;
}

function testForm( $formData, $doDelay=false )
{
    if ( $doDelay )
    {
        sleep( 5 );
    }
    $objResponse=new xajaxResponse();
    $objResponse->alert( "POST\nformData: " . print_r( $formData, true ) );
    $objResponse->assign( "submittedDiv", "innerHTML", nl2br( print_r( $formData, true ) ) );
    return $objResponse;
}

function testForm2( $formData )
{
    $objResponse=new xajaxResponse();
    $objResponse->alert( "GET\nformData: " . print_r( $formData, true ) );
    $objResponse->assign( "submittedDiv", "innerHTML", nl2br( print_r( $formData, true ) ) );
    $objResponse->assign( "submittedDiv", "style.visibility", "hidden" );
    return $objResponse;
}

function testFormFail( $formData )
{
    sleep( 2 );
    header( "HTTP/1.1 500 Internal Server Error" );
    header( "Status: 500" );

    echo " \n";
    exit;
}

function testFormExpire( $formData )
{
    sleep( 15 );
    $objResponse=new xajaxResponse();
    $objResponse->alert( "POST\nformData: " . print_r( $formData, true ) );
    $objResponse->assign( "submittedDiv", "innerHTML", nl2br( print_r( $formData, true ) ) );
    return $objResponse;
}

$xajax=new xajax();
// SEE file list below!
//$xajax->setFlag("debug", true);
$xajax->registerFunction( "saySomething" );
$xajax->registerFunction( "testForm" );
$xajax->registerFunction( "testForm2" );
$xajax->registerFunction( "testFormFail" );
$xajax->registerFunction( "testFormExpire" );
$xajax->processRequest();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
    <head>
        <title>Call Techniques Test | xajax Tests</title>

        <?php
        $xajax_files=array();
        $xajax_files[]=array
            (
            "xajax_js/xajax_core.js",
            "xajax"
            );

        //	$xajax_files[] = array("xajax_js/xajax_debug.js", "xajax.debug");
        $xajax->printJavascript( "../", $xajax_files )
        ?>

        <script type = "text/javascript">
            function setupCallback()
                {
                xajax.callback.global.onRequest = function()
                    {
                    alert('In global.onRequest');
                    };
                xajax.callback.global.onFailure = function(args)
                    {
                    alert("In global.onFailure...HTTP status code: " + args.request.status);
                    }
                xajax.callback.global.onComplete = function()
                    {
                    alert('In global.onComplete');
                    };
                var cb = xajax.callback.create();
                cb.onRequest = function()
                    {
                    alert('Original onRequest');
                    };
                cb.onResponseDelay = function()
                    {
                    alert('Original onRequestDelay');
                    };
                cb.timers.onResponseDelay.delay = 2600;
                return cb;
                }
        </script>
    </head>

    <body>
        <h2><a href = "index.php">xajax Tests</a></h2>

        <h1>Call Techniques Test</h1>

        <p>
            <a href = "#" onclick = "xajax.call('saySomething');return false;">Say Something</a>

            <form id = "testForm1" onsubmit = "return false;">
                <p>
                    <input type = "text" id = "textBox1" name = "textBox1" value = "Here is some text." />
                </p>

                <p>
                    <input type = "submit"
                        value = "Simple Form Call"
                        onclick = "xajax.call('testForm', {parameters:[xajax.getFormValues('testForm1')]}); return false;" />
                </p>

                <p>
                    <input type = "submit"
                        value = "Form Call via get"
                        onclick = "xajax.call('testForm2', {method: 'get', parameters:[xajax.getFormValues('testForm1')]}); return false;" />
                </p>

                <p>
                    <input type = "submit"
                        value = "Form Call with Callback Object"
                        onclick = "var cb = setupCallback(); xajax.call('testForm', { parameters:[xajax.getFormValues('testForm1'), true], callback: cb }); return false;" />
                </p>

                <p>
                    <input type = "submit"
                        value = "Form Call with Overridden Callback"
                        onclick = "var cb = setupCallback(); xajax.call('testForm', { parameters:[xajax.getFormValues('testForm1'), true], callback: cb, onRequest: function() { alert('Overridden onRequest'); } }); return false;" />
                </p>

                <p>
                    <input type = "submit"
                        value = "Form Call with Inline Callback (also onFailure test)"
                        onclick = "var cb = setupCallback(); xajax.call('testFormFail', { parameters:[xajax.getFormValues('testForm1'), true], onRequest: function() { alert('In inline onRequest'); }, onFailure: function(args) { alert('In inline onFailure -- status is: ' + args.request.status); } }); return false;" />
                </p>

                <p>
                    <input type = "submit"
                        value = "Test onExpiration"
                        onclick = "xjx.$('waiting').style.visibility = 'visible'; xajax.call('testFormExpire', { parameters:[xajax.getFormValues('testForm1'), true], onExpiration: function(args) { alert('In inline onExpiration'); xajax.abortRequest(args.request, args.options) }, onComplete: function() { xjx.$('waiting').style.visibility = 'hidden'; } }); return false;" />

                    <span id = "waiting" style = "visibility: hidden">waiting...</span>
                </p>
            </form>

            <div id = "submittedDiv">
            </div>
    </body>
</html>

