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