+// If IE is used, create a wrapper for the XMLHttpRequest object
+if ( jQuery.browser == "msie" )
+ XMLHttpRequest = function(){
+ return new ActiveXObject(
+ (navigator.userAgent.toLowerCase().indexOf("msie 5") >= 0) ?
+ "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"
+ );
+ };
+
+// Attach a bunch of functions for handling common AJAX events
+(function(){
+ var e = "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess".split(',');
+
+ for ( var i = 0; i < e.length; i++ ){ (function(){
+ var o = e[i];
+ jQuery.fn[o] = function(f){return this.bind(o, f);};
+ })();}
+})();
+
+/**
+ * A common wrapper for making XMLHttpRequests
+ */
+jQuery.ajax = function( type, url, data, ret ) {
+ // If only a single argument was passed in,
+ // assume that it is a object of key/value pairs
+ if ( !url ) {
+ ret = type.complete;
+ var success = type.success;
+ var error = type.error;
+ data = type.data;
+ url = type.url;
+ type = type.type;
+ }
+
+ // Watch for a new set of requests
+ if ( ! jQuery.ajax.active++ )
+ jQuery.event.trigger( "ajaxStart" );
+
+ // Create the request object
+ var xml = new XMLHttpRequest();
+
+ // Open the socket
+ xml.open(type || "GET", url, true);
+
+ // Set the correct header, if data is being sent
+ if ( data )
+ xml.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+
+ // Set header so calling script knows that it's an XMLHttpRequest
+ xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+
+ // Make sure the browser sends the right content length
+ if ( xml.overrideMimeType )
+ xml.setRequestHeader("Connection", "close");
+
+ // Wait for a response to come back
+ xml.onreadystatechange = function(){
+ // The transfer is complete and the data is available
+ if ( xml.readyState == 4 ) {
+ // Make sure that the request was successful
+ if ( jQuery.httpSuccess( xml ) ) {
+
+ // If a local callback was specified, fire it
+ if ( success ) success( xml );
+
+ // Fire the global callback
+ jQuery.event.trigger( "ajaxSuccess" );
+
+ // Otherwise, the request was not successful
+ } else {
+ // If a local callback was specified, fire it
+ if ( error ) error( xml );
+
+ // Fire the global callback
+ jQuery.event.trigger( "ajaxError" );
+ }
+
+ // The request was completed
+ jQuery.event.trigger( "ajaxComplete" );
+
+ // Handle the global AJAX counter
+ if ( ! --jQuery.ajax.active )
+ jQuery.event.trigger( "ajaxStop" );
+
+ // Process result
+ if ( ret ) ret(xml);
+ }
+ };
+
+ // Send the data
+ xml.send(data);