rem:  if (xml) onreadystatechange(1); 
add: if ( !requestDone ) onreadystatechange( "timeout" ); 
context: 	ajax: function( type, url, data, ret, ifModified ) {		// 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.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 the If-Modified-Since header, if ifModified mode.		if ( ifModified )			xml.setRequestHeader("If-Modified-Since",				jQuery.lastModified[url] || "Thu, 01 Jan 1970 00:00:00 GMT" );				// 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		var onreadystatechange = function(istimeout){			// The transfer is complete and the data is available, or the request timed out			if ( xml && (xml.readyState == 4 || istimeout) ) {				var status = jQuery.httpSuccess( xml ) && !istimeout ?					ifModified && jQuery.httpNotModified( xml, url ) ? "notmodified" : "success" : "error";								// Make sure that the request was successful or notmodified				if ( status != "error" ) {					// Cache Last-Modified header, if ifModified mode.					var modRes = xml.getResponseHeader("Last-Modified");					if ( ifModified && modRes ) jQuery.lastModified[url] = modRes;										// If a local callback was specified, fire it					if ( success ) success( xml, status );										// 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, status );										// Fire the global callback					jQuery.event.trigger( "ajaxError" );				}								// The request was completed				jQuery.event.trigger( "ajaxComplete" );								// Handle the global AJAX counter				if ( ! --jQuery.active )					jQuery.event.trigger( "ajaxStop" );					// Process result				if ( ret ) ret(xml, status);								// Stop memory leaks				xml.onreadystatechange = function(){};				xml = null;							}		};		xml.onreadystatechange = onreadystatechange;				// Timeout checker		if(jQuery.timeout > 0)			setTimeout(function(){				// Check to see if the request is still happening				if (xml) {					// Cancel the request					xml.abort();					// for Opera. Opera does't call onreadystatechange when aborted.					if (xml) onreadystatechange(1);					// Clear from memory					xml = null;				}			}, jQuery.timeout);				// Send the data		xml.send(data);	},
meta: 2798	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/2798/874e4f65eecdf74bb76c361d778aac4ed6158ed6/ajax.js/buggy/src/ajax/ajax.js