// define namespace if(typeof ffsp == 'undefined') { ffsp = {} } if(!ffsp.ajax) { ffsp.ajax = {} } // impliments ffsp.ajax.requests = new Array(); if(typeof(XMLHttpRequest) == 'undefined') { ffsp.ajax.XmlHttpRequest = function() { var request = null; try { request = new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) { try { request = new ActiveXObject('Microsoft.XMLHTTP'); } catch(ee) {} } return request; } } else { ffsp.ajax.XmlHttpRequest = XMLHttpRequest; } ffsp.ajax.stop = function() { for(var i=0; i < ffsp.ajax.requests.length; i++) { if(ffsp.ajax.requests[i] != null) ffsp.ajax.requests[i].abort(); } } ffsp.ajax.createRequest = function(context) { for(var i=0; i < ffsp.ajax.requests.length; i++) { if(ffsp.ajax.requests[i].readyState == 4) { ffsp.ajax.requests[i].abort(); ffsp.ajax.requests[i].context = null; return ffsp.ajax.requests[i]; } } var pos = ffsp.ajax.requests.length; ffsp.ajax.requests[pos] = Object(); ffsp.ajax.requests[pos].obj = new ffsp.ajax.XmlHttpRequest(); ffsp.ajax.requests[pos].context = context; return ffsp.ajax.requests[pos]; } ffsp.ajax.request = function(url, data, callback, context) { var request = ffsp.ajax.createRequest(context); var async = typeof(callback) == 'function'; if(async) request.obj.onreadystatechange = function() { if(request.obj.readyState == 4) callback(new ffsp.ajax.response(request)); } var viewstate = null; for(var i = 0; i < document.forms[0].elements.length; i++) { var ele = document.forms[0].elements[i]; if(ele.name == "__VIEWSTATE") { viewstate = ele; break; } } if(viewstate != null) { data = data + "\r\n\r\n" + viewstate.value; } request.obj.open('POST', url, async); request.obj.send(data); if(!async) return new ffsp.ajax.response(request); } ffsp.ajax.response = function(request) { this.request = request.obj; this.error = null; this.value = null; this.context = request.context; if(request.obj.status == 200) { try { this.value = ffsp.ajax.objectFromJSON(request); if(this.value && this.value.error) { this.error = this.value.error; this.value = null; } } catch(e) { this.error = new ffsp.ajax.error(e.name, e.description, e.number); } } else { this.error = new ffsp.ajax.error('HTTP request failed with status: ' + request.obj.status, request.obj.status); } return this; } ffsp.ajax.enc = function(s) { return s.toString().replace(/\%/g, "%26").replace(/=/g, "%3D"); } ffsp.ajax.error = function(name, description, number) { this.name = name; this.description = description; this.number = number; var obj = ffsp.ajax.error.prototype; obj.toString = function() { return this.name + " " + this.description; }; return this; } ffsp.ajax.objectFromJSON = function(request) { if(request.obj.responseXML != null && request.obj.responseXML.xml != null && request.obj.responseXML.xml != '') return request.obj.responseXML; var r = null; eval('r=' + request.obj.responseText + ';'); return r; } ffsp.ajax.JSONFromObject = function(arg) { var c, i, l, s = '', v; switch (typeof arg) { case 'object': if(arg) { if(arg.constructor == Array) { for(i = 0; i < arg.length; ++i) { v = ffsp.ajax.JSONFromObject(arg[i]); if (s) { s += ','; } s += v; } return '[' + s + ']'; } else if(typeof arg.toString != 'undefined') { for(i in arg) { v = arg[i]; if(typeof v != 'undefined' && typeof v != 'function') { v = ffsp.ajax.JSONFromObject(v); if (s) { s += ','; } s += ffsp.ajax.JSONFromObject(i) + ':' + v; } } return '{' + s + '}'; } } return 'null'; case 'number': return isFinite(arg) ? String(arg) : 'null'; case 'string': l = arg.length; s = '"'; for(i = 0; i < l; i += 1) { c = arg.charAt(i); if(c >= ' ') { if(c == '\\' || c == '"') { s += '\\'; } s += c; } else { switch (c) { case '\b': s += '\\b'; break; case '\f': s += '\\f'; break; case '\n': s += '\\n'; break; case '\r': s += '\\r'; break; case '\t': s += '\\t'; break; default: c = c.charCodeAt(); s += '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); } } } return s + '"'; case 'boolean': return String(arg); default: return 'null'; } } ffsp.ajax.ajaxVersion = '5.6.3.4';