/**************************************************************** ** Licensed Materials - Property of IBM ** ** IBM Cognos Products: mdsrv ** ** (C) Copyright IBM Corp. 2008, 2015 ** ** 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). // // Component: Utility - helper objects and functions //*********************************************************************************************** if ( ! UTIL ) var UTIL = {}; UTIL.bDebugMode = false; // The Key codes being passed down in the onkeydown event UTIL.KEYCODE_TAB = 9; UTIL.KEYCODE_ENTER = 13; UTIL.KEYCODE_ARROW_LEFT = 37; UTIL.KEYCODE_ARROW_RIGHT = 39; UTIL.KEYCODE_ARROW_UP = 38; UTIL.KEYCODE_ARROW_DOWN = 40; //======================================================================== // Augment Javascript basic types //------------------------------------------------------------------------ //------------------------------------------------------------------------ // Inheritance support //------------------------------------------------------------------------ Function.prototype.method = function ( name, func ) { if ( ! this.prototype[name] ) { this.prototype[name] = func; } return this; }; Function.method( 'inherits', function ( Parent ) { this.prototype = new Parent(); return this; }); //------------------------------------------------------------------------ // String support //------------------------------------------------------------------------ String.method( 'trim', function() { return this.replace(/^\s+|\s+$/g, ''); }); //======================================================================== //------------------------------------------------------------------------ function GetScreenResolution() { var size = new CSize(); var size = { width: screen.width , height: screen.height }; return size; } function getPropertyName( object, propValue ) { var propName = ""; for ( var i in object ) { if ( object[ i ] === propValue ) { propName = i; break; } } return propName; } //---------------------------------------------------------- // addMethod - Method Overloading // Examples: /*---------------------------------------------------------- function Users() { addMethod(this, "find", function(name) { // Find a user by name }); addMethod(this, "find", function(first, last) { // Find a user by first and last name }); } Or, if you wanted to use it with an object prototype: function Users(){} addMethod(Users.prototype, "find", function(name) { // Find a user by name }); addMethod(Users.prototype, "find", function(first, last) { // Find a user by first and last name }); -----------------------------------------------------------*/ function addMethod(object, name, fn) { var old = object[ name ]; object[ name ] = function() { if ( fn.length === arguments.length ) return fn.apply( this, arguments ); else if ( typeof old === 'function' ) return old.apply( this, arguments ); }; } //------------------------------------------------------------------------ function CElementStyleHelper ( elem ) { this.setElem ( elem ); return this; } CElementStyleHelper.prototype.getElem = function () { return this.m_elem; } CElementStyleHelper.prototype.setElem = function ( elem ) { ASSERT ( elem, "CElementStyleHelper: elem is NOT valid !!!" ); if ( typeof elem === "string" ) { this.m_elemId = elem; this.m_elem = document.getElementById( this.m_elemId ); } else { this.m_elemId = elem.id; this.m_elem = elem; } ASSERT ( this.m_elem, "CElementStyleHelper: element " + this.m_elemId + " is NOT found !!!" ); return this; } CElementStyleHelper.prototype.show = function ( bShow ) { // One way - via the visibility property (does NOT seem to affect children's state !!!) // this.m_elem.style.visibility = bShow ? "visible" : "hidden"; // Alternative way - via display property this.m_elem.style.display = bShow ? "block" : "none"; } CElementStyleHelper.prototype.isShown = function () { var bHidden = typeof this.m_elem.style.display !== "undefined" && this.m_elem.style.display === "none"; return ! bHidden; } CElementStyleHelper.prototype.setZIndex = function ( zOrder ) { this.m_elem.style.zIndex = zOrder; } CElementStyleHelper.prototype.setTextDecoration = function ( sDecoration ) { this.m_elem.style.textDecoration = sDecoration; } CElementStyleHelper.prototype.setText = function ( sText ) { this.m_elem.innerHTML = sText; } CElementStyleHelper.prototype.setTextBold = function () { var sText = this.m_elem.innerHTML; this.m_elem.innerHTML = "" + sText + ""; } CElementStyleHelper.prototype.setFontWeight = function ( sFontWeight ) { this.m_elem.style.fontWeight = sFontWeight; } CElementStyleHelper.prototype.setFontStyle = function ( sFontStyle ) { this.m_elem.style.fontStyle = sFontStyle; } CElementStyleHelper.prototype.setFontSize = function ( sFontSize ) { this.m_elem.style.fontSize = sFontSize; } CElementStyleHelper.prototype.setColors = function ( color, bkColor ) { if ( color ) this.m_elem.style.color = color; if ( bkColor ) this.m_elem.style.backgroundColor = bkColor; } CElementStyleHelper.prototype.getCursor = function () { return this.m_elem.style.cursor; } CElementStyleHelper.prototype.setCursor = function ( sCursor ) { this.m_elem.style.cursor = sCursor; } CElementStyleHelper.prototype.setOpacity = function ( elemOpacity ) { this.m_elem.style.opacity = elemOpacity; // if ( this.m_elem.style.filter ) // this.m_elem.style.filter = 'alpha(opacity=' elemOpacity + ')'; } CElementStyleHelper.prototype.move = function ( left, top ) { if ( left !== -1 ) this.m_elem.style.left = left; if ( top !== -1 ) this.m_elem.style.top = top; } CElementStyleHelper.prototype.moveToPos = function ( pos ) { this.m_elem.style.left = pos.x; this.m_elem.style.top = pos.y; } CElementStyleHelper.prototype.resize = function ( width, height ) { if ( width !== -1 ) this.m_elem.style.width = width; if ( height !== -1 ) this.m_elem.style.height = height; } CElementStyleHelper.prototype.setBorderStyle= function ( sStyle ) { this.m_elem.style.borderStyle = sStyle; } CElementStyleHelper.prototype.addEvent = function ( evType, callback, useCapture ) { addEvent ( this.m_elem, evType, callback, useCapture ); } CElementStyleHelper.prototype.removeEvent = function ( evType, callback, useCapture ) { removeEvent ( this.m_elem, evType, callback, useCapture ); } CElementStyleHelper.prototype.setClass = function ( sNewClass ) { this.m_elem.className = sNewClass; } CElementStyleHelper.prototype.addClass = function ( sNewClass ) { if ( ! this.m_elem.className ) { this.m_elem.className = sNewClass; } else { newClassName = this.m_elem.className; newClassName += " "; newClassName += sNewClass; this.m_elem.className = newClassName; } } CElementStyleHelper.prototype.getClientSize = function () { var sizeClient = new CSize(); var sizeScreen = { width: this.m_elem.clientWidth , height: this.m_elem.clientHeight }; sizeClient.SetSize ( this.m_elem.clientWidth, this.m_elem.clientHeight ); return sizeClient; } CElementStyleHelper.prototype.getScreenSize = function () { var sizeScreen = this.getClientSize(); sizeScreen.x = this.m_elem.offsetLeft; sizeScreen.y = this.m_elem.offsetTop; return sizeScreen; } CElementStyleHelper.prototype.getAbsPos = function () { var left = 0; var top = 0; var obj = this.m_elem; if ( obj.offsetParent ) { left = obj.offsetLeft; top = obj.offsetTop; while ( obj = obj.offsetParent ) { left += obj.offsetLeft; top += obj.offsetTop; } } var pos = new CPosition ( left, top ); return pos; } //====================================================================== function ASSERT( condition, sErrorMessage ) { if ( UTIL.bDebugMode ) { if ( typeof condition === "undefined" || ! condition ) alert( sErrorMessage ); } } function alertTimeDiff ( timeStart, sFunctionName ) { var timeCurr = new Date().getTime(); var timediff = ( timeCurr - timeStart ) + " ms"; alert ( sFunctionName + " : " + timediff ); } //-------------------------------------------------------------------------------- // EVENT functionality //-------------------------------------------------------------------------------- function addEvent( elem, evType, callback, useCapture ) { ASSERT( elem, 'addEvent: element is NOT valid !!!!' ) // cross-browser event handling for IE5+ NS6+, Mozilla if ( elem ) { if ( elem.addEventListener ) { elem.addEventListener( evType, callback, useCapture ); return true; } else if ( elem.attachEvent ) { var r = elem.attachEvent( 'on' + evType, callback ); return r; } else { elem[ 'on' + evType ] = callback; } } } function removeEvent ( elem, evType, callback, useCapture ) { ASSERT( elem, 'removeEvent: element is NOT valid !!!!' ) // cross-browser event handling for IE5+ NS6+, Mozilla if ( elem ) { if ( elem.removeEventListener ) { elem.removeEventListener( evType, callback, useCapture ); } else if ( elem.detachEvent ) { elem.detachEvent( "on" + evType, callback ); } else { elem[ 'on' + evType ] = null; } } } function cancelEvent( ev ) { if ( ev.preventDefault ) ev.preventDefault(); else if ( ev.returnValue ) ev.returnValue = false; } function stopEvent( ev ) { if ( ev.stopPropagation ) ev.stopPropagation(); else if ( ev.cancelBubble ) ev.cancelBubble = true; } function getMousePosition ( evt ) { // This is the correct script for detecting the mouse coordinates: var pos = new CPosition(); var posx = 0; var posy = 0; if ( ! evt ) var evt = window.event; if ( evt.pageX || evt.pageY ) { posx = evt.pageX; posy = evt.pageY; } else if ( evt.clientX || evt.clientY ) { if (document.documentElement.clientHeight == 0) { posx = evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; posy = evt.clientY + document.body.scrollTop + document.documentElement.scrollTop; } else { posx = evt.clientX + document.documentElement.scrollLeft + document.documentElement.scrollLeft; posy = evt.clientY + document.documentElement.scrollTop + document.documentElement.scrollTop; } } // posx and posy now contain the mouse position relative to the document pos.Set ( posx, posy ); return pos; } function CKeyboardEvent ( evt ) { if ( evt ) this.evt = evt; else this.evt = window.event; if ( this.evt.which ) this.key = this.evt.which; // Netscape/Firefox/Opera else this.key = this.evt.keyCode; // IE } function CMouseEvent ( evt ) { if ( evt ) this.evt = evt; else this.evt = window.event; if ( this.evt.pageX ) this.x = this.evt.pageX; else this.x = this.evt.clientX; if ( this.evt.pageY ) this.y = this.evt.pageY; else this.y = this.evt.clientY; if ( this.evt.target ) this.target = this.evt.target; else this.target = this.evt.srcElement; } CMouseEvent.prototype.ClientToScreen = function (pos) { var posNew = pos; if (this.evt.pageX || this.evt.pageY) { posNew.x = this.evt.pageX; posNew.y = this.evt.pageY; } else if (this.evt.clientX || this.evt.clientY) { if (document.documentElement.clientHeight == 0) { posNew.x += document.body.scrollLeft + this.target.scrollLeft; posNew.y += document.body.scrollTop + this.target.scrollTop; } else { posNew.x += document.documentElement.scrollLeft + this.target.scrollLeft; posNew.y += document.documentElement.scrollTop + this.target.scrollTop; } } return posNew; } function addListener( elem, type, callback ) { if ( elem.addEventListener ) { elem.addEventListener( type, callback, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on"+type, callback, false ); } } function removeListener ( elem, type, callback ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, callback, false ); } else if ( elem.detachEvent ) { elem.detachEvent( "on" + type, callback, false ); } } //--------------------------------------------------------------------- // DEBUG API //--------------------------------------------------------------------- function getLikeElements ( tagName, attrName, attrValue ) { var startSet; var endSet = new Array( ); if ( tagName ) { startSet = document.getElementsByTagName(tagName); } else { startSet = (document.all) ? document.all : document.getElementsByTagName("*"); } if ( attrName ) { for ( var i = 0; i < startSet.length; i++ ) { if ( startSet[i].getAttribute(attrName) ) { if ( attrValue ) { if ( startSet[i].getAttribute(attrName) === attrValue ) { endSet[endSet.length] = startSet[i]; } } else { endSet[endSet.length] = startSet[i]; } } } } else { endSet = startSet; } return endSet; } function walkChildNodes ( objRef, bAllNodes, n ) { var obj; if ( objRef ) { if ( typeof objRef === "string" ) { obj = document.getElementById( objRef ); } else { obj = objRef; } } else { if (document.documentElement.clientHeight == 0) obj = (document.body.parentElement) ? document.body.parentElement : document.body.parentNode; else obj = (document.documentElement.parentElement) ? document.documentElement.parentElement : document.documentElement.parentNode; } var output = ""; var indent = ""; var i, group, txt; if ( n ) { for (i = 0; i < n; i++) { indent += "+---"; } } else { n = 0; output += "Child Nodes of <" + obj.tagName.toLowerCase( ); output += ">\n= == == == == == == == == == ==\n"; } group = obj.childNodes; for ( i = 0; i < group.length; i++ ) { var elem = group[i]; output += indent; switch ( elem.nodeType ) { case 1: if ( bAllNodes || ( elem.id || elem.name ) ) { output += "<" + elem.tagName.toLowerCase( ); output += (elem.id) ? " ID=" + elem.id : ""; output += (elem.name) ? " NAME=" + elem.name : ""; output += ">\n"; } break; case 3: txt = elem.nodeValue.substr( 0, 25 ); output += "[ \"" + txt.replace(/[\r\n]/g,""); if ( elem.nodeValue.length > 25 ) { output += "..."; } output += "\" ]\n"; break; case 8: output += "[!COMMENT!]\n"; break; default: output += "[Node Type = " + elem.nodeType + "]\n"; } if ( elem.childNodes.length > 0 ) { output += walkChildNodes ( elem, bAllNodes, n+1 ); } } return output; } //--------------------------------------------------------------------- // TABLE API //--------------------------------------------------------------------- /* function clearTBody() { var tbodies = this.getElementsByTagName( "tbody" ); for ( var i = 0; i < tbodies.length; i++ ) { while ( tbodies[ i ].rows.length > 0 tbodies[ i ].deleteRow( 0 ); } } HTMLTableElement.prototype.clear = clearTBody; */ /* escape/encode/decodeHtml() functions are used to deal with the ', ", <, >, and & characters when dynamic HTML re-writing of form input values. These functions are client-side equivalent of the Java htmlEncode() method. Note: The & must be translated first to avoid translating it for other characters */ function escapeHTML ( sInputString ) { var sOutputString = "" + sInputString; if ((sOutputString === '0') || ((sInputString !== null) && (sInputString !== false))) { sOutputString = sOutputString.replace(/&/g, "&"); sOutputString = sOutputString.replace(//g, ">"); sOutputString = sOutputString.replace(/"/g, """); sOutputString = sOutputString.replace(/'/g, "'"); // the numeric value for "'" } else if (sInputString === null) { //return empty string if the value is null or false sOutputString = ""; } return sOutputString; }; function getFormattedPropertyValue ( sValue ) { var sStr1 = sValue.replace( /\n/g , "" ); var sStr2 = sStr1.replace( /'/g , "'" ); var sStr3 = sStr2.replace( /"/g , "\"" ); var sFormattedValue = sStr3; var strArray = sFormattedValue.split( " " ); if ( strArray.length > 1 ) { sFormattedValue = ""; for ( var j = 0; j < strArray.length; j++ ) { if ( strArray[ j ] ) { sFormattedValue += strArray[ j ] + " "; } } } return sFormattedValue; } function CPropertyTable ( idTable ) { this.id = idTable; } CPropertyTable.prototype.Clear = function () { var table = document.getElementById( this.id ); var tbodies = table.getElementsByTagName( 'tbody' ); ASSERT ( tbodies.length === 1, "AppendRow: element is missing in table " + this.id ); var tbody = tbodies[0]; if ( tbody ) { var rows = tbody.getElementsByTagName( 'tr' ); var numRows = rows.length; for ( var i = numRows - 1; i >= 0; i-- ) { tbody.removeChild( rows[i] ); } } } CPropertyTable.prototype.AppendList = function ( propertyList ) { for ( var i in propertyList ) { var propPair = new PropertyPair( propertyList[i][0], propertyList[i][1] ); this.AppendRow( propPair ); } } CPropertyTable.prototype.findPropertyValue = function ( obj, sPropName ) { var sPropValue = "Unknown"; var cProperties = this.getPropertyCount(); for ( var i = 0; i < cProperties; i++ ) { if ( obj.getPropertyName(i) === sPropName ) { sPropValue = obj.getPropertyValue(i); break; } } return sPropValue; } CPropertyTable.prototype.AppendObjPropList = function ( obj ) { for ( var i = 0; i < obj.getPropertyCount(); i++ ) { // alert ( obj.getPropertyDisplayName(i) + ' = ' + obj.getPropertyValue(i) ); var sFormattedValue = getFormattedPropertyValue ( obj.getPropertyValue(i) ); var propPair = new PropertyPair( obj.getPropertyDisplayName(i), sFormattedValue ); this.AppendRow( propPair ); } } CPropertyTable.prototype.AppendRow = function ( propertyPair ) { // Creating a new table row based on a PropertyPair var table = document.getElementById( this.id ); var tbodies = table.getElementsByTagName( 'tbody' ); ASSERT ( tbodies.length === 1, "AppendRow: element is missing in table " + this.id ); var tbody = tbodies[0]; // Re-use API oTR = object.insertRow( [iIndex]) // Example: myNewRow = document.all.myTable.insertRow() var row = document.createElement( 'tr' ); var col1 = document.createElement( 'td' ); var attr11 = document.createAttribute( "width" ); attr11.value = '20%'; col1.setAttributeNode( attr11 ); var attr12 = document.createAttribute( "class" ); attr12.value = 'Col1'; col1.setAttributeNode( attr12 ); var col2 = document.createElement( 'td' ); var attr21 = document.createAttribute( "width" ); attr21.value = '80%'; col2.setAttributeNode( attr21 ); var attr22 = document.createAttribute( "class" ); attr22.value = 'Col2'; col2.setAttributeNode( attr22 ); // adding text to nodes var text1 = document.createTextNode( propertyPair.name ); col1.appendChild ( text1 ); var text2 = document.createTextNode( propertyPair.value ); col2.appendChild ( text2 ); row.appendChild( col1 ); row.appendChild( col2 ); tbody.appendChild( row ); } //--------------------------------------------------------------------- // Creation helpers of various elements //--------------------------------------------------------------------- function CreateLink ( elemId, parentId, className, text, left, top, fnOnClick ) { var elemLink = document.createElement ( 'a' ); var elemParent = document.getElementById( parentId ); if ( ! elemLink || ! elemParent ) { ASSERT( elemParent, 'CreateLink: elemParent is NOT valid !' ); ASSERT( elemLink, 'CreateLink: elemLink is NOT valid !' ); return null; } var elemText = document.createTextNode( text ); elemLink.appendChild ( elemText ); // elemLink.innerHTML = text; elemLink.id = elemId; elemLink.href = '#'; if ( className ) elemLink.className = className; elemLink.style.left = left + 'px'; elemLink.style.top = top + 'px'; addEvent( elemLink, 'click', fnOnClick, false ); elemParent.appendChild ( elemLink ); //---------------------------------------------------- // Test the new element var AttrId = elemLink.getAttribute( "id" ); var AttrClass = elemLink.getAttribute( "className" ) || "Unknown Class"; // alert ( "CreateLink: " + AttrId + ", " + AttrClass ); return elemLink; } function CreateDiv ( elemId, parentId, className, left, top, width, height ) { var elemDiv = document.createElement ( 'div' ); var elemParent = document.getElementById( parentId ); if ( ! elemDiv || ! elemParent ) { ASSERT( elemParent, 'CreateDiv: elemParent is NOT valid !' ); ASSERT( elemDiv, 'CreateDiv: elemDiv is NOT valid !' ); return null; } elemDiv.setAttribute( "id", elemId ); elemDiv.id = elemId; // a hack for IE6 as it's setAttribute works incorrectly if ( className ) elemDiv.className = className; elemDiv.style.left = left + 'px'; elemDiv.style.top = top + 'px'; if ( width ) elemDiv.style.width = width + 'px'; if ( height ) elemDiv.style.height = height + 'px'; elemParent.appendChild ( elemDiv ); // Test the new element var AttrId = elemDiv.getAttribute( "id" ); var AttrClass = elemDiv.getAttribute( "className" ); var AttrWidth = elemDiv.getAttribute( "offsetWidth" ); var AttrHeight = elemDiv.getAttribute( "offsetHeight" ); // alert ( "CreateDIV: " + AttrId + ", " + AttrClass + ", width=" + AttrWidth + ", height=" + AttrHeight); return elemDiv; } function CreateText ( elemId, parentId, className, text, left, top, width, height ) { var elemDiv = CreateDiv ( elemId, parentId, className, left, top, width, height ); if ( ! elemDiv ) { ASSERT( elemDiv, 'CreateText: elemDiv is NOT valid !' ); return null; } elemDiv.innerHTML = text; return elemDiv; } function CreateImage ( elemId, parentId, sImageName, left, top, width, height ) { var elemDiv = CreateDiv ( elemId, parentId, 'classImageHolder', left, top, width, height ); var elemImage = document.createElement ( 'img' ); if ( ! elemImage || ! elemDiv ) { ASSERT( elemDiv, 'CreateImage: elemDiv is NOT valid !' ); ASSERT( elemImage, 'CreateImage: elemImage is NOT valid !' ); return null; } /* var attr1 = document.createAttribute( "id" ); attr1.value = elemId; elemImage.setAttributeNode( attr1 ); */ var attr2 = document.createAttribute( "src" ); attr2.value = sImageName; elemImage.setAttributeNode( attr2 ); var attr3 = document.createAttribute( "width" ); attr3.value = width; elemImage.setAttributeNode( attr3 ); var attr4 = document.createAttribute( "height" ); attr4.value = height; elemImage.setAttributeNode( attr4 ); elemDiv.appendChild ( elemImage ); // Test the new element var AttrId = elemImage.getAttribute( "id" ); var AttrSrc = elemImage.getAttribute( "src" ); var AttrWidth = elemImage.getAttribute( "offsetWidth" ); var AttrHeight = elemImage.getAttribute( "offsetHeight" ); // alert ( "CreateImage: " + AttrId + ", " + AttrSrc + ", " + AttrWidth + ", " + AttrHeight ); return elemDiv; } //--------------------------------------------------------------------- // Date / Time API //--------------------------------------------------------------------- function GetReportTime() { var d, s, t; var MinMilli = 1000 * 60; var HrMilli = MinMilli * 60; var DyMilli = HrMilli * 24; d = new Date(); t = d.getTime(); var dash = "-"; s = d.getFullYear() + dash; s += (d.getMonth() + 1) + dash; s += d.getDate() + " "; var c = ":"; s += d.getHours() + c; s += d.getMinutes() + c; s += d.getSeconds(); return(s); } //---------------------------------------------------------- // CStringBuffer implementation //---------------------------------------------------------- /* Usage: var buf = new CStringBuffer(); buf.append("hello"); buf.append("world"); alert(buf.toString()); ----------------------------------------------------------*/ function CStringBuffer ( cStrings ) { if ( typeof cStrings !== "undefined" && cStrings > 0 ) this.buffer = new Array( cStrings ); else this.buffer = new Array(); } CStringBuffer.prototype.append = function append( string ) { this.buffer.push( string ); return this; } CStringBuffer.prototype.toString = function toString() { return this.buffer.join(""); } CStringBuffer.prototype.cleanUp = function cleanUp() { return this.buffer.length = 0; } //---------------------------------------------------------- // Array helpers //---------------------------------------------------------- function find ( array, searchStr ) { var returnArray = false; for ( var i = 0; i < array.length; i++ ) { if ( array[i] === searchStr ) { if ( ! returnArray ) { returnArray = new Array(); } returnArray.push(i); } } return returnArray; } function indexOf(array, value, startIndex) { var index = -1; for ( var i = startIndex || 0; i < array.length; i++ ) { if ( array[i] === value ) { index = i; break; } } return index; } Array.indexOf = indexOf; Array.find = find; //------------------------------------------------------------------------------------- // class CProgressControl //------------------------------------------------------------------------------------- // To run it you need to create: // // 1) The CSS classes .progressControl & .progressComponent // 2) the following HTML elements: /*
*/ //------------------------------------------------------------------------------------- var idProgressCtrl = null; var idProgressTimer = null; var nLastProgressPart = -1; var cProgressParts = 4; var progress_part_ids = ["id_progress_ctrl_part1", "id_progress_ctrl_part2", "id_progress_ctrl_part3", "id_progress_ctrl_part4"]; var progress_part_elems = []; function busyWait( millis ) { var stop = new Date().getTime() + millis; while( new Date().getTime() < stop ) { // do nothing loop - just to yield control to the browser var elem = document.getElementById( idProgressCtrl ); var html = elem.innerHTML; } } function runProgressBody ( ) { for ( var i = 0; i < cProgressParts; i++ ) { progress_part_elems[ i ].style.backgroundColor = "Lightgrey"; } nLastProgressPart++; if ( nLastProgressPart > 3 ) nLastProgressPart = 0; progress_part_elems[ nLastProgressPart ].style.backgroundColor = "blue"; } function runProgressControl ( idProgressDiv ) { idProgressCtrl = idProgressDiv; var cssHelper = new CElementStyleHelper ( idProgressCtrl ); cssHelper.show ( true ); for ( var i = 0; i < cProgressParts; i++ ) { var elem = document.getElementById( progress_part_ids[ i ] ); progress_part_elems[ i ] = elem; } // alert( progress_part_elems.length ); idProgressTimer = setInterval ( "runProgressBody()", 500 ); } function stopProgressControl () { if ( idProgressTimer ) { var cssHelper = new CElementStyleHelper ( idProgressCtrl ); cssHelper.show ( false ); clearInterval ( idProgressTimer ); idProgressTimer = null; } } //------------------------------------------------------------------------------------------------- // Display helpers //------------------------------------------------------------------------------------------------- function CDisplayHelper() {} CDisplayHelper.prototype.hasAnyDigit = function ( str ) { var ret = false; for (var i = str.length - 1; i >= 0; i--) { if (str.charAt(i) >= "0" && str.charAt(i) <= "9") { ret = true; break; } } if ((ret= true) && ((str.indexOf("+") > i) || (str.indexOf("-") > i))) ret = false; return ret; } CDisplayHelper.prototype.isNumber = function ( str ) { var ret = false; if ( isNaN(str) || str === null ) { ret = false; } else { ret = true; } return ret; } CDisplayHelper.prototype.trimTrailingBlanks = function ( myStr ) { var idx; // ensure there really is a string to trim if ( myStr !== null && myStr !== "undefined" ) { while ( (myStr.length > 0) && ((idx = myStr.indexOf(" ")) === 0) ) { myStr = myStr.substring(1); } while ( (myStr.length > 0) && ((idx = myStr.lastIndexOf(" ")) === (myStr.length -1)) ) { myStr = myStr.substring(0,idx); } } return myStr; } CDisplayHelper.prototype.printNewLine = function () { return "\n"; } CDisplayHelper.prototype.printTabs = function ( nLevel ) { var sPrintXml = ""; for ( var i = 0; i < nLevel; i++ ) { sPrintXml += "\t"; } return sPrintXml; } CDisplayHelper.prototype.printTag = function ( sTag, nLevel, bPositionTag ) { var sPrintXml = ""; if ( bPositionTag ) { sPrintXml += "\n"; sPrintXml += this.printTabs( nLevel ); } sPrintXml += sTag; return sPrintXml; } CDisplayHelper.prototype.printValue = function ( sValue ) { var sPrintXml = ""; if ( sValue.length > 0 ) { sPrintXml += sValue; } return sPrintXml; } CDisplayHelper.prototype.printNode = function ( sXml, nLevel ) { if ( sXml.length === 0 ) return ""; var sPrintXml = ""; var tag_name = "" var sTagBegin = "<"; var iTagBegin = sXml.indexOf( sTagBegin ); if ( iTagBegin > -1 ) { var iSelfTagEnd = sXml.indexOf( "/>" ); var iTagEnd = sXml.indexOf( ">" ); var iSpace = sXml.indexOf( " " ); var tag_contents = ""; if ( ( iSelfTagEnd !== -1 ) && ( iSelfTagEnd < iTagEnd ) ) { tag_contents = sXml.slice( iTagBegin + 1, iSelfTagEnd ); var sSelfTag = "<" + tag_contents + "/>"; sPrintXml += this.printTag( sSelfTag, nLevel, true ); var iNodeEnd = iSelfTagEnd + 1; if ( iNodeEnd < sXml.length ) { sXml = sXml.slice( iNodeEnd + 1 ); sPrintXml += this.printNode ( sXml, nLevel ); } return sPrintXml; } tag_contents = sXml.slice( iTagBegin + 1, iTagEnd ); if ( ( iSpace !== -1 ) && ( iSpace < iTagEnd ) ) { tag_name = sXml.slice( iTagBegin + 1, iSpace ); } else { tag_name = sXml.slice( iTagBegin + 1, iTagEnd ); } // Print the opening tag var sOpeningTag = "<" + tag_contents + ">"; sPrintXml += this.printTag( sOpeningTag, nLevel, true ); // Find the closing tag var sClosingTag = ""; var iClosingTag = sXml.indexOf( sClosingTag ); if ( iClosingTag !== -1 ) { // Continue with the node value var sNodeValue = sXml.slice( iTagEnd + 1, iClosingTag ); var sPrintedValue = this.printNode ( sNodeValue, nLevel + 1 ); sPrintXml += sPrintedValue; // Print the closing tag var iTagInside = sPrintedValue.indexOf( "<" ); var bPositionTag = ( iTagInside === -1 ? false : true ); sPrintXml += this.printTag( sClosingTag, nLevel, bPositionTag ); // Print siblings if any var iNodeEnd = iClosingTag + tag_name.length + 2; if ( iNodeEnd < sXml.length ) { sXml = sXml.slice( iNodeEnd + 1 ); sPrintXml += this.printNode ( sXml, nLevel ); } } else { // Error: closing tag not found - cut off the start tag and print the text as is ! var sNodeValue = sXml.slice( iTagEnd + 1 ); sPrintXml += this.printValue( sNodeValue ); } } else { sPrintXml += this.printValue( sXml ); } return sPrintXml; } CDisplayHelper.prototype.prettyPrintXml = function ( sXml ) { var sPrintXml = this.printNode ( sXml, 0 ); return sPrintXml; } //********************************************************************** // Instantiate global helpers //********************************************************************** //---------------------------------------------------------------------- // Instantiate Element helper //---------------------------------------------------------------------- UTIL.ElementHelper = new CElementStyleHelper ( '' ); //---------------------------------------------------------------------- // Instantiate Display helper //---------------------------------------------------------------------- UTIL.DisplayHelper = new CDisplayHelper (); //---------------------------------------------------------------------- //********************************************************************** // tanko test //********************************************************************** function MDSRV_paneCallBack() { this.m_elRootPane = document.getElementById ( "id_HAL_root_pane_placeholder" ); this.m_nRootPane = G_ResManager.F_GetResource ( "id_HAL_root_pane" ); var heightOffset = document.getElementById( "id_lineage_view" ).offsetTop; var width = 0; var height = 0; if (document.documentElement.clientHeight == 0) { width = document.body.clientWidth - 10; height = document.body.clientHeight - ( heightOffset + 5 ); } else { width = document.documentElement.clientWidth - 10; height = document.documentElement.clientHeight - ( heightOffset + 5 ); } this.m_oPaneManager = new C_PaneManager( this.m_elRootPane, this.m_nRootPane, this, width, height, false ); } function MDSRV_initPaneMgr() { LNS.MDSRV_paneManager = new MDSRV_paneCallBack( ); LNS.MDSRV_paneManager.F_PaneManager_OnPaneResize = function( paneMgr, pane, width, heigth, resize) { var graphCanvasHeight = document.getElementById( "id_canvas_graph" ).offsetHeight; var graphHeaderHeight = document.getElementById( "id_graph_header" ).offsetHeight; document.getElementById( "id_graph" ).style.height = graphCanvasHeight - graphHeaderHeight; } } window.onresize = function() { if ( LNS.MDSRV_paneManager ) { var heightOffset = document.getElementById( "id_lineage_view" ).offsetTop; var width = 0; var height = 0; if (document.documentElement.clientHeight == 0) { width = document.body.clientWidth - 10; height = document.body.clientHeight - ( heightOffset + 5 ); } else { width = document.documentElement.clientWidth - 10; height = document.documentElement.clientHeight - ( heightOffset + 5 ); } LNS.MDSRV_paneManager.m_oPaneManager.F_SetNewPaneSize( "id_HAL_root_pane", width, height ); } }