var zajaxm = function () { XMLHttpFactories = [ function () { return new XMLHttpRequest() }, function () { return new ActiveXObject("Msxml2.XMLHTTP") }, function () { return new ActiveXObject("Msxml3.XMLHTTP") }, function () { return new ActiveXObject("Microsoft.XMLHTTP") } ]; dispose = function () { this.XMLHttpFactories = null; }; A = function (o) { if (o == undefined) return false; if (!o) return false; return true; }; AP = function (o) { if (!o) return ''; if (o.length < 0) return ''; var lout = new Array(); for (var i = 0; i < o.length; i++) { if (o[i].value) { lout[lout.length] = o[i].key + "=" + o[i].value.toString(); } } return lout.join("&"); } call = function (o, context) { if (!A(o)) o = {}; if (!A(context)) context = null; var lxmlHttp = this.createXMLHttp(); if (!lxmlHttp) return; if (!A(o.async)) o.async = false; if (!A(o.onOk)) o.onOk = null; if (!A(o.onError)) o.onError = null; if (!A(o.postType)) o.postType = "GET"; if (!A(o.file)) o.file = "ajax.ashx"; if (!A(o.assembly)) o.assembly = ''; if (!A(o.methodClass)) o.methodClass = ''; if (!A(o.methodName)) o.methodName = ''; if (!A(o.args)) o.args = new Array(); if (!A(o.params)) o.params = null; var params = AP([ { key: "ahhc", value: o.methodClass }, { key: "ahhm", value: o.methodName }, { key: "ahass", value: o.assembly }, { key: "ahargs", value: this.toJSON(o.args) }, { key: "cache", value: (new Date()).getTime() } ]); if (o.params) { params += "&" + o.params; }; var isPost = (o.postType == 'POST'); if (o.async) lxmlHttp.onreadystatechange = (function () { onreadystatechange(o, context, lxmlHttp); }); if (!isPost) { if (params.length > -1) { var ld = (o.file.indexOf("?") > -1) ? "&" : "?"; o.file += ld + params; } } lxmlHttp.open(o.postType, o.file, o.async); if (isPost) { lxmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); lxmlHttp.setRequestHeader("Content-length", params.length); } lxmlHttp.send((isPost) ? params : null); if (!o.async) onreadystatechange(o, context, lxmlHttp); return lxmlHttp; }; function onreadystatechange(o, context, xmlHttp) { if (!xmlHttp) return; if (xmlHttp.readyState != 4) return; if (xmlHttp.status == 200) { if (o.onOk) o.onOk(xmlHttp.responseText, o, context); } else { if (o.onError) o.onError(o, context, xmlHttp); } o = null; xmlHttp = null; }; onreadystatechange = onreadystatechange; createXMLHttp = function () { var o = false; for (var i = 0; i < this.XMLHttpFactories.length; i++) { try { o = this.XMLHttpFactories[i](); } catch (e) { continue; } break; } return o; }; return this; } (); (function($) { function toIntegersAtLease(n) // Format integers to have at least two digits. { return n < 10 ? '0' + n : n; } Date.prototype.toJSON = function(date) // Yes, it polutes the Date namespace, but we'll allow it here, as // it's damned usefull. { return this.getUTCFullYear() + '-' + toIntegersAtLease(this.getUTCMonth()) + '-' + toIntegersAtLease(this.getUTCDate()); }; var escapeable = /["\\\x00-\x1f\x7f-\x9f]/g; var meta = { // table of character substitutions '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"': '\\"', '\\': '\\\\' }; $.quoteString = function(string) // Places quotes around a string, inteligently. // If the string contains no control characters, no quote characters, and no // backslash characters, then we can safely slap some quotes around it. // Otherwise we must also replace the offending characters with safe escape // sequences. { if (escapeable.test(string)) { return '"' + string.replace(escapeable, function(a) { var c = meta[a]; if (typeof c === 'string') { return c; } c = a.charCodeAt(); return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); }) + '"'; } return '"' + string + '"'; }; $.toJSON = function(o, compact) { var type = typeof (o); if (type == "undefined") return "undefined"; else if (type == "number" || type == "boolean") return o + ""; else if (o === null) return "null"; // Is it a string? if (type == "string") { return $.quoteString(o); } // Does it have a .toJSON function? if (type == "object" && typeof o.toJSON == "function") return o.toJSON(compact); // Is it an array? if (type != "function" && typeof (o.length) == "number") { var ret = []; for (var i = 0; i < o.length; i++) { ret.push($.toJSON(o[i], compact)); } if (compact) return "[" + ret.join(",") + "]"; else return "[" + ret.join(", ") + "]"; } // If it's a function, we have to warn somebody! if (type == "function") { throw new TypeError("Unable to convert object of type 'function' to json."); } // It's probably an object, then. var ret = []; for (var k in o) { var name; type = typeof (k); if (type == "number") name = '"' + k + '"'; else if (type == "string") name = $.quoteString(k); else continue; //skip non-string or number keys var val = $.toJSON(o[k], compact); if (typeof (val) != "string") { // skip non-serializable values continue; } if (compact) ret.push(name + ":" + val); else ret.push(name + ": " + val); } return "{" + ret.join(", ") + "}"; }; $.compactJSON = function(o) { return $.toJSON(o, true); }; $.evalJSON = function(src) // Evals JSON that we know to be safe. { return eval("(" + src + ")"); }; $.secureEvalJSON = function(src) // Evals JSON in a way that is *more* secure. { var filtered = src; filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@'); filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); if (/^[\],:{}\s]*$/.test(filtered)) return eval("(" + src + ")"); else throw new SyntaxError("Error parsing JSON, source is not valid."); }; })(zajaxm);