// XMLRequest.js

function XMLRequest( url, params ) {
	_this = this;
	this.url = url;
	this.params = params;
	this.queryString = url + "?" + params;
	this.http_request = false;
	this.bAsync = false;			
	this.waiting = false;
	this.responseXML;
	this.responseText = "";
	
    if ( window.XMLHttpRequest ) {
	//Mozilla, Safari, Opera, ...	        
        this.http_request = new XMLHttpRequest();
    } else if ( window.ActiveXObject ) {
    //Internet Explorer
        try {
            this.http_request = new ActiveXObject( "Msxml2.XMLHTTP" );
        } catch( e ) {
            try {
                this.http_request = new ActiveXObject( "Microsoft.XMLHTTP" );
            } catch( e ) {
            }
        }
    }

    if ( !this.http_request ) {
        alert( 'Error durante la creación del objeto XMLHTTP' );
        return false;
    }

	function setQueryString( url, params ) {
		_this.url = url;
		_this.params = params;
		_this.queryString = url + "?" + params;
	}

	function processRequest( _httpRequest, processFunction, args ) {
	    if ( _httpRequest.readyState == 4 ) {		    
	        if ( _httpRequest.status == 200 ) {
	            //modalWaitClose( _httpRequest.responseXML.getElementsByTagName( "result" )[0].getAttribute( "msg" ) );
	            args.put( "_modalWait", _this.waiting );	            
	            processFunction( _httpRequest, args );
	        } else {
	            modalWaitClose( "Ocurrió un error durante la conexión con el servidor." );
	        }
	    }
	}
	
	function setPostProcess( bPostProcess, processFunction, args ) {
		_this.bPostProcess = bPostProcess;
		if ( _this.bPostProcess ) {
	        _this.processFunction = processFunction;
	        _this.processArgs = args;
    	}
	}
	
	function setWaiting( bWaiting, waitTime, waitMessage ) {
		_this.waiting = bWaiting;
		if ( _this.waiting == true ) {
			_this.waitTime = waitTime;
			modalWaitOpen( waitTime, waitMessage );
		}
	}
	
	function executeRequest() {
		_this.http_request.abort();

		if ( _this.bPostProcess ) {
	        _this.http_request.onreadystatechange = function() { 
	       		processRequest( _this.http_request, _this.processFunction, _this.processArgs ); 
    		};
		}
	    _this.http_request.open( 'POST', _this.queryString, _this.bAsync );
		_this.http_request.send( null );
		
		_this.responseXML = _this.http_request.responseXML;
		_this.responseText = _this.http_request.responseText;
		
		return _this.http_request.responseXML;
	}

	this.executeRequest = executeRequest;
	this.setQueryString = setQueryString;
	this.setPostProcess = setPostProcess;
	this.setWaiting = setWaiting;			
}

function processResult( _httpRequest, args ) {
	var msg = "";
	try {
		msg = _httpRequest.responseXML.getElementsByTagName( "result" )[0].getAttribute( "msg" );
		//alert( msg );
	} catch( e ) {
		msg = "La operación no se ha completado debido a un error.";
	}
	modalWaitClose( msg, args.get( "_postFunction" ) );	
}
