back to devpro   download
/**
 * ACE 1.0 - Asynchronous Client Engine
 * ------------------------------------
 * @author	Andrea Giammarchi
 */
function ACE(UTF8) {
	
	
	/**
	 * public method,
         * 	returns progression
         *
         * self.getProgress(Void):UInt
         *
         * @return	UInt		Unsigned Integer from 0 to 100
	 */
	this.getProgress = function() {
		return __progress;
	};
	
	/**
	 * public method,
         * 	returns ACE compatibility
         *
         * self.isCompatible(Void):Boolean
         *
         * @return	Boolean		Boolean value for compatibility
	 */
	this.isCompatible = function() {
		return __bridge.readyState === 0;
	};
	
	/**
	 * public method,
         * 	ajax GET request
         *
         * self.isCompatible(url:String):Void
         *
         * @param	String		Url to open
	 */
	this.load = function(url) {
		__bridge = new XMLHttpRequest();
		__bridge.open("get", url, true);
		__bridge.setRequestHeader("Connection", "Close");
		__bridge.send(null);
		__onProgress(this);
	};
	
	/**
	 * public method,
         * 	call onLoad or onError at the end of ajax request
         *
         * self.onLoadComplete(Void):Void
	 */
	this.onLoadComplete = function() {
		if(__bridge.status === 200 && __bridge.responseText.length > 0)
			this.onLoad(__php.unserialize(__bridge.responseText));
		else
			this.onError(__bridge.status);
	};
	
	/**
	 * public method,
         * 	ajax POST request
         *
         * self.isCompatible(url:String, arguments:Array):Void
         *
         * @param	String		Url to open
         * @param	Array		Variables to send
	 */
	this.sendAndLoad = function(url, args) {
		var	length = args.length, send = [];
		if(length > 0) {
			while(length){send.push("_".concat(--length, "=", encodeURIComponent(__php.serialize(args[length]))))};
			__bridge = new XMLHttpRequest();
			__bridge.open("post", url, true);
			__bridge.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			__bridge.setRequestHeader("Connection", "Close");
			__bridge.send(send.join("&"));
			__onProgress(this);
		}
		else
			this.load(url);
	};
	
	/**
	 * private method,
         * 	do onreadystatechange operations
         *
         * void __onProgress(self:Object):Void
         *
         * @param	Object		this object referer
	 */
	function __onProgress(self) {
		function __onProgress() {
			var	percent = 0;
			if(__ie || typeof(__bridge.responseText) !== "string")
				percent = __ceil(__progress + ((100 - __progress) * 0.02));
			else {
				if(__contentLength === 0)
					__contentLength = __bridge.getResponseHeader("Content-Length");
				percent = __ceil((__bridge.responseText.length / __contentLength) * 100);
			};
			__progress = percent > 99 ? 99 : percent;
		};
		
		if(__interval > 0)
			clearInterval(__interval);
		__contentLength = __interval = __progress = 0;
		
		__bridge.onreadystatechange = function() {
			switch(__bridge.readyState) {
				case 3:
					if(__interval === 0) {
						__onProgress();
						__interval = setInterval(__onProgress, 20);
					}
					break;
				case 4:
					clearInterval(__interval);
					__interval = 0;
					__progress = 100;
					break;
			};
		};
	};

	/** private variables  */
	var	__contentLength = 0,				// ajax response length
		__interval = 0,					// internal interval
		__progress = 0,					// ajax respnse download progression
		__ceil = Math.ceil,				// common Math.ceil operations
		__ie = window.ActiveXObject ? true : false,	// Internet Explorer filter
		__bridge = new XMLHttpRequest(),		// HTTPRequest
		__php = new PHP_Serializer(UTF8);		// PHP_Serializer object
};
back to devpro   download
Creative Commons License