// Licensed Materials - Property of IBM
//
// IBM Cognos Products: cpscrn
//
// (C) Copyright IBM Corp. 2005, 2011
//
// US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
//
//
// Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
// Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Toolbar Button hilites
function caption(fragmentID, layoutID) {
this.fragmentID = fragmentID;
this.captionID = fragmentID + "caption";
this.layoutID = layoutID;
this.containerTag = null;
this.nextTag = null;
this.windowState = fragments[this.fragmentID].windowState;
this.currentViewWindowState = null;
var frag = fragments[this.fragmentID];
frag.addEventListener("fragment.title.change", _F_Document.associate(null, this, "processEvent"), false);
frag.addEventListener("fragment.windowstate.change", _F_Document.associate(null, this, "processEvent"), false);
frag.addEventListener("fragment.mode.change", _F_Document.associate(null, this, "processEvent"), false);
if (xIE4Up) {
var handler = _F_Document.associate(null, this, "fixIEScrollBar");
frag.addEventListener("fragment.load", handler, true);
frag.addEventListener("fragment.visibility.change", handler, true);
_F_Document.addEventListener(window, "resize", handler, true);
}
if ($(this.captionID + "_refresh")) {
frag.addEventListener("fragment.retrieve.before", _F_Document.associate(null, this, "processBusyIndicator"), false);
frag.addEventListener("fragment.retrieve.after", _F_Document.associate(null, this, "processBusyIndicator"), false);
}
var listenerList = ["help","refresh","reset","edit","view","minimize","restore","maximize"];
for (var i=0; i < listenerList.length; i++) {
var listener = listenerList[i];
var elem = $(this.captionID + "_" + listener);
if (elem) {
xAddEventListener(elem, "click", _F_Document.associate(listener, this, "doclick"));
xAddEventListener(elem, "keypress", _F_Document.associate(listener, this, "dokeypress"));
}
}
}
caption.prototype = {
action: function (action) {
var frag = fragments[this.fragmentID];
if (frag) {
switch (action) {
case "refresh":
/*
* raise a fragment.refresh event
*/
frag.raiseEvent("fragment.refresh", "", "", false, true);
break;
case "edit":
this.currentViewWindowState = frag.windowState;
frag.setMode("edit");
break;
case "view":
frag.setMode("view");
break;
case "help":
ui_fragment_help(frag);
break;
case "reset":
if (!window.confirm(PFM.JS.IDS_JS_PROMPT_REVERT)) {
return;
}
frag.raiseEvent("fragment.reset", null, "", false, false);
frag.setMode("view", "internal");
frag.performAction("frag-action=reset");
break;
case "restore":
this.mouseOut($(this.captionID + "_" + action));
frag.setWindowState("normal");
break;
case "minimize":
this.mouseOut($(this.captionID + "_" + action));
frag.setWindowState("minimized");
break;
case "maximize":
this.mouseOut($(this.captionID + "_" + action));
frag.setWindowState("maximized");
break;
}
} else {
window.alert("DEBUG: unknown fragment id: '"+this.fragmentID+"'");
}
},
mouseOver: function (e) {
e.className = "cogstyle-portlet-action-hover";
},
mouseOut: function (e) {
e.className = "cogstyle-portlet-action";
},
doclick: function (e, tag) {
this.action(tag);
},
dokeypress: function (e, tag) {
if (e.keyCode==9) {return true;}
this.action(tag);
},
showHideButtons: function (show, hide) {
var hideTag = $(this.captionID + "_" + hide);
var showTag = $(this.captionID + "_" + show);
if (hideTag != null) {
hideTag.style.display = "none";
}
if (showTag != null) {
showTag.style.display = "";
}
},
changeWindowState: function (newWinState) {
var frag = fragments[this.fragmentID];
switch (this.windowState) {
case "normal":
default:
switch (newWinState) {
case "minimized":
this.showHideButtons("restore", "minimize");
$(frag.div).style.display = "none";
this.windowState = newWinState;
break;
case "maximized":
this.maximize(true);
this.showHideButtons("restore", "maximize");
this.windowState = newWinState;
break;
}
break;
case "minimized":
switch (newWinState) {
case "normal":
this.showHideButtons("minimize", "restore");
$(frag.div).style.display = "block";
this.windowState = newWinState;
break;
case "maximized":
$(frag.div).style.display = "block";
this.maximize(true);
this.showHideButtons("minimize", "maximize");
this.windowState = newWinState;
break;
}
break;
case "maximized":
switch (newWinState) {
case "minimized":
this.maximize(false);
$(frag.div).style.display = "none";
this.showHideButtons("maximize", "minimize");
this.windowState = newWinState;
break;
case "normal":
this.maximize(false);
this.showHideButtons("maximize", "restore");
this.windowState = newWinState;
break;
}
break;
}
},
changeMode: function (newMode) {
switch (newMode) {
case "edit":
fragments[this.fragmentID].setWindowState("normal","internal");
this.changeWindowState("maximized");
this.showHideButtons("view", "edit");
this.showHideButtons("reset", null);
this.showHideButtons(null, "maximize");
this.showHideButtons(null, "minimize");
this.showHideButtons(null, "restore");
break;
case "view":
fragments[this.fragmentID].setWindowState("normal","internal");
this.changeWindowState("normal");
this.showHideButtons("edit", "view");
this.showHideButtons(null, "reset");
this.showHideButtons(null, "restore");
this.showHideButtons("maximize", null);
this.showHideButtons("minimize", null);
break;
}
},
maximize: function (maximized) {
var frag = fragments[this.fragmentID];
var divNorm = $(this.layoutID + "normal");
var divMax = $(this.layoutID + "maximized");
var markup = $(frag.id + "frame");
var banner = $( (frag.getPageFragment() ? frag.getPageFragment().id : "") + "bannerframe");
if (maximized) {
divMax.style.display = "block";
if (banner != null) {
this.bannerContainerTag = banner.parentNode;
this.bannerNextTag = banner.nextSibling;
divMax.appendChild(banner);
}
this.containerTag = markup.parentNode;
this.nextTag = markup.nextSibling;
divMax.appendChild(markup);
_F_resetIFrames(markup);
//divNorm.style.display = "none"; // We use the line below to fix 584962
setTimeout("$("+this.layoutID+"normal).style.display = \"none\";",0);
this.fixIEScrollBar();
} else {
divNorm.style.display = "block";
if (banner != null) {
this.bannerContainerTag.insertBefore(banner, this.bannerNextTag);
}
this.containerTag.insertBefore(markup, this.nextTag);
_F_resetIFrames(markup);
this.containerTag = null;
this.nextTag = null;
divMax.style.display = "none";
this.fixIEScrollBar();
}
},
updateTitle: function (title) {
var capTag = $(this.captionID);
// make sure that a blank title is always displayed
if (capTag != null) {
var frag = fragments[this.fragmentID];
if (frag.mode == "edit") {
capTag.innerHTML = _F_Strings.htmlEncode(PFM.formatString(PFM.JS.IDS_JS_LAYOUT_EDITMODE_TITLE, "title", frag.info.title)||"") + "
";
} else {
capTag.innerHTML = _F_Strings.htmlEncode(title||"") + "
";
}
}
},
processEvent: function (evt) {
if (evt.source.id == this.fragmentID) {
evt.stopPropagation();
switch(evt.name) {
case "fragment.windowstate.change":
this.changeWindowState(evt.payload.newWindowState);
break;
case "fragment.mode.change":
this.changeMode(evt.payload.newMode);
break;
case "fragment.title.change":
this.updateTitle(evt.payload.newTitle);
break;
}
}
},
showBusyIndicator: function (bShow) {
var refreshTD = $(this.captionID + "_refresh");
if (refreshTD) {
var img = refreshTD.getElementsByTagName('IMG').item(0);
if (img) {
if (bShow) {
img.src = _F_Config.webContent + "/fragments/portlet/images/portlet_action_refresh_ani.gif";
} else {
img.src = _F_Config.webContent + "/fragments/portlet/images/portlet_action_refresh.gif";
}
}
}
},
processBusyIndicator: function (evt) {
switch(evt.name) {
case "fragment.retrieve.before":
this.showBusyIndicator(true);
break;
case "fragment.retrieve.after":
this.showBusyIndicator(false);
break;
}
},
fixIEScrollBar: function () {
var fragment = fragments[this.fragmentID];
if (xIE4Up && fragment.parent && fragment.parent.page) {
var container = $(fragment.div);
if (container && container.style.display != "none") {
// IE shows the horizontal scrollbar inside the content area, this will cause a vertical scrollbar to showup.
// To remove, we increase the bottom padding.
var fixScrollbar = function () {
if (container.scrollHeight > container.clientHeight ) {
if (!container.ieScrollFix) {
container.style.paddingBottom = "20px";
container.ieScrollFix = true;
}
} else if (container.ieScrollFix) {
container.style.paddingBottom = "";
container.ieScrollFix = false;
}
};
window.setTimeout(fixScrollbar, 1);
}
}
}
};
function _F_resetIFrames(markup) {
var iframes = markup.getElementsByTagName("iframe");
if (iframes) {
for (i=0; i < iframes.length; i++) {
iframes[i].setAttribute("src", iframes[i].getAttribute("src"));
}
}
}