--- /dev/null
+// jXHR.js (JSON-P XHR)\r
+// v0.1 (c) Kyle Simpson\r
+// MIT License\r
+// modified by gueron Jonathan to work with strophe lib\r
+// for http://www.iadvize.com\r
+\r
+(function(global){\r
+ var SETTIMEOUT = global.setTimeout, // for better compression\r
+ doc = global.document,\r
+ callback_counter = 0;\r
+ \r
+ global.jXHR = function() {\r
+ var script_url,\r
+ script_loaded,\r
+ jsonp_callback,\r
+ scriptElem,\r
+ publicAPI = null;\r
+ \r
+ function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } }\r
+ \r
+ function reset() {\r
+ script_loaded = false;\r
+ script_url = "";\r
+ removeScript();\r
+ scriptElem = null;\r
+ fireReadyStateChange(0);\r
+ }\r
+ \r
+ function ThrowError(msg) {\r
+ try { \r
+ publicAPI.onerror.call(publicAPI,msg,script_url); \r
+ } catch (err) { \r
+ //throw new Error(msg); \r
+ }\r
+ }\r
+\r
+ function handleScriptLoad() {\r
+ if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; }\r
+ this.onload = this.onreadystatechange = null; // prevent memory leak\r
+ script_loaded = true;\r
+ if (publicAPI.readyState !== 4) ThrowError("handleScriptLoad: Script failed to load ["+script_url+"].");\r
+ removeScript();\r
+ }\r
+ \r
+ function parseXMLString(xmlStr) {\r
+ var xmlDoc = null;\r
+ if(window.DOMParser) {\r
+ var parser = new DOMParser();\r
+ xmlDoc = parser.parseFromString(xmlStr,"text/xml");\r
+ }\r
+ else {\r
+ xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); \r
+ xmlDoc.async="false";\r
+ xmlDoc.loadXML(xmlStr);\r
+ }\r
+ return xmlDoc;\r
+ }\r
+ \r
+ function fireReadyStateChange(rs,args) {\r
+ \r
+ args = args || [];\r
+ publicAPI.readyState = rs;\r
+ if (rs == 4) {\r
+ publicAPI.responseText = args[0].reply;\r
+ publicAPI.responseXML = parseXMLString(args[0].reply);\r
+ }\r
+ if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args);\r
+ }\r
+ \r
+ publicAPI = {\r
+ onerror:null,\r
+ onreadystatechange:null,\r
+ readyState:0,\r
+ status:200,\r
+ responseBody: null,\r
+ responseText: null,\r
+ responseXML: null,\r
+ open:function(method,url){\r
+ reset();\r
+ var internal_callback = "cb"+(callback_counter++);\r
+ (function(icb){\r
+ global.jXHR[icb] = function() {\r
+ try { fireReadyStateChange.call(publicAPI,4,arguments); } \r
+ catch(err) { \r
+ publicAPI.readyState = -1;\r
+ ThrowError("Script failed to run ["+script_url+"]."); \r
+ }\r
+ global.jXHR[icb] = null;\r
+ };\r
+ })(internal_callback);\r
+ script_url = url + '?callback=?jXHR&data=';\r
+ script_url = script_url.replace(/=\?jXHR/,"=jXHR."+internal_callback);\r
+ fireReadyStateChange(1);\r
+ },\r
+ send:function(data){\r
+ script_url = script_url + encodeURIComponent(data);\r
+ SETTIMEOUT(function(){\r
+ scriptElem = doc.createElement("script");\r
+ scriptElem.setAttribute("type","text/javascript");\r
+ scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);};\r
+ scriptElem.setAttribute("src",script_url);\r
+ doc.getElementsByTagName("head")[0].appendChild(scriptElem);\r
+ },0);\r
+ fireReadyStateChange(2);\r
+ },\r
+ abort:function(){},\r
+ setRequestHeader:function(){}, // noop\r
+ getResponseHeader:function(){return "";}, // basically noop\r
+ getAllResponseHeaders:function(){return [];} // ditto\r
+ };\r
+\r
+ reset();\r
+ \r
+ return publicAPI;\r
+ };\r
+})(window);\r