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