/**
* 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
};