/******************************************************************************* * 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 controlRange()  * @type controlRange  * @super Array  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537447.aspx*/function controlRange(){};controlRange.prototype= new Array();/**  * Property length  * @type Number  * @returns {Number}
  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534101.aspx*/controlRange.prototype.length=0;/**  * function add(oElement,iIndex)  * @param {Object} oElement  * @param {Number} iIndex  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535921.aspx*/controlRange.prototype.add=function(oElement,iIndex){};/**  * function add(oElement,iIndex)  * @param {Object} oElement  * @param {Number} iIndex  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535921.aspx*/controlRange.prototype.add=function(oElement,iIndex){};/**  * Property areas  * @type areas  * @returns {areas}
  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537437.aspx*/controlRange.prototype.areas= new areas();/**  * Property options  * @type options  * @returns {options}
  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537472.aspx*/controlRange.prototype.options= new options();/**  * function addElement(oElement)  * @param {Object} oElement  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535925.aspx*/controlRange.prototype.addElement=function(oElement){};/**  * function execCommand(sCommand,bUserInterface,vValue)  * @param {String} sCommand  * @param {Boolean} bUserInterface  * @param {Variant} vValue  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536419.aspx*/controlRange.prototype.execCommand=function(sCommand,bUserInterface,vValue){};/**  * function item(iIndex)  * @param {Number} iIndex  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536605.aspx*/controlRange.prototype.item=function(iIndex){};/**  * function queryCommandEnabled(sCmdID)  * @param {String} sCmdID  * @type Boolean  * @returns {Boolean}
  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536676.aspx*/controlRange.prototype.queryCommandEnabled=function(sCmdID){};/**  * function queryCommandIndeterm(sCmdID)  * @param {String} sCmdID  * @type Boolean  * @returns {Boolean}
  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536678.aspx*/controlRange.prototype.queryCommandIndeterm=function(sCmdID){};/**  * function queryCommandState(sCmdID)  * @param {String} sCmdID  * @type Boolean  * @returns {Boolean}
  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536679.aspx*/controlRange.prototype.queryCommandState=function(sCmdID){};/**  * function queryCommandSupported(sCmdID)  * @param {String} sCmdID  * @type Boolean  * @returns {Boolean}
  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536681.aspx*/controlRange.prototype.queryCommandSupported=function(sCmdID){};/**  * function queryCommandValue(sCmdID)  * @param {String} sCmdID  * @type Object  * @returns {Object}
  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536683.aspx*/controlRange.prototype.queryCommandValue=function(sCmdID){};/**  * function remove(iIndex)  * @param {Number} iIndex  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536694.aspx*/controlRange.prototype.remove=function(iIndex){};/**  * function scrollIntoView(bAlignToTop)  * @param {Boolean} bAlignToTop  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536730.aspx*/controlRange.prototype.scrollIntoView=function(bAlignToTop){};/**  * function select()  * @memberOf controlRange  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536735.aspx*/controlRange.prototype.select=function(){};