/****************************** AJAX CONTROLS *********************************************************************/

/*******************************************************************************
* 
* The "options" parameter is an anonymous object which includes the following
* available options:
* 
* params:     Parameters for the requested url in the format p1=1&p2=0&p3=2
* meth:       The request method. Can be "get" or "post". Default is "post".
* async:      Toggles asynchronous mode. Default is true.
* startfunc:  A function or list of functions to be called before the AJAX
*             request is made. A list of functions must be separated by the
*             semi-colon like this: "showLoad(); animateText(); hideDiv('bob')".
*             You can pass parameters into the functions.
* endfunc:    A function or list of functions to be called after a successful
*             AJAX request. Uses the same format as "startfunc".
* errorfunc:  A function or list of functions to be called when the AJAX request
*             is unsuccessful. Uses the same format as "startfunc".
* noauthfunc: A function or list of functions to be called when the AJAX request
*             is not authenticated (http status code 403 is encountered). Uses
*             the same format as "startfunc".
* callfunc:   The function to pass the responseText to in order to process it.
                          
* 
* Returns true on success and false on failure.
* 
* Example Usage:
* 
        ajaxUpdate( "rightdiv", "getData.jsp", {
                params:"id=12&AJAX=true",
                meth:"post",
                async:true,
                startfunc:"elemOn('loading')",
                endfunc:"elemOff('loading'); elemOn('rightdiv')",
                errorfunc:"ajaxError()",
                noauthfunc:"ajaxNoAuth()",
                callfunc:"showAjaxText()" }
        );
* 
*******************************************************************************/

        var rText;
        
        //Standard AJAX Function
        function ajaxUpdate( url, options ){
                var params = options.params || "";
                var meth = options.meth || "POST";
                var async = options.async;
                if( async == null )
                        async = true;
                var startfunc = options.startfunc || "";
                var endfunc = options.endfunc || "";
                var errorfunc = options.errorfunc || "";
                var noauthfunc = options.noauthfunc || "";
                var callfunc = options.callfunc || "";
                var req = false;
                if( window.XMLHttpRequest )
                        req = new XMLHttpRequest();
                else if( window.ActiveXObject )
                        req = new ActiveXObject( "Microsoft.XMLHTTP" );
                else
                {
                        alert(  "Your browser cannot perform the requested action. "+
                                        "Either your security settings are too high or your "+
                                        "browser is outdated. Please upgrade to the newest version of "+
                                        "Internet Explorer." );
                        return false;
                }
                if( startfunc != "" )
                        eval( startfunc );
                req.onreadystatechange =
                        function()
                        {
                                if ( req.readyState == 4 ) 
                                {
                                        if ( req.status == 200 )
                                        {
                                                rText = req.responseText;
                                                if( callfunc != "" )
                                                        eval( callfunc );
                                                if( endfunc != "" )
                                                        eval( endfunc );
                                                return true;
                                        }
                                        else
                                        {
                                                if( req.status == 403 && noauthfunc != "" )
                                                {
                                                        rText = req.responseText;
                                                        eval( noauthfunc );
                                                }
                                                else
                                                {
                                                        rText = req.responseText;
                                                        if( endfunc != "" )
                                                                eval( endfunc );
                                                        if( errorfunc != "" )
                                                                eval( errorfunc );
                                                }
                                                return false;
                                        }
                                }
                        };
                if( meth == "GET" )
                {
                        req.open( meth, url+( params != "" ? "?"+params : "" ), async );
                        req.send(null);
                }
                else
                {
                        req.open( meth, url, async );
                        req.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
                        req.send( params );
                }
        }
        
        
        function ajaxError(){
                alert(rText);
                //alert("A server error occured, please use the 'refresh' or 'clear' button in the left-hand toolbar to reload the page.");
        }
        
        
        function ajaxNoAuth(){
                alert(rText);
                //alert("An authentication error occured, please use the 'refresh' or 'clear' button in the left-hand toolbar to reload the page.");
        }
