///
///
//dnn.xmlhttp Namespace
Type.registerNamespace('dnn.xmlhttp');
dnn.xmlhttp.callbackType = function() { };
dnn.xmlhttp.callbackType.prototype = {
simple: 0,
processPage: 1,
callBackMethod: 2,
processPageCallbackMethod: 3
}
dnn.xmlhttp.callbackType.registerEnum("dnn.xmlhttp.callbackType");
dnn.xmlhttp.callbackStatus = function() { };
dnn.xmlhttp.callbackStatus.prototype = {
ok: 200,
genericFailure: 400,
controlNotFound: 404,
interfactNotSupported: 501
}
dnn.xmlhttp.callbackStatus.registerEnum("dnn.xmlhttp.callbackStatus");
dnn.extend(dnn.xmlhttp, {
pns: 'dnn',
ns: 'xmlhttp',
parserName: null,
contextId: 0,
requests: [],
cleanUpTimer: null,
callBackMethods: null,
init: function()
{
this.parserName = this._getParser();
},
onload: function()
{
dnn.xmlhttp._fillCallBackMethods();
},
doCallBack: function(sControlId, sArg, pSuccessFunc, sContext, pFailureFunc, pStatusFunc, bAsync, sPostChildrenId, iType)
{
var oReq = dnn.xmlhttp.createRequestObject();
var sURL = document.location.href;
oReq.successFunc = pSuccessFunc;
oReq.failureFunc = pFailureFunc;
oReq.statusFunc = pStatusFunc;
oReq.context = sContext;
if (bAsync == null)
bAsync = true;
// if (sURL.substring(sURL.length - 1, sURL.length) == '/') //CAP-8897 - WCT-8651
// sURL += 'default.aspx';
if (sURL.indexOf('#') != -1)
sURL = sURL.substring(0, sURL.indexOf('#'));
oReq.open('POST', sURL, bAsync);
//js xmlhttp cannot do double encoding
if (this.parserName == 'JS')
sArg = dnn.encode(sArg, false);
else
sArg = dnn.encode(sArg, true);
if (sPostChildrenId)
sArg += '&' + dnn.dom.getFormPostString($get(sPostChildrenId));
if (iType != 0)
sArg += '&__DNNCAPISCT=' + iType;
oReq.send('__DNNCAPISCI=' + sControlId + '&__DNNCAPISCP=' + sArg);
return oReq; //1.3
},
callControlMethod: function(ns, method, args, successFunc, failFunc, context, type)
{
if (this.callBackMethods == null)
this._fillCallBackMethods();
if (type == null)
type = dnn.xmlhttp.callbackType.callBackMethod;
if (this.callBackMethods[ns])
{
//var argAry = [];
//for (var i = 0; i < args.length; i++)
// argAry[i] = args[i];
if (args == null)
args = {};
var callContext = { context: context, success: successFunc, fail: failFunc };
var payload = Sys.Serialization.JavaScriptSerializer.serialize({ method: method, args: args });
dnn.xmlhttp.doCallBack(this.callBackMethods[ns], payload, dnn.xmlhttp.callBackMethodComplete, callContext, dnn.xmlhttp.callBackMethodError, null, true, null, type); //2 = CallbackMethod
}
else
{
alert('Namespace not registered');
}
},
callBackMethodComplete: function(result, context, req)
{
result = Sys.Serialization.JavaScriptSerializer.deserialize(result);
if (context.success)
context.success(result.result, context.context, req);
},
callBackMethodError: function(message, context, req)
{
if (context.fail)
context.fail(message, context.context, req);
},
createRequestObject: function()
{
if (this.parserName == 'ActiveX')
{
var o = new ActiveXObject('Microsoft.XMLHTTP');
dnn.xmlhttp.requests[dnn.xmlhttp.requests.length] = new dnn.xmlhttp.XmlHttpRequest(o);
return dnn.xmlhttp.requests[dnn.xmlhttp.requests.length - 1];
}
else if (this.parserName == 'Native')
{
return new dnn.xmlhttp.XmlHttpRequest(new XMLHttpRequest());
}
else
{
var oReq = new dnn.xmlhttp.XmlHttpRequest(new dnn.xmlhttp.JsXmlHttpRequest());
dnn.xmlhttp.requests[oReq._request.contextId] = oReq;
return oReq;
}
},
_getParser: function()
{
if (dnn.xmlhttp.JsXmlHttpRequest != null)
return 'JS';
if (dnn.dom.browser.isType(dnn.dom.browser.InternetExplorer))
return 'ActiveX'; //'ActiveX';
else if (typeof (XMLHttpRequest) != "undefined")
return 'Native'; //'Native';
else
return 'JS';
},
_fillCallBackMethods: function()
{
this.callBackMethods = [];
var methods = dnn.getVar('__dnncbm', '').split(' ');
var pair;
if (methods)
{
for (var i = 0; i < methods.length; i++)
{
if (methods[i].length > 0)
{
pair = methods[i].split('=');
this.callBackMethods[pair[0]] = pair[1];
}
}
}
},
_cleanupxmlhttp: function()
{
for (var i = 0; i < dnn.xmlhttp.requests.length; i++)
{
if (dnn.xmlhttp.requests[i] != null)
{
if (dnn.xmlhttp.requests[i].completed)
{
dnn.xmlhttp.requests[i].dispose();
if (dnn.xmlhttp.requests.length == 1)
dnn.xmlhttp.requests = new Array();
else
dnn.xmlhttp.requests.splice(i, i);
}
}
}
}
});
//dnn.xmlhttp.XmlHttpRequest Object
dnn.xmlhttp.XmlHttpRequest = function(o)
{
this._request = o;
this.successFunc = null;
this.failureFunc = null;
this.statusFunc = null;
this._request.onreadystatechange = dnn.dom.getObjMethRef(this, 'onreadystatechange');
this.context = null;
this.completed = false;
}
dnn.xmlhttp.XmlHttpRequest.prototype =
{
dispose: function()
{
if (this._request != null)
{
this._request.onreadystatechange = new function() { }; //stop IE memory leak. Not sure why can't set to null;
this._request.abort();
this._request = null;
this.successFunc = null;
this.failureFunc = null;
this.statusFunc = null;
this.context = null;
this.completed = null;
this.postData = null; //1.3
}
},
open: function(sMethod, sURL, bAsync)
{
this._request.open(sMethod, sURL, bAsync);
if (typeof (this._request.setRequestHeader) != 'undefined')
this._request.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
return true;
},
send: function(postData)
{
this.postData = postData;
if (dnn.xmlhttp.parserName == 'ActiveX')
this._request.send(postData);
else
this._request.send(postData);
return true;
},
onreadystatechange: function()
{
if (this.statusFunc != null)
this.statusFunc(this._request.readyState, this.context, this); //1.3
if (this._request.readyState == '4')
{
this.complete(this._request.responseText);
if (dnn.xmlhttp.parserName == 'ActiveX')
window.setTimeout(dnn.xmlhttp._cleanupxmlhttp, 1); //cleanup xmlhttp object
}
},
complete: function(res)
{
var statusCode = this.getResponseHeader('__DNNCAPISCSI');
this.completed = true;
if (new Number(statusCode) == dnn.xmlhttp.callbackStatus.ok)
{
var ret = Sys.Serialization.JavaScriptSerializer.deserialize(res);
this.successFunc(ret.d, this.context, this); //1.3
}
else
{
var statusDesc = this.getResponseHeader('__DNNCAPISCSDI');
if (this.failureFunc != null)
this.failureFunc(statusCode + ' - ' + statusDesc, this.context, this); //1.3
else
alert(statusCode + ' - ' + statusDesc);
}
},
getResponseHeader: function(key)
{
return this._request.getResponseHeader(key);
}
}
dnn.xmlhttp.XmlHttpRequest.registerClass('dnn.xmlhttp.XmlHttpRequest');
dnn.xmlhttp.init();
Sys.Application.add_load(dnn.xmlhttp.onload);
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();