function CGMS(AID) { // Data Exchange var data_public; var data_toupload; var data_exchange; // AJAX this.xhr = null; this.openingURL = 'XHR not opened yet.'; this.responseXML = null; this.onRetrieveXML = null; this.serialize = function(obj) { switch(typeof(obj)){ case 'string': return 's:'+obj.length+':"'+obj+'";'; case 'number': if(obj>=0 && String(obj).indexOf('.') == -1 && obj < 65536) return 'i:'+obj+';'; return 'd:'+obj+';'; case 'boolean': return 'b:'+( (obj)?'1':'0' )+';'; case 'object': var i=0,k,ret=''; for(k in obj){ //alert(isNaN(k)); if(!isNaN(k)) k = Number(k); ret += this.serialize(k)+this.serialize(obj[k]); i++; } return 'a:'+i+':{'+ret+'}'; default: return 'N;'; alert('var undefined: '+typeof(obj));return undefined; } }; // Initialisation par déserialisation de G_tCGMSserials[AID] this.unserialize = function(serial) { var unserial_rec = function (serial_r) { var length = 0; var unserial_sizeof = function (serial_so) { serial_so = serial_so.substring(2); return Number(serial_so.substr(0, serial_so.indexOf(":"))); }; switch (serial_r.charAt(0)) { case "s": // PHP String var sos = unserial_sizeof(serial_r); return new Array(String(serial_r.substr(String(sos).length + 4, sos)), serial_r.substr(String(sos).length + 6 + sos)); break; case "i": // PHP Integer case "d": // PHP Double var num = Number(serial_r.substring(2, serial_r.indexOf(";"))); return new Array(num, serial_r.substr(String(num).length + 3)); break; case "b": // PHP Boolean var bool = (serial_r.substr(2, 1) == 1); return new Array(bool, serial_r.substr(4)); break; case "N": // PHP Null return new Array(null, serial_r.substr(2)); break; case "a": // PHP array - exemple => a:2:{i:0;s:1:"A";i:1;s:1:"B";} var sos = unserial_sizeof(serial_r); serial_r = serial_r.substr(String(sos).length + 4); var arr = new Array(); var key = null; var value = null; for (var i=0; i < sos; i++) { key = unserial_rec(serial_r); serial_r = key[1]; value = unserial_rec(serial_r); serial_r = value[1]; arr[key[0]] = value[0]; } serial_r = serial_r.substr(1); return new Array(arr, serial_r); break; default: return new Array(null, null); break; } }; var res = unserial_rec(serial); return res[0]; } if(AID) { env = this.unserialize(G_tCGMSserials[AID]); this.data_public = env['public']; this.data_toupload = new Array(); this.data_exchange = new Array(); for(key in env['exchange']) { this.data_exchange[key] = env['exchange'][key];} } } CGMS.prototype.getServerTime = function() { var result = 0; this.onRetrieveXML = function (xml) { var t = xml.getElementsByTagName('cgms_time_status'); if(t.length == 0) { return this.onAsynchronousRespone(xml); } else { this.onRetrieveXML = this.onAsynchronousRespone; result = Number(t[0].firstChild.nodeValue); } return true; }; this.AJAX_open('POST', '_global.asynch.php', false); this.AJAX_setRequestHeader('Content-Type','application/x-www-form-urlencoded'); var nd = new Date(); this.AJAX_send('cgms_time_adjust='+nd.getTime()); return result; }; CGMS.traceBuffer = ''; CGMS.handleEvent = function(hEvent) { switch(hEvent) { case "CGMStraceTimeout": trace = CGMS.traceBuffer; CGMS.traceBuffer = ''; var tmp_CGMS = new CGMS(); tmp_CGMS.onRetrieveXML = function (xml) { var t = xml.getElementsByTagName('cgms_trace_status'); }; tmp_CGMS.AJAX_open('POST', '_global.asynch.php', true); tmp_CGMS.AJAX_setRequestHeader('Content-Type','application/x-www-form-urlencoded'); tmp_CGMS.AJAX_send('cgms_trace_append='+trace); break; } }; CGMS.prototype.trace = function(str) { if(CGMS.traceBuffer == '') { window.setTimeout('CGMS.handleEvent("CGMStraceTimeout");', 1000); } var nd = new Date(); nd.convertLocalToServer(); str.replace('"','""'); $csvRec = String(nd.getTime())+','+'"'+str+'"'+"\n"; CGMS.traceBuffer += $csvRec+"\n"; }; CGMS.prototype.getExchange = function(key) { return (this.data_exchange[key]); }; CGMS.prototype.setExchange = function(key, value) { this.data_exchange[key] = value; this.data_toupload[key] = true; }; CGMS.prototype.AJAX_init = function () { this.xhr = null; this.openingURL = 'XHR not opened yet.'; this.responseXML = null; try { this.xhr = new XMLHttpRequest(); if(this.xhr.overrideMimeType) {this.xhr.overrideMimeType('text/xml');} } catch (eXHR) { var tXmlHttpVersions = new Array( 'MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'); for (var i=0;i