/******************************************************************************* * 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 applet()  * @type applet  * @super Object  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535183.aspx*/function applet(){};applet.prototype= new Object();/**  * Property accessKey  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533062.aspx*/applet.prototype.accessKey="";/**  * Property align  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533066.aspx*/applet.prototype.align="";/**  * Property alt  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533073.aspx*/applet.prototype.alt="";/**  * Property altHTML  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533074.aspx*/applet.prototype.altHTML="";/**  * Property archive  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533081.aspx*/applet.prototype.archive="";/**  * Property canHaveHTML  * @type Boolean  * @returns {Boolean}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537836.aspx*/applet.prototype.canHaveHTML=false;/**  * Property className  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533560.aspx*/applet.prototype.className="";/**  * Property clientHeight  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533563.aspx*/applet.prototype.clientHeight=0;/**  * Property clientLeft  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533564.aspx*/applet.prototype.clientLeft=0;/**  * Property offsetLeft  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534200.aspx*/applet.prototype.offsetLeft=0;/**  * Property clientTop  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533565.aspx*/applet.prototype.clientTop=0;/**  * Property offsetTop  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534303.aspx*/applet.prototype.offsetTop=0;/**  * Property clientWidth  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533566.aspx*/applet.prototype.clientWidth=0;/**  * Property code  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533575.aspx*/applet.prototype.code="";/**  * Property codeBase  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533576.aspx*/applet.prototype.codeBase="";/**  * Property dataFld  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533703.aspx*/applet.prototype.dataFld="";/**  * Property dataSrc  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533709.aspx*/applet.prototype.dataSrc="";/**  * Property firstChild  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533755.aspx*/applet.prototype.firstChild=new Object();/**  * Property childNodes  * @type childNodes  * @returns {childNodes}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537445.aspx*/applet.prototype.childNodes= new childNodes();/**  * Property hideFocus  * @type Boolean  * @returns {Boolean}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533783.aspx*/applet.prototype.hideFocus=false;/**  * Property hspace  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533868.aspx*/applet.prototype.hspace=0;/**  * Property id  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533880.aspx*/applet.prototype.id="";/**  * Property isContentEditable  * @type Boolean  * @returns {Boolean}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537838.aspx*/applet.prototype.isContentEditable=false;/**  * Property isDisabled  * @type Boolean  * @returns {Boolean}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533902.aspx*/applet.prototype.isDisabled=false;/**  * Property isMultiLine  * @type Boolean  * @returns {Boolean}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537839.aspx*/applet.prototype.isMultiLine=false;/**  * Property isTextEdit  * @type Boolean  * @returns {Boolean}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533920.aspx*/applet.prototype.isTextEdit=false;/**  * Property TextRange  * @type TextRange  * @returns {TextRange}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535872.aspx*/applet.prototype.TextRange= new TextRange();/**  * Property lang  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533935.aspx*/applet.prototype.lang="";/**  * Property language  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533940.aspx*/applet.prototype.language="";/**  * Property lastChild  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533943.aspx*/applet.prototype.lastChild=new Object();/**  * Property name  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534184.aspx*/applet.prototype.name="";/**  * Property nextSibling  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534189.aspx*/applet.prototype.nextSibling=new Object();/**  * Property nodeName  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534190.aspx*/applet.prototype.nodeName="";/**  * Property nodeType  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534191.aspx*/applet.prototype.nodeType=0;/**  * Property nodeValue  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534192.aspx*/applet.prototype.nodeValue=new Object();/**  * Property object  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534197.aspx*/applet.prototype.object=new Object();/**  * Property offsetHeight  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534199.aspx*/applet.prototype.offsetHeight=0;/**  * Property offsetParent  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534302.aspx*/applet.prototype.offsetParent=new Object();/**  * Property offsetWidth  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534304.aspx*/applet.prototype.offsetWidth=0;/**  * Property outerHTML  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534310.aspx*/applet.prototype.outerHTML="";/**  * Property outerText  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534311.aspx*/applet.prototype.outerText="";/**  * Property ownerDocument  * @type document  * @returns {document}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534315.aspx*/applet.prototype.ownerDocument=new document();/**  * Property document  * @type document  * @returns {document}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms531073.aspx*/applet.prototype.document= new document();/**  * Property parentElement  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534327.aspx*/applet.prototype.parentElement=new Object();/**  * Property parentNode  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534328.aspx*/applet.prototype.parentNode=new Object();/**  * Property parentTextEdit  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534330.aspx*/applet.prototype.parentTextEdit=new Object();/**  * Property previousSibling  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534350.aspx*/applet.prototype.previousSibling=new Object();/**  * Property readyState  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534358.aspx*/applet.prototype.readyState=new Object();/**  * Property scopeName  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534388.aspx*/applet.prototype.scopeName="";/**  * Property scrollHeight  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534615.aspx*/applet.prototype.scrollHeight=new Object();/**  * Property scrollLeft  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534617.aspx*/applet.prototype.scrollLeft=0;/**  * Property scrollTop  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534618.aspx*/applet.prototype.scrollTop=0;/**  * Property scrollWidth  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534619.aspx*/applet.prototype.scrollWidth=new Object();/**  * Property sourceIndex  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534635.aspx*/applet.prototype.sourceIndex=0;/**  * Property all  * @type all  * @returns {all}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537434.aspx*/applet.prototype.all= new all();/**  * Property src  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534643.aspx*/applet.prototype.src="";/**  * Property tabIndex  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534654.aspx*/applet.prototype.tabIndex=0;/**  * Property tagName  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534657.aspx*/applet.prototype.tagName="";/**  * Property tagUrn  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534658.aspx*/applet.prototype.tagUrn="";/**  * Property title  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534683.aspx*/applet.prototype.title="";/**  * Property uniqueID  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534704.aspx*/applet.prototype.uniqueID="";/**  * Property vspace  * @type Number  * @returns {Number}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535141.aspx*/applet.prototype.vspace=0;/**  * function addBehavior(sUrl)  * @param {String} sUrl  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535922.aspx*/applet.prototype.addBehavior=function(sUrl){};/**  * function applyElement(oNewElement)  * @param {String} oNewElement  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536341.aspx*/applet.prototype.applyElement=function(oNewElement){};/**  * function attachEvent(sEvent,fpNotify)  * @param {String} sEvent  * @param {Boolean} fpNotify  * @type Boolean  * @returns {Boolean}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536343.aspx*/applet.prototype.attachEvent=function(sEvent,fpNotify){};/**  * function blur()  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536347.aspx*/applet.prototype.blur=function(){};/**  * Property onblur  * @type onblur  * @returns {onblur}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536909.aspx*/applet.prototype.onblur= new onblur();/**  * function clearAttributes()  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536350.aspx*/applet.prototype.clearAttributes=function(){};/**  * function click()  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536363.aspx*/applet.prototype.click=function(){};/**  * Property onclick  * @type onclick  * @returns {onclick}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536913.aspx*/applet.prototype.onclick= new onclick();/**  * function cloneNode(bCloneChildren)  * @param {Boolean} bCloneChildren  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536365.aspx*/applet.prototype.cloneNode=function(bCloneChildren){};/**  * function componentFromPoint(iCoordX,iCoordY)  * @param {Number} iCoordX  * @param {Number} iCoordY  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536375.aspx*/applet.prototype.componentFromPoint=function(iCoordX,iCoordY){};/**  * function contains(oElement)  * @param {Boolean} oElement  * @type Boolean  * @returns {Boolean}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536377.aspx*/applet.prototype.contains=function(oElement){};/**  * function detachEvent(sEvent,fpNotify)  * @param {String} sEvent  * @param {attachEvent} fpNotify  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536411.aspx*/applet.prototype.detachEvent=function(sEvent,fpNotify){};/**  * function fireEvent(sEvent,oEventObject)  * @param {String} sEvent  * @param {event} oEventObject  * @type Boolean  * @returns {Boolean}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536423.aspx*/applet.prototype.fireEvent=function(sEvent,oEventObject){};/**  * function focus()  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536425.aspx*/applet.prototype.focus=function(){};/**  * Property onfocus  * @type onfocus  * @returns {onfocus}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536934.aspx*/applet.prototype.onfocus= new onfocus();/**  * function getAdjacentText(sWhere)  * @param {String} sWhere  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536427.aspx*/applet.prototype.getAdjacentText=function(sWhere){};/**  * function getAttribute(sAttrName,iFlags,sAttrName)  * @param {String} sAttrName  * @param {Number} iFlags  * @param {getAttribute} sAttrName  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536429.aspx*/applet.prototype.getAttribute=function(sAttrName,iFlags,sAttrName){};/**  * function getAttributeNode(sName)  * @param {String} sName  * @type attribute  * @returns {attribute}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536430.aspx*/applet.prototype.getAttributeNode=function(sName){};/**  * Property attribute  * @type attribute  * @returns {attribute}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535187.aspx*/applet.prototype.attribute= new attribute();/**  * Property name  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534184.aspx*/applet.prototype.name="";/**  * function getBoundingClientRect()  * @type TextRectangle  * @returns {TextRectangle}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536433.aspx*/applet.prototype.getBoundingClientRect=function(){};/**  * Property TextRectangle  * @type TextRectangle  * @returns {TextRectangle}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535906.aspx*/applet.prototype.TextRectangle= new TextRectangle();/**  * function getClientRects()  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536435.aspx*/applet.prototype.getClientRects=function(){};/**  * function getElementsByTagName(sTagName)  * @param {String} sTagName  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536439.aspx*/applet.prototype.getElementsByTagName=function(sTagName){};/**  * function hasChildNodes()  * @type HTML Elements  * @returns {HTML}
 Elements  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536445.aspx*/applet.prototype.hasChildNodes=function(){};/**  * function insertAdjacentElement(sWhere,oElement)  * @param {String} sWhere  * @param {insertAdjacentElement} oElement  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536451.aspx*/applet.prototype.insertAdjacentElement=function(sWhere,oElement){};/**  * function mergeAttributes(oSource,bPreserve)  * @param {Object} oSource  * @param {Boolean} bPreserve  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536614.aspx*/applet.prototype.mergeAttributes=function(oSource,bPreserve){};/**  * function namedRecordset(sQualifier,sSubChapter)  * @param {String} sQualifier  * @param {String} sSubChapter  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536636.aspx*/applet.prototype.namedRecordset=function(sQualifier,sSubChapter){};/**  * function normalize()  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536646.aspx*/applet.prototype.normalize=function(){};/**  * function releaseCapture()  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536689.aspx*/applet.prototype.releaseCapture=function(){};/**  * function removeAttribute(sName,iCaseSensitive)  * @param {String} sName  * @param {Number} iCaseSensitive  * @type Boolean  * @returns {Boolean}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536696.aspx*/applet.prototype.removeAttribute=function(sName,iCaseSensitive){};/**  * function removeAttributeNode(oSrcAttribute)  * @param {attribute} oSrcAttribute  * @type attribute  * @returns {attribute}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536698.aspx*/applet.prototype.removeAttributeNode=function(oSrcAttribute){};/**  * function removeBehavior(iID)  * @param {Number} iID  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536700.aspx*/applet.prototype.removeBehavior=function(iID){};/**  * function removeExpression(sPropertyName)  * @param {String} sPropertyName  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/aa358798.aspx*/applet.prototype.removeExpression=function(sPropertyName){};/**  * function replaceAdjacentText(sWhere,sReplaceText)  * @param {String} sWhere  * @param {String} sReplaceText  * @type String  * @returns {String}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536714.aspx*/applet.prototype.replaceAdjacentText=function(sWhere,sReplaceText){};/**  * function scrollIntoView(bAlignToTop)  * @param {Boolean} bAlignToTop  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536730.aspx*/applet.prototype.scrollIntoView=function(bAlignToTop){};/**  * function setActive()  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536738.aspx*/applet.prototype.setActive=function(){};/**  * function setAttribute(sName,vValue)  * @param {String} sName  * @param {Number} vValue  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536739.aspx*/applet.prototype.setAttribute=function(sName,vValue){};/**  * function setAttributeNode(oSrcAttribute)  * @param {attribute} oSrcAttribute  * @type attribute  * @returns {attribute}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536741.aspx*/applet.prototype.setAttributeNode=function(oSrcAttribute){};/**  * function setCapture(bContainerCapture)  * @param {Boolean} bContainerCapture  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536742.aspx*/applet.prototype.setCapture=function(bContainerCapture){};/**  * function setExpression(sPropertyName,sExpression,sLanguage)  * @param {String} sPropertyName  * @param {String} sExpression  * @param {String} sLanguage  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms531196.aspx*/applet.prototype.setExpression=function(sPropertyName,sExpression,sLanguage){};/**  * function swapNode(oNode)  * @param {Object} oNode  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536774.aspx*/applet.prototype.swapNode=function(oNode){};/**  * Property onactivate  * @type onactivate  * @returns {onactivate}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536787.aspx*/applet.prototype.onactivate= new onactivate();/**  * Property activeElement  * @type Object  * @returns {Object}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533065.aspx*/applet.prototype.activeElement=new Object();/**  * Property onbeforeactivate  * @type onbeforeactivate  * @returns {onbeforeactivate}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536791.aspx*/applet.prototype.onbeforeactivate= new onbeforeactivate();/**  * Property onbeforecut  * @type onbeforecut  * @returns {onbeforecut}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536902.aspx*/applet.prototype.onbeforecut= new onbeforecut();/**  * Property onbeforedeactivate  * @type onbeforedeactivate  * @returns {onbeforedeactivate}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536903.aspx*/applet.prototype.onbeforedeactivate= new onbeforedeactivate();/**  * Property onbeforeeditfocus  * @type onbeforeeditfocus  * @returns {onbeforeeditfocus}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536904.aspx*/applet.prototype.onbeforeeditfocus= new onbeforeeditfocus();/**  * Property onbeforepaste  * @type onbeforepaste  * @returns {onbeforepaste}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536905.aspx*/applet.prototype.onbeforepaste= new onbeforepaste();/**  * Property onblur  * @type onblur  * @returns {onblur}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536909.aspx*/applet.prototype.onblur= new onblur();/**  * Property oncellchange  * @type oncellchange  * @returns {oncellchange}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536911.aspx*/applet.prototype.oncellchange= new oncellchange();/**  * Property onclick  * @type onclick  * @returns {onclick}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536913.aspx*/applet.prototype.onclick= new onclick();/**  * Property oncontextmenu  * @type oncontextmenu  * @returns {oncontextmenu}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536914.aspx*/applet.prototype.oncontextmenu= new oncontextmenu();/**  * Property oncontrolselect  * @type oncontrolselect  * @returns {oncontrolselect}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537844.aspx*/applet.prototype.oncontrolselect= new oncontrolselect();/**  * Property oncut  * @type oncut  * @returns {oncut}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536917.aspx*/applet.prototype.oncut= new oncut();/**  * Property ondataavailable  * @type ondataavailable  * @returns {ondataavailable}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536918.aspx*/applet.prototype.ondataavailable= new ondataavailable();/**  * Property ondatasetchanged  * @type ondatasetchanged  * @returns {ondatasetchanged}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536919.aspx*/applet.prototype.ondatasetchanged= new ondatasetchanged();/**  * Property ondatasetcomplete  * @type ondatasetcomplete  * @returns {ondatasetcomplete}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536920.aspx*/applet.prototype.ondatasetcomplete= new ondatasetcomplete();/**  * Property ondblclick  * @type ondblclick  * @returns {ondblclick}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536921.aspx*/applet.prototype.ondblclick= new ondblclick();/**  * Property ondeactivate  * @type ondeactivate  * @returns {ondeactivate}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536922.aspx*/applet.prototype.ondeactivate= new ondeactivate();/**  * Property onfocus  * @type onfocus  * @returns {onfocus}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536934.aspx*/applet.prototype.onfocus= new onfocus();/**  * Property onfocusin  * @type onfocusin  * @returns {onfocusin}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536935.aspx*/applet.prototype.onfocusin= new onfocusin();/**  * Property onfocusout  * @type onfocusout  * @returns {onfocusout}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536936.aspx*/applet.prototype.onfocusout= new onfocusout();/**  * Property onhelp  * @type onhelp  * @returns {onhelp}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536937.aspx*/applet.prototype.onhelp= new onhelp();/**  * Property onkeydown  * @type onkeydown  * @returns {onkeydown}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536938.aspx*/applet.prototype.onkeydown= new onkeydown();/**  * Property onkeypress  * @type onkeypress  * @returns {onkeypress}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536939.aspx*/applet.prototype.onkeypress= new onkeypress();/**  * Property onkeyup  * @type onkeyup  * @returns {onkeyup}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536940.aspx*/applet.prototype.onkeyup= new onkeyup();/**  * Property onload  * @type onload  * @returns {onload}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536942.aspx*/applet.prototype.onload= new onload();/**  * Property onlosecapture  * @type onlosecapture  * @returns {onlosecapture}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536943.aspx*/applet.prototype.onlosecapture= new onlosecapture();/**  * Property onmousedown  * @type onmousedown  * @returns {onmousedown}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536944.aspx*/applet.prototype.onmousedown= new onmousedown();/**  * Property onmouseenter  * @type onmouseenter  * @returns {onmouseenter}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536945.aspx*/applet.prototype.onmouseenter= new onmouseenter();/**  * Property onmouseleave  * @type onmouseleave  * @returns {onmouseleave}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536946.aspx*/applet.prototype.onmouseleave= new onmouseleave();/**  * Property onmousemove  * @type onmousemove  * @returns {onmousemove}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536947.aspx*/applet.prototype.onmousemove= new onmousemove();/**  * Property onmouseout  * @type onmouseout  * @returns {onmouseout}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536948.aspx*/applet.prototype.onmouseout= new onmouseout();/**  * Property onmouseover  * @type onmouseover  * @returns {onmouseover}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536949.aspx*/applet.prototype.onmouseover= new onmouseover();/**  * Property onmouseup  * @type onmouseup  * @returns {onmouseup}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536950.aspx*/applet.prototype.onmouseup= new onmouseup();/**  * Property onmousewheel  * @type onmousewheel  * @returns {onmousewheel}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536951.aspx*/applet.prototype.onmousewheel= new onmousewheel();/**  * Property onmove  * @type onmove  * @returns {onmove}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536952.aspx*/applet.prototype.onmove= new onmove();/**  * Property onmoveend  * @type onmoveend  * @returns {onmoveend}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536953.aspx*/applet.prototype.onmoveend= new onmoveend();/**  * Property onmovestart  * @type onmovestart  * @returns {onmovestart}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536954.aspx*/applet.prototype.onmovestart= new onmovestart();/**  * Property onpaste  * @type onpaste  * @returns {onpaste}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536955.aspx*/applet.prototype.onpaste= new onpaste();/**  * Property onpropertychange  * @type onpropertychange  * @returns {onpropertychange}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536956.aspx*/applet.prototype.onpropertychange= new onpropertychange();/**  * Property onreadystatechange  * @type onreadystatechange  * @returns {onreadystatechange}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536957.aspx*/applet.prototype.onreadystatechange= new onreadystatechange();/**  * Property onresize  * @type onresize  * @returns {onresize}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536959.aspx*/applet.prototype.onresize= new onresize();/**  * Property onresizeend  * @type onresizeend  * @returns {onresizeend}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536960.aspx*/applet.prototype.onresizeend= new onresizeend();/**  * Property onresizestart  * @type onresizestart  * @returns {onresizestart}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536961.aspx*/applet.prototype.onresizestart= new onresizestart();/**  * Property onrowenter  * @type onrowenter  * @returns {onrowenter}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536962.aspx*/applet.prototype.onrowenter= new onrowenter();/**  * Property onrowexit  * @type onrowexit  * @returns {onrowexit}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536963.aspx*/applet.prototype.onrowexit= new onrowexit();/**  * Property onrowsdelete  * @type onrowsdelete  * @returns {onrowsdelete}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536964.aspx*/applet.prototype.onrowsdelete= new onrowsdelete();/**  * Property onrowsinserted  * @type onrowsinserted  * @returns {onrowsinserted}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536965.aspx*/applet.prototype.onrowsinserted= new onrowsinserted();/**  * Property onscroll  * @type onscroll  * @returns {onscroll}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536966.aspx*/applet.prototype.onscroll= new onscroll();/**  * Property all  * @type all  * @returns {all}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537434.aspx*/applet.prototype.all= new all();/**  * Property attributes  * @type attributes  * @returns {attributes}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537438.aspx*/applet.prototype.attributes= new attributes();/**  * Property behaviorUrns  * @type behaviorUrns  * @returns {behaviorUrns}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537439.aspx*/applet.prototype.behaviorUrns= new behaviorUrns();/**  * Property childNodes  * @type childNodes  * @returns {childNodes}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537445.aspx*/applet.prototype.childNodes= new childNodes();/**  * Property TextNode  * @type TextNode  * @returns {TextNode}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535905.aspx*/applet.prototype.TextNode= new TextNode();/**  * Property children  * @type children  * @returns {children}
  * @memberOf applet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537446.aspx*/applet.prototype.children= new children();