/******************************************************************************* * 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 meta()  * @type meta  * @super Object  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535853.aspx*/function meta(){};meta.prototype= new Object();/**  * Property charset  * @type String  * @returns {String}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533553.aspx*/meta.prototype.charset="";/**  * Property clientHeight  * @type Number  * @returns {Number}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533563.aspx*/meta.prototype.clientHeight=0;/**  * Property clientLeft  * @type Number  * @returns {Number}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533564.aspx*/meta.prototype.clientLeft=0;/**  * Property offsetLeft  * @type Number  * @returns {Number}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534200.aspx*/meta.prototype.offsetLeft=0;/**  * Property clientTop  * @type Number  * @returns {Number}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533565.aspx*/meta.prototype.clientTop=0;/**  * Property offsetTop  * @type Number  * @returns {Number}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534303.aspx*/meta.prototype.offsetTop=0;/**  * Property clientWidth  * @type Number  * @returns {Number}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533566.aspx*/meta.prototype.clientWidth=0;/**  * Property content  * @type String  * @returns {String}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533689.aspx*/meta.prototype.content="";/**  * Property httpEquiv  * @type String  * @returns {String}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533876.aspx*/meta.prototype.httpEquiv="";/**  * Property name  * @type String  * @returns {String}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534183.aspx*/meta.prototype.name="";/**  * Property isTextEdit  * @type Boolean  * @returns {Boolean}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms533920.aspx*/meta.prototype.isTextEdit=false;/**  * Property TextRange  * @type TextRange  * @returns {TextRange}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms535872.aspx*/meta.prototype.TextRange= new TextRange();/**  * Property parentTextEdit  * @type Object  * @returns {Object}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534330.aspx*/meta.prototype.parentTextEdit=new Object();/**  * Property scheme  * @type String  * @returns {String}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534386.aspx*/meta.prototype.scheme="";/**  * Property scrollHeight  * @type Object  * @returns {Object}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534615.aspx*/meta.prototype.scrollHeight=new Object();/**  * Property scrollLeft  * @type Number  * @returns {Number}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534617.aspx*/meta.prototype.scrollLeft=0;/**  * Property scrollTop  * @type Number  * @returns {Number}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534618.aspx*/meta.prototype.scrollTop=0;/**  * Property scrollWidth  * @type Object  * @returns {Object}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534619.aspx*/meta.prototype.scrollWidth=new Object();/**  * Property sourceIndex  * @type Number  * @returns {Number}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534635.aspx*/meta.prototype.sourceIndex=0;/**  * Property all  * @type all  * @returns {all}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537434.aspx*/meta.prototype.all= new all();/**  * Property tagName  * @type String  * @returns {String}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534657.aspx*/meta.prototype.tagName="";/**  * Property onlayoutcomplete  * @type onlayoutcomplete  * @returns {onlayoutcomplete}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536941.aspx*/meta.prototype.onlayoutcomplete= new onlayoutcomplete();/**  * function contains(oElement)  * @param {Boolean} oElement  * @type Boolean  * @returns {Boolean}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536377.aspx*/meta.prototype.contains=function(oElement){};/**  * function dragDrop()  * @type Boolean  * @returns {Boolean}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536415.aspx*/meta.prototype.dragDrop=function(){};/**  * function getAttribute(sAttrName,iFlags,sAttrName)  * @param {String} sAttrName  * @param {Number} iFlags  * @param {getAttribute} sAttrName  * @type Object  * @returns {Object}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536429.aspx*/meta.prototype.getAttribute=function(sAttrName,iFlags,sAttrName){};/**  * function removeAttribute(sName,iCaseSensitive)  * @param {String} sName  * @param {Number} iCaseSensitive  * @type Boolean  * @returns {Boolean}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536696.aspx*/meta.prototype.removeAttribute=function(sName,iCaseSensitive){};/**  * function setAttribute(sName,vValue)  * @param {String} sName  * @param {Number} vValue  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536739.aspx*/meta.prototype.setAttribute=function(sName,vValue){};/**  * Property onlayoutcomplete  * @type onlayoutcomplete  * @returns {onlayoutcomplete}
  * @memberOf meta  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536941.aspx*/meta.prototype.onlayoutcomplete= new onlayoutcomplete();