Object.extend(Ajax, {
	disposeAll: function(obj) {
		if(typeof this.activeRequests != 'undefined' && this.activeRequests.length > 0) {
			try {
				$A(this.activeRequests).each(function(request) {
					request.transport.abort();
					Ajax.activeRequests = Ajax.activeRequests.without(request);
					Ajax.activeRequestCount = Ajax.activeRequests.length;
				});
			} catch(e) {}
		}
	},
	isXMLError: function(transport, get_error_code) {
		var isError, errorCode;

		if(typeof transport.responseXML == 'undefined') {
			return 'FAILD_TO_LOAD';
		}

		try {
			isError 	= transport.getResponseHeader('X-headworkv4-error');
			errorCode 	= transport.getResponseHeader('X-headworkv4-errorcode');
		} catch (e) { isError = errorCode = null; }

		if(typeof get_error_code != 'undefined' && get_error_code == true) {
			value = (null != errorCode) ? (errorCode).strip() : undefined;
		} else {
			value = true;
		}
		return (null == isError) ? false : value;
	},
	isJSONError: function(transport, get_error_code) {
		var isError, errorCode;
		if (typeof transport.responseJSON == 'undefined') {
			return 'FAILD_TO_LOAD';
		}
		try {
			isError 	= transport.getResponseHeader('X-headworkv4-error');
			errorCode 	= transport.getResponseHeader('X-headworkv4-errorcode');
		} catch (e) { isError = errorCode = null; }

		if(typeof get_error_code != 'undefined' && get_error_code == true) {
			value = (null != errorCode) ? (errorCode).strip() : undefined;
		} else {
			value = true;
		}
		return (null == isError) ? false : value;
	}
});

Ajax.Request.prototype.cancel = function() {
	try {
		Ajax.activeRequests = Ajax.activeRequests.without(this);
		Ajax.activeRequestCount = Ajax.activeRequests.length;
		return this.transport.abort();
	} catch (e) {}
}

Element.addMethods({
	replaceClassName: function(element, target, replacement) {
		var element = $(element);
			element.removeClassName(target);
			element.addClassName(replacement);
		return element;
	},
	template: function(element) {
		return Element.extend($(element).cloneNode(true));
	},
	scrollToBottom: function(element) {
		var element = $(element);
			element.scrollTop = element.scrollHeight;
		return element;
	}
});
Element.addMethods('form', {
	pack: function(element, name, segments, className) {
		var element    = $(element);
		var parameters = {};
		var className  = className || 'packable'

		if (! Object.isArray(segments) || ! segments.length) {
			return {};
		}
		// Segmente
		$A(segments).each(function(segment, index) {
			segment.select('input,select').each(function(el) {
				if (! el.hasClassName(className) || ! el.name) {
					return;
				}
				parameters[name + '[' + index + '][' + el.name + ']'] = el.value;
			});
		});
		return parameters;
	}
});
Element.addMethods(['input', 'textarea'], {
	listen: function(element, callback, key) {
		$(element).stopObserving('keyup');
		$(element).observe('keyup', function(event) {
			if ((key || Event.KEY_RETURN) == event.keyCode) {
				callback(event) || Prototype.EmptyFunction
			}
		});
		return
	}
});
Object.extend(String.prototype, {
	toInt: function() {
		return parseInt(this.replace(/\D*/g, ''));
	},
	warp: function(length, warp) {
		var length = (length || 30), warp = (warp || '\n'), string = this, parts = [];
		if (this.length > length) {
			return this.substr(0, length) + warp + this.substr(length);
		}
		return this;
	}
});