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