// Licensed Materials - Property of IBM // // IBM Cognos Products: pps // // (C) Copyright IBM Corp. 2005, 2017 // // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. // This forms the javascript functions used for the Add/Edit pane of the // Custom Exceptions feature of PowerPlay Studio. // The functions handle any minor browser differences. var isNSBrowser = navigator.appName.indexOf("Netscape")>=0; if( navigator.appVersion == "" ) isNSBrowser = false; var isNSMac = isNSBrowser && navigator.platform.indexOf("Mac") >= 0; var isIE = false; // Microsoft Internet Explorer var isNS4 = false; // Netscape 4+ var isW3C = false; // W3C compliant (inc NS6) var isUnknown = true; // in case something else comes along if (document.getElementById) { isW3C = true ; // NS6, MSIE 5, 6 and Opera 6.01 in Opera mode isUnknown = false; } if (document.all) { isIE = true ; // MSIE (all versions) and Opera 6.01 in MSIE 5 mode isUnknown = false; } if (document.layers) { isNS4 = true ; // NS 4 isUnknown = false; } var isGecko = isNSBrowser && isW3C; function InputKeypress(event) { if ("13" == event.keyCode) { if (isNSBrowser) event.stopPropagation(); return false; } } function findObj(n, d) { if (!isGecko) { var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i0 && parent.frames.length) { d=parent.frames[n.substring(p+1)].contentDocument; n=n.substring(0,p); } x = document.getElementById(n); if(!x&&d.childNodes) x=d.getElementById(n); for (i=0;!x&&i 0) { var hexC = hexChars[num % 16]; result = hexC + result; num = (num - (num % 16)) /16; } if (result.length != 6) { for (var i=result.length; i < 6; i++) result = "0" + result; } return result; } function rgbToHex(num) { var r = parseInt(num.substring(4)); var remains = num.substring(num.indexOf(",") + 1); var g = parseInt(remains); remains = remains.substring(remains.indexOf(",") + 1); var b = parseInt(remains); var dec = 65536 * r + 256 * g + b; return toHex(dec); } function setMinField() { var obj = findObj(minField); if (obj) obj.value = localizedStrMinimum; } function setMaxField() { var obj = findObj(maxField); if (obj) obj.value = localizedStrMaximum; } function setCellColor(newColor) { var obj = findObj(colorField); if (obj) { if (isNSBrowser && !isGecko) { obj.bgColor = newColor; showHideLayers('Layer' + colorField.substr(0, colorField.length-1), '', 'hide'); } else { obj.style.backgroundColor = newColor; showHideLayers('Layer' + colorField, '', 'hide'); } } } function showLayerAt (e, name) { var obj=findObj(name); var detailLayer = findObj("Details"); if (name == 'LayerBGColor' || name == 'LayerFGColor') { showHideLayers('LayerBGColor', '', 'hide'); showHideLayers('LayerFGColor', '', 'hide'); } else { showHideLayers(name, '', 'hide'); } if (obj) { if (name == 'LayerBGColor' || name == 'LayerFGColor') { obj.left = detailLayer.left + e.layerX - 45; obj.clip.width = 65; obj.clip.height = 65; } else if (name == 'LayerMin') { obj.left = detailLayer.left + e.layerX - (localizedStrMinimum.length * 9); obj.clip.width = localizedStrMinimum.length * 9; obj.clip.height = 15; } else { obj.left = detailLayer.left + e.layerX - (localizedStrMaximum.length * 9); obj.clip.width = localizedStrMaximum.length * 9; obj.clip.height = 15; } obj.top = detailLayer.top + e.layerY + 10; } showHideLayers(name, '', 'show'); } function showLayer (name) { var obj=findObj(name); if (isW3C) { obj.style.overflow = "auto"; obj.style.width = obj.scrollWidth; obj.style.overflow = "visible"; } if (obj) { hideAllLayers(); showHideLayers(name, '', 'show'); } } function showHideLayers() { var i,p,v,obj,args=showHideLayers.arguments; if (isNSBrowser && !isGecko) { for (i=0; i<(args.length-2); i+=3) { if ((obj=document.layers[args[i]])!=null) { v=args[i+2]; if ( v == "show" ) obj.visibility = "visible"; if ( v == "hide" ) obj.visibility = "hidden"; } } } else { for (i=0; i<(args.length-2); i+=3) if ((obj=findObj(args[i]))!=null) { v=args[i+2]; if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; } obj.visibility=v; } } } function numberChange(control) { var v = control.value; var name = control.name; var strMin = localizedStrMinimum.toLowerCase(); var strMax = localizedStrMaximum.toLowerCase(); name = name.substr(0, name.length-1); if ( (v.toLowerCase() == strMin && name.toLowerCase() == "from") || (v.toLowerCase() == strMax && name.toLowerCase() == "to") ) { return; } var w = ""; var negative = false; var len = v.length; for ( var i = 0; i < len; i++ ) { if ( ( i==0||i==(len-1) ) && v.charAt(i)=="-" ) { negative = true; } else { if ( v.charAt(i) != thousandsep ) w = w + v.charAt(i); } } v = w; var reptchr = "/[^0-9" + decimalpt + "]/"; var pos = v.search(eval(reptchr)); if (pos != -1) v = v.substring(0,pos); if ( negative ) control.value = "-" + v; else control.value = v; } function buildException() { var def = findObj("Exception_Name").value; var strMin = localizedStrMinimum.toLowerCase(); var strMax = localizedStrMaximum.toLowerCase(); //Error: no exception name if (def.length <= 0) { writeErrorMessage(noNameErr); return (-1); } def += '\t'; var ranges = ""; var validChars = "/[^0-9" + decimalpt + "\-]/"; var pos; for ( var i=1 ; i < 6 ; i++ ) { var from = findObj("From" + i).value; var to = findObj("To" + i).value; var decimalPtPattern = new RegExp('\\' + decimalpt); if (from != "" && to != "") { if (from.toLowerCase() != strMin) { pos = from.search(eval(validChars)); if (pos != -1) { writeErrorMessage(invalidRangeValueErr); return (-1); } from = from.replace(decimalPtPattern, "."); ranges += from; } ranges += _rseparator; if (to.toLowerCase() != strMax) { pos = to.search(eval(validChars)); if (pos != -1) { writeErrorMessage(invalidRangeValueErr); return (-1); } to = to.replace(decimalPtPattern, "."); ranges += to; } ranges += _rseparator; if (parseFloat(from) > parseFloat(to)) { writeErrorMessage(invalidRangeErr); return (-1); } var font = findObj("FGColor" + i); var cell = findObj("BGColor" + i); var strFont; var strCell; if (isNSBrowser && !isGecko) { var strFont = font.bgColor.toString(); var strCell = cell.bgColor.toString(); if (strFont.charAt(0) == '#') strFont = strFont.substr(1); strFont = toHex(strFont); if (strCell.charAt(0) == '#') strCell = strCell.substr(1); strCell = toHex(strCell); } else { var strFont = font.style.backgroundColor; var strCell = cell.style.backgroundColor; if (strFont.charAt(0) == '#') strFont = strFont.substr(1); if (strCell.charAt(0) == '#') strCell = strCell.substr(1); if (isGecko) { strFont = rgbToHex(strFont); strCell = rgbToHex(strCell); } } strFont = strFont.toUpperCase(); ranges += strFont; ranges += _rseparator; strCell = strCell.toUpperCase(); ranges += strCell; ranges += ';'; } else if (from != "" || to != "") { writeErrorMessage(missingRangeValueErr); return (-1); } } //Error: no valid ranges if (ranges.length <= 0) { writeErrorMessage(noValidRangeErr); return (-1); } //trim off trailing ';' ranges = ranges.substr(0, ranges.length-1); def += ranges; return (def); } function isDuplicateName (name, otherEx) { //nothing to check! if (otherEx.length <= 0) { return false; } var tabPos = otherEx.indexOf('\t\t', 0); if (tabPos > 0) { otherEx = otherEx.substr(0, tabPos); } while (otherEx.charAt(0) == '\t') { otherEx = otherEx.substr(1); } var fwdPtr = 0; var backPtr = -1; while (fwdPtr >= 0) { fwdPtr = otherEx.indexOf('\t', backPtr+1); if (name.toLowerCase() == otherEx.substr(backPtr+1, fwdPtr-(backPtr+1)).toLowerCase()) { return true; //duplicate...return TRUE } fwdPtr = otherEx.indexOf('\t', fwdPtr+1); backPtr = fwdPtr; } //unique name...return FALSE return false; } function getStartPosition() { var selectedVal = parent.getSelException()-1; if (selectedVal < 0) { return -1; } var customX = findObj("EX1", winFX.document).value; var count = 0; for (var i = 0; i < selectedVal*2; i++) { count = customX.indexOf('\t', count+1) ; } if (customX.charAt(count) == '\t') { return count+1; } else { return count; } } function getEndPosition(startCount) { var customX = findObj("EX1", winFX.document).value; var endCount = customX.indexOf('\t', startCount); endCount = customX.indexOf('\t', endCount+1); if (endCount < 0) return customX.length; return endCount; } function saveDefinition() { if (parent.isXtabStillLoading()) { setTimeout("saveDefinition()", 50); return; } var beforeX, afterX, currentX; var customX = findObj("EX1", winFX.document).value; var end; var start = getStartPosition(); if (start < 0 || findObj("AddOrEdit").value == 'A') { //must be a new one!! look for '\t\t'... var tabPos = customX.indexOf('\t\t', 0); if (tabPos < 0) { if (customX.length > 0) { beforeX = customX + '\t'; } else { beforeX = "" } end = -1; } else { beforeX = customX.substr(0, tabPos) + '\t'; end = tabPos; } } else { beforeX = customX.substr(0, start); end = getEndPosition(start) ; } if (end < 0) { afterX = ""; } else { afterX = customX.substr(end); } currentX = buildException(); if (currentX == -1) { return; } //now, finally, check for duplicate names var tempBeforeX = beforeX; if (beforeX.charAt(beforeX.length-1) == '\t') { tempBeforeX = beforeX.substr(0, beforeX.length-1); } otherEx = tempBeforeX + afterX; if ( isDuplicateName(currentX.substr(0, currentX.indexOf('\t', 0)), otherEx) ) { writeErrorMessage(duplicateNameErr); return; } findObj("EX1", winFX.document).value = beforeX + currentX + afterX; var command = findObj("AddOrEdit").value; if (command == 'A') selectedException = -1; else if (command == 'E' && selectedException == 0) selectedException = -1; winFX.doit('X' + command + ':' + selectedException); } function isEmpty(str) { for (var i = 0;i < str.length;i++) if ((str[i] != ' ') && (str[i] != '\n') && (str[i] != '\t')) return false; return true; } function loadDefinition() { if ( parent.isXtabStillLoading() ) { setTimeout("loadDefinition()", 50); return; } parent.setSelException(selectedException); var currentX = findObj("EX1", winFX.document).value; var command = findObj("AddOrEdit").value; var start = getStartPosition(); if (start < 0 || currentX.length == 0 || command == 'A') { return; } var err = findObj("ErrorMessage"); if ((isNSBrowser && !isGecko && err.document.length > 0) || (!isNSBrowser && err.innerHTML.length > 0) || (isGecko && !isEmpty(err.innerHTML))) { return; } var end = getEndPosition(start); if (end < 0) { currentX = currentX.substr(start); } else { currentX = currentX.substr(start, end-start); } //ok...we've got the exception specification...now, just populate the fields! count = currentX.indexOf('\t'); var name = currentX.substr(0, count); findObj("Exception_Name").value = name; currentX = currentX.substr(++count); var marker=0; var rangeCount=1; while ( (marker = currentX.indexOf(";", marker+1)) > 0 ) { ++rangeCount; } count=0; var decimalPtPattern = "\."; var i; for ( i = 1; i <= rangeCount; i++) { var minValue, maxValue, fgColorVal, bgColorVal; var minObj = findObj("From" + i); var maxObj = findObj("To" + i); var fontObj = findObj("FGColor" + i); var cellObj = findObj("BGColor" + i); //Lower bound minValue = localizedStrMinimum; if (currentX.charAt(0) == _rseparator) { currentX = currentX.substr(1); } else { count = currentX.indexOf(_rseparator); minValue = currentX.substr(0, count); minValue = minValue.replace(decimalPtPattern, decimalpt); currentX = currentX.substr(++count); } //Upper bound maxValue = localizedStrMaximum; if (currentX.charAt(0) == _rseparator) { currentX = currentX.substr(1); } else { count = currentX.indexOf(_rseparator); maxValue = currentX.substr(0, count); maxValue = maxValue.replace(decimalPtPattern, decimalpt); currentX = currentX.substr(++count); } //Font color fgColorVal = "000000"; if (currentX.charAt(0) == _rseparator) { currentX = currentX.substr(1); } else { count = currentX.indexOf(_rseparator); fgColorVal = currentX.substr(0, count); currentX = currentX.substr(++count); } //BG cell color bgColorVal = "FFFFFF"; if (currentX.charAt(0) == _rseparator) { currentX = currentX.substr(1); } else { count = currentX.indexOf(_rseparator); if (count > 0) { count = currentX.indexOf(';'); bgColorVal = currentX.substr(0, count); } else { bgColorVal = currentX; } currentX = currentX.substr(++count); } if (currentX.charAt(0) == ';') { currentX = currentX.substr(1); } count=0; minObj.value = minValue; maxObj.value = maxValue; if (isNSBrowser && !isGecko) { fontObj.bgColor = fgColorVal; cellObj.bgColor = bgColorVal; } else { fontObj.style.backgroundColor = fgColorVal; cellObj.style.backgroundColor = bgColorVal; } } // clear remainder for ( ; i < 6; i++) { findObj("From" + i).value = ""; findObj("To" + i).value = ""; var fontObj = findObj("FGColor" + i); var cellObj = findObj("BGColor" + i); if (isNSBrowser && !isGecko) { //now, clear whatever's left! fontObj.bgColor = "FFFFFF"; cellObj.bgColor = "000000"; } else { fontObj.style.backgroundColor = "000000"; cellObj.style.backgroundColor = "FFFFFF"; } } } function hideAllLayers() { for (var i = 1; i < 6; i++) { showHideLayers('LayerMin' + i,'','hide'); showHideLayers('LayerMax' + i,'','hide'); showHideLayers('LayerFGColor' + i,'','hide'); showHideLayers('LayerBGColor' + i,'','hide'); } } function writeErrorMessage (msg) { var err = findObj("ErrorMessage"); if (err) { if (document.getElementById) { //IE 5.5+ , Netscape 6.0+ err.innerHTML = '
' + msg + '


'; hideAllLayers(); } else if (isNSBrowser) { // Other Netscape browsers err.visibility = "visible"; err.moveTo(10, document.layers["Details"].top + document.layers["Details"].clip.bottom); err.resizeTo(parent.FE.innerWidth - 25, 50); err.document.open(); err.document.write('
' + msg + '
'); err.document.close(); } else alert (msg); } } function doCancel() { var command = findObj("AddOrEdit").value; if (command == 'A') winFX.doit('XA:' + parent.getSelException()); else winFX.doit('XE:' + parent.getSelException()); } function computeClip (layer) { layer.left = 10; layer.clip.left = 0; layer.clip.top = 0; if (isNSMac) { for (var i = 1; i < 6; i++) { var fontObj = findObj("FGColor" + i); fontObj.moveBy(5, - 2 - (4*(i-1))); var cellObj = findObj("BGColor" + i); cellObj.moveBy(0, - 2 - (4*(i-1))); } layer.clip.right = parent.FE.innerWidth - (0.1 * parent.FE.innerWidth); layer.clip.bottom = 250; } else { layer.clip.right = parent.FE.innerWidth - 25; layer.clip.bottom = 300; } }