window.AjaxPanel = AjaxPanel = {
init: function(panel) {
if (panel.filterId == null) {
panel.filterId = panel.id;
}
panel.docLocation = document.location.href.toString();
if(!panel.location) panel.location = panel.docLocation;
panel.href = panel.location;
panel.relPanels = [];
panel.addFormFilter = true;
},
reload: function(panel) {
if (!panel.location)
return;
var requestUrl = panel.location;
if (panel.addFormFilter) requestUrl = AjaxPanel._addParam(requestUrl, "FormFilter", panel.filterId);
AjaxPanel._showProgress();
new Ajax.Request(requestUrl, {
method: 'get',
requestHeaders: ['If-Modified-Since', new Date(0)],
onSuccess: function(transport) {
panel.location = requestUrl;
AjaxPanel._hideProgress();
AjaxPanel._update(panel, transport.responseText);
// BEGIN my change
//AjaxPanel._reloadRelPanels(panel);
// END my change
}
});
},
configPanel: function(panel) {
var diffLoc = !AjaxPanel._matchPages(panel.href, panel.docLocation);
// if panel has same location as document
if (!diffLoc) {
if (panel.childrenAsTriggers) AjaxPanel._bind(panel);
window.setTimeout(panel.id + "_bind(window)", 0);
} else { panel.addFormFilter = false; }
// if panel has different location then document
if (diffLoc && panel.startOnLoad) AjaxPanel.reload(panel);
},
_bind: function(panel) {
var links = $$("#" + panel.id + " a");
var inputs = $$("#" + panel.id + " input");
var forms = $$("#" + panel.id + " form");
for (var i = 0; i < links.length; i++) {
var link = links[i];
if (link.target == "" || link.target.toLowerCase() == "_self")
if (AjaxPanel._matchPages(panel.href, link.href)) {
link.panel = panel;
link.onclick = function() { return false; }
link.observe("click", AjaxPanel._linkClick);
} else {
// BEGIN my change
var divs = document.body.getElementsByTagName('div');
for (var j = 0; j < divs.length; j++) {
if (divs[j].location && AjaxPanel._matchPages(divs[j].location, link.href)) {
link.panel = panel;
link.onclick = function () {
var divs = document.getElementsByTagName('div');
var _href = this.getAttribute("href");
var p = String(_href.substring(_href.indexOf("?") + 1)).toQueryParams();
for (var i = 0; i < divs.length; i++)
if (divs[i].location && AjaxPanel._matchPages(divs[i].location, _href)) {
// adding new params
if (divs[i].parentParams) {
for (var n in p) {
if (n != "FormFilter" && n != "ccsForm") {
divs[i].location = AjaxPanel._addParam(divs[i].location, n, p[n]);
}
}
}
// clearing empty params
divs[i].location = AjaxPanel._removeEmptyParams(divs[i].location);
// adding divs[i].id to relPanels
AjaxPanel._addToRelPanels(divs[i], this.panel.id);
// refresh
AjaxPanel.reload(divs[i]);
}
return false;
};
}
}
// END my change
}
}
if (forms.length > 0) {
window.ccs_ap_f = function (currentFormId) {
var currentForm = document.getElementById(currentFormId);
if (!currentForm) currentForm = document.forms[currentFormId];
var existingSubmit = currentForm.onsubmit ? currentForm.onsubmit : function() {};
currentForm.onsubmit = function(e) {
if (existingSubmit.apply(this) != false && typeof this.submitted == "undefined") {
try {
if(typeof(FCKeditorAPI) == "object") {
var textareas = this.getElementsByTagName("textarea");
for (var t = 0; t < textareas.length; t++) {
var textareaId = textareas[t].getAttribute("id");
if (textareaId && textareaId != "")
{
var fckInstance = FCKeditorAPI.GetInstance(textareaId);
if (fckInstance) fckInstance.UpdateLinkedField();
}
}
}
}
catch(err) { }
// BEGIN my change
if (AjaxPanel._matchPages(this.panel.location, this.action)) {
AjaxPanel._submitForm(this);
// currentForm.submitted:
// is needed for YUI because it submits a from twice when pressing Enter for submitting,
// first, on a form keypress, second, on a button keypress (if it is a submit button)
this.submitted = true;
//this.onsubmit = function () { return false; alert(1); }
} else {
var divs = document.getElementsByTagName('div');
var h = $(this).serialize();
var p = h.toQueryParams();
for (var i = 0; i < divs.length; i++)
if (divs[i].location && AjaxPanel._matchPages(divs[i].location, this.action)) {
// adding new params
for (var n in p) {
divs[i].location = AjaxPanel._addParam(divs[i].location, n, p[n]);
}
// clearing empty params
divs[i].location = AjaxPanel._removeEmptyParams(divs[i].location);
// refresh
AjaxPanel.reload(divs[i]);
}
}
// END my change
}
return false;
};
};
for (var i = 0; i < forms.length; i++) {
var currentForm = forms[i];
currentForm.panel = panel;
currentForm.firstInput = null;
var inputs = currentForm.getElementsByTagName('input');
for (var j = 0; j < inputs.length; j++) {
var input = inputs[j];
if (input.type != null && (input.type.toLowerCase() == "submit" || input.type.toLowerCase() == "image")) {
if (currentForm.firstInput == null) {
currentForm.firstInput = input;
}
input.panel = panel;
input.observe("click", AjaxPanel._inputClick);
}
}
// setTimemout is used because of YUI binding approach, they bind events with setTimeout.
// To add our events to the end of an event chain, after yui events, we have to use setTimeout, too.
var currentFormId = (currentForm.getAttribute("id") ? currentForm.getAttribute("id") : currentForm.name);
window.setTimeout("try { window.ccs_ap_f('" + currentFormId + "'); } catch (e) { }", 0);
}
window.setTimeout("try { delete window.ccs_ap_f; } catch (e) { window.ccs_ap_f = null; }", 1000);
}
if(panel.onrefresh) {
panel.onrefresh.apply(panel);
}
},
_inputClick: function(event) {
var sender = Event.element(event);
sender.form.lastClick = sender;
},
_submitForm: function(form) {
if (form != null) {
AjaxPanel._showProgress();
var submitButton = false;
if (form.lastClick) {
submitButton = form.lastClick.name;
} else if (form.firstInput){
submitButton = form.firstInput.name;
}
var method = "post";
if (form.hasAttribute('method')) {
method = form.method;
}
var action = form.readAttribute('action') || '';
if (action.blank()) action = form.panel.location;
if (method == "get" && action.indexOf("?") != -1) {
action = action.substring(0, action.indexOf("?"));
}
if (form.panel.addFormFilter) action = AjaxPanel._addParam(action, "FormFilter", form.panel.filterId);
var formInputs = $A($(form).getElementsByTagName('*')).inject([],
function(elements, child) {
if (Form.Element.Serializers[child.tagName.toLowerCase()]) {
if (!child.type || (child.type != "image" && child.type != "submit") || submitButton == child.name) {
elements.push(Element.extend(child));
}
}
return elements;
}
);
var parameters = Form.serializeElements(formInputs, {submit: submitButton});
new Ajax.Request(action, {
method: method,
requestHeaders: ['If-Modified-Since', new Date(0)],
parameters: parameters,
onSuccess: function(transport) {
form.panel.location = action;
AjaxPanel._hideProgress();
if (!form.panel.sendCloseEvent)
AjaxPanel._update(form.panel, transport.responseText);
// BEGIN my change
AjaxPanel._reloadRelPanels(form.panel);
// END my change
// BEGIN code for __onclose event
if (form.panel.sendCloseEvent) {
if (!AjaxPanel._sendCloseEvent(form.panel.id)) {
AjaxPanel._update(form.panel, transport.responseText);
}
}
// BEGIN code for __onclose event
}
});
}
return false;
},
_linkClick: function(event) {
var sender = Event.element(event);
while (!sender.panel) sender = sender.parentNode;
if (sender.href.indexOf("javascript:") == 0)
return false;
var getUrl = sender.href;
if (sender.panel.addFormFilter) getUrl = AjaxPanel._addParam(getUrl, "FormFilter", sender.panel.filterId);
AjaxPanel._showProgress();
new Ajax.Request(getUrl, {
method: "get",
requestHeaders: ['If-Modified-Since', new Date(0)],
onSuccess: function(transport) {
sender.panel.location = getUrl;
AjaxPanel._hideProgress();
AjaxPanel._update(sender.panel, transport.responseText);
}
});
return false;
},
_update: function(panel, content) {
AjaxPanel._showProgress();
this._getPageScripts();
// IE removes a <script> tag if it goes first, so we should add something before it
if ((new RegExp("^<script", "m")).test(content)) content = "<span style='display:none;'> </span>" + content;
//panel.style.display = "none";
panel.innerHTML = content;
var scripts = panel.getElementsByTagName('script');
for (var i = 0; i < scripts.length; i++) {
var s = scripts[i];
var a = s.getAttribute("src") ? s.getAttribute("src") : "";
var name = this._toPSFormat(a);
if (a != "" && !this._inPageScripts(name)) {
var re = /(\/\/)|(^\/)/m;
if (!re.test(a)) { // relative url
a = String(panel.location).substring(0, String(panel.location).lastIndexOf("/") + 1) + a;
}
AjaxPanel._showProgress();
AjaxPanel._addToPageScripts(a);
new Ajax.Request(a, {
method: "get",
requestHeaders: ['If-Modified-Since', new Date(0)],
onSuccess: function(transport) {
if (window.execScript) window.execScript(transport.responseText);
else window.eval(transport.responseText);
if (AjaxPanel._scriptsInPageScripts(panel)) AjaxPanel.__update(panel);
AjaxPanel._hideProgress();
}
});
}
}
if (this._scriptsInPageScripts(panel)) AjaxPanel.__update(panel);
AjaxPanel._hideProgress();
},
__update: function(panel) {
var scrs = panel.getElementsByTagName('script');
// if there is a javascript inside a HTML comment IE will not exec this script
var re1 = /^\s*<!--/m, re2 = /-->\s*$/m;
for(var i = 0; i < scrs.length; i++){
if (!scrs[i].getAttribute("src") || scrs[i].getAttribute("src") == "") {
var script = scrs[i].innerHTML.replace(re1, "").replace(re2, "");
if (window.execScript) window.execScript(script);
else window.eval(script);
}
}
AjaxPanel._bind(panel);
try {
window.setTimeout(panel.id + "_bind(window)", 0);
var servicePageName = String(panel.location).substring(0, String(panel.location).lastIndexOf("?"));
servicePageName = String(servicePageName).substring(String(servicePageName).lastIndexOf("/") + 1, String(servicePageName).lastIndexOf("."));
window.setTimeout("try{" + servicePageName + "_bind_events(window)}catch(e){}", 0);
} catch(e) {};
},
_matchPages: function(pageUrl, linkUrl) {
if (linkUrl == null || linkUrl == "#" || linkUrl == "") { return false; }
if (AjaxPanel._getScriptPath(pageUrl).toLowerCase() == AjaxPanel._getScriptPath(linkUrl).toLowerCase()) {
return true;
}
return false;
},
_getScriptPath: function(fullUrl) {
// BEGIN my change
if (!(new RegExp("\\/\\/")).test(fullUrl)) { fullUrl = String(location).substring(0, String(location).lastIndexOf("/") + 1) + fullUrl; }
// END my change
var questPos = fullUrl.indexOf("?");
if (questPos == -1) { return fullUrl };
return fullUrl.substring(0, questPos);
},
__showProgressLinks: 0,
_showProgress: function() {
this.__showProgressLinks++;
if ($("AjaxPanelProgress") != null) {
return false;
}
var progressSpan = document.createElement("div");
progressSpan.style.position = "absolute";
progressSpan.style.zIndex = 1000;
progressSpan.style.top = "3px";
progressSpan.style.right = "3px";
progressSpan.id = "AjaxPanelProgress";
progressSpan.innerHTML = "<div style=\"background-color: #D33333; font-family: Tahoma; font-size: 8pt; padding:1px; color: #FFFFFF;\"> Loading... </div>";
document.body.appendChild(progressSpan);
addOpacity(true); // to lock the screen while smth is loading
},
_hideProgress: function() {
this.__showProgressLinks--;
if ($("AjaxPanelProgress") == null) {
return false;
}
if (this.__showProgressLinks == 0) {
document.body.removeChild($("AjaxPanelProgress"));
window.setTimeout("removeOpacity()", 100); // unlock the screen when smth's been loaded
}
},
_addParam: function(queryStr, paramName, paramValue) {
queryStr = decodeURI(queryStr);
queryStr = queryStr.replace(/\+/g, " ");
var queryParts = queryStr.split("?");
var params = new Hash();
if (queryParts.length > 1) {
params = new Hash(queryStr.toQueryParams());
}
params.set(paramName, paramValue);
return queryParts[0] + "?" + params.toQueryString();
},
_removeParam: function(queryStr, paramName) {
var queryParts = queryStr.split("?");
var params = new Hash();
if (queryParts.length > 1) {
params = new Hash(queryStr.toQueryParams());
params.unset(paramName);
}
return queryParts[0] + "?" + params.toQueryString();
},
_removeEmptyParams: function(loc) {
var q = loc.indexOf("?");
var qs = loc;
if (q != -1) {
qs = loc.substring(q + 1);
loc = loc.substring(0, q);
}
var p1 = qs.toQueryParams();
// ccsForm should be removed cause some errors when submitting forms
for (n in p1) if (n != "ccsForm" && p1[n] != "") loc = AjaxPanel._addParam(loc, n, p1[n]);
return loc;
},
_inRelPanels: function(panel, name) {
for (var i = 0; i < panel.relPanels.length; i++) {
if (panel.relPanels[i] == name) return true;
}
return false;
},
_addToRelPanels: function(panel, name) {
if (AjaxPanel._inRelPanels(panel, name) || panel.id == name) return;
panel.relPanels[panel.relPanels.length] = name;
},
_reloadRelPanels: function(panel) {
for (var i = 0; i < panel.relPanels.length; i++) {
var id = panel.relPanels[i];
var p = $(id);
if (p && p.innerHTML != "") AjaxPanel.reload(p);
}
},
_pageScripts: [],
_inPageScripts: function (s) {
for (var i = 0; i < this._pageScripts.length; i++)
if (this._pageScripts[i].toLowerCase() == s.toLowerCase()) return true;
return false;
},
_getPageScripts: function () {
var h = document.getElementsByTagName("head")[0];
var s = h.getElementsByTagName("script");
for (var i = 0; i < s.length; i++) {
var itm = s[i];
var src = itm.getAttribute("src") ? this._toPSFormat(itm.getAttribute("src")) : "";
if (src != "" && !this._inPageScripts(src)) {
this._pageScripts[this._pageScripts.length] = src;
}
}
},
_addToPageScripts: function (s) {
if (!this._inPageScripts(s)) {
this._pageScripts[this._pageScripts.length] = this._toPSFormat(s);
}
},
_toPSFormat: function (src) {
// http://www.aaa.com/folder/file.js -> file.js
if (src.indexOf("/") == -1) return src;
else return String(src).substring(String(src).lastIndexOf("/") + 1);
},
_scriptsInPageScripts: function (panel) {
var scripts = panel.getElementsByTagName('script');
for (var i = 0; i < scripts.length; i++) {
var s = scripts[i];
var src = s.getAttribute("src") ? this._toPSFormat(s.getAttribute("src")) : "";
if (src != "" && !this._inPageScripts(src)) return false;
}
return true;
},
_sendCloseEvent: function (id) {
var ret = false;
var el = document.getElementById(id);
while (el) {
if (typeof el.__onclose != "undefined") {
el.__onclose(el);
ret = true;
break;
}
el = el.parentNode;
}
return ret;
}
}