var caller = new Object();
caller.Ajax = function () {
    // Private members
    var xmlHttp;
    var responseText = "";
    var responseXml;
    var url = "";
    var http = "";
    var method = "GET";
    var isAsynchronous = true;
    var requestData = "";
    var elementID = "";
    var thisObj = this;
    var pagePath = "";
    var isXml = true;
    var isMozilla = false;

    this.getMethod = function () { return method; }
    this.setMethod = function (inparam) { method = inparam; }
    this.getIsAsynchronous = function () { return isAsynchronous; }
    this.setIsAsynchronous = function (inparam) { isAsynchronous = inparam; }
    this.getRequestData = function () { return requestData;}
    this.setRequestData = function (inparam) { requestData = inparam;}
    this.setElementID = function (inparam) { elementID = inparam;}
    this.getResponseText = function () { return responseText;}  
    this.getResponseXml = function () { return responseXml;}
    this.setPagePath = function (inparam) { pagePath = inparam; }
	this.getPagePath = function() { return pagePath; }
    this.setIsXml = function (inparam) { isXml = inparam; }
    
    // Events
    this.onRequestComplete = function () {
		if(responseText) {
			loadData(responseText);
		}
	};
    
    // Methods     
    // Starts the request to server.
    this.startRequest = function(){
        createXMLHttpRequest();
        if (method.toUpperCase() == "GET"){
            sendGetRequest();
        }
        else if (method.toUpperCase() == "POST"){
            sendPostRequest();
        }    
	   	xmlHttp.onreadystatechange = handleServerResponse;	
	}
	
	// Sends a get request.
	function sendGetRequest() {
	    var ampersand = "&";
	    if (requestData == "") ampersand = "";
	    xmlHttp.open(method, pagePath + "?" + requestData + ampersand + createTimestamp(), isAsynchronous);
	    if (isXml)
	    {
	        if (isMozilla) xmlHttp.overrideMimeType('text/xml');
	        xmlHttp.setRequestHeader("Content-Type", "text/xml");
	    }
        xmlHttp.send(null);
	}
	
	// Sends a post request.
	function sendPostRequest() {
	    xmlHttp.open(method, pagePath + "?" + createTimestamp() , isAsynchronous);
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        if (isXml)
        {
            xmlHttp.setRequestHeader("Content-Type", "text/xml");
        }
        
        xmlHttp.send(requestData);
	}
	
	// Creates a timestamp for querystring.
	function createTimestamp() {
	    return "timestamp=" + new Date().getTime().toString();
	}
	
	// Creates the XMLHttpRequest object.
    function createXMLHttpRequest (){
        if (window.ActiveXObject){
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            if (xmlHttp == null){
                xmlHttp = new ActiveXObject ("Msxml2.XMLHTTP");            
            }
            if (xmlHttp == null){
            	alert('Error: Could not create object.');
            }
        } else if (window.XMLHttpRequest){
            xmlHttp = new XMLHttpRequest(); isMozilla = true;
        } else {
        	alert('Could not create object.');
        }
     }
       
    // Handles server's response
    function handleServerResponse(){
        if(xmlHttp.readyState == 4){
            if(xmlHttp.status == 200){
                responseText = xmlHttp.responseText;
                responseXml = xmlHttp.responseXML;
            }
            thisObj.onRequestComplete();
        }
    }
}
