*/
/* some generic JavaScript code for SOGo */
-// TODO: replace things with Prototype where applicable
-
/* generic stuff */
var logConsole;
var queryParameters;
var activeAjaxRequests = 0;
+var menus = new Array();
// logArea = null;
var allDocumentElements = null;
return url;
}
+function URLForFolderID(folderID) {
+ var folderInfos = folderID.split(":");
+ var url;
+ if (folderInfos.length > 1) {
+ url = UserFolderURL + "../" + folderInfos[0];
+ if (folderInfos[1][0] != '/')
+ url += '/';
+ url += folderInfos[1];
+ }
+ else
+ url = ApplicationBaseURL + folderInfos[0];
+
+ if (url[url.length-1] == '/')
+ url = url.substr(0, url.length-1);
+
+ return url;
+}
+
function extractEmailAddress(mailTo) {
var email = "";
function extractEmailName(mailTo) {
var emailName = "";
- var emailNamere = /(.+)\ </;
- if (emailNamere.test(mailTo)) {
- emailNamere.exec(mailTo);
- emailName = RegExp.$1;
- }
+ var tmpMailTo = mailTo.replace("<", "<");
+ tmpMailTo = tmpMailTo.replace(">", ">");
- return emailName;
+ var emailNamere = /([ ]+)?(.+)\ </;
+ if (emailNamere.test(tmpMailTo)) {
+ emailNamere.exec(tmpMailTo);
+ emailName = RegExp.$2;
+ }
+
+ return emailName;
}
function sanitizeMailTo(dirtyMailTo) {
- var emailName = extractEmailName(dirtyMailTo);
- var email = "" + extractEmailAddress(dirtyMailTo);
-
- var mailto = "";
- if (emailName && emailName.length > 0)
- mailto = emailName + ' <' + email + '>';
- else
- mailto = email;
-
- return mailto;
+ var emailName = extractEmailName(dirtyMailTo);
+ var email = "" + extractEmailAddress(dirtyMailTo);
+
+ var mailto = "";
+ if (emailName && emailName.length > 0)
+ mailto = emailName + ' <' + email + '>';
+ else
+ mailto = email;
+
+ return mailto;
+}
+
+function openUserFolderSelector(callback, type) {
+ var urlstr = ApplicationBaseURL;
+ if (urlstr[urlstr.length-1] != '/')
+ urlstr += '/';
+ urlstr += ("../../" + UserLogin + "/Contacts/userFolders");
+ var w = window.open(urlstr, "User Selector",
+ "width=322,height=250,resizable=1,scrollbars=0");
+ w.opener = window;
+ w.userFolderCallback = callback;
+ w.userFolderType = type;
+ w.focus();
}
function openMailComposeWindow(url) {
return w;
}
-function openMailTo(senderMailto) {
- var mailto = sanitizeMailTo(senderMailto);
-
- if (mailto.length > 0)
- openMailComposeWindow(ApplicationBaseURL
- + "/../Mail/compose?mailto=" + mailto);
+function openMailTo(senderMailTo) {
+ var mailto = sanitizeMailTo(senderMailTo);
+ if (mailto.length > 0)
+ openMailComposeWindow(ApplicationBaseURL
+ + "/../Mail/compose?mailto=" + mailto);
return false; /* stop following the link */
}
checkAjaxRequestsState();
log("AJAX Request, Caught Exception: " + e.name);
log(e.message);
+ log(backtrace());
}
};
http.url = url;
if (activeAjaxRequests > 0
&& !document.busyAnim) {
var anim = document.createElement("img");
+ anim = $(anim);
document.busyAnim = anim;
anim.id = "progressIndicator";
anim.src = ResourcesURL + "/busy.gif";
- anim.style.visibility = "hidden;";
+ anim.setStyle({ visibility: "hidden" });
toolbar.appendChild(anim);
- anim.style.visibility = "visible;";
+ anim.setStyle({ visibility: "visible" });
}
else if (activeAjaxRequests == 0
- && document.busyAnim) {
+ && document.busyAnim
+ && document.busyAnim.parentNode) {
document.busyAnim.parentNode.removeChild(document.busyAnim);
document.busyAnim = null;
}
}
}
+function getTarget(event) {
+ event = event || window.event;
+ if (event.target)
+ return event.target; // W3C DOM
+ else
+ return event.srcElement; // IE
+}
+
+function preventDefault(event) {
+ if (event.preventDefault)
+ event.preventDefault(); // W3C DOM
+ else
+ event.returnValue = false; // IE
+}
+
function resetSelection(win) {
var t = "";
if (win && win.getSelection) {
}
function onRowClick(event) {
- var node = event.target;
+ var node = getTarget(event);
if (node.tagName == 'TD')
node = node.parentNode;
if (startSelection != node.parentNode.getSelectedNodes()) {
var parentNode = node.parentNode;
- if (parentNode instanceof HTMLTableSectionElement)
+ if (parentNode.tagName == 'TBODY')
parentNode = parentNode.parentNode;
- var onSelectionChangeEvent = document.createEvent("Event");
- onSelectionChangeEvent.initEvent("selectionchange", true, true);
- parentNode.dispatchEvent(onSelectionChangeEvent);
+ log("onRowClick: parentNode = " + parentNode.tagName);
+ if (document.createEvent) {
+ var onSelectionChangeEvent = document.createEvent("UIEvents");
+ onSelectionChangeEvent.initEvent("selectionchange", true, true);
+ parentNode.dispatchEvent(onSelectionChangeEvent);
+ }
+ else if (document.createEventObject) {
+ // TODO: add support for IE
+ //parentNode.fireEvent("change");
+ //parentNode is UL or TABLE
+ }
}
}
/* popup menus */
-var bodyOnClick = "";
// var acceptClick = false;
-function onMenuClick(event, menuId) {
- var node = event.target;
-
- if (document.currentPopupMenu)
- hideMenu(event, document.currentPopupMenu);
-
- var popup = document.getElementById(menuId);
-
- var menuTop = event.pageY;
- var menuLeft = event.pageX;
- var heightDiff = (window.innerHeight
- - (menuTop + popup.offsetHeight));
- if (heightDiff < 0)
- menuTop += heightDiff;
+function popupMenu(event, menuId, target) {
+ document.menuTarget = target;
- var leftDiff = (window.innerWidth
- - (menuLeft + popup.offsetWidth));
- if (leftDiff < 0)
- menuLeft -= popup.offsetWidth;
+ if (document.currentPopupMenu)
+ hideMenu(event, document.currentPopupMenu);
- popup.style.top = menuTop + "px;";
- popup.style.left = menuLeft + "px;";
- popup.style.visibility = "visible;";
- setupMenuTarget(popup, node);
-
- bodyOnClick = "" + document.body.getAttribute("onclick");
- document.body.setAttribute("onclick", "onBodyClick(event);");
- document.currentPopupMenu = popup;
+ var popup = $(menuId);
+ var menuTop = event.pageY;
+ var menuLeft = event.pageX;
+ var heightDiff = (window.innerHeight
+ - (menuTop + popup.offsetHeight));
+ if (heightDiff < 0)
+ menuTop += heightDiff;
+
+ var leftDiff = (window.innerWidth
+ - (menuLeft + popup.offsetWidth));
+ if (leftDiff < 0)
+ menuLeft -= popup.offsetWidth;
- event.cancelBubble = true;
- event.returnValue = false;
+ popup.setStyle({ top: menuTop + "px",
+ left: menuLeft + "px",
+ visibility: "visible" });
- return false;
-}
+ document.currentPopupMenu = popup;
+ Event.observe(document.body, "click", onBodyClickMenuHandler);
-function setupMenuTarget(menu, target) {
- menu.menuTarget = target;
- var menus = document.getElementsByClassName("menu", menu);
- for (var i = 0; i < menus.length; i++) {
- menus[i].menuTarget = target;
- }
+ preventDefault(event);
}
function getParentMenu(node) {
return menuNode;
}
-function onBodyClick(event) {
- document.currentPopupMenu.menuTarget = null;
- hideMenu(event, document.currentPopupMenu);
- document.body.setAttribute("onclick", bodyOnClick);
+function onBodyClickMenuHandler(event) {
+ document.body.menuTarget = null;
+ hideMenu(event, document.currentPopupMenu);
+ Event.stopObserving(document.body, "click", onBodyClickMenuHandler);
- return false;
+ preventDefault(event);
}
function hideMenu(event, menuNode) {
menuNode.submenu = null;
}
- menuNode.style.visibility = "hidden";
+ menuNode.setStyle({ visibility: "hidden" });
+ // menuNode.hide();
if (menuNode.parentMenuItem) {
menuNode.parentMenuItem.setAttribute('class', 'submenu');
menuNode.parentMenuItem = null;
menuNode.parentMenu = null;
}
- var onhideEvent = document.createEvent("Event");
- onhideEvent.initEvent("hideMenu", false, true);
- menuNode.dispatchEvent(onhideEvent);
+ if (document.initEvent) {
+ var onhideEvent = document.createEvent("UIEvents");
+ onhideEvent.initEvent("hideMenu", false, true);
+ menuNode.dispatchEvent(onhideEvent);
+ }
+ else if (document.createEventObject) {
+ // TODO: add support for IE
+ }
}
-function onMenuEntryClick(event, menuId) {
+function onMenuEntryClick(event) {
var node = event.target;
id = getParentMenu(node).menuTarget;
}
function initLogConsole() {
- var logConsole = $("logConsole");
- if (logConsole) {
- logConsole.addEventListener("dblclick", onLogDblClick, false);
- logConsole.innerHTML = "";
- node = document.getElementsByTagName('body')[0];
- node.addEventListener("keydown", onBodyKeyDown, true);
- }
+ var logConsole = $("logConsole");
+ if (logConsole) {
+ logConsole.highlighted = false;
+ Event.observe(logConsole, "dblclick", onLogDblClick, false);
+ logConsole.innerHTML = "";
+ Event.observe(window, "keydown", onBodyKeyDown);
+ }
}
function onBodyKeyDown(event) {
- if (event.keyCode == 27) {
- toggleLogConsole();
- event.cancelBubble = true;
- event.returnValue = false;
- }
+ if (event.keyCode == 27) {
+ toggleLogConsole();
+ preventDefault(event);
+ }
}
function onLogDblClick(event) {
var logConsole = $("logConsole");
var display = '' + logConsole.style.display;
if (display.length == 0) {
- logConsole.style.display = 'block;';
+ logConsole.setStyle({ display: 'block' });
} else {
- logConsole.style.display = '';
+ logConsole.setStyle({ display: '' });
}
- event.cancelBubble = true;
- event.returnValue = false;
- event.preventDefault();
+ if (event)
+ preventDefault(event);
}
function log(message) {
logWindow = logWindow.opener;
}
var logConsole = logWindow.document.getElementById("logConsole");
- if (logConsole)
- logConsole.innerHTML += message + '<br />' + "\n";
+ if (logConsole) {
+ logConsole.highlighted = !logConsole.highlighted;
+ var logMessage = message.replace("<", "<", "g");
+ logMessage = logMessage.replace(" ", " ", "g");
+ logMessage = logMessage.replace("\r\n", "<br />\n", "g");
+ logMessage = logMessage.replace("\n", "<br />\n", "g");
+ logMessage += '<br />' + "\n";
+ if (logConsole.highlighted)
+ logMessage = '<div class="highlighted">' + logMessage + '</div>';
+ logConsole.innerHTML += logMessage;
+ }
}
function backtrace() {
var func = backtrace.caller;
- var str = "backtrace:<br/>";
+ var str = "backtrace:\n";
while (func)
{
else
str += "[anonymous]\n";
- str += "<br/>";
+ str += "\n";
func = func.caller;
}
str += "--\n";
}
function dropDownSubmenu(event) {
- var node = event.target;
- var submenu = node.getAttribute("submenu");
- if (submenu && submenu != "") {
- var submenuNode = document.getElementById(submenu);
- var parentNode = getParentMenu(node);
- if (parentNode.submenu)
- hideMenu(event, parentNode.submenu);
- submenuNode.parentMenuItem = node;
- submenuNode.parentMenu = parentNode;
- parentNode.submenuItem = node;
- parentNode.submenu = submenuNode;
-
- var menuTop = (node.offsetTop - 2);
-
- var heightDiff = (window.innerHeight
- - (menuTop + submenuNode.offsetHeight));
- if (heightDiff < 0)
- menuTop += heightDiff;
-
- var menuLeft = parentNode.offsetWidth - 3;
- if (window.innerWidth
- < (menuLeft + submenuNode.offsetWidth
- + parentNode.cascadeLeftOffset()))
- menuLeft = -submenuNode.offsetWidth + 3;
-
- parentNode.setAttribute('onmousemove', 'checkDropDown(event);');
- node.setAttribute('class', 'submenu-selected');
- submenuNode.style.top = menuTop + "px;";
- submenuNode.style.left = menuLeft + "px;";
- submenuNode.style.visibility = "visible;";
- }
+ var node = this;
+ if (this.submenu && this.submenu != "") {
+ log ("submenu: " + this.submenu);
+ var submenuNode = $(this.submenu);
+ var parentNode = getParentMenu(node);
+ if (parentNode.submenu)
+ hideMenu(event, parentNode.submenu);
+ submenuNode.parentMenuItem = node;
+ submenuNode.parentMenu = parentNode;
+ parentNode.submenuItem = node;
+ parentNode.submenu = submenuNode;
+
+ var menuTop = (node.offsetTop - 2);
+
+ var heightDiff = (window.innerHeight
+ - (menuTop + submenuNode.offsetHeight));
+ if (heightDiff < 0)
+ menuTop += heightDiff;
+
+ var menuLeft = parentNode.offsetWidth - 3;
+ if (window.innerWidth
+ < (menuLeft + submenuNode.offsetWidth
+ + parentNode.cascadeLeftOffset()))
+ menuLeft = - submenuNode.offsetWidth + 3;
+
+ parentNode.setAttribute('onmousemove', 'checkDropDown(event);');
+ node.setAttribute('class', 'submenu-selected');
+ submenuNode.setStyle({ top: menuTop + "px",
+ left: menuLeft + "px",
+ visibility: "visible" });
+ }
}
function checkDropDown(event) {
}
/* search field */
-function popupSearchMenu(event, menuId) {
- var node = event.target;
+function popupSearchMenu(event) {
+ var node = getTarget(event);
+
+ var menuId = this.getAttribute("menuid");
relX = event.pageX - node.cascadeLeftOffset();
relY = event.pageY - node.cascadeTopOffset();
hideMenu(event, document.currentPopupMenu);
var popup = document.getElementById(menuId);
- popup.style.top = node.offsetHeight + "px";
- popup.style.left = (node.offsetLeft + 3) + "px";
- popup.style.visibility = "visible";
+ popup.setStyle({ top: node.offsetHeight + "px",
+ left: (node.offsetLeft + 3) + "px",
+ visibility: "visible" });
- bodyOnClick = "" + document.body.getAttribute("onclick");
- document.body.setAttribute("onclick", "onBodyClick('" + menuId + "');");
document.currentPopupMenu = popup;
+ Event.observe(document.body, "click", onBodyClickMenuHandler);
}
}
function setSearchCriteria(event) {
searchValue = $("searchValue");
searchCriteria = $("searchCriteria");
-
- var node = event.target;
- searchValue.setAttribute("ghost-phrase", node.innerHTML);
- searchCriteria = node.getAttribute('id');
+
+ searchValue.setAttribute("ghost-phrase", this.innerHTML);
+// searchCriteria = this.getAttribute('id');
}
function checkSearchValue(event) {
log ("onSearchChange()...");
}
-function onSearchMouseDown(event, searchValue) {
- superNode = searchValue.parentNode.parentNode.parentNode;
- relX = (event.pageX - superNode.offsetLeft - searchValue.offsetLeft);
- relY = (event.pageY - superNode.offsetTop - searchValue.offsetTop);
+function onSearchMouseDown(event) {
+ var superNode = this.parentNode.parentNode.parentNode;
+ relX = (event.pageX - superNode.offsetLeft - this.offsetLeft);
+ relY = (event.pageY - superNode.offsetTop - this.offsetTop);
- if (relY < 24) {
- event.cancelBubble = true;
- event.returnValue = false;
- }
+ if (relY < 24) {
+ event.cancelBubble = true;
+ event.returnValue = false;
+ }
}
-function onSearchFocus(searchValue) {
- ghostPhrase = searchValue.getAttribute("ghost-phrase");
- if (searchValue.value == ghostPhrase) {
- searchValue.value = "";
- searchValue.setAttribute("modified", "");
+function onSearchFocus() {
+ ghostPhrase = this.getAttribute("ghost-phrase");
+ if (this.value == ghostPhrase) {
+ this.value = "";
+ this.setAttribute("modified", "");
} else {
- searchValue.select();
+ this.select();
}
- searchValue.style.color = "#000";
+ this.setStyle({ color: "#000" });
}
-function onSearchBlur(searchValue) {
- var ghostPhrase = searchValue.getAttribute("ghost-phrase");
-// log ("search blur: '" + searchValue.value + "'");
- if (!searchValue.value) {
- searchValue.setAttribute("modified", "");
- searchValue.style.color = "#aaa";
- searchValue.value = ghostPhrase;
- } else if (searchValue.value == ghostPhrase) {
- searchValue.setAttribute("modified", "");
- searchValue.style.color = "#aaa";
+function onSearchBlur(event) {
+ var ghostPhrase = this.getAttribute("ghost-phrase");
+// log ("search blur: '" + this.value + "'");
+ if (!this.value) {
+ this.setAttribute("modified", "");
+ this.setStyle({ color: "#aaa" });
+ this.value = ghostPhrase;
+ } else if (this.value == ghostPhrase) {
+ this.setAttribute("modified", "");
+ this.setStyle({ color: "#aaa" });
} else {
- searchValue.setAttribute("modified", "yes");
- searchValue.style.color = "#000";
+ this.setAttribute("modified", "yes");
+ this.setStyle({ color: "#000" });
}
}
-function onSearchKeyDown(searchValue) {
- if (searchValue.timer)
- clearTimeout(searchValue.timer);
+function onSearchKeyDown(event) {
+ if (this.timer)
+ clearTimeout(this.timer);
- searchValue.timer = setTimeout("onSearchFormSubmit()", 1000);
+ this.timer = setTimeout("onSearchFormSubmit()", 1000);
}
function initCriteria() {
var searchOptions = $("searchOptions");
if (searchOptions) {
- firstOption = searchOptions.childNodes[1];
+ var firstOption;
+ $A(searchOptions.childNodes).each(function (item) {
+ if (item.tagName == 'LI') {
+ firstOption = item;
+ }
+ });
searchCriteria.value = firstOption.getAttribute('id');
searchValue.setAttribute('ghost-phrase', firstOption.innerHTML);
if (searchValue.value == '') {
searchValue.value = firstOption.innerHTML;
searchValue.setAttribute("modified", "");
- searchValue.style.color = "#aaa";
+ searchValue.setStyle({ color: "#aaa" });
}
}
}
var popup = document.getElementById(menuId);
var top = node.offsetTop + node.offsetHeight - 2;
- popup.style.top = top + "px";
- popup.style.left = node.cascadeLeftOffset() + "px";
- popup.style.visibility = "visible";
-
- bodyOnClick = "" + document.body.getAttribute("onclick");
- document.body.setAttribute("onclick", "onBodyClick('" + menuId + "');");
+ popup.setStyle({ top: top + "px",
+ left: node.cascadeLeftOffset() + "px",
+ visibility: "visible" });
+
document.currentPopupMenu = popup;
+ Event.observe(document.body, "click", onBodyClickMenuHandler);
}
}
/* contact selector */
-function onContactAdd(node) {
- var selector = null;
- var selectorURL = '?popup=YES';
- if (node) {
- selector = node.parentNode.parentNode;
- selectorURL += ("&selectorId=" + selector.getAttribute("id"));
- }
-
- urlstr = ApplicationBaseURL;
- if (urlstr[urlstr.length-1] != '/')
- urlstr += '/';
- urlstr += ("../../" + UserLogin + "/Contacts/"
- + contactSelectorAction + selectorURL);
-// log (urlstr);
- var w = window.open(urlstr, "Addressbook",
- "width=640,height=400,resizable=1,scrollbars=0");
- w.selector = selector;
- w.opener = this;
- w.focus();
-
- return false;
+function folderSubscriptionCallback(http) {
+ if (http.readyState == 4) {
+ if (http.status == 204) {
+ if (http.callbackData)
+ http.callbackData["method"](http.callbackData["data"]);
+ }
+ else
+ window.alert(labels["Unable to subscribe to that folder!"].decodeEntities());
+ document.subscriptionAjaxRequest = null;
+ }
+ else
+ log ("ajax fuckage");
+}
+
+function subscribeToFolder(refreshCallback, refreshCallbackData) {
+ var folderData = refreshCallbackData["folder"].split(":");
+ var username = folderData[0];
+ var folderPath = folderData[1];
+ if (username != UserLogin) {
+ var url = (UserFolderURL + "../" + username
+ + folderPath + "/subscribe");
+ if (document.subscriptionAjaxRequest) {
+ document.subscriptionAjaxRequest.aborted = true;
+ document.subscriptionAjaxRequest.abort();
+ }
+ var rfCbData = { method: refreshCallback, data: refreshCallbackData };
+ document.subscriptionAjaxRequest = triggerAjaxRequest(url,
+ folderSubscriptionCallback,
+ rfCbData);
+ }
+ else
+ window.alert(labels["You cannot subscribe to a folder that you own!"]
+ .decodeEntities());
}
-function onContactRemove(node) {
- var selector = node.parentNode.parentNode;
- var selectorId = selector.getAttribute("id");
- var hasChanged = false;
-
- var names = $('uixselector-' + selectorId + '-display');
- var nodes = names.getSelectedNodes();
- hasChanged = (nodes.length > 0);
- for (var i = 0; i < nodes.length; i++) {
- var currentNode = nodes[i];
- currentNode.parentNode.removeChild(currentNode);
- }
-
- var uids = $('uixselector-' + selectorId + '-uidList');
- nodes = node.parentNode.childNodes;
- var ids = new Array();
- for (var i = 0; i < nodes.length; i++)
- if (nodes[i] instanceof HTMLLIElement)
- ids.push(nodes[i].getAttribute("uid"));
- uids.value = ids.join(",");
-
- if (selector.changeNotification && hasChanged)
- selector.changeNotification("removal");
+function folderUnsubscriptionCallback(http) {
+ if (http.readyState == 4) {
+ if (http.status == 204) {
+ if (http.callbackData)
+ http.callbackData["method"](http.callbackData["data"]);
+ }
+ else
+ window.alert(labels["Unable to unsubscribe from that folder!"].decodeEntities());
+ document.unsubscriptionAjaxRequest = null;
+ }
+}
- return false;
+function unsubscribeFromFolder(folder, refreshCallback, refreshCallbackData) {
+ if (document.body.hasClassName("popup")) {
+ window.opener.unsubscribeFromFolder(folder, refreshCallback,
+ refreshCallbackData);
+ }
+ else {
+ var folderData = folder.split(":");
+ var username = folderData[0];
+ var folderPath = folderData[1];
+ if (username != UserLogin) {
+ var url = (UserFolderURL + "../" + username
+ + "/" + folderPath + "/unsubscribe");
+ if (document.unsubscriptionAjaxRequest) {
+ document.unsubscriptionAjaxRequest.aborted = true;
+ document.unsubscriptionAjaxRequest.abort();
+ }
+ var rfCbData = { method: refreshCallback, data: refreshCallbackData };
+ document.unsubscriptionAjaxRequest
+ = triggerAjaxRequest(url, folderUnsubscriptionCallback,
+ rfCbData);
+ }
+ else
+ window.alert(labels["You cannot unsubscribe from a folder that you own!"].decodeEntities());
+ }
}
function listRowMouseDownHandler(event) {
- event.preventDefault();
+ preventDefault(event);
+ return false;
}
/* tabs */
var containers = document.getElementsByClassName("tabsContainer");
for (var x = 0; x < containers.length; x++) {
var container = containers[x];
- var nodes = container.childNodes[1].childNodes;
-
- var firstTab;
- for (var i = 0; i < nodes.length; i++) {
- if (nodes[i] instanceof HTMLLIElement) {
- if (!firstTab) {
- firstTab = nodes[i];
- }
- nodes[i].addEventListener("mousedown", onTabMouseDown, true);
- nodes[i].addEventListener("click", onTabClick, true);
+ var firstTab = null;
+ for (var i = 0; i < container.childNodes.length; i++) {
+ if (container.childNodes[i].tagName == 'UL') {
+ if (!firstTab)
+ firstTab = i;
}
}
+ var nodes = container.childNodes[firstTab].childNodes;
+
+ firstTab = null;
+ for (var i = 0; i < nodes.length; i++) {
+ var currentNode = nodes[i];
+ if (currentNode.tagName == 'LI') {
+ if (!firstTab)
+ firstTab = i;
+ Event.observe(currentNode, "mousedown",
+ onTabMouseDown.bindAsEventListener(currentNode));
+ Event.observe(currentNode, "click",
+ onTabClick.bindAsEventListener(currentNode));
+ }
+ }
- firstTab.addClassName("first");
- firstTab.addClassName("active");
- container.activeTab = firstTab;
+ nodes[firstTab].addClassName("first");
+ nodes[firstTab].addClassName("active");
+ container.activeTab = nodes[firstTab];
- var target = $(firstTab.getAttribute("target"));
+ var target = $(nodes[firstTab].getAttribute("target"));
target.addClassName("active");
}
}
-function initMenusNamed(menuDivNames) {
- for (var i = 0; i < menuDivNames.length; i++) {
- var menuDIV = $(menuDivNames[i]);
- if (menuDIV)
- initMenu(menuDIV);
- else
- log("menu named '" + menuDivNames[i] + "' not found");
- }
+function initMenus() {
+ var menus = getMenus();
+ if (menus) {
+ for (var menuID in menus) {
+ var menuDIV = $(menuID);
+ if (menuDIV)
+ initMenu(menuDIV, menus[menuID]);
+ }
+ }
}
-function initMenu(menuDIV) {
- var lis = menuDIV.childNodesWithTag("ul")[0].childNodesWithTag("li");
- for (var j = 0; j < lis.length; j++)
- lis[j].addEventListener("mousedown", listRowMouseDownHandler, false);
- var subMenus = menuDIV.childNodesWithTag("div");
- for (var i = 0; i < subMenus.length; i++)
- initMenu(subMenus[i]);
+function initMenu(menuDIV, callbacks) {
+ var lis = $(menuDIV.childNodesWithTag("ul")[0]).childNodesWithTag("li");
+ for (var j = 0; j < lis.length; j++) {
+ var node = lis[j];
+ Event.observe(node, "mousedown", listRowMouseDownHandler, false);
+ var callback = callbacks[j];
+ if (callback) {
+ if (typeof(callback) == "string") {
+ if (callback == "-")
+ node.addClassName("separator");
+ else {
+ node.submenu = callback;
+ node.addClassName("submenu");
+ Event.observe(node, "mouseover", dropDownSubmenu);
+ }
+ }
+ else
+ Event.observe(node, "mouseup",
+ $(callback).bindAsEventListener(node));
+ }
+ else
+ node.addClassName("disabled");
+ }
}
function onTabMouseDown(event) {
event.cancelBubble = true;
- event.preventDefault();
+ preventDefault(event);
}
function openExternalLink(anchor) {
return false;
}
-function openAclWindow(url, objectTitle) {
+function openAclWindow(url) {
var w = window.open(url, "aclWindow",
- "width=300,height=300,resizable=1,scrollbars=1,toolbar=0,"
+ "width=420,height=300,resizable=1,scrollbars=1,toolbar=0,"
+ "location=0,directories=0,status=0,menubar=0"
+ ",copyhistory=0");
+ w.opener = window;
w.focus();
- w.title = "Poil: " + objectTitle;
return w;
}
+function getUsersRightsWindowHeight() {
+ return usersRightsWindowHeight;
+}
+
+function getUsersRightsWindowWidth() {
+ return usersRightsWindowWidth;
+}
+
+function getTopWindow() {
+ var topWindow = null;
+ var currentWindow = window;
+ while (!topWindow) {
+ if (currentWindow.document.body.hasClassName("popup")
+ && currentWindow.opener)
+ currentWindow = currentWindow.opener;
+ else
+ topWindow = currentWindow;
+ }
+
+ return topWindow;
+}
+
function onTabClick(event) {
- var node = event.target;
+ var node = getTarget(event);
var target = node.getAttribute("target");
var currentValue = number;
var index = 0;
- while (currentValue)
- {
- if (currentValue & 1)
+ while (currentValue) {
+ if (currentValue & 1)
colorTable[index]++;
- if (index == 3)
- index = 0;
- currentValue >>= 1;
- index++;
- }
+ if (index == 3)
+ index = 0;
+ currentValue >>= 1;
+ index++;
+ }
color = ("#"
+ d2h((256 / colorTable[2]) - 1)
return color;
}
-var onLoadHandler = {
- handleEvent: function (event) {
+function onLoadHandler(event) {
queryParameters = parseQueryParameters('' + window.location);
- if (!document.body.hasClassName("popup")) {
- initLogConsole();
- initializeMenus();
- initCriteria();
+ if (!$(document.body).hasClassName("popup")) {
+ initLogConsole();
+ initCriteria();
}
+ initMenus();
initTabs();
configureDragHandles();
configureSortableTableHeaders();
configureLinkBanner();
var progressImage = $("progressIndicator");
if (progressImage)
- progressImage.parentNode.removeChild(progressImage);
- }
+ progressImage.parentNode.removeChild(progressImage);
+ Event.observe(document.body, "contextmenu", onBodyClickContextMenu);
+}
+
+function onBodyClickContextMenu(event) {
+ preventDefault(event);
}
function configureSortableTableHeaders() {
var headers = document.getElementsByClassName("sortableTableHeader");
for (var i = 0; i < headers.length; i++) {
- var anchor = headers[i].childNodesWithTag("a")[0];
+ var anchor = $(headers[i]).childNodesWithTag("a")[0];
if (!anchor.link) {
anchor.link = anchor.getAttribute("href");
anchor.href = "#";
- anchor.addEventListener("click", onHeaderClick, true);
+ Event.observe(anchor, "click", onHeaderClick.bindAsEventListener(anchor), true);
}
}
}
if (linkBanner) {
var anchors = linkBanner.childNodesWithTag("a");
for (var i = 0; i < 2; i++) {
- anchors[i].addEventListener("mousedown", listRowMouseDownHandler,
- false);
- anchors[i].addEventListener("click", onLinkBannerClick, false);
+ Event.observe(anchors[i], "mousedown", listRowMouseDownHandler);
+ Event.observe(anchors[i], "click", onLinkBannerClick);
}
if (anchors.length > 3)
- anchors[3].addEventListener("click", toggleLogConsole, true);
+ Event.observe(anchors[3], "click", toggleLogConsole);
}
}
-window.addEventListener("load", onLoadHandler, false);
+addEvent(window, 'load', onLoadHandler);
/* stubs */
function configureDragHandles() {
}
-function initializeMenus() {
+function getMenus() {
}
function onHeaderClick(event) {
- window.alert("generic headerClick");
+ window.alert("generic headerClick");
}
function parent$(element) {
- return window.opener.document.getElementById(element);
+ return this.opener.document.getElementById(element);
}