function AjaxRequest(url, options) {
var xmlHttpReq;
var opts = options;
if (window.XMLHttpRequest) {
xmlHttpReq = new XMLHttpRequest();
if (xmlHttpReq.overrideMimeType) {
xmlHttpReq.overrideMimeType("text/html");
}
}
else if (window.ActiveXObject) {
try {
xmlHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
try {
xmlHttpReq = new XMLHttpRequest();
}
catch (e) {
}
}
}
}
var returnFunction = function() {
if (xmlHttpReq.readyState == 4) {
try {
if (xmlHttpReq.status == 200) {
if (opts.update) {
var el = jQuery.getOne(opts.update);
el.innerHTML = xmlHttpReq.responseText;
executeLoadedScript(el);
}
if (opts.onComplete) {
opts.onComplete(xmlHttpReq, opts.returnArgs);
}
AjaxUtil.remove(opts.ajaxId);
}
}
catch(e) {
}
}
};
var send = function(url) {
var urlArray = url.split("?");
var path = urlArray[0];
var query = urlArray[1];
try {
if (opts.method == "get") {
xmlHttpReq.open("GET", url, true);
xmlHttpReq.onreadystatechange = returnFunction;
xmlHttpReq.send("");
}
else {
xmlHttpReq.open("POST", path, true);
xmlHttpReq.setRequestHeader("Method", "POST " + path + " HTTP/1.1");
xmlHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttpReq.onreadystatechange = returnFunction;
xmlHttpReq.send(query);
}
}
catch (e) {
}
};
send(url);
this.resend = function(url, options) {
opts = options;
/*
ajaxId = 0;
onComplete = opts.onComplete;
*/
send(url);
};
this.getId = function() {
return ajaxId;
};
this.cleanUp = function() {
xmlHttpReq.onreadystatechange = function() {};
returnFunction = null;
returnArgs = null;
xmlHttpReq = null;
};
}
var AjaxUtil = {
counter : 1,
requests : [],
request : function(url, options) {
/*
 * OPTIONS:
 * onComplete (function) - function to call after response is received
 * returnArgs (object) - object to pass to return function
 * reverseAjax (boolean) - use reverse ajax. (only one at a time)
 * method (string) - use "get" or "post". Default is post.
 */
var opts = options || {};
var ajaxId = (opts.reverseAjax) ? 0 : AjaxUtil.getNextId();
opts.ajaxId = ajaxId;
var request;
if (ajaxId == 0 && AjaxUtil.requests[0]) {
request = AjaxUtil.requests[0];
request.resend(url, opts);
}
else {
request = new AjaxRequest(url, opts);
AjaxUtil.requests[ajaxId] = request;
}
if (!opts.onComplete && !opts.update) {
AjaxUtil.remove(ajaxId);
}
},
submit: function(form, options) {
var url = form.action;
var inputs = jQuery("input, textarea, select", form);
var opts = options || {};
var params = inputs.serialize();
if (url.indexOf("?") == -1) {
url = url + "?" + params;
}
if (url.lastIndexOf("?") == url.length - 1) {
url = url + params;
}
else {
url = url + "&" + params;
}
if (opts.disable) {
inputs.attr("disabled", true);
}
AjaxUtil.request(url, opts);
},
update : function(url, id, options) {
var opts = options || {};
opts.update = id;
AjaxUtil.request(url, opts);
},
getNextId : function() {
var id = AjaxUtil.counter++;
if (AjaxUtil.counter > 20) {
/* Reset array in a round-robin fashion */
/* Reserve index 0 for reverse ajax requests */
AjaxUtil.counter = 1;
}
return id;
},
remove : function(id) {
if (id) {
var request = AjaxUtil.requests[id];
if (request) {
request.cleanUp();
request = null;
}
}
}
};
var ReverseAjax = {
initialize: function() {
jQuery(window).bind('unload', ReverseAjax.release);
ReverseAjax.request();
},
request: function() {
AjaxUtil.request(
themeDisplay.getPathMain() + "/portal/reverse_ajax",
{
onComplete: ReverseAjax.response,
reverseAjax: true
}
);
},
response: function(xmlHttpRequest) {
var res = Liferay.Util.toJSONObject(xmlHttpRequest.responseText);
var status = res.status;
if (status && status != "failure") {
if (status == "success") {
if (res.chatMessages) {
Messaging.getChatsReturn(res.chatMessages);
}
if (res.chatRoster) {
MessagingRoster.getEntriesReturn(res.chatRoster);
}
}
ReverseAjax.request();
}
},
release : function() {
AjaxUtil.request(themeDisplay.getPathMain() + "/portal/reverse_ajax?release=1", {reverseAjax:true});
}
};
function executeLoadedScript(el) {
var scripts = el.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
if (scripts[i].src) {
var head = document.getElementsByTagName("head")[0];
var scriptObj = document.createElement("script");
scriptObj.setAttribute("type", "text/javascript");
scriptObj.setAttribute("src", scripts[i].src);
head.appendChild(scriptObj);
}
else {
try {
if (Liferay.Browser.is_safari) {
eval(scripts[i].innerHTML);
}
else if (Liferay.Browser.is_mozilla) {
eval(scripts[i].textContent);
}
else {
eval(scripts[i].text);
}
}
catch (e) {}
}
}
}
/*
 * NOTE: loadPage() has been depricated.  Use AjaxUtil.request() instead
 */
function loadPage(path, queryString, returnFunction, returnArgs) {
AjaxUtil.request(
path + "?" + queryString,
{
onComplete: returnFunction,
returnArgs: returnArgs
}
);
}
function printJSON(data) {
if (data && data.id) {
var target = document.getElementById(data.id);
if (target) {
target.innerHTML = data.toString();
}
}
}