/*
function list:

public:
	makeRequest( callback, url, method ); --> opens and makes a request to the server
	responseReady(); --> checks if we got a response from the server already
	getResponseText(); --> returns the response from the server, as text
	getResponseXML(); --> returns the response from the server, as xml
	
private:
	openRequest(); --> creates the object
	defaultCallback(); --> default callback function
*/


//allocate the object
var Ajax = new Object();


//XMLHttpRequest variable
Ajax.http_request = null;







//creates the object
//internal function - used only from inside
//returns true if the object was successfully created, otherwise returns false
Ajax.openRequest = function () {
    //IE 7, FF, Chrome, Safari, etc
    if ( window.XMLHttpRequest ) {
        this.http_request = new XMLHttpRequest();
    }
    //IE 6-
    else if ( window.ActiveXObject ) {
        this.http_request = new ActiveXObject( "MSXML2.XMLHTTP.3.0" );
    }

    return (this.http_request == null ? false : true);
}



    
//main function to do the request
//to use from outside
Ajax.makeRequest = function( callback, url, method ) {
    if ( url == "" || url == undefined || url == null )
        return;
        
    if ( ! this.openRequest() )
        return;
    
    if ( method == undefined || method == "" || method == null ) method = "GET";
    if ( callback == undefined || callback == "" || callback == null ) callback = this.defaultCallback;
        
    this.http_request.onreadystatechange = callback;
    this.http_request.open( method, url, true );
        
    this.http_request.setRequestHeader( "Cache-Control", "no-store, no-cache, must-revalidate" );
    this.http_request.setRequestHeader( "Cache-Control", "post-check=0, pre-check=0" );
    this.http_request.setRequestHeader( "Pragma", "no-cache" );
        

    var fields = "";
    if ( method == "POST" ) {
        fields = url.substr( url.indexOf("?")+1, url.length );

        this.http_request.setRequestHeader( "Content-type", "application/x-www-form-urlencoded; charset=iso-8859-1" );
        //this.http_request.setRequestHeader( "Content-length", fields.length );
        this.http_request.setRequestHeader( "Connection", "close" );
    }
        
    this.http_request.send( fields );
}





//checks if the response from the server is finally available
//returns true if yes, false if no
Ajax.responseReady = function () {
    if ( this.http_request != null && this.http_request.readyState == 4 && this.http_request.status == 200 )
        return true;

    return false;
}




//if the user didnt specify a callback function, we will use this one
Ajax.defaultCallback = function() { 
    if ( ! Ajax.responseReady() ) 
        return;
        
    alert( "as text:\n\n" + Ajax.getResponseText() );
    alert( "as xml:\n\n" + Ajax.getResponseXML() );
}





//returns the response from the server as TEXT
Ajax.getResponseText = function () {
    if ( this.http_request == null )
        return "";
        
    return this.http_request.responseText;
}


//returns the response from the server as XML
Ajax.getResponseXML = function () {
    if ( this.http_request == null )
        return "";
        
    return this.http_request.responseXML.documentElement;
}




