/******************************************************************************* * 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 frameSet()  * @type frameSet  * @super Object  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535251.aspx*/function frameSet(){};frameSet.prototype= new Object();/**  * Property border  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533533.aspx*/frameSet.prototype.border=new Object();/**  * Property borderColor  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533517.aspx*/frameSet.prototype.borderColor=new Object();/**  * Property canHaveChildren  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533546.aspx*/frameSet.prototype.canHaveChildren=false;/**  * Property canHaveHTML  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537836.aspx*/frameSet.prototype.canHaveHTML=false;/**  * Property className  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533560.aspx*/frameSet.prototype.className="";/**  * Property cols  * @type Number  * @returns {Number}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533584.aspx*/frameSet.prototype.cols=0;/**  * Property firstChild  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533755.aspx*/frameSet.prototype.firstChild=new Object();/**  * Property childNodes  * @type childNodes  * @returns {childNodes}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537445.aspx*/frameSet.prototype.childNodes= new childNodes();/**  * Property frameBorder  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533770.aspx*/frameSet.prototype.frameBorder="";/**  * Property frameSpacing  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533772.aspx*/frameSet.prototype.frameSpacing=new Object();/**  * Property hideFocus  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533783.aspx*/frameSet.prototype.hideFocus=false;/**  * Property id  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533880.aspx*/frameSet.prototype.id="";/**  * Property innerHTML  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533897.aspx*/frameSet.prototype.innerHTML="";/**  * Property isContentEditable  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537838.aspx*/frameSet.prototype.isContentEditable=false;/**  * Property isDisabled  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533902.aspx*/frameSet.prototype.isDisabled=false;/**  * Property isMultiLine  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537839.aspx*/frameSet.prototype.isMultiLine=false;/**  * Property isTextEdit  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533920.aspx*/frameSet.prototype.isTextEdit=false;/**  * Property TextRange  * @type TextRange  * @returns {TextRange}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535872.aspx*/frameSet.prototype.TextRange= new TextRange();/**  * Property lang  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533935.aspx*/frameSet.prototype.lang="";/**  * Property language  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533940.aspx*/frameSet.prototype.language="";/**  * Property lastChild  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533943.aspx*/frameSet.prototype.lastChild=new Object();/**  * Property name  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534182.aspx*/frameSet.prototype.name="";/**  * Property nextSibling  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534189.aspx*/frameSet.prototype.nextSibling=new Object();/**  * Property nodeName  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534190.aspx*/frameSet.prototype.nodeName="";/**  * Property nodeType  * @type Number  * @returns {Number}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534191.aspx*/frameSet.prototype.nodeType=0;/**  * Property nodeValue  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534192.aspx*/frameSet.prototype.nodeValue=new Object();/**  * Property outerHTML  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534310.aspx*/frameSet.prototype.outerHTML="";/**  * Property ownerDocument  * @type document  * @returns {document}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534315.aspx*/frameSet.prototype.ownerDocument=new document();/**  * Property document  * @type document  * @returns {document}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms531073.aspx*/frameSet.prototype.document= new document();/**  * Property parentElement  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534327.aspx*/frameSet.prototype.parentElement=new Object();/**  * Property parentNode  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534328.aspx*/frameSet.prototype.parentNode=new Object();/**  * Property parentTextEdit  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534330.aspx*/frameSet.prototype.parentTextEdit=new Object();/**  * Property previousSibling  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534350.aspx*/frameSet.prototype.previousSibling=new Object();/**  * Property readyState  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534358.aspx*/frameSet.prototype.readyState=new Object();/**  * Property rows  * @type Number  * @returns {Number}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534380.aspx*/frameSet.prototype.rows=0;/**  * Property scopeName  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534388.aspx*/frameSet.prototype.scopeName="";/**  * Property sourceIndex  * @type Number  * @returns {Number}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534635.aspx*/frameSet.prototype.sourceIndex=0;/**  * Property all  * @type all  * @returns {all}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537434.aspx*/frameSet.prototype.all= new all();/**  * Property tabIndex  * @type Number  * @returns {Number}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534654.aspx*/frameSet.prototype.tabIndex=0;/**  * Property tagName  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534657.aspx*/frameSet.prototype.tagName="";/**  * Property tagUrn  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534658.aspx*/frameSet.prototype.tagUrn="";/**  * Property title  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534683.aspx*/frameSet.prototype.title="";/**  * Property uniqueID  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534704.aspx*/frameSet.prototype.uniqueID="";/**  * Property width  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535147.aspx*/frameSet.prototype.width=new Object();/**  * function addBehavior(sUrl)  * @param {String} sUrl  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535922.aspx*/frameSet.prototype.addBehavior=function(sUrl){};/**  * function appendChild(oNode)  * @param {appendChild} oNode  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535934.aspx*/frameSet.prototype.appendChild=function(oNode){};/**  * function applyElement(oNewElement)  * @param {String} oNewElement  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536341.aspx*/frameSet.prototype.applyElement=function(oNewElement){};/**  * function attachEvent(sEvent,fpNotify)  * @param {String} sEvent  * @param {Boolean} fpNotify  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536343.aspx*/frameSet.prototype.attachEvent=function(sEvent,fpNotify){};/**  * function blur()  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536347.aspx*/frameSet.prototype.blur=function(){};/**  * Property onblur  * @type onblur  * @returns {onblur}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536909.aspx*/frameSet.prototype.onblur= new onblur();/**  * function clearAttributes()  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536350.aspx*/frameSet.prototype.clearAttributes=function(){};/**  * function cloneNode(bCloneChildren)  * @param {Boolean} bCloneChildren  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536365.aspx*/frameSet.prototype.cloneNode=function(bCloneChildren){};/**  * function componentFromPoint(iCoordX,iCoordY)  * @param {Number} iCoordX  * @param {Number} iCoordY  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536375.aspx*/frameSet.prototype.componentFromPoint=function(iCoordX,iCoordY){};/**  * function contains(oElement)  * @param {Boolean} oElement  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536377.aspx*/frameSet.prototype.contains=function(oElement){};/**  * function detachEvent(sEvent,fpNotify)  * @param {String} sEvent  * @param {attachEvent} fpNotify  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536411.aspx*/frameSet.prototype.detachEvent=function(sEvent,fpNotify){};/**  * function fireEvent(sEvent,oEventObject)  * @param {String} sEvent  * @param {event} oEventObject  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536423.aspx*/frameSet.prototype.fireEvent=function(sEvent,oEventObject){};/**  * function focus()  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536425.aspx*/frameSet.prototype.focus=function(){};/**  * Property onfocus  * @type onfocus  * @returns {onfocus}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536934.aspx*/frameSet.prototype.onfocus= new onfocus();/**  * function getAdjacentText(sWhere)  * @param {String} sWhere  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536427.aspx*/frameSet.prototype.getAdjacentText=function(sWhere){};/**  * function getAttribute(sAttrName,iFlags,sAttrName)  * @param {String} sAttrName  * @param {Number} iFlags  * @param {getAttribute} sAttrName  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536429.aspx*/frameSet.prototype.getAttribute=function(sAttrName,iFlags,sAttrName){};/**  * function getAttributeNode(sName)  * @param {String} sName  * @type attribute  * @returns {attribute}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536430.aspx*/frameSet.prototype.getAttributeNode=function(sName){};/**  * Property attribute  * @type attribute  * @returns {attribute}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535187.aspx*/frameSet.prototype.attribute= new attribute();/**  * Property name  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534184.aspx*/frameSet.prototype.name="";/**  * function getElementsByTagName(sTagName)  * @param {String} sTagName  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536439.aspx*/frameSet.prototype.getElementsByTagName=function(sTagName){};/**  * function hasChildNodes()  * @type HTML Elements  * @returns {HTML}
 Elements  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536445.aspx*/frameSet.prototype.hasChildNodes=function(){};/**  * function insertAdjacentElement(sWhere,oElement)  * @param {String} sWhere  * @param {insertAdjacentElement} oElement  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536451.aspx*/frameSet.prototype.insertAdjacentElement=function(sWhere,oElement){};/**  * function insertAdjacentHTML(sWhere,sText)  * @param {String} sWhere  * @param {String} sText  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536452.aspx*/frameSet.prototype.insertAdjacentHTML=function(sWhere,sText){};/**  * function insertAdjacentText(sWhere,sText)  * @param {String} sWhere  * @param {String} sText  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536453.aspx*/frameSet.prototype.insertAdjacentText=function(sWhere,sText){};/**  * function insertBefore(oNewNode,oChildNode)  * @param {Object} oNewNode  * @param {Object} oChildNode  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536454.aspx*/frameSet.prototype.insertBefore=function(oNewNode,oChildNode){};/**  * function mergeAttributes(oSource,bPreserve)  * @param {Object} oSource  * @param {Boolean} bPreserve  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536614.aspx*/frameSet.prototype.mergeAttributes=function(oSource,bPreserve){};/**  * function normalize()  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536646.aspx*/frameSet.prototype.normalize=function(){};/**  * function removeAttribute(sName,iCaseSensitive)  * @param {String} sName  * @param {Number} iCaseSensitive  * @type Boolean  * @returns {Boolean}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536696.aspx*/frameSet.prototype.removeAttribute=function(sName,iCaseSensitive){};/**  * function removeAttributeNode(oSrcAttribute)  * @param {attribute} oSrcAttribute  * @type attribute  * @returns {attribute}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536698.aspx*/frameSet.prototype.removeAttributeNode=function(oSrcAttribute){};/**  * function removeBehavior(iID)  * @param {Number} iID  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536700.aspx*/frameSet.prototype.removeBehavior=function(iID){};/**  * function removeChild(oNode)  * @param {Object} oNode  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536702.aspx*/frameSet.prototype.removeChild=function(oNode){};/**  * function removeNode(bRemoveChildren)  * @param {Boolean} bRemoveChildren  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536708.aspx*/frameSet.prototype.removeNode=function(bRemoveChildren){};/**  * function replaceAdjacentText(sWhere,sReplaceText)  * @param {String} sWhere  * @param {String} sReplaceText  * @type String  * @returns {String}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536714.aspx*/frameSet.prototype.replaceAdjacentText=function(sWhere,sReplaceText){};/**  * function replaceChild(oNewNode,oChildNode)  * @param {Object} oNewNode  * @param {Object} oChildNode  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536716.aspx*/frameSet.prototype.replaceChild=function(oNewNode,oChildNode){};/**  * function replaceNode(oNewNode)  * @param {Object} oNewNode  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536719.aspx*/frameSet.prototype.replaceNode=function(oNewNode){};/**  * function setActive()  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536738.aspx*/frameSet.prototype.setActive=function(){};/**  * function setAttribute(sName,vValue)  * @param {String} sName  * @param {Number} vValue  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536739.aspx*/frameSet.prototype.setAttribute=function(sName,vValue){};/**  * function setAttributeNode(oSrcAttribute)  * @param {attribute} oSrcAttribute  * @type attribute  * @returns {attribute}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536741.aspx*/frameSet.prototype.setAttributeNode=function(oSrcAttribute){};/**  * function swapNode(oNode)  * @param {Object} oNode  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536774.aspx*/frameSet.prototype.swapNode=function(oNode){};/**  * Property onactivate  * @type onactivate  * @returns {onactivate}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536787.aspx*/frameSet.prototype.onactivate= new onactivate();/**  * Property activeElement  * @type Object  * @returns {Object}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533065.aspx*/frameSet.prototype.activeElement=new Object();/**  * Property onafterprint  * @type onafterprint  * @returns {onafterprint}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536788.aspx*/frameSet.prototype.onafterprint= new onafterprint();/**  * Property onbeforedeactivate  * @type onbeforedeactivate  * @returns {onbeforedeactivate}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536903.aspx*/frameSet.prototype.onbeforedeactivate= new onbeforedeactivate();/**  * Property onbeforeprint  * @type onbeforeprint  * @returns {onbeforeprint}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536906.aspx*/frameSet.prototype.onbeforeprint= new onbeforeprint();/**  * Property onbeforeunload  * @type onbeforeunload  * @returns {onbeforeunload}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536907.aspx*/frameSet.prototype.onbeforeunload= new onbeforeunload();/**  * Property onblur  * @type onblur  * @returns {onblur}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536909.aspx*/frameSet.prototype.onblur= new onblur();/**  * Property oncontrolselect  * @type oncontrolselect  * @returns {oncontrolselect}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537844.aspx*/frameSet.prototype.oncontrolselect= new oncontrolselect();/**  * Property ondeactivate  * @type ondeactivate  * @returns {ondeactivate}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536922.aspx*/frameSet.prototype.ondeactivate= new ondeactivate();/**  * Property onfocus  * @type onfocus  * @returns {onfocus}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536934.aspx*/frameSet.prototype.onfocus= new onfocus();/**  * Property onload  * @type onload  * @returns {onload}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536942.aspx*/frameSet.prototype.onload= new onload();/**  * Property onmove  * @type onmove  * @returns {onmove}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536952.aspx*/frameSet.prototype.onmove= new onmove();/**  * Property onmoveend  * @type onmoveend  * @returns {onmoveend}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536953.aspx*/frameSet.prototype.onmoveend= new onmoveend();/**  * Property onmovestart  * @type onmovestart  * @returns {onmovestart}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536954.aspx*/frameSet.prototype.onmovestart= new onmovestart();/**  * Property onresizeend  * @type onresizeend  * @returns {onresizeend}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536960.aspx*/frameSet.prototype.onresizeend= new onresizeend();/**  * Property onresizestart  * @type onresizestart  * @returns {onresizestart}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536961.aspx*/frameSet.prototype.onresizestart= new onresizestart();/**  * Property onunload  * @type onunload  * @returns {onunload}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536973.aspx*/frameSet.prototype.onunload= new onunload();/**  * Property all  * @type all  * @returns {all}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537434.aspx*/frameSet.prototype.all= new all();/**  * Property attributes  * @type attributes  * @returns {attributes}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537438.aspx*/frameSet.prototype.attributes= new attributes();/**  * Property behaviorUrns  * @type behaviorUrns  * @returns {behaviorUrns}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537439.aspx*/frameSet.prototype.behaviorUrns= new behaviorUrns();/**  * Property childNodes  * @type childNodes  * @returns {childNodes}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537445.aspx*/frameSet.prototype.childNodes= new childNodes();/**  * Property TextNode  * @type TextNode  * @returns {TextNode}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535905.aspx*/frameSet.prototype.TextNode= new TextNode();/**  * Property children  * @type children  * @returns {children}
  * @memberOf frameSet  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537446.aspx*/frameSet.prototype.children= new children();