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