function getXMLRequester( ) {
    var xmlHttp = false;
    try {
    	if( window.ActiveXObject ) {
        	for( var i = 5; i; i-- ) {
            	try{
	            	if( i == 2 ) {
                    	xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );    
                    }
                    else {
                    	xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
                    }
                    break;
                }
                catch( excNotLoadable ) {                        
                    xmlHttp = false;
                }
            }
        }
        else if( window.XMLHttpRequest ) {
            xmlHttp = new XMLHttpRequest();
        }
    }
    catch( excNotLoadable ) {
        xmlHttp = false;
    }
    return xmlHttp;
}

var REQUEST_GET        = 0;
var REQUEST_POST        = 2;
var REQUEST_HEAD    = 1;
var REQUEST_XML        = 3;

function sendRequest( strSource, strData, intType, intID ) {
	if( !strData )
    	strData = '';
    if( isNaN( intType ) )
        intType = 0;
    if( xmlHttp && xmlHttp.readyState ) {
        xmlHttp.abort( );
        xmlHttp = false;
    }
    if( !xmlHttp ) {
        xmlHttp = getXMLRequester( );
        if( !xmlHttp )
        	return;
    }
    if( intType != 1 && ( strData && strData.substr( 0, 1 ) == '&' || strData.substr( 0, 1 ) == '?' ) )
        strData = strData.substring( 1, strData.length );
    var dataReturn = strData ? strData : strSource;
    switch( intType ) {
        case 1:
            strData = "xml=" + strData;
        case 2:
            xmlHttp.open( "POST", strSource, true );
            xmlHttp.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
            xmlHttp.setRequestHeader( 'Content-length', strData.length );
            break;
        case 3:
            xmlHttp.open( "HEAD", strSource, true );
            strData = null;
            break;
        default:
            var strDataFile = strSource + (strData ? '?' + strData : '' );
            xmlHttp.open( "GET", strDataFile, true );
            strData = null;
    }
    xmlHttp.onreadystatechange = new Function( "", "processResponse(" + intID + ")" ); ;
    xmlHttp.send( strData );
    return dataReturn;
}

function processResponse( intID ) {
    switch( xmlHttp.readyState ) {
        case 0:
        case 1:
        case 2:
        case 3:
            break;
        case 4:    
        if( xmlHttp.status == 200 )  {
        	processData( xmlHttp, intID );
        }
        else {
            if( window.handleAJAXError )
                handleAJAXError( xmlHttp, intID );
            else
                alert( "ERROR\n HTTP status = " + xmlHttp.status + "\n" + xmlHttp.statusText ) ;
        }
    }
}

function handleAJAXError( xmlHttp, intID ) {
    alert( "ERROR\n HTTP status = " + xmlHttp.status + "\n" + xmlHttp.statusText ) ;
}
