function XHR( target, handlerfunc ) { var request = getRequest(); // XmlHttpRequest holder var url = target; // target of the request var handler = handlerfunc; // function to call on return - sent one parameter, success or failure // return the request responseXML this.getXML = function () { return request.responseXML; }; // return the request responseText this.getText = function () { return request.responseText; }; // return the request status this.getStatus = function () { return request.status; }; // return the request status text this.getStatusText = function () { return request.statusText; }; // return the request readystate - returns -1 if XMLHttpRequest not available this.getReadyState = function () { return request === null ? -1 : request.readyState; }; // send a request via post this.send = function ( strargs ) { if ( request === null ) { handler( false ); return; } document.body.style.cursor = "progress"; request.open("POST", url, true); request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); request.onreadystatechange = callHandler; request.send( strargs ); }; // convert a javascript object into an argument string this.datajoin = function ( objargs ) { var arr = []; for ( key in objargs ) { arr.push( key + "=" + objargs[key] ); } return arr.join( "&" ); } function callHandler() { if ( request.readyState === 4 || request.readyState === "complete" ) { document.body.style.cursor = "auto"; handler( request.status === 200 || request.status === 0 ); } } function getRequest() { try { return new XMLHttpRequest(); } catch( e ) {} // Firefox, Opera 8.0+, Safari, IE7 try { return new ActiveXObject("MSXML2.XMLHTTP.6.0"); } catch( e ) {} // Preferred ActiveX version try { return new ActiveXObject("MSXML2.XMLHTTP.3.0"); } catch( e ) {} // Second choice ActiveX version try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch( e ) {} // Third choice ActiveX version try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch( e ) {} // IE5.5 on Win98? return null; // Failure } return request === null; }