rem: if ($type(options) == 'string') options = {data: options}; 
add: var type = $type(options); if (type == 'string' || type == 'element') options = {data: options};  
context: 	send: function(options){		if ($type(options) == 'string') options = {data: options};		var old = this.options;		options = $extend({data: old.data, url: old.url, method: old.method}, options);		var data = options.data, url = options.url, method = options.method;		if (this.options.autoCancel) this.cancel();		else if (this.running) return this;		this.running = true;		switch($type(data)){			case 'element': data = $(data).toQueryString(); break;			case 'object': case 'hash': data = Hash.toQueryString(data);		}		if (this.options.emulation && ['put', 'delete'].contains(method)){			var _method = '_method=' + method;			data = (data) ? _method + '&' + data : _method;			method = 'post';		}		if (this.options.urlEncoded && method == 'post'){			var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';			this.headers.set('Content-type', 'application/x-www-form-urlencoded' + encoding);		}		if (data && method == 'get'){			url = url + (url.contains('?') ? '&' : '?') + data;			data = null;		}		this.xhr.open(method.toUpperCase(), url, this.options.async);		this.xhr.onreadystatechange = this.onStateChange.bind(this);		this.headers.each(function(value, key){			try{				this.xhr.setRequestHeader(key, value);			} catch(e){				this.fireEvent('onException', [e, key, value]);			}		}, this);		this.fireEvent('onRequest');		this.xhr.send(data);		if (!this.options.async) this.onStateChange();		return this;	},
meta: 5237	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/5237/9ee3b5d541c3402ec19a08a20290693869bf82a8/Request.js/clean/Source/Request/Request.js