/******************************************************************************* * Copyright (c) 2007, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: *     IBM Corporation - initial API and implementation ****************************************************************************** * **//**  * Object dir()  * @type dir  * @super Object  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535239.aspx*/function dir(){};dir.prototype= new Object();/**  * Property accessKey  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533062.aspx*/dir.prototype.accessKey="";/**  * Property canHaveChildren  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533546.aspx*/dir.prototype.canHaveChildren=false;/**  * Property canHaveHTML  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537836.aspx*/dir.prototype.canHaveHTML=false;/**  * Property className  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533560.aspx*/dir.prototype.className="";/**  * Property clientHeight  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533563.aspx*/dir.prototype.clientHeight=0;/**  * Property clientLeft  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533564.aspx*/dir.prototype.clientLeft=0;/**  * Property offsetLeft  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534200.aspx*/dir.prototype.offsetLeft=0;/**  * Property clientTop  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533565.aspx*/dir.prototype.clientTop=0;/**  * Property offsetTop  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534303.aspx*/dir.prototype.offsetTop=0;/**  * Property clientWidth  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533566.aspx*/dir.prototype.clientWidth=0;/**  * Property compact  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533585.aspx*/dir.prototype.compact=false;/**  * Property contentEditable  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537837.aspx*/dir.prototype.contentEditable="";/**  * Property dir  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533728.aspx*/dir.prototype.dir="";/**  * Property firstChild  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533755.aspx*/dir.prototype.firstChild=new Object();/**  * Property childNodes  * @type childNodes  * @returns {childNodes}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537445.aspx*/dir.prototype.childNodes= new childNodes();/**  * Property hideFocus  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533783.aspx*/dir.prototype.hideFocus=false;/**  * Property id  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533880.aspx*/dir.prototype.id="";/**  * Property innerHTML  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533897.aspx*/dir.prototype.innerHTML="";/**  * Property innerText  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533899.aspx*/dir.prototype.innerText="";/**  * Property isContentEditable  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537838.aspx*/dir.prototype.isContentEditable=false;/**  * Property isDisabled  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533902.aspx*/dir.prototype.isDisabled=false;/**  * Property isMultiLine  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537839.aspx*/dir.prototype.isMultiLine=false;/**  * Property isTextEdit  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533920.aspx*/dir.prototype.isTextEdit=false;/**  * Property TextRange  * @type TextRange  * @returns {TextRange}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535872.aspx*/dir.prototype.TextRange= new TextRange();/**  * Property lang  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533935.aspx*/dir.prototype.lang="";/**  * Property language  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533940.aspx*/dir.prototype.language="";/**  * Property lastChild  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533943.aspx*/dir.prototype.lastChild=new Object();/**  * Property nextSibling  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534189.aspx*/dir.prototype.nextSibling=new Object();/**  * Property nodeName  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534190.aspx*/dir.prototype.nodeName="";/**  * Property nodeType  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534191.aspx*/dir.prototype.nodeType=0;/**  * Property nodeValue  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534192.aspx*/dir.prototype.nodeValue=new Object();/**  * Property offsetHeight  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534199.aspx*/dir.prototype.offsetHeight=0;/**  * Property offsetParent  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534302.aspx*/dir.prototype.offsetParent=new Object();/**  * Property offsetWidth  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534304.aspx*/dir.prototype.offsetWidth=0;/**  * Property onOffBehavior  * @type DABoolean  * @returns {DABoolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533630.aspx*/dir.prototype.onOffBehavior=new DABoolean();/**  * Property outerHTML  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534310.aspx*/dir.prototype.outerHTML="";/**  * Property outerText  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534311.aspx*/dir.prototype.outerText="";/**  * Property ownerDocument  * @type document  * @returns {document}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534315.aspx*/dir.prototype.ownerDocument=new document();/**  * Property document  * @type document  * @returns {document}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms531073.aspx*/dir.prototype.document= new document();/**  * Property parentElement  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534327.aspx*/dir.prototype.parentElement=new Object();/**  * Property parentNode  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534328.aspx*/dir.prototype.parentNode=new Object();/**  * Property parentTextEdit  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534330.aspx*/dir.prototype.parentTextEdit=new Object();/**  * Property previousSibling  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534350.aspx*/dir.prototype.previousSibling=new Object();/**  * Property readyState  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534358.aspx*/dir.prototype.readyState=new Object();/**  * Property scopeName  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534388.aspx*/dir.prototype.scopeName="";/**  * Property scrollHeight  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534615.aspx*/dir.prototype.scrollHeight=new Object();/**  * Property scrollLeft  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534617.aspx*/dir.prototype.scrollLeft=0;/**  * Property scrollTop  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534618.aspx*/dir.prototype.scrollTop=0;/**  * Property scrollWidth  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534619.aspx*/dir.prototype.scrollWidth=new Object();/**  * Property sourceIndex  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534635.aspx*/dir.prototype.sourceIndex=0;/**  * Property all  * @type all  * @returns {all}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537434.aspx*/dir.prototype.all= new all();/**  * Property tabIndex  * @type Number  * @returns {Number}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534654.aspx*/dir.prototype.tabIndex=0;/**  * Property tagName  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534657.aspx*/dir.prototype.tagName="";/**  * Property tagUrn  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534658.aspx*/dir.prototype.tagUrn="";/**  * Property title  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534683.aspx*/dir.prototype.title="";/**  * Property uniqueID  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534704.aspx*/dir.prototype.uniqueID="";/**  * function addBehavior(sUrl)  * @param {String} sUrl  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535922.aspx*/dir.prototype.addBehavior=function(sUrl){};/**  * function appendChild(oNode)  * @param {appendChild} oNode  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535934.aspx*/dir.prototype.appendChild=function(oNode){};/**  * function applyElement(oNewElement)  * @param {String} oNewElement  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536341.aspx*/dir.prototype.applyElement=function(oNewElement){};/**  * function attachEvent(sEvent,fpNotify)  * @param {String} sEvent  * @param {Boolean} fpNotify  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536343.aspx*/dir.prototype.attachEvent=function(sEvent,fpNotify){};/**  * function blur()  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536347.aspx*/dir.prototype.blur=function(){};/**  * Property onblur  * @type onblur  * @returns {onblur}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536909.aspx*/dir.prototype.onblur= new onblur();/**  * function clearAttributes()  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536350.aspx*/dir.prototype.clearAttributes=function(){};/**  * function click()  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536363.aspx*/dir.prototype.click=function(){};/**  * Property onclick  * @type onclick  * @returns {onclick}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536913.aspx*/dir.prototype.onclick= new onclick();/**  * function cloneNode(bCloneChildren)  * @param {Boolean} bCloneChildren  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536365.aspx*/dir.prototype.cloneNode=function(bCloneChildren){};/**  * function componentFromPoint(iCoordX,iCoordY)  * @param {Number} iCoordX  * @param {Number} iCoordY  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536375.aspx*/dir.prototype.componentFromPoint=function(iCoordX,iCoordY){};/**  * function contains(oElement)  * @param {Boolean} oElement  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536377.aspx*/dir.prototype.contains=function(oElement){};/**  * function detachEvent(sEvent,fpNotify)  * @param {String} sEvent  * @param {attachEvent} fpNotify  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536411.aspx*/dir.prototype.detachEvent=function(sEvent,fpNotify){};/**  * function fireEvent(sEvent,oEventObject)  * @param {String} sEvent  * @param {event} oEventObject  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536423.aspx*/dir.prototype.fireEvent=function(sEvent,oEventObject){};/**  * function focus()  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536425.aspx*/dir.prototype.focus=function(){};/**  * Property onfocus  * @type onfocus  * @returns {onfocus}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536934.aspx*/dir.prototype.onfocus= new onfocus();/**  * function getAdjacentText(sWhere)  * @param {String} sWhere  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536427.aspx*/dir.prototype.getAdjacentText=function(sWhere){};/**  * function getAttribute(sAttrName,iFlags,sAttrName)  * @param {String} sAttrName  * @param {Number} iFlags  * @param {getAttribute} sAttrName  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536429.aspx*/dir.prototype.getAttribute=function(sAttrName,iFlags,sAttrName){};/**  * function getAttributeNode(sName)  * @param {String} sName  * @type attribute  * @returns {attribute}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536430.aspx*/dir.prototype.getAttributeNode=function(sName){};/**  * Property attribute  * @type attribute  * @returns {attribute}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535187.aspx*/dir.prototype.attribute= new attribute();/**  * Property name  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534184.aspx*/dir.prototype.name="";/**  * function getBoundingClientRect()  * @type TextRectangle  * @returns {TextRectangle}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536433.aspx*/dir.prototype.getBoundingClientRect=function(){};/**  * Property TextRectangle  * @type TextRectangle  * @returns {TextRectangle}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535906.aspx*/dir.prototype.TextRectangle= new TextRectangle();/**  * function getClientRects()  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536435.aspx*/dir.prototype.getClientRects=function(){};/**  * function getElementsByTagName(sTagName)  * @param {String} sTagName  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536439.aspx*/dir.prototype.getElementsByTagName=function(sTagName){};/**  * function getExpression(sPropertyName)  * @param {String} sPropertyName  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/aa358797.aspx*/dir.prototype.getExpression=function(sPropertyName){};/**  * function hasChildNodes()  * @type HTML Elements  * @returns {HTML}
 Elements  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536445.aspx*/dir.prototype.hasChildNodes=function(){};/**  * function insertAdjacentElement(sWhere,oElement)  * @param {String} sWhere  * @param {insertAdjacentElement} oElement  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536451.aspx*/dir.prototype.insertAdjacentElement=function(sWhere,oElement){};/**  * function insertAdjacentHTML(sWhere,sText)  * @param {String} sWhere  * @param {String} sText  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536452.aspx*/dir.prototype.insertAdjacentHTML=function(sWhere,sText){};/**  * function insertAdjacentText(sWhere,sText)  * @param {String} sWhere  * @param {String} sText  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536453.aspx*/dir.prototype.insertAdjacentText=function(sWhere,sText){};/**  * function insertBefore(oNewNode,oChildNode)  * @param {Object} oNewNode  * @param {Object} oChildNode  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536454.aspx*/dir.prototype.insertBefore=function(oNewNode,oChildNode){};/**  * function mergeAttributes(oSource,bPreserve)  * @param {Object} oSource  * @param {Boolean} bPreserve  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536614.aspx*/dir.prototype.mergeAttributes=function(oSource,bPreserve){};/**  * function normalize()  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536646.aspx*/dir.prototype.normalize=function(){};/**  * function releaseCapture()  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536689.aspx*/dir.prototype.releaseCapture=function(){};/**  * function removeAttribute(sName,iCaseSensitive)  * @param {String} sName  * @param {Number} iCaseSensitive  * @type Boolean  * @returns {Boolean}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536696.aspx*/dir.prototype.removeAttribute=function(sName,iCaseSensitive){};/**  * function removeAttributeNode(oSrcAttribute)  * @param {attribute} oSrcAttribute  * @type attribute  * @returns {attribute}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536698.aspx*/dir.prototype.removeAttributeNode=function(oSrcAttribute){};/**  * function removeBehavior(iID)  * @param {Number} iID  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536700.aspx*/dir.prototype.removeBehavior=function(iID){};/**  * function removeChild(oNode)  * @param {Object} oNode  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536702.aspx*/dir.prototype.removeChild=function(oNode){};/**  * function removeExpression(sPropertyName)  * @param {String} sPropertyName  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/aa358798.aspx*/dir.prototype.removeExpression=function(sPropertyName){};/**  * function removeNode(bRemoveChildren)  * @param {Boolean} bRemoveChildren  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536708.aspx*/dir.prototype.removeNode=function(bRemoveChildren){};/**  * function replaceAdjacentText(sWhere,sReplaceText)  * @param {String} sWhere  * @param {String} sReplaceText  * @type String  * @returns {String}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536714.aspx*/dir.prototype.replaceAdjacentText=function(sWhere,sReplaceText){};/**  * function replaceChild(oNewNode,oChildNode)  * @param {Object} oNewNode  * @param {Object} oChildNode  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536716.aspx*/dir.prototype.replaceChild=function(oNewNode,oChildNode){};/**  * function replaceNode(oNewNode)  * @param {Object} oNewNode  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536719.aspx*/dir.prototype.replaceNode=function(oNewNode){};/**  * function scrollIntoView(bAlignToTop)  * @param {Boolean} bAlignToTop  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536730.aspx*/dir.prototype.scrollIntoView=function(bAlignToTop){};/**  * function setActive()  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536738.aspx*/dir.prototype.setActive=function(){};/**  * function setAttribute(sName,vValue)  * @param {String} sName  * @param {Number} vValue  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536739.aspx*/dir.prototype.setAttribute=function(sName,vValue){};/**  * function setAttributeNode(oSrcAttribute)  * @param {attribute} oSrcAttribute  * @type attribute  * @returns {attribute}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536741.aspx*/dir.prototype.setAttributeNode=function(oSrcAttribute){};/**  * function setCapture(bContainerCapture)  * @param {Boolean} bContainerCapture  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536742.aspx*/dir.prototype.setCapture=function(bContainerCapture){};/**  * function setExpression(sPropertyName,sExpression,sLanguage)  * @param {String} sPropertyName  * @param {String} sExpression  * @param {String} sLanguage  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms531196.aspx*/dir.prototype.setExpression=function(sPropertyName,sExpression,sLanguage){};/**  * function swapNode(oNode)  * @param {Object} oNode  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536774.aspx*/dir.prototype.swapNode=function(oNode){};/**  * Property onactivate  * @type onactivate  * @returns {onactivate}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536787.aspx*/dir.prototype.onactivate= new onactivate();/**  * Property activeElement  * @type Object  * @returns {Object}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533065.aspx*/dir.prototype.activeElement=new Object();/**  * Property onbeforeactivate  * @type onbeforeactivate  * @returns {onbeforeactivate}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536791.aspx*/dir.prototype.onbeforeactivate= new onbeforeactivate();/**  * Property onbeforecopy  * @type onbeforecopy  * @returns {onbeforecopy}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536901.aspx*/dir.prototype.onbeforecopy= new onbeforecopy();/**  * Property onbeforecut  * @type onbeforecut  * @returns {onbeforecut}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536902.aspx*/dir.prototype.onbeforecut= new onbeforecut();/**  * Property onbeforedeactivate  * @type onbeforedeactivate  * @returns {onbeforedeactivate}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536903.aspx*/dir.prototype.onbeforedeactivate= new onbeforedeactivate();/**  * Property onbeforeeditfocus  * @type onbeforeeditfocus  * @returns {onbeforeeditfocus}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536904.aspx*/dir.prototype.onbeforeeditfocus= new onbeforeeditfocus();/**  * Property onbeforepaste  * @type onbeforepaste  * @returns {onbeforepaste}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536905.aspx*/dir.prototype.onbeforepaste= new onbeforepaste();/**  * Property onblur  * @type onblur  * @returns {onblur}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536909.aspx*/dir.prototype.onblur= new onblur();/**  * Property onclick  * @type onclick  * @returns {onclick}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536913.aspx*/dir.prototype.onclick= new onclick();/**  * Property oncontextmenu  * @type oncontextmenu  * @returns {oncontextmenu}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536914.aspx*/dir.prototype.oncontextmenu= new oncontextmenu();/**  * Property oncontrolselect  * @type oncontrolselect  * @returns {oncontrolselect}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537844.aspx*/dir.prototype.oncontrolselect= new oncontrolselect();/**  * Property oncopy  * @type oncopy  * @returns {oncopy}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536916.aspx*/dir.prototype.oncopy= new oncopy();/**  * Property oncut  * @type oncut  * @returns {oncut}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536917.aspx*/dir.prototype.oncut= new oncut();/**  * Property ondblclick  * @type ondblclick  * @returns {ondblclick}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536921.aspx*/dir.prototype.ondblclick= new ondblclick();/**  * Property ondeactivate  * @type ondeactivate  * @returns {ondeactivate}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536922.aspx*/dir.prototype.ondeactivate= new ondeactivate();/**  * Property ondrag  * @type ondrag  * @returns {ondrag}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536923.aspx*/dir.prototype.ondrag= new ondrag();/**  * Property ondragend  * @type ondragend  * @returns {ondragend}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536924.aspx*/dir.prototype.ondragend= new ondragend();/**  * Property ondragenter  * @type ondragenter  * @returns {ondragenter}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536925.aspx*/dir.prototype.ondragenter= new ondragenter();/**  * Property ondragleave  * @type ondragleave  * @returns {ondragleave}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536926.aspx*/dir.prototype.ondragleave= new ondragleave();/**  * Property ondragover  * @type ondragover  * @returns {ondragover}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536927.aspx*/dir.prototype.ondragover= new ondragover();/**  * Property ondragstart  * @type ondragstart  * @returns {ondragstart}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536928.aspx*/dir.prototype.ondragstart= new ondragstart();/**  * Property ondrop  * @type ondrop  * @returns {ondrop}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536929.aspx*/dir.prototype.ondrop= new ondrop();/**  * Property onfocus  * @type onfocus  * @returns {onfocus}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536934.aspx*/dir.prototype.onfocus= new onfocus();/**  * Property onfocusin  * @type onfocusin  * @returns {onfocusin}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536935.aspx*/dir.prototype.onfocusin= new onfocusin();/**  * Property onfocusout  * @type onfocusout  * @returns {onfocusout}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536936.aspx*/dir.prototype.onfocusout= new onfocusout();/**  * Property onhelp  * @type onhelp  * @returns {onhelp}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536937.aspx*/dir.prototype.onhelp= new onhelp();/**  * Property onkeydown  * @type onkeydown  * @returns {onkeydown}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536938.aspx*/dir.prototype.onkeydown= new onkeydown();/**  * Property onkeypress  * @type onkeypress  * @returns {onkeypress}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536939.aspx*/dir.prototype.onkeypress= new onkeypress();/**  * Property onkeyup  * @type onkeyup  * @returns {onkeyup}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536940.aspx*/dir.prototype.onkeyup= new onkeyup();/**  * Property onlosecapture  * @type onlosecapture  * @returns {onlosecapture}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536943.aspx*/dir.prototype.onlosecapture= new onlosecapture();/**  * Property onmousedown  * @type onmousedown  * @returns {onmousedown}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536944.aspx*/dir.prototype.onmousedown= new onmousedown();/**  * Property onmouseenter  * @type onmouseenter  * @returns {onmouseenter}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536945.aspx*/dir.prototype.onmouseenter= new onmouseenter();/**  * Property onmouseleave  * @type onmouseleave  * @returns {onmouseleave}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536946.aspx*/dir.prototype.onmouseleave= new onmouseleave();/**  * Property onmousemove  * @type onmousemove  * @returns {onmousemove}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536947.aspx*/dir.prototype.onmousemove= new onmousemove();/**  * Property onmouseout  * @type onmouseout  * @returns {onmouseout}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536948.aspx*/dir.prototype.onmouseout= new onmouseout();/**  * Property onmouseover  * @type onmouseover  * @returns {onmouseover}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536949.aspx*/dir.prototype.onmouseover= new onmouseover();/**  * Property onmouseup  * @type onmouseup  * @returns {onmouseup}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536950.aspx*/dir.prototype.onmouseup= new onmouseup();/**  * Property onmousewheel  * @type onmousewheel  * @returns {onmousewheel}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536951.aspx*/dir.prototype.onmousewheel= new onmousewheel();/**  * Property onmove  * @type onmove  * @returns {onmove}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536952.aspx*/dir.prototype.onmove= new onmove();/**  * Property onmoveend  * @type onmoveend  * @returns {onmoveend}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536953.aspx*/dir.prototype.onmoveend= new onmoveend();/**  * Property onmovestart  * @type onmovestart  * @returns {onmovestart}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536954.aspx*/dir.prototype.onmovestart= new onmovestart();/**  * Property onpaste  * @type onpaste  * @returns {onpaste}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536955.aspx*/dir.prototype.onpaste= new onpaste();/**  * Property onpropertychange  * @type onpropertychange  * @returns {onpropertychange}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536956.aspx*/dir.prototype.onpropertychange= new onpropertychange();/**  * Property onreadystatechange  * @type onreadystatechange  * @returns {onreadystatechange}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536957.aspx*/dir.prototype.onreadystatechange= new onreadystatechange();/**  * Property onresize  * @type onresize  * @returns {onresize}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536959.aspx*/dir.prototype.onresize= new onresize();/**  * Property onresizeend  * @type onresizeend  * @returns {onresizeend}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536960.aspx*/dir.prototype.onresizeend= new onresizeend();/**  * Property onresizestart  * @type onresizestart  * @returns {onresizestart}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536961.aspx*/dir.prototype.onresizestart= new onresizestart();/**  * Property onselectstart  * @type onselectstart  * @returns {onselectstart}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536969.aspx*/dir.prototype.onselectstart= new onselectstart();/**  * Property ontimeerror  * @type ontimeerror  * @returns {ontimeerror}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533588.aspx*/dir.prototype.ontimeerror= new ontimeerror();/**  * Property all  * @type all  * @returns {all}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537434.aspx*/dir.prototype.all= new all();/**  * Property attributes  * @type attributes  * @returns {attributes}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537438.aspx*/dir.prototype.attributes= new attributes();/**  * Property behaviorUrns  * @type behaviorUrns  * @returns {behaviorUrns}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537439.aspx*/dir.prototype.behaviorUrns= new behaviorUrns();/**  * Property childNodes  * @type childNodes  * @returns {childNodes}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537445.aspx*/dir.prototype.childNodes= new childNodes();/**  * Property TextNode  * @type TextNode  * @returns {TextNode}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535905.aspx*/dir.prototype.TextNode= new TextNode();/**  * Property children  * @type children  * @returns {children}
  * @memberOf dir  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537446.aspx*/dir.prototype.children= new children();