jQuery+CSS3过渡动画模态窗口特效

版权:原创 更新时间:1年以上
[该文章底部包含文件资源,可根据自己情况,决定是否下载资源使用,时间>金钱,如有需要,立即查看资源]

以下是 jQuery+CSS3过渡动画模态窗口特效 的示例演示效果:

当前平台(PC电脑)
  • 平台:

部分效果截图:

jQuery+CSS3过渡动画模态窗口特效

HTML代码(index.html):

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jQuery+CSS3过渡动画模态窗口特效</title>

<link rel="stylesheet" type="text/css" href="lib/demo.css" />
<link rel="stylesheet" type="text/css" href="dist/jquery.niftymodals.css" />  

</head>
<body>
<div class="container">
	<div class="main clearfix">
		<div class="column">
			<p>There are many possibilities for modal overlays to appear. Here are some modern ways of showing them using CSS transitions and animations.</p>
		</div>
		<div class="column">
			<button class="md-trigger" data-modal="modal-1">Fade in &amp; Scale</button>
			<button class="md-trigger" data-modal="modal-2">Slide in (right)</button>
			<button class="md-trigger" data-modal="modal-3">Slide in (bottom)</button>
			<button class="md-trigger" data-modal="modal-4">Newspaper</button>
			<button class="md-trigger" data-modal="modal-5">Fall</button>
			<button class="md-trigger" data-modal="modal-6">Side Fall</button>
			<button class="md-trigger" data-modal="modal-7">Sticky Up</button>
			<button class="md-trigger" data-modal="modal-8">3D Flip (horizontal)</button>
			<button class="md-trigger" data-modal="modal-9">3D Flip (vertical)</button>
			<button class="md-trigger" data-modal="modal-10">3D Sign</button>
			<button class="md-trigger" data-modal="modal-11">Super Scaled</button>
			<button class="md-trigger" data-modal="modal-12">Just Me</button>
			<button class="md-trigger" data-modal="modal-13">3D Slit</button>
			<button class="md-trigger" data-modal="modal-14">3D Rotate Bottom</button>
			<button class="md-trigger" data-modal="modal-15">3D Rotate In Left</button>
			<button class="md-trigger" data-modal="modal-16">Blur</button>
			<!-- special modal that will add a perspective class to the html element -->
			<button class="md-trigger md-setperspective" data-modal="modal-17">Let me in</button>
			<button class="md-trigger md-setperspective" data-modal="modal-18">Make way!</button>
			<button class="md-trigger md-setperspective" data-modal="modal-19">Slip from top</button>
		</div>
	</div>
</div><!-- /container -->
<!-- All modals added here for the demo. You would of course just have one, dynamically created -->
<div class="md-container md-effect-1" id="modal-1">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-2" id="modal-2">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-3" id="modal-3">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-4" id="modal-4">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-5" id="modal-5">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-6" id="modal-6">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-7" id="modal-7">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-8" id="modal-8">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-9" id="modal-9">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-10" id="modal-10">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-11" id="modal-11">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-12" id="modal-12">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-13" id="modal-13">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-14" id="modal-14">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-15" id="modal-15">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-16" id="modal-16">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-17" id="modal-17">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-18" id="modal-18">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-19" id="modal-19">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-container md-effect-20" id="modal-20">
	<div class="md-content">
		<h3>Modal Dialog</h3>
		<div>
			<p>This is a modal window. You can do the following things with it:</p>
			<ul>
				<li><strong>Read:</strong> modal windows will probably tell you something important so don't forget to read what they say.</li>
				<li><strong>Look:</strong> a modal window enjoys a certain kind of attention; just look at it and appreciate its presence.</li>
				<li><strong>Close:</strong> click on the button below to close the modal.</li>
			</ul>
			<button class="md-close">Close me!</button>
		</div>
	</div>
</div>
<div class="md-overlay"></div><!-- the overlay element -->

<script src="js/jquery-2.1.1.min.js" type="text/javascript"></script>
<script src="dist/jquery.niftymodals.js"></script>
<script>
  $(document).ready(function() {
	 
		$('.md-trigger').on('click',function(){

			var modal = $(this).data('modal');
			$("#" + modal).niftyModal();
		});
	 
  });
</script> 
<script>
	// this is important for IEs
	var polyfilter_scriptpath = '/lib/js/';
</script>

<script src="lib/js/cssParser.js"></script>
<script src="lib/js/css-filters-polyfill.js"></script>
</body>
</html>









JS代码(cssParser.js):

/* ***** BEGIN LICENSE BLOCK ***** * Version:MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License");
	you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis,* WITHOUT WARRANTY OF ANY KIND,either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s):* emk <VYV03354@nifty.ne.jp> * Daniel Glazman <glazman@netscape.com> * L. David Baron <dbaron@dbaron.org> * Boris Zbarsky <bzbarsky@mit.edu> * Mats Palmgren <mats.palmgren@bredband.net> * Christian Biesinger <cbiesinger@web.de> * Jeff Walden <jwalden+code@mit.edu> * Jonathon Jongsma <jonathon.jongsma@collabora.co.uk>,Collabora Ltd. * Siraj Razick <siraj.razick@collabora.co.uk>,Collabora Ltd. * Daniel Glazman <daniel.glazman@disruptive-innovations.com> * * Alternatively,the contents of this file may be used under the terms of * either of the GNU General Public License Version 2 or later (the "GPL"),* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),* in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL,and not to allow others to * use your version of this file under the terms of the MPL,indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above,a recipient may use your version of this file under * the terms of any one of the MPL,the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */
;
	var kCHARSET_RULE_MISSING_SEMICOLON = "Missing semicolon at the end of @charset rule";
	var kCHARSET_RULE_CHARSET_IS_STRING = "The charset in the @charset rule should be a string";
	var kCHARSET_RULE_MISSING_WS = "Missing mandatory whitespace after @charset";
	var kIMPORT_RULE_MISSING_URL = "Missing URL in @import rule";
	var kURL_EOF = "Unexpected end of stylesheet";
	var kURL_WS_INSIDE = "Multiple tokens inside a url() notation";
	var kVARIABLES_RULE_POSITION = "@variables rule invalid at this position in the stylesheet";
	var kIMPORT_RULE_POSITION = "@import rule invalid at this position in the stylesheet";
	var kNAMESPACE_RULE_POSITION = "@namespace rule invalid at this position in the stylesheet";
	var kCHARSET_RULE_CHARSET_SOF = "@charset rule invalid at this position in the stylesheet";
	var kUNKNOWN_AT_RULE = "Unknow @-rule";
	/* FROM http://peter.sh/data/vendor-prefixed-css.php?js=1 */
var kENGINES = [ "webkit","presto","trident","generic"];
	var kCSS_VENDOR_VALUES ={
	"-moz-box":{
	"webkit":"-webkit-box","presto":"","trident":"","generic":"box"}
,"-moz-inline-box":{
	"webkit":"-webkit-inline-box","presto":"","trident":"","generic":"inline-box"}
,"-moz-initial":{
	"webkit":"","presto":"","trident":"","generic":"initial"}
,"-moz-linear-gradient":{
	"webkit20110101":FilterLinearGradientForOutput,"webkit":FilterLinearGradientForOutput,"presto":"","trident":"","generic":FilterLinearGradientForOutput}
,"-moz-radial-gradient":{
	"webkit20110101":FilterRadialGradientForOutput,"webkit":FilterRadialGradientForOutput,"presto":"","trident":"","generic":FilterRadialGradientForOutput}
,"-moz-repeating-linear-gradient":{
	"webkit20110101":"","webkit":FilterRepeatingGradientForOutput,"presto":"","trident":"","generic":FilterRepeatingGradientForOutput}
,"-moz-repeating-radial-gradient":{
	"webkit20110101":"","webkit":FilterRepeatingGradientForOutput,"presto":"","trident":"","generic":FilterRepeatingGradientForOutput}
}
;
	var kCSS_VENDOR_PREFIXES ={
	"lastUpdate":1304175007,"properties":[{
	"gecko":"","webkit":"","presto":"","trident":"-ms-accelerator","status":"P"}
,{
	"gecko":"","webkit":"","presto":"-wap-accesskey","trident":"","status":""}
,{
	"gecko":"-moz-animation","webkit":"-webkit-animation","presto":"","trident":"","status":"WD"}
,{
	"gecko":"-moz-animation-delay","webkit":"-webkit-animation-delay","presto":"","trident":"","status":"WD"}
,{
	"gecko":"-moz-animation-direction","webkit":"-webkit-animation-direction","presto":"","trident":"","status":"WD"}
,{
	"gecko":"-moz-animation-duration","webkit":"-webkit-animation-duration","presto":"","trident":"","status":"WD"}
,{
	"gecko":"-moz-animation-fill-mode","webkit":"-webkit-animation-fill-mode","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-animation-iteration-count","webkit":"-webkit-animation-iteration-count","presto":"","trident":"","status":"WD"}
,{
	"gecko":"-moz-animation-name","webkit":"-webkit-animation-name","presto":"","trident":"","status":"WD"}
,{
	"gecko":"-moz-animation-play-state","webkit":"-webkit-animation-play-state","presto":"","trident":"","status":"WD"}
,{
	"gecko":"-moz-animation-timing-function","webkit":"-webkit-animation-timing-function","presto":"","trident":"","status":"WD"}
,{
	"gecko":"-moz-appearance","webkit":"-webkit-appearance","presto":"","trident":"","status":"CR"}
,{
	"gecko":"","webkit":"-webkit-backface-visibility","presto":"","trident":"","status":"WD"}
,{
	"gecko":"background-clip","webkit":"-webkit-background-clip","presto":"background-clip","trident":"background-clip","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-background-composite","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-background-inline-policy","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"background-origin","webkit":"-webkit-background-origin","presto":"background-origin","trident":"background-origin","status":"WD"}
,{
	"gecko":"","webkit":"background-position-x","presto":"","trident":"-ms-background-position-x","status":""}
,{
	"gecko":"","webkit":"background-position-y","presto":"","trident":"-ms-background-position-y","status":""}
,{
	"gecko":"background-size","webkit":"-webkit-background-size","presto":"background-size","trident":"background-size","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-behavior","status":""}
,{
	"gecko":"-moz-binding","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-block-progression","status":""}
,{
	"gecko":"","webkit":"-webkit-border-after","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-border-after-color","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-border-after-style","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-border-after-width","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-border-before","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-border-before-color","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-border-before-style","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-border-before-width","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-border-bottom-colors","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"border-bottom-left-radius","webkit":"-webkit-border-bottom-left-radius","presto":"border-bottom-left-radius","trident":"border-bottom-left-radius","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-border-bottom-left-radius = border-bottom-left-radius","presto":"","trident":"","status":""}
,{
	"gecko":"border-bottom-right-radius","webkit":"-webkit-border-bottom-right-radius","presto":"border-bottom-right-radius","trident":"border-bottom-right-radius","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-border-bottom-right-radius = border-bottom-right-radius","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-border-end","webkit":"-webkit-border-end","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-border-end-color","webkit":"-webkit-border-end-color","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-border-end-style","webkit":"-webkit-border-end-style","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-border-end-width","webkit":"-webkit-border-end-width","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-border-fit","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-border-horizontal-spacing","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-border-image","webkit":"-webkit-border-image","presto":"-o-border-image","trident":"","status":"WD"}
,{
	"gecko":"-moz-border-left-colors","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"border-radius","webkit":"-webkit-border-radius","presto":"border-radius","trident":"border-radius","status":"WD"}
,{
	"gecko":"-moz-border-right-colors","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-border-start","webkit":"-webkit-border-start","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-border-start-color","webkit":"-webkit-border-start-color","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-border-start-style","webkit":"-webkit-border-start-style","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-border-start-width","webkit":"-webkit-border-start-width","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-border-top-colors","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"border-top-left-radius","webkit":"-webkit-border-top-left-radius","presto":"border-top-left-radius","trident":"border-top-left-radius","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-border-top-left-radius = border-top-left-radius","presto":"","trident":"","status":""}
,{
	"gecko":"border-top-right-radius","webkit":"-webkit-border-top-right-radius","presto":"border-top-right-radius","trident":"border-top-right-radius","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-border-top-right-radius = border-top-right-radius","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-border-vertical-spacing","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-box-align","webkit":"-webkit-box-align","presto":"","trident":"-ms-box-align","status":"WD"}
,{
	"gecko":"-moz-box-direction","webkit":"-webkit-box-direction","presto":"","trident":"-ms-box-direction","status":"WD"}
,{
	"gecko":"-moz-box-flex","webkit":"-webkit-box-flex","presto":"","trident":"-ms-box-flex","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-box-flex-group","presto":"","trident":"","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-box-line-progression","status":""}
,{
	"gecko":"","webkit":"-webkit-box-lines","presto":"","trident":"-ms-box-lines","status":"WD"}
,{
	"gecko":"-moz-box-ordinal-group","webkit":"-webkit-box-ordinal-group","presto":"","trident":"-ms-box-ordinal-group","status":"WD"}
,{
	"gecko":"-moz-box-orient","webkit":"-webkit-box-orient","presto":"","trident":"-ms-box-orient","status":"WD"}
,{
	"gecko":"-moz-box-pack","webkit":"-webkit-box-pack","presto":"","trident":"-ms-box-pack","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-box-reflect","presto":"","trident":"","status":""}
,{
	"gecko":"box-shadow","webkit":"-webkit-box-shadow","presto":"box-shadow","trident":"box-shadow","status":"WD"}
,{
	"gecko":"-moz-box-sizing","webkit":"box-sizing","presto":"box-sizing","trident":"","status":"CR"}
,{
	"gecko":"","webkit":"-webkit-box-sizing = box-sizing","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-epub-caption-side = caption-side","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-color-correction","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-column-break-after","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-column-break-before","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-column-break-inside","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-column-count","webkit":"-webkit-column-count","presto":"column-count","trident":"column-count","status":"CR"}
,{
	"gecko":"-moz-column-gap","webkit":"-webkit-column-gap","presto":"column-gap","trident":"column-gap","status":"CR"}
,{
	"gecko":"-moz-column-rule","webkit":"-webkit-column-rule","presto":"column-rule","trident":"column-rule","status":"CR"}
,{
	"gecko":"-moz-column-rule-color","webkit":"-webkit-column-rule-color","presto":"column-rule-color","trident":"column-rule-color","status":"CR"}
,{
	"gecko":"-moz-column-rule-style","webkit":"-webkit-column-rule-style","presto":"column-rule-style","trident":"column-rule-style","status":"CR"}
,{
	"gecko":"-moz-column-rule-width","webkit":"-webkit-column-rule-width","presto":"column-rule-width","trident":"column-rule-width","status":"CR"}
,{
	"gecko":"","webkit":"-webkit-column-span","presto":"column-span","trident":"column-span","status":"CR"}
,{
	"gecko":"-moz-column-width","webkit":"-webkit-column-width","presto":"column-width","trident":"column-width","status":"CR"}
,{
	"gecko":"","webkit":"-webkit-columns","presto":"columns","trident":"columns","status":"CR"}
,{
	"gecko":"","webkit":"-webkit-dashboard-region","presto":"-apple-dashboard-region","trident":"","status":""}
,{
	"gecko":"filter","webkit":"","presto":"filter","trident":"-ms-filter","status":""}
,{
	"gecko":"-moz-float-edge","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"","presto":"-o-focus-opacity","trident":"","status":""}
,{
	"gecko":"-moz-font-feature-settings","webkit":"","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-font-language-override","webkit":"","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-font-size-delta","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-font-smoothing","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-force-broken-image-icon","webkit":"","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-grid-column","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-grid-column-align","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-grid-column-span","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-grid-columns","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-grid-layer","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-grid-row","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-grid-row-align","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-grid-row-span","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-grid-rows","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-highlight","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-hyphenate-character","presto":"","trident":"","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-hyphenate-limit-after","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-hyphenate-limit-before","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-hyphens","presto":"","trident":"","status":"WD"}
,{
	"gecko":"","webkit":"-epub-hyphens = -webkit-hyphens","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-image-region","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"ime-mode","webkit":"","presto":"","trident":"-ms-ime-mode","status":""}
,{
	"gecko":"","webkit":"","presto":"-wap-input-format","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-wap-input-required","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-interpolation-mode","status":""}
,{
	"gecko":"","webkit":"","presto":"-xv-interpret-as","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-layout-flow","status":""}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-layout-grid","status":""}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-layout-grid-char","status":""}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-layout-grid-line","status":""}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-layout-grid-mode","status":""}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-layout-grid-type","status":""}
,{
	"gecko":"","webkit":"-webkit-line-box-contain","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-line-break","presto":"","trident":"-ms-line-break","status":""}
,{
	"gecko":"","webkit":"-webkit-line-clamp","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-line-grid-mode","status":""}
,{
	"gecko":"","webkit":"","presto":"-o-link","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-o-link-source","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-locale","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-logical-height","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-logical-width","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-margin-after","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-margin-after-collapse","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-margin-before","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-margin-before-collapse","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-margin-bottom-collapse","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-margin-collapse","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-margin-end","webkit":"-webkit-margin-end","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-margin-start","webkit":"-webkit-margin-start","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-margin-top-collapse","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-marquee","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-wap-marquee-dir","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-marquee-direction","presto":"","trident":"","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-marquee-increment","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-wap-marquee-loop","trident":"","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-marquee-repetition","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-marquee-speed","presto":"-wap-marquee-speed","trident":"","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-marquee-style","presto":"-wap-marquee-style","trident":"","status":"WD"}
,{
	"gecko":"mask","webkit":"-webkit-mask","presto":"mask","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-attachment","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-box-image","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-clip","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-composite","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-image","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-origin","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-position","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-position-x","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-position-y","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-repeat","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-repeat-x","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-repeat-y","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-mask-size","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-match-nearest-mail-blockquote-color","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-max-logical-height","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-max-logical-width","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-min-logical-height","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-min-logical-width","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"","presto":"-o-mini-fold","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-nbsp-mode","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"","presto":"-o-object-fit","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"","presto":"-o-object-position","trident":"","status":"ED"}
,{
	"gecko":"opacity","webkit":"-webkit-opacity","presto":"opacity","trident":"opacity","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-opacity = opacity","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-outline-radius","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-outline-radius-bottomleft","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-outline-radius-bottomright","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-outline-radius-topleft","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-outline-radius-topright","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"overflow-x","webkit":"overflow-x","presto":"overflow-x","trident":"-ms-overflow-x","status":"WD"}
,{
	"gecko":"overflow-y","webkit":"overflow-y","presto":"overflow-y","trident":"-ms-overflow-y","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-padding-after","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-padding-before","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-padding-end","webkit":"-webkit-padding-end","presto":"","trident":"","status":"ED"}
,{
	"gecko":"-moz-padding-start","webkit":"-webkit-padding-start","presto":"","trident":"","status":"ED"}
,{
	"gecko":"","webkit":"-webkit-perspective","presto":"","trident":"","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-perspective-origin","presto":"","trident":"","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-perspective-origin-x","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-perspective-origin-y","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-xv-phonemes","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-rtl-ordering","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-script-level","webkit":"","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-script-min-size","webkit":"","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-script-size-multiplier","webkit":"","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"scrollbar-3dlight-color","trident":"-ms-scrollbar-3dlight-color","status":"P"}
,{
	"gecko":"","webkit":"","presto":"scrollbar-arrow-color","trident":"-ms-scrollbar-arrow-color","status":"P"}
,{
	"gecko":"","webkit":"","presto":"scrollbar-base-color","trident":"-ms-scrollbar-base-color","status":"P"}
,{
	"gecko":"","webkit":"","presto":"scrollbar-darkshadow-color","trident":"-ms-scrollbar-darkshadow-color","status":"P"}
,{
	"gecko":"","webkit":"","presto":"scrollbar-face-color","trident":"-ms-scrollbar-face-color","status":"P"}
,{
	"gecko":"","webkit":"","presto":"scrollbar-highlight-color","trident":"-ms-scrollbar-highlight-color","status":"P"}
,{
	"gecko":"","webkit":"","presto":"scrollbar-shadow-color","trident":"-ms-scrollbar-shadow-color","status":"P"}
,{
	"gecko":"","webkit":"","presto":"scrollbar-track-color","trident":"-ms-scrollbar-track-color","status":"P"}
,{
	"gecko":"-moz-stack-sizing","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"-webkit-svg-shadow","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-tab-size","webkit":"","presto":"-o-tab-size","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-o-table-baseline","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-tap-highlight-color","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-text-align-last","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-text-autospace","status":"WD"}
,{
	"gecko":"-moz-text-blink","webkit":"","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-text-combine","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-epub-text-combine = -webkit-text-combine","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-text-decoration-color","webkit":"","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-text-decoration-line","webkit":"","presto":"","trident":"","status":""}
,{
	"gecko":"-moz-text-decoration-style","webkit":"","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-text-decorations-in-effect","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-text-emphasis","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-epub-text-emphasis = -webkit-text-emphasis","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-text-emphasis-color","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-epub-text-emphasis-color = -webkit-text-emphasis-color","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-text-emphasis-position","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-text-emphasis-style","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-epub-text-emphasis-style = -webkit-text-emphasis-style","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-webkit-text-fill-color","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-text-justify","status":"WD"}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-text-kashida-space","status":"P"}
,{
	"gecko":"","webkit":"-webkit-text-orientation","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"-epub-text-orientation = -webkit-text-orientation","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"text-overflow","presto":"text-overflow","trident":"-ms-text-overflow","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-text-security","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"-webkit-text-size-adjust","presto":"","trident":"-ms-text-size-adjust","status":""}
,{
	"gecko":"","webkit":"-webkit-text-stroke","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"-webkit-text-stroke-color","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"-webkit-text-stroke-width","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"-epub-text-transform = text-transform","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"","trident":"-ms-text-underline-position","status":"P"}
,{
	"gecko":"","webkit":"-webkit-touch-callout","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-transform","webkit":"-webkit-transform","presto":"-o-transform","trident":"-ms-transform","status":"WD"}
,{
	"gecko":"-moz-transform-origin","webkit":"-webkit-transform-origin","presto":"-o-transform-origin","trident":"-ms-transform-origin","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-transform-origin-x","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"-webkit-transform-origin-y","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"-webkit-transform-origin-z","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"-webkit-transform-style","presto":"","trident":"","status":"WD"}
,{
	"gecko":"-moz-transition","webkit":"-webkit-transition","presto":"-o-transition","trident":"","status":"WD"}
,{
	"gecko":"-moz-transition-delay","webkit":"-webkit-transition-delay","presto":"-o-transition-delay","trident":"","status":"WD"}
,{
	"gecko":"-moz-transition-duration","webkit":"-webkit-transition-duration","presto":"-o-transition-duration","trident":"","status":"WD"}
,{
	"gecko":"-moz-transition-property","webkit":"-webkit-transition-property","presto":"-o-transition-property","trident":"","status":"WD"}
,{
	"gecko":"-moz-transition-timing-function","webkit":"-webkit-transition-timing-function","presto":"-o-transition-timing-function","trident":"","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-user-drag","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-user-focus","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-user-input","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-user-modify","webkit":"-webkit-user-modify","presto":"","trident":"","status":"P"}
,{
	"gecko":"-moz-user-select","webkit":"-webkit-user-select","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"","presto":"-xv-voice-balance","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-xv-voice-duration","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-xv-voice-pitch","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-xv-voice-pitch-range","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-xv-voice-rate","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-xv-voice-stress","trident":"","status":""}
,{
	"gecko":"","webkit":"","presto":"-xv-voice-volume","trident":"","status":""}
,{
	"gecko":"-moz-window-shadow","webkit":"","presto":"","trident":"","status":"P"}
,{
	"gecko":"","webkit":"word-break","presto":"","trident":"-ms-word-break","status":"WD"}
,{
	"gecko":"","webkit":"-epub-word-break = word-break","presto":"","trident":"","status":""}
,{
	"gecko":"word-wrap","webkit":"word-wrap","presto":"word-wrap","trident":"-ms-word-wrap","status":"WD"}
,{
	"gecko":"","webkit":"-webkit-writing-mode","presto":"writing-mode","trident":"-ms-writing-mode","status":"ED"}
,{
	"gecko":"","webkit":"-epub-writing-mode = -webkit-writing-mode","presto":"","trident":"","status":""}
,{
	"gecko":"","webkit":"zoom","presto":"","trident":"-ms-zoom","status":""}
]}
;
	var kCSS_PREFIXED_VALUE = [{
	"gecko":"-moz-box","webkit":"-moz-box","presto":"","trident":"","generic":"box"}
];
	var CssInspector ={
	mVENDOR_PREFIXES:null,kEXPORTS_FOR_GECKO:true,kEXPORTS_FOR_WEBKIT:true,kEXPORTS_FOR_PRESTO:true,kEXPORTS_FOR_TRIDENT:true,cleanPrefixes:function(){
	this.mVENDOR_PREFIXES = null;
}
,prefixesForProperty:function(aProperty){
	if (!this.mVENDOR_PREFIXES){
	this.mVENDOR_PREFIXES ={
}
;
	for (var i = 0;
	i < kCSS_VENDOR_PREFIXES.properties.length;
	i++){
	var p = kCSS_VENDOR_PREFIXES.properties[i];
	if (p.gecko && (p.webkit || p.presto || p.trident)){
	var o ={
}
;
	if (this.kEXPORTS_FOR_GECKO) o[p.gecko] = true;
	if (this.kEXPORTS_FOR_WEBKIT && p.webkit) o[p.webkit] = true;
	if (this.kEXPORTS_FOR_PRESTO && p.presto) o[p.presto] = true;
	if (this.kEXPORTS_FOR_TRIDENT && p.trident) o[p.trident] = true;
	this.mVENDOR_PREFIXES[p.gecko] = [];
	for (var j in o) this.mVENDOR_PREFIXES[p.gecko].push(j)}
}
}
if (aProperty in this.mVENDOR_PREFIXES) return this.mVENDOR_PREFIXES[aProperty].sort();
	return null;
}
,parseColorStop:function(parser,token){
	var color = parser.parseColor(token);
	var position = "";
	if (!color) return null;
	token = parser.getToken(true,true);
	if (token.isPercentage() || token.isDimensionOfUnit("cm") || token.isDimensionOfUnit("mm") || token.isDimensionOfUnit("in") || token.isDimensionOfUnit("pc") || token.isDimensionOfUnit("px") || token.isDimensionOfUnit("em") || token.isDimensionOfUnit("ex") || token.isDimensionOfUnit("pt")){
	position = token.value;
	token = parser.getToken(true,true);
}
return{
	color:color,position:position}
}
,parseGradient:function (parser,token){
	var isRadial = false;
	var gradient ={
	isRepeating:false}
;
	if (token.isNotNull()){
	if (token.isFunction("-moz-linear-gradient(") || token.isFunction("-moz-radial-gradient(") || token.isFunction("-moz-repeating-linear-gradient(") || token.isFunction("-moz-repeating-radial-gradient(")){
	if (token.isFunction("-moz-radial-gradient(") || token.isFunction("-moz-repeating-radial-gradient(")){
	gradient.isRadial = true;
}
if (token.isFunction("-moz-repeating-linear-gradient(") || token.isFunction("-moz-repeating-radial-gradient(")){
	gradient.isRepeating = true;
}
token = parser.getToken(true,true);
	var haveGradientLine = false;
	var foundHorizPosition = false;
	var haveAngle = false;
	if (token.isAngle()){
	gradient.angle = token.value;
	haveGradientLine = true;
	haveAngle = true;
	token = parser.getToken(true,true);
}
if (token.isLength() || token.isIdent("top") || token.isIdent("center") || token.isIdent("bottom") || token.isIdent("left") || token.isIdent("right")){
	haveGradientLine = true;
	if (token.isLength() || token.isIdent("left") || token.isIdent("right")){
	foundHorizPosition = true;
}
gradient.position = token.value;
	token = parser.getToken(true,true);
}
if (haveGradientLine){
	if (!haveAngle && token.isAngle()){
	// we have an angle here gradient.angle = token.value;
	haveAngle = true;
	token = parser.getToken(true,true);
}
else if (token.isLength() || (foundHorizPosition && (token.isIdent("top") || token.isIdent("center") || token.isIdent("bottom"))) || (!foundHorizPosition && (token.isLength() || token.isIdent("top") || token.isIdent("center") || token.isIdent("bottom") || token.isIdent("left") || token.isIdent("right")))){
	gradient.position = ("position" in gradient) ? gradient.position + " ":"";
	gradient.position += token.value;
	token = parser.getToken(true,true);
}
if (!haveAngle && token.isAngle()){
	// we have an angle here gradient.angle = token.value;
	haveAngle = true;
	token = parser.getToken(true,true);
}
// we must find a comma here if (!token.isSymbol(",")) return null;
	token = parser.getToken(true,true);
}
// ok... Let's deal with the rest now if (gradient.isRadial){
	if (token.isIdent("circle") || token.isIdent("ellipse")){
	gradient.shape = token.value;
	token = parser.getToken(true,true);
}
if (token.isIdent("closest-side") || token.isIdent("closest-corner") || token.isIdent("farthest-side") || token.isIdent("farthest-corner") || token.isIdent("contain") || token.isIdent("cover")){
	gradient.size = token.value;
	token = parser.getToken(true,true);
}
if (!("shape" in gradient) && (token.isIdent("circle") || token.isIdent("ellipse"))){
	// we can still have the second value... gradient.shape = token.value;
	token = parser.getToken(true,true);
}
if ((("shape" in gradient) || ("size" in gradient)) && !token.isSymbol(",")) return null;
	else if (("shape" in gradient) || ("size" in gradient)) token = parser.getToken(true,true);
}
// now color stops... var stop1 = this.parseColorStop(parser,token);
	if (!stop1) return null;
	token = parser.currentToken();
	if (!token.isSymbol(",")) return null;
	token = parser.getToken(true,true);
	var stop2 = this.parseColorStop(parser,token);
	if (!stop2) return null;
	token = parser.currentToken();
	if (token.isSymbol(",")){
	token = parser.getToken(true,true);
}
// ok we have at least two color stops gradient.stops = [stop1,stop2];
	while (!token.isSymbol(")")){
	var colorstop = this.parseColorStop(parser,token);
	if (!colorstop) return null;
	token = parser.currentToken();
	if (!token.isSymbol(")") && !token.isSymbol(",")) return null;
	if (token.isSymbol(",")) token = parser.getToken(true,true);
	gradient.stops.push(colorstop);
}
return gradient;
}
}
return null;
}
,parseBoxShadows:function(aString){
	var parser = new CSSParser();
	parser._init();
	parser.mPreserveWS = false;
	parser.mPreserveComments = false;
	parser.mPreservedTokens = [];
	parser.mScanner.init(aString);
	var shadows = [];
	var token = parser.getToken(true,true);
	var color = "",blurRadius = "0px",offsetX = "0px",offsetY = "0px",spreadRadius = "0px";
	var inset = false;
	while (token.isNotNull()){
	if (token.isIdent("none")){
	shadows.push({
	none:true}
);
	token = parser.getToken(true,true);
}
else{
	if (token.isIdent('inset')){
	inset = true;
	token = parser.getToken(true,true);
}
if (token.isPercentage() || token.isDimensionOfUnit("cm") || token.isDimensionOfUnit("mm") || token.isDimensionOfUnit("in") || token.isDimensionOfUnit("pc") || token.isDimensionOfUnit("px") || token.isDimensionOfUnit("em") || token.isDimensionOfUnit("ex") || token.isDimensionOfUnit("pt")){
	var offsetX = token.value;
	token = parser.getToken(true,true);
}
else return [];
	if (!inset && token.isIdent('inset')){
	inset = true;
	token = parser.getToken(true,true);
}
if (token.isPercentage() || token.isDimensionOfUnit("cm") || token.isDimensionOfUnit("mm") || token.isDimensionOfUnit("in") || token.isDimensionOfUnit("pc") || token.isDimensionOfUnit("px") || token.isDimensionOfUnit("em") || token.isDimensionOfUnit("ex") || token.isDimensionOfUnit("pt")){
	var offsetX = token.value;
	token = parser.getToken(true,true);
}
else return [];
	if (!inset && token.isIdent('inset')){
	inset = true;
	token = parser.getToken(true,true);
}
if (token.isPercentage() || token.isDimensionOfUnit("cm") || token.isDimensionOfUnit("mm") || token.isDimensionOfUnit("in") || token.isDimensionOfUnit("pc") || token.isDimensionOfUnit("px") || token.isDimensionOfUnit("em") || token.isDimensionOfUnit("ex") || token.isDimensionOfUnit("pt")){
	var blurRadius = token.value;
	token = parser.getToken(true,true);
}
if (!inset && token.isIdent('inset')){
	inset = true;
	token = parser.getToken(true,true);
}
if (token.isPercentage() || token.isDimensionOfUnit("cm") || token.isDimensionOfUnit("mm") || token.isDimensionOfUnit("in") || token.isDimensionOfUnit("pc") || token.isDimensionOfUnit("px") || token.isDimensionOfUnit("em") || token.isDimensionOfUnit("ex") || token.isDimensionOfUnit("pt")){
	var spreadRadius = token.value;
	token = parser.getToken(true,true);
}
if (!inset && token.isIdent('inset')){
	inset = true;
	token = parser.getToken(true,true);
}
if (token.isFunction("rgb(") || token.isFunction("rgba(") || token.isFunction("hsl(") || token.isFunction("hsla(") || token.isSymbol("#") || token.isIdent()){
	var color = parser.parseColor(token);
	token = parser.getToken(true,true);
}
if (!inset && token.isIdent('inset')){
	inset = true;
	token = parser.getToken(true,true);
}
shadows.push({
	none:false,color:color,offsetX:offsetX,offsetY:offsetY,blurRadius:blurRadius,spreadRadius:spreadRadius}
);
	if (token.isSymbol(",")){
	inset = false;
	color = "";
	blurRadius = "0px";
	spreadRadius = "0px" offsetX = "0px";
	offsetY = "0px";
	token = parser.getToken(true,true);
}
else if (!token.isNotNull()) return shadows;
	else return [];
}
}
return shadows;
}
,parseTextShadows:function(aString){
	var parser = new CSSParser();
	parser._init();
	parser.mPreserveWS = false;
	parser.mPreserveComments = false;
	parser.mPreservedTokens = [];
	parser.mScanner.init(aString);
	var shadows = [];
	var token = parser.getToken(true,true);
	var color = "",blurRadius = "0px",offsetX = "0px",offsetY = "0px";
	while (token.isNotNull()){
	if (token.isIdent("none")){
	shadows.push({
	none:true}
);
	token = parser.getToken(true,true);
}
else{
	if (token.isFunction("rgb(") || token.isFunction("rgba(") || token.isFunction("hsl(") || token.isFunction("hsla(") || token.isSymbol("#") || token.isIdent()){
	var color = parser.parseColor(token);
	token = parser.getToken(true,true);
}
if (token.isPercentage() || token.isDimensionOfUnit("cm") || token.isDimensionOfUnit("mm") || token.isDimensionOfUnit("in") || token.isDimensionOfUnit("pc") || token.isDimensionOfUnit("px") || token.isDimensionOfUnit("em") || token.isDimensionOfUnit("ex") || token.isDimensionOfUnit("pt")){
	var offsetX = token.value;
	token = parser.getToken(true,true);
}
else return [];
	if (token.isPercentage() || token.isDimensionOfUnit("cm") || token.isDimensionOfUnit("mm") || token.isDimensionOfUnit("in") || token.isDimensionOfUnit("pc") || token.isDimensionOfUnit("px") || token.isDimensionOfUnit("em") || token.isDimensionOfUnit("ex") || token.isDimensionOfUnit("pt")){
	var offsetY = token.value;
	token = parser.getToken(true,true);
}
else return [];
	if (token.isPercentage() || token.isDimensionOfUnit("cm") || token.isDimensionOfUnit("mm") || token.isDimensionOfUnit("in") || token.isDimensionOfUnit("pc") || token.isDimensionOfUnit("px") || token.isDimensionOfUnit("em") || token.isDimensionOfUnit("ex") || token.isDimensionOfUnit("pt")){
	var blurRadius = token.value;
	token = parser.getToken(true,true);
}
if (!color && (token.isFunction("rgb(") || token.isFunction("rgba(") || token.isFunction("hsl(") || token.isFunction("hsla(") || token.isSymbol("#") || token.isIdent())){
	var color = parser.parseColor(token);
	token = parser.getToken(true,true);
}
shadows.push({
	none:false,color:color,offsetX:offsetX,offsetY:offsetY,blurRadius:blurRadius}
);
	if (token.isSymbol(",")){
	color = "";
	blurRadius = "0px";
	offsetX = "0px";
	offsetY = "0px";
	token = parser.getToken(true,true);
}
else if (!token.isNotNull()) return shadows;
	else return [];
}
}
return shadows;
}
,parseBackgroundImages:function(aString){
	var parser = new CSSParser();
	parser._init();
	parser.mPreserveWS = false;
	parser.mPreserveComments = false;
	parser.mPreservedTokens = [];
	parser.mScanner.init(aString);
	var backgrounds = [];
	var token = parser.getToken(true,true);
	while (token.isNotNull()){
	/*if (token.isFunction("rgb(") || token.isFunction("rgba(") || token.isFunction("hsl(") || token.isFunction("hsla(") || token.isSymbol("#") || token.isIdent()){
	var color = parser.parseColor(token);
	backgrounds.push({
	type:"color",value:color}
);
	token = parser.getToken(true,true);
}
else */
 if (token.isFunction("url(")){
	token = parser.getToken(true,true);
	var urlContent = parser.parseURL(token);
	backgrounds.push({
	type:"image",value:"url(" + urlContent}
);
	token = parser.getToken(true,true);
}
else if (token.isFunction("-moz-linear-gradient(") || token.isFunction("-moz-radial-gradient(") || token.isFunction("-moz-repeating-linear-gradient(") || token.isFunction("-moz-repeating-radial-gradient(")){
	var gradient = this.parseGradient(parser,token);
	backgrounds.push({
	type:gradient.isRadial ? "radial-gradient":"linear-gradient",value:gradient}
);
	token = parser.getToken(true,true);
}
else return null;
	if (token.isSymbol(",")){
	token = parser.getToken(true,true);
	if (!token.isNotNull()) return null;
}
}
return backgrounds;
}
,serializeGradient:function(gradient){
	var s = gradient.isRadial ? (gradient.isRepeating ? "-moz-repeating-radial-gradient(":"-moz-radial-gradient(" ):(gradient.isRepeating ? "-moz-repeating-linear-gradient(":"-moz-linear-gradient(" );
	if (gradient.angle || gradient.position) s += (gradient.angle ? gradient.angle + " ":"") + (gradient.position ? gradient.position:"") + ",";
	if (gradient.isRadial && (gradient.shape || gradient.size)) s += (gradient.shape ? gradient.shape:"") + " " + (gradient.size ? gradient.size:"") + ",";
	for (var i = 0;
	i < gradient.stops.length;
	i++){
	var colorstop = gradient.stops[i];
	s += colorstop.color + (colorstop.position ? " " + colorstop.position:"");
	if (i != gradient.stops.length -1) s += ",";
}
s += ")";
	return s;
}
,parseBorderImage:function(aString){
	var parser = new CSSParser();
	parser._init();
	parser.mPreserveWS = false;
	parser.mPreserveComments = false;
	parser.mPreservedTokens = [];
	parser.mScanner.init(aString);
	var borderImage ={
	url:"",offsets:[],widths:[],sizes:[]}
;
	var token = parser.getToken(true,true);
	if (token.isFunction("url(")){
	token = parser.getToken(true,true);
	var urlContent = parser.parseURL(token);
	if (urlContent){
	borderImage.url = urlContent.substr(0,urlContent.length - 1).trim();
	if ((borderImage.url[0] == '"' && borderImage.url[borderImage.url.length - 1] == '"') || (borderImage.url[0] == "'" && borderImage.url[borderImage.url.length - 1] == "'")) borderImage.url = borderImage.url.substr(1,borderImage.url.length - 2);
}
else return null;
}
else return null;
	token = parser.getToken(true,true);
	if (token.isNumber() || token.isPercentage()) borderImage.offsets.push(token.value);
	else return null;
	var i;
	for (i= 0;
	i < 3;
	i++){
	token = parser.getToken(true,true);
	if (token.isNumber() || token.isPercentage()) borderImage.offsets.push(token.value);
	else break;
}
if (i == 3) token = parser.getToken(true,true);
	if (token.isSymbol("/")){
	token = parser.getToken(true,true);
	if (token.isDimension() || token.isNumber("0") || (token.isIdent() && token.value in parser.kBORDER_WIDTH_NAMES)) borderImage.widths.push(token.value);
	else return null;
	for (var i = 0;
	i < 3;
	i++){
	token = parser.getToken(true,true);
	if (token.isDimension() || token.isNumber("0") || (token.isIdent() && token.value in parser.kBORDER_WIDTH_NAMES)) borderImage.widths.push(token.value);
	else break;
}
if (i == 3) token = parser.getToken(true,true);
}
for (var i = 0;
	i < 2;
	i++){
	if (token.isIdent("stretch") || token.isIdent("repeat") || token.isIdent("round")) borderImage.sizes.push(token.value);
	else if (!token.isNotNull()) return borderImage;
	else return null;
	token = parser.getToken(true,true);
}
if (!token.isNotNull()) return borderImage;
	return null;
}
,parseMediaQuery:function(aString){
	var kCONSTRAINTS ={
	"width":true,"min-width":true,"max-width":true,"height":true,"min-height":true,"max-height":true,"device-width":true,"min-device-width":true,"max-device-width":true,"device-height":true,"min-device-height":true,"max-device-height":true,"orientation":true,"aspect-ratio":true,"min-aspect-ratio":true,"max-aspect-ratio":true,"device-aspect-ratio":true,"min-device-aspect-ratio":true,"max-device-aspect-ratio":true,"color":true,"min-color":true,"max-color":true,"color-index":true,"min-color-index":true,"max-color-index":true,"monochrome":true,"min-monochrome":true,"max-monochrome":true,"resolution":true,"min-resolution":true,"max-resolution":true,"scan":true,"grid":true}
;
	var parser = new CSSParser();
	parser._init();
	parser.mPreserveWS = false;
	parser.mPreserveComments = false;
	parser.mPreservedTokens = [];
	parser.mScanner.init(aString);
	var m ={
	amplifier:"",medium:"",constraints:[]}
;
	var token = parser.getToken(true,true);
	if (token.isIdent("all") || token.isIdent("aural") || token.isIdent("braille") || token.isIdent("handheld") || token.isIdent("print") || token.isIdent("projection") || token.isIdent("screen") || token.isIdent("tty") || token.isIdent("tv")){
	m.medium = token.value;
	token = parser.getToken(true,true);
}
else if (token.isIdent("not") || token.isIdent("only")){
	m.amplifier = token.value;
	token = parser.getToken(true,true);
	if (token.isIdent("all") || token.isIdent("aural") || token.isIdent("braille") || token.isIdent("handheld") || token.isIdent("print") || token.isIdent("projection") || token.isIdent("screen") || token.isIdent("tty") || token.isIdent("tv")){
	m.medium = token.value;
	token = parser.getToken(true,true);
}
else return null;
}
if (m.medium){
	if (!token.isNotNull()) return m;
	if (token.isIdent("and")){
	token = parser.getToken(true,true);
}
else return null;
}
while (token.isSymbol("(")){
	token = parser.getToken(true,true);
	if (token.isIdent() && (token.value in kCONSTRAINTS)){
	var constraint = token.value;
	token = parser.getToken(true,true);
	if (token.isSymbol(":")){
	token = parser.getToken(true,true);
	var values = [];
	while (!token.isSymbol(")")){
	values.push(token.value);
	token = parser.getToken(true,true);
}
if (token.isSymbol(")")){
	m.constraints.push({
	constraint:constraint,value:values}
);
	token = parser.getToken(true,true);
	if (token.isNotNull()){
	if (token.isIdent("and")){
	token = parser.getToken(true,true);
}
else return null;
}
else return m;
}
else return null;
}
else if (token.isSymbol(")")){
	m.constraints.push({
	constraint:constraint,value:null}
);
	token = parser.getToken(true,true);
	if (token.isNotNull()){
	if (token.isIdent("and")){
	token = parser.getToken(true,true);
}
else return null;
}
else return m;
}
else return null;
}
else return null;
}
return m;
}
}
;
	/************************************************************/
/************************** JSCSSP **************************/
/************************************************************/
var CSS_ESCAPE = '\\';
	var IS_HEX_DIGIT = 1;
	var START_IDENT = 2;
	var IS_IDENT = 4;
	var IS_WHITESPACE = 8;
	var W = IS_WHITESPACE;
	var I = IS_IDENT;
	var S = START_IDENT;
	var SI = IS_IDENT|START_IDENT;
	var XI = IS_IDENT |IS_HEX_DIGIT;
	var XSI = IS_IDENT|START_IDENT|IS_HEX_DIGIT;
	function CSSScanner(aString){
	this.init(aString);
}
CSSScanner.prototype ={
	kLexTable:[ // TAB LF FF CR 0,0,0,0,0,0,0,0,0,W,W,0,W,W,0,0,// 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,// SPC ! " # $ % & ' ( ) * +,- . / W,0,0,0,0,0,0,0,0,0,0,0,0,I,0,0,// 0 1 2 3 4 5 6 7 8 9:;
	< = > ? XI,XI,XI,XI,XI,XI,XI,XI,XI,XI,0,0,0,0,0,0,// @ A B C D E F G H I J K L M N O 0,XSI,XSI,XSI,XSI,XSI,XSI,SI,SI,SI,SI,SI,SI,SI,SI,SI,// P Q R S T U V W X Y Z [ \ ] ^ _ SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,0,S,0,0,SI,// ` a b c d e f g h i j k l m n o 0,XSI,XSI,XSI,XSI,XSI,XSI,SI,SI,SI,SI,SI,SI,SI,SI,SI,// p q r s t u v w x y z{
	|}
~ SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,0,0,0,0,0,// 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,// 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,// ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ 0,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,// ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,// À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,// Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,// à á â ã ä å æ ç è é ê ë ì í î ï SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,// ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI,SI ],kHexValues:{
	"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"a":10,"b":11,"c":12,"d":13,"e":14,"f":15}
,mString:"",mPos:0,mPreservedPos:[],init:function(aString){
	this.mString = aString;
	this.mPos = 0;
	this.mPreservedPos = [];
}
,getCurrentPos:function(){
	return this.mPos;
}
,getAlreadyScanned:function(){
	return this.mString.substr(0,this.mPos);
}
,preserveState:function(){
	this.mPreservedPos.push(this.mPos);
}
,restoreState:function(){
	if (this.mPreservedPos.length){
	this.mPos = this.mPreservedPos.pop();
}
}
,forgetState:function(){
	if (this.mPreservedPos.length){
	this.mPreservedPos.pop();
}
}
,read:function(){
	if (this.mPos < this.mString.length) return this.mString.charAt(this.mPos++);
	return -1;
}
,peek:function(){
	if (this.mPos < this.mString.length) return this.mString.charAt(this.mPos);
	return -1;
}
,isHexDigit:function(c){
	var code = c.charCodeAt(0);
	return (code < 256 && (this.kLexTable[code] & IS_HEX_DIGIT) != 0);
}
,isIdentStart:function(c){
	var code = c.charCodeAt(0);
	return (code >= 256 || (this.kLexTable[code] & START_IDENT) != 0);
}
,startsWithIdent:function(aFirstChar,aSecondChar){
	var code = aFirstChar.charCodeAt(0);
	return this.isIdentStart(aFirstChar) || (aFirstChar == "-" && this.isIdentStart(aSecondChar));
}
,isIdent:function(c){
	var code = c.charCodeAt(0);
	return (code >= 256 || (this.kLexTable[code] & IS_IDENT) != 0);
}
,isSymbol:function(c){
	var code = c.charCodeAt(0);
	return (this.kLexTable[code] & IS_IDENT) != 1;
}
,pushback:function(){
	this.mPos--;
}
,nextHexValue:function(){
	var c = this.read();
	if (c == -1 || !this.isHexDigit(c)) return new jscsspToken(jscsspToken.NULL_TYPE,null);
	var s = c;
	c = this.read();
	while (c != -1 && this.isHexDigit(c)){
	s += c;
	c = this.read();
}
if (c != -1) this.pushback();
	return new jscsspToken(jscsspToken.HEX_TYPE,s);
}
,gatherEscape:function(){
	var c = this.peek();
	if (c == -1) return "";
	if (this.isHexDigit(c)){
	var code = 0;
	for (var i = 0;
	i < 6;
	i++){
	c = this.read();
	if (this.isHexDigit(c)) code = code * 16 + this.kHexValues[c.toLowerCase()];
	else if (!this.isHexDigit(c) && !this.isWhiteSpace(c)){
	this.pushback();
	break;
}
else break;
}
if (i == 6){
	c = this.peek();
	if (this.isWhiteSpace(c)) this.read();
}
return String.fromCharCode(code);
}
c = this.read();
	if (c != "\n") return c;
	return "";
}
,gatherIdent:function(c){
	var s = "";
	if (c == CSS_ESCAPE) s += this.gatherEscape();
	else s += c;
	c = this.read();
	if(!this.mMediaQueryMode){
	while (c != -1 && (this.isIdent(c) || c == CSS_ESCAPE)){
	if (c == CSS_ESCAPE)s += this.gatherEscape();
	elses += c;
	c = this.read();
}
}
else{
	while (c != -1 && c != '{
	' && c != ','){
	s += c;
	c = this.read();
}
}
if (c != -1) this.pushback();
	this.mMediaQueryMode = false;
	return s;
}
,parseIdent:function(c){
	var value = this.gatherIdent(c);
	var nextChar = this.peek();
	if (nextChar == "("){
	value += this.read();
	return new jscsspToken(jscsspToken.FUNCTION_TYPE,value);
}
return new jscsspToken(jscsspToken.IDENT_TYPE,value);
}
,isDigit:function(c){
	return (c >= '0') && (c <= '9');
}
,parseComment:function(c){
	var s = c;
	while ((c = this.read()) != -1){
	s += c;
	if (c == "*"){
	c = this.read();
	if (c == -1) break;
	if (c == "/"){
	s += c;
	break;
}
this.pushback();
}
}
return new jscsspToken(jscsspToken.COMMENT_TYPE,s);
}
,parseNumber:function(c){
	var s = c;
	var foundDot = false;
	while ((c = this.read()) != -1){
	if (c == "."){
	if (foundDot) break;
	else{
	s += c;
	foundDot = true;
}
}
else if (this.isDigit(c)) s += c;
	else break;
}
if (c != -1 && this.startsWithIdent(c,this.peek())){
	// DIMENSION var unit = this.gatherIdent(c);
	s += unit;
	return new jscsspToken(jscsspToken.DIMENSION_TYPE,s,unit);
}
else if (c == "%"){
	s += "%";
	return new jscsspToken(jscsspToken.PERCENTAGE_TYPE,s);
}
else if (c != -1) this.pushback();
	return new jscsspToken(jscsspToken.NUMBER_TYPE,s);
}
,parseString:function(aStop){
	var s = aStop;
	var previousChar = aStop;
	var c;
	while ((c = this.read()) != -1){
	if (c == aStop && previousChar != CSS_ESCAPE){
	s += c;
	break;
}
else if (c == CSS_ESCAPE){
	c = this.peek();
	if (c == -1) break;
	else if (c == "\n" || c == "\r" || c == "\f"){
	d = c;
	c = this.read();
	// special for Opera that preserves \r\n... if (d == "\r"){
	c = this.peek();
	if (c == "\n") c = this.read();
}
}
else{
	s += this.gatherEscape();
	c = this.peek();
}
}
else if (c == "\n" || c == "\r" || c == "\f"){
	break;
}
else s += c;
	previousChar = c;
}
return new jscsspToken(jscsspToken.STRING_TYPE,s);
}
,isWhiteSpace:function(c){
	var code = c.charCodeAt(0);
	return code < 256 && (this.kLexTable[code] & IS_WHITESPACE) != 0;
}
,eatWhiteSpace:function(c){
	var s = c;
	while ((c = this.read()) != -1){
	if (!this.isWhiteSpace(c)) break;
	s += c;
}
if (c != -1) this.pushback();
	return s;
}
,parseAtKeyword:function(c){
	return new jscsspToken(jscsspToken.ATRULE_TYPE,this.gatherIdent(c));
}
,nextToken:function(){
	var c = this.read();
	if (c == -1) return new jscsspToken(jscsspToken.NULL_TYPE,null);
	if (this.startsWithIdent(c,this.peek())) return this.parseIdent(c);
	if (c == '@'){
	var nextChar = this.read();
	if (nextChar != -1){
	var followingChar = this.peek();
	this.pushback();
	if (this.startsWithIdent(nextChar,followingChar)) return this.parseAtKeyword(c);
}
}
if (c == "." || c == "+" || c == "-"){
	var nextChar = this.peek();
	if (this.isDigit(nextChar)) return this.parseNumber(c);
	else if (nextChar == "." && c != "."){
	firstChar = this.read();
	var secondChar = this.peek();
	this.pushback();
	if (this.isDigit(secondChar)) return this.parseNumber(c);
}
}
if (this.isDigit(c)){
	return this.parseNumber(c);
}
if (c == "'" || c == '"') return this.parseString(c);
	if (this.isWhiteSpace(c)){
	var s = this.eatWhiteSpace(c);
	return new jscsspToken(jscsspToken.WHITESPACE_TYPE,s);
}
if (c == "|" || c == "~" || c == "^" || c == "$" || c == "*"){
	var nextChar = this.read();
	if (nextChar == "="){
	switch (c){
	case "~":return new jscsspToken(jscsspToken.INCLUDES_TYPE,"~=");
	case "|":return new jscsspToken(jscsspToken.DASHMATCH_TYPE,"|=");
	case "^":return new jscsspToken(jscsspToken.BEGINSMATCH_TYPE,"^=");
	case "$":return new jscsspToken(jscsspToken.ENDSMATCH_TYPE,"$=");
	case "*":return new jscsspToken(jscsspToken.CONTAINSMATCH_TYPE,"*=");
	default:break;
}
}
else if (nextChar != -1) this.pushback();
}
if (c == "/" && this.peek() == "*") return this.parseComment(c);
	return new jscsspToken(jscsspToken.SYMBOL_TYPE,c);
}
}
;
	function CSSParser(aString){
	this.mToken = null;
	this.mLookAhead = null;
	this.mScanner = new CSSScanner(aString);
	this.mPreserveWS = true;
	this.mPreserveComments = true;
	this.mPreservedTokens = [];
	this.mError = null;
}
CSSParser.prototype ={
	_init:function(){
	this.mToken = null;
	this.mLookAhead = null;
	this.mMediaQueryMode = false;
}
,kINHERIT:"inherit",kBORDER_WIDTH_NAMES:{
	"thin":true,"medium":true,"thick":true}
,kBORDER_STYLE_NAMES:{
	"none":true,"hidden":true,"dotted":true,"dashed":true,"solid":true,"double":true,"groove":true,"ridge":true,"inset":true,"outset":true}
,kCOLOR_NAMES:{
	"transparent":true,"black":true,"silver":true,"gray":true,"white":true,"maroon":true,"red":true,"purple":true,"fuchsia":true,"green":true,"lime":true,"olive":true,"yellow":true,"navy":true,"blue":true,"teal":true,"aqua":true,"aliceblue":true,"antiquewhite":true,"aqua":true,"aquamarine":true,"azure":true,"beige":true,"bisque":true,"black":true,"blanchedalmond":true,"blue":true,"blueviolet":true,"brown":true,"burlywood":true,"cadetblue":true,"chartreuse":true,"chocolate":true,"coral":true,"cornflowerblue":true,"cornsilk":true,"crimson":true,"cyan":true,"darkblue":true,"darkcyan":true,"darkgoldenrod":true,"darkgray":true,"darkgreen":true,"darkgrey":true,"darkkhaki":true,"darkmagenta":true,"darkolivegreen":true,"darkorange":true,"darkorchid":true,"darkred":true,"darksalmon":true,"darkseagreen":true,"darkslateblue":true,"darkslategray":true,"darkslategrey":true,"darkturquoise":true,"darkviolet":true,"deeppink":true,"deepskyblue":true,"dimgray":true,"dimgrey":true,"dodgerblue":true,"firebrick":true,"floralwhite":true,"forestgreen":true,"fuchsia":true,"gainsboro":true,"ghostwhite":true,"gold":true,"goldenrod":true,"gray":true,"green":true,"greenyellow":true,"grey":true,"honeydew":true,"hotpink":true,"indianred":true,"indigo":true,"ivory":true,"khaki":true,"lavender":true,"lavenderblush":true,"lawngreen":true,"lemonchiffon":true,"lightblue":true,"lightcoral":true,"lightcyan":true,"lightgoldenrodyellow":true,"lightgray":true,"lightgreen":true,"lightgrey":true,"lightpink":true,"lightsalmon":true,"lightseagreen":true,"lightskyblue":true,"lightslategray":true,"lightslategrey":true,"lightsteelblue":true,"lightyellow":true,"lime":true,"limegreen":true,"linen":true,"magenta":true,"maroon":true,"mediumaquamarine":true,"mediumblue":true,"mediumorchid":true,"mediumpurple":true,"mediumseagreen":true,"mediumslateblue":true,"mediumspringgreen":true,"mediumturquoise":true,"mediumvioletred":true,"midnightblue":true,"mintcream":true,"mistyrose":true,"moccasin":true,"navajowhite":true,"navy":true,"oldlace":true,"olive":true,"olivedrab":true,"orange":true,"orangered":true,"orchid":true,"palegoldenrod":true,"palegreen":true,"paleturquoise":true,"palevioletred":true,"papayawhip":true,"peachpuff":true,"peru":true,"pink":true,"plum":true,"powderblue":true,"purple":true,"red":true,"rosybrown":true,"royalblue":true,"saddlebrown":true,"salmon":true,"sandybrown":true,"seagreen":true,"seashell":true,"sienna":true,"silver":true,"skyblue":true,"slateblue":true,"slategray":true,"slategrey":true,"snow":true,"springgreen":true,"steelblue":true,"tan":true,"teal":true,"thistle":true,"tomato":true,"turquoise":true,"violet":true,"wheat":true,"white":true,"whitesmoke":true,"yellow":true,"yellowgreen":true,"activeborder":true,"activecaption":true,"appworkspace":true,"background":true,"buttonface":true,"buttonhighlight":true,"buttonshadow":true,"buttontext":true,"captiontext":true,"graytext":true,"highlight":true,"highlighttext":true,"inactiveborder":true,"inactivecaption":true,"inactivecaptiontext":true,"infobackground":true,"infotext":true,"menu":true,"menutext":true,"scrollbar":true,"threeddarkshadow":true,"threedface":true,"threedhighlight":true,"threedlightshadow":true,"threedshadow":true,"window":true,"windowframe":true,"windowtext":true}
,kLIST_STYLE_TYPE_NAMES:{
	"decimal":true,"decimal-leading-zero":true,"lower-roman":true,"upper-roman":true,"georgian":true,"armenian":true,"lower-latin":true,"lower-alpha":true,"upper-latin":true,"upper-alpha":true,"lower-greek":true,"disc":true,"circle":true,"square":true,"none":true,/* CSS 3 */
 "box":true,"check":true,"diamond":true,"hyphen":true,"lower-armenian":true,"cjk-ideographic":true,"ethiopic-numeric":true,"hebrew":true,"japanese-formal":true,"japanese-informal":true,"simp-chinese-formal":true,"simp-chinese-informal":true,"syriac":true,"tamil":true,"trad-chinese-formal":true,"trad-chinese-informal":true,"upper-armenian":true,"arabic-indic":true,"binary":true,"bengali":true,"cambodian":true,"khmer":true,"devanagari":true,"gujarati":true,"gurmukhi":true,"kannada":true,"lower-hexadecimal":true,"lao":true,"malayalam":true,"mongolian":true,"myanmar":true,"octal":true,"oriya":true,"persian":true,"urdu":true,"telugu":true,"tibetan":true,"upper-hexadecimal":true,"afar":true,"ethiopic-halehame-aa-et":true,"ethiopic-halehame-am-et":true,"amharic-abegede":true,"ehiopic-abegede-am-et":true,"cjk-earthly-branch":true,"cjk-heavenly-stem":true,"ethiopic":true,"ethiopic-abegede":true,"ethiopic-abegede-gez":true,"hangul-consonant":true,"hangul":true,"hiragana-iroha":true,"hiragana":true,"katakana-iroha":true,"katakana":true,"lower-norwegian":true,"oromo":true,"ethiopic-halehame-om-et":true,"sidama":true,"ethiopic-halehame-sid-et":true,"somali":true,"ethiopic-halehame-so-et":true,"tigre":true,"ethiopic-halehame-tig":true,"tigrinya-er-abegede":true,"ethiopic-abegede-ti-er":true,"tigrinya-et":true,"ethiopic-halehame-ti-et":true,"upper-greek":true,"asterisks":true,"footnotes":true,"circled-decimal":true,"circled-lower-latin":true,"circled-upper-latin":true,"dotted-decimal":true,"double-circled-decimal":true,"filled-circled-decimal":true,"parenthesised-decimal":true,"parenthesised-lower-latin":true}
,reportError:function(aMsg){
	this.mError = aMsg;
}
,consumeError:function(){
	var e = this.mError;
	this.mError = null;
	return e;
}
,currentToken:function(){
	return this.mToken;
}
,getHexValue:function(){
	this.mToken = this.mScanner.nextHexValue();
	return this.mToken;
}
,getToken:function(aSkipWS,aSkipComment){
	if (this.mLookAhead){
	this.mToken = this.mLookAhead;
	this.mLookAhead = null;
	return this.mToken;
}
this.mToken = this.mScanner.nextToken();
	while (this.mToken && ((aSkipWS && this.mToken.isWhiteSpace()) || (aSkipComment && this.mToken.isComment()))) this.mToken = this.mScanner.nextToken();
	return this.mToken;
}
,lookAhead:function(aSkipWS,aSkipComment){
	var preservedToken = this.mToken;
	this.mScanner.preserveState();
	var token = this.getToken(aSkipWS,aSkipComment);
	this.mScanner.restoreState();
	this.mToken = preservedToken;
	return token;
}
,ungetToken:function(){
	this.mLookAhead = this.mToken;
}
,addUnknownAtRule:function(aSheet,aString){
	var currentLine = CountLF(this.mScanner.getAlreadyScanned());
	var blocks = [];
	var token = this.getToken(false,false);
	while (token.isNotNull()){
	aString += token.value;
	if (token.isSymbol(";
	") && !blocks.length) break;
	else if (token.isSymbol("{
	") || token.isSymbol("(") || token.isSymbol("[") || token.type == "function"){
	blocks.push(token.isFunction() ? "(":token.value);
}
else if (token.isSymbol("}
") || token.isSymbol(")") || token.isSymbol("]")){
	if (blocks.length){
	var ontop = blocks[blocks.length - 1];
	if ((token.isSymbol("}
") && ontop == "{
	") || (token.isSymbol(")") && ontop == "(") || (token.isSymbol("]") && ontop == "[")){
	blocks.pop();
	if (!blocks.length && token.isSymbol("}
")) break;
}
}
}
token = this.getToken(false,false);
}
this.addUnknownRule(aSheet,aString,currentLine);
}
,addUnknownRule:function(aSheet,aString,aCurrentLine){
	var errorMsg = this.consumeError();
	var rule = new jscsspErrorRule(errorMsg);
	rule.currentLine = aCurrentLine;
	rule.parsedCssText = aString;
	rule.parentStyleSheet = aSheet;
	aSheet.cssRules.push(rule);
}
,addWhitespace:function(aSheet,aString){
	var rule = new jscsspWhitespace();
	rule.parsedCssText = aString;
	rule.parentStyleSheet = aSheet;
	aSheet.cssRules.push(rule);
}
,addComment:function(aSheet,aString){
	var rule = new jscsspComment();
	rule.parsedCssText = aString;
	rule.parentStyleSheet = aSheet;
	aSheet.cssRules.push(rule);
}
,parseCharsetRule:function(aToken,aSheet){
	var s = aToken.value;
	var token = this.getToken(false,false);
	s += token.value;
	if (token.isWhiteSpace(" ")){
	token = this.getToken(false,false);
	s += token.value;
	if (token.isString()){
	var encoding = token.value;
	token = this.getToken(false,false);
	s += token.value;
	if (token.isSymbol(";
	")){
	var rule = new jscsspCharsetRule();
	rule.encoding = encoding;
	rule.parsedCssText = s;
	rule.parentStyleSheet = aSheet;
	aSheet.cssRules.push(rule);
	return true;
}
else this.reportError(kCHARSET_RULE_MISSING_SEMICOLON);
}
else this.reportError(kCHARSET_RULE_CHARSET_IS_STRING);
}
else this.reportError(kCHARSET_RULE_MISSING_WS);
	this.addUnknownAtRule(aSheet,s);
	return false;
}
,parseImportRule:function(aToken,aSheet){
	var currentLine = CountLF(this.mScanner.getAlreadyScanned());
	var s = aToken.value;
	this.preserveState();
	var token = this.getToken(true,true);
	var media = [];
	var href = "";
	if (token.isString()){
	href = token.value;
	s += " " + href;
}
else if (token.isFunction("url(")){
	token = this.getToken(true,true);
	var urlContent = this.parseURL(token);
	if (urlContent){
	href = "url(" + urlContent;
	s += " " + href;
}
}
else this.reportError(kIMPORT_RULE_MISSING_URL);
	if (href){
	token = this.getToken(true,true);
	while (token.isIdent()){
	s += " " + token.value;
	media.push(token.value);
	token = this.getToken(true,true);
	if (!token) break;
	if (token.isSymbol(",")){
	s += ",";
}
else if (token.isSymbol(";
	")){
	break;
}
else break;
	token = this.getToken(true,true);
}
if (!media.length){
	media.push("all");
}
if (token.isSymbol(";
	")){
	s += ";
	" this.forgetState();
	var rule = new jscsspImportRule();
	rule.currentLine = currentLine;
	rule.parsedCssText = s;
	rule.href = href;
	rule.media = media;
	rule.parentStyleSheet = aSheet;
	aSheet.cssRules.push(rule);
	return true;
}
}
this.restoreState();
	this.addUnknownAtRule(aSheet,"@import");
	return false;
}
,parseVariablesRule:function(token,aSheet){
	var currentLine = CountLF(this.mScanner.getAlreadyScanned());
	var s = token.value;
	var declarations = [];
	var valid = false;
	this.preserveState();
	token = this.getToken(true,true);
	var media = [];
	var foundMedia = false;
	while (token.isNotNull()){
	if (token.isIdent()){
	foundMedia = true;
	s += " " + token.value;
	media.push(token.value);
	token = this.getToken(true,true);
	if (token.isSymbol(",")){
	s += ",";
}
else{
	if (token.isSymbol("{
	")) this.ungetToken();
	else{
	// error... token.type = jscsspToken.NULL_TYPE;
	break;
}
}
}
else if (token.isSymbol("{
	")) break;
	else if (foundMedia){
	token.type = jscsspToken.NULL_TYPE;
	// not a media list break;
}
token = this.getToken(true,true);
}
if (token.isSymbol("{
	")){
	s += "{
	";
	token = this.getToken(true,true);
	while (true){
	if (!token.isNotNull()){
	valid = true;
	break;
}
if (token.isSymbol("}
")){
	s += "}
";
	valid = true;
	break;
}
else{
	var d = this.parseDeclaration(token,declarations,true,false,aSheet);
	s += ((d && declarations.length) ? " ":"") + d;
}
token = this.getToken(true,false);
}
}
if (valid){
	this.forgetState();
	var rule = new jscsspVariablesRule();
	rule.currentLine = currentLine;
	rule.parsedCssText = s;
	rule.declarations = declarations;
	rule.media = media;
	rule.parentStyleSheet = aSheet;
	aSheet.cssRules.push(rule) return true;
}
this.restoreState();
	return false;
}
,parseNamespaceRule:function(aToken,aSheet){
	var currentLine = CountLF(this.mScanner.getAlreadyScanned());
	var s = aToken.value;
	var valid = false;
	this.preserveState();
	var token = this.getToken(true,true);
	if (token.isNotNull()){
	var prefix = "";
	var url = "";
	if (token.isIdent()){
	prefix = token.value;
	s += " " + prefix;
	token = this.getToken(true,true);
}
if (token){
	var foundURL = false;
	if (token.isString()){
	foundURL = true;
	url = token.value;
	s += " " + url;
}
else if (token.isFunction("url(")){
	// get a url here... token = this.getToken(true,true);
	var urlContent = this.parseURL(token);
	if (urlContent){
	url += "url(" + urlContent;
	foundURL = true;
	s += " " + urlContent;
}
}
}
if (foundURL){
	token = this.getToken(true,true);
	if (token.isSymbol(";
	")){
	s += ";
	";
	this.forgetState();
	var rule = new jscsspNamespaceRule();
	rule.currentLine = currentLine;
	rule.parsedCssText = s;
	rule.prefix = prefix;
	rule.url = url;
	rule.parentStyleSheet = aSheet;
	aSheet.cssRules.push(rule);
	return true;
}
}
}
this.restoreState();
	this.addUnknownAtRule(aSheet,"@namespace");
	return false;
}
,parseFontFaceRule:function(aToken,aSheet){
	var currentLine = CountLF(this.mScanner.getAlreadyScanned());
	var s = aToken.value;
	var valid = false;
	var descriptors = [];
	this.preserveState();
	var token = this.getToken(true,true);
	if (token.isNotNull()){
	// expecting block start if (token.isSymbol("{
	")){
	s += " " + token.value;
	var token = this.getToken(true,false);
	while (true){
	if (token.isSymbol("}
")){
	s += "}
";
	valid = true;
	break;
}
else{
	var d = this.parseDeclaration(token,descriptors,false,false,aSheet);
	s += ((d && descriptors.length) ? " ":"") + d;
}
token = this.getToken(true,false);
}
}
}
if (valid){
	this.forgetState();
	var rule = new jscsspFontFaceRule();
	rule.currentLine = currentLine;
	rule.parsedCssText = s;
	rule.descriptors = descriptors;
	rule.parentStyleSheet = aSheet;
	aSheet.cssRules.push(rule) return true;
}
this.restoreState();
	return false;
}
,parsePageRule:function(aToken,aSheet){
	var currentLine = CountLF(this.mScanner.getAlreadyScanned());
	var s = aToken.value;
	var valid = false;
	var declarations = [];
	this.preserveState();
	var token = this.getToken(true,true);
	var pageSelector = "";
	if (token.isSymbol(":") || token.isIdent()){
	if (token.isSymbol(":")){
	pageSelector = ":";
	token = this.getToken(false,false);
}
if (token.isIdent()){
	pageSelector += token.value;
	s += " " + pageSelector;
	token = this.getToken(true,true);
}
}
if (token.isNotNull()){
	// expecting block start if (token.isSymbol("{
	")){
	s += " " + token.value;
	var token = this.getToken(true,false);
	while (true){
	if (token.isSymbol("}
")){
	s += "}
";
	valid = true;
	break;
}
else{
	var d = this.parseDeclaration(token,declarations,true,true,aSheet);
	s += ((d && declarations.length) ? " ":"") + d;
}
token = this.getToken(true,false);
}
}
}
if (valid){
	this.forgetState();
	var rule = new jscsspPageRule();
	rule.currentLine = currentLine;
	rule.parsedCssText = s;
	rule.pageSelector = pageSelector;
	rule.declarations = declarations;
	rule.parentStyleSheet = aSheet;
	aSheet.cssRules.push(rule) return true;
}
this.restoreState();
	return false;
}
,parseDefaultPropertyValue:function(token,aDecl,aAcceptPriority,descriptor,aSheet){
	var valueText = "";
	var blocks = [];
	var foundPriority = false;
	var values = [];
	while (token.isNotNull()){
	if ((token.isSymbol(";
	") || token.isSymbol("}
") || token.isSymbol("!")) && !blocks.length){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
if (token.isIdent(this.kINHERIT)){
	if (values.length){
	return "";
}
else{
	valueText = this.kINHERIT;
	var value = new jscsspVariable(kJscsspINHERIT_VALUE,aSheet);
	values.push(value);
	token = this.getToken(true,true);
	break;
}
}
else if (token.isSymbol("{
	") || token.isSymbol("(") || token.isSymbol("[")){
	blocks.push(token.value);
}
else if (token.isSymbol("}
") || token.isSymbol("]")){
	if (blocks.length){
	var ontop = blocks[blocks.length - 1];
	if ((token.isSymbol("}
") && ontop == "{
	") || (token.isSymbol(")") && ontop == "(") || (token.isSymbol("]") && ontop == "[")){
	blocks.pop();
}
}
}
// XXX must find a better way to store individual values // probably a |values:[]| field holding dimensions,percentages // functions,idents,numbers and symbols,in that order. if (token.isFunction()){
	if (token.isFunction("var(")){
	token = this.getToken(true,true);
	if (token.isIdent()){
	var name = token.value;
	token = this.getToken(true,true);
	if (token.isSymbol(")")){
	var value = new jscsspVariable(kJscsspVARIABLE_VALUE,aSheet);
	valueText += "var(" + name + ")";
	value.name = name;
	values.push(value);
}
else return "";
}
else return "";
}
else{
	var fn = token.value;
	token = this.getToken(false,true);
	var arg = this.parseFunctionArgument(token);
	if (arg){
	valueText += fn + arg;
	var value = new jscsspVariable(kJscsspPRIMITIVE_VALUE,aSheet);
	value.value = fn + arg;
	values.push(value);
}
else return "";
}
}
else if (token.isSymbol("#")){
	var color = this.parseColor(token);
	if (color){
	valueText += color;
	var value = new jscsspVariable(kJscsspPRIMITIVE_VALUE,aSheet);
	value.value = color;
	values.push(value);
}
else return "";
}
else if (!token.isWhiteSpace() && !token.isSymbol(",")){
	var value = new jscsspVariable(kJscsspPRIMITIVE_VALUE,aSheet);
	value.value = token.value;
	values.push(value);
	valueText += token.value;
}
else valueText += token.value;
	token = this.getToken(false,true);
}
if (values.length && valueText){
	this.forgetState();
	aDecl.push(this._createJscsspDeclarationFromValuesArray(descriptor,values,valueText));
	return valueText;
}
return "";
}
,parseMarginOrPaddingShorthand:function(token,aDecl,aAcceptPriority,aProperty){
	var top = null;
	var bottom = null;
	var left = null;
	var right = null;
	var values = [];
	while (true){
	if (!token.isNotNull()) break;
	if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (!values.length && token.isIdent(this.kINHERIT)){
	values.push(token.value);
	token = this.getToken(true,true);
	break;
}
else if (token.isDimension() || token.isNumber("0") || token.isPercentage() || token.isIdent("auto")){
	values.push(token.value);
}
else return "";
	token = this.getToken(true,true);
}
var count = values.length;
	switch (count){
	case 1:top = values[0];
	bottom = top;
	left = top;
	right = top;
	break;
	case 2:top = values[0];
	bottom = top;
	left = values[1];
	right = left;
	break;
	case 3:top = values[0];
	left = values[1];
	right = left;
	bottom = values[2];
	break;
	case 4:top = values[0];
	right = values[1];
	bottom = values[2];
	left = values[3];
	break;
	default:return "";
}
this.forgetState();
	aDecl.push(this._createJscsspDeclarationFromValue(aProperty + "-top",top));
	aDecl.push(this._createJscsspDeclarationFromValue(aProperty + "-right",right));
	aDecl.push(this._createJscsspDeclarationFromValue(aProperty + "-bottom",bottom));
	aDecl.push(this._createJscsspDeclarationFromValue(aProperty + "-left",left));
	return top + " " + right + " " + bottom + " " + left;
}
,parseBorderColorShorthand:function(token,aDecl,aAcceptPriority){
	var top = null;
	var bottom = null;
	var left = null;
	var right = null;
	var values = [];
	while (true){
	if (!token.isNotNull()) break;
	if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (!values.length && token.isIdent(this.kINHERIT)){
	values.push(token.value);
	token = this.getToken(true,true);
	break;
}
else{
	var color = this.parseColor(token);
	if (color) values.push(color);
	else return "";
}
token = this.getToken(true,true);
}
var count = values.length;
	switch (count){
	case 1:top = values[0];
	bottom = top;
	left = top;
	right = top;
	break;
	case 2:top = values[0];
	bottom = top;
	left = values[1];
	right = left;
	break;
	case 3:top = values[0];
	left = values[1];
	right = left;
	bottom = values[2];
	break;
	case 4:top = values[0];
	right = values[1];
	bottom = values[2];
	left = values[3];
	break;
	default:return "";
}
this.forgetState();
	aDecl.push(this._createJscsspDeclarationFromValue("border-top-color",top));
	aDecl.push(this._createJscsspDeclarationFromValue("border-right-color",right));
	aDecl.push(this._createJscsspDeclarationFromValue("border-bottom-color",bottom));
	aDecl.push(this._createJscsspDeclarationFromValue("border-left-color",left));
	return top + " " + right + " " + bottom + " " + left;
}
,parseCueShorthand:function(token,declarations,aAcceptPriority){
	var before = "";
	var after = "";
	var values = [];
	var values = [];
	while (true){
	if (!token.isNotNull()) break;
	if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (!values.length && token.isIdent(this.kINHERIT)){
	values.push(token.value);
}
else if (token.isIdent("none")) values.push(token.value);
	else if (token.isFunction("url(")){
	var token = this.getToken(true,true);
	var urlContent = this.parseURL(token);
	if (urlContent) values.push("url(" + urlContent);
	else return "";
}
else return "";
	token = this.getToken(true,true);
}
var count = values.length;
	switch (count){
	case 1:before = values[0];
	after = before;
	break;
	case 2:before = values[0];
	after = values[1];
	break;
	default:return "";
}
this.forgetState();
	aDecl.push(this._createJscsspDeclarationFromValue("cue-before",before));
	aDecl.push(this._createJscsspDeclarationFromValue("cue-after",after));
	return before + " " + after;
}
,parsePauseShorthand:function(token,declarations,aAcceptPriority){
	var before = "";
	var after = "";
	var values = [];
	var values = [];
	while (true){
	if (!token.isNotNull()) break;
	if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (!values.length && token.isIdent(this.kINHERIT)){
	values.push(token.value);
}
else if (token.isDimensionOfUnit("ms") || token.isDimensionOfUnit("s") || token.isPercentage() || token.isNumber("0")) values.push(token.value);
	else return "";
	token = this.getToken(true,true);
}
var count = values.length;
	switch (count){
	case 1:before = values[0];
	after = before;
	break;
	case 2:before = values[0];
	after = values[1];
	break;
	default:return "";
}
this.forgetState();
	aDecl.push(this._createJscsspDeclarationFromValue("pause-before",before));
	aDecl.push(this._createJscsspDeclarationFromValue("pause-after",after));
	return before + " " + after;
}
,parseBorderWidthShorthand:function(token,aDecl,aAcceptPriority){
	var top = null;
	var bottom = null;
	var left = null;
	var right = null;
	var values = [];
	while (true){
	if (!token.isNotNull()) break;
	if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (!values.length && token.isIdent(this.kINHERIT)){
	values.push(token.value);
}
else if (token.isDimension() || token.isNumber("0") || (token.isIdent() && token.value in this.kBORDER_WIDTH_NAMES)){
	values.push(token.value);
}
else return "";
	token = this.getToken(true,true);
}
var count = values.length;
	switch (count){
	case 1:top = values[0];
	bottom = top;
	left = top;
	right = top;
	break;
	case 2:top = values[0];
	bottom = top;
	left = values[1];
	right = left;
	break;
	case 3:top = values[0];
	left = values[1];
	right = left;
	bottom = values[2];
	break;
	case 4:top = values[0];
	right = values[1];
	bottom = values[2];
	left = values[3];
	break;
	default:return "";
}
this.forgetState();
	aDecl.push(this._createJscsspDeclarationFromValue("border-top-width",top));
	aDecl.push(this._createJscsspDeclarationFromValue("border-right-width",right));
	aDecl.push(this._createJscsspDeclarationFromValue("border-bottom-width",bottom));
	aDecl.push(this._createJscsspDeclarationFromValue("border-left-width",left));
	return top + " " + right + " " + bottom + " " + left;
}
,parseBorderStyleShorthand:function(token,aDecl,aAcceptPriority){
	var top = null;
	var bottom = null;
	var left = null;
	var right = null;
	var values = [];
	while (true){
	if (!token.isNotNull()) break;
	if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (!values.length && token.isIdent(this.kINHERIT)){
	values.push(token.value);
}
else if (token.isIdent() && token.value in this.kBORDER_STYLE_NAMES){
	values.push(token.value);
}
else return "";
	token = this.getToken(true,true);
}
var count = values.length;
	switch (count){
	case 1:top = values[0];
	bottom = top;
	left = top;
	right = top;
	break;
	case 2:top = values[0];
	bottom = top;
	left = values[1];
	right = left;
	break;
	case 3:top = values[0];
	left = values[1];
	right = left;
	bottom = values[2];
	break;
	case 4:top = values[0];
	right = values[1];
	bottom = values[2];
	left = values[3];
	break;
	default:return "";
}
this.forgetState();
	aDecl.push(this._createJscsspDeclarationFromValue("border-top-style",top));
	aDecl.push(this._createJscsspDeclarationFromValue("border-right-style",right));
	aDecl.push(this._createJscsspDeclarationFromValue("border-bottom-style",bottom));
	aDecl.push(this._createJscsspDeclarationFromValue("border-left-style",left));
	return top + " " + right + " " + bottom + " " + left;
}
,parseBorderEdgeOrOutlineShorthand:function(token,aDecl,aAcceptPriority,aProperty){
	var bWidth = null;
	var bStyle = null;
	var bColor = null;
	while (true){
	if (!token.isNotNull()) break;
	if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (!bWidth && !bStyle && !bColor && token.isIdent(this.kINHERIT)){
	bWidth = this.kINHERIT;
	bStyle = this.kINHERIT;
	bColor = this.kINHERIT;
}
else if (!bWidth && (token.isDimension() || (token.isIdent() && token.value in this.kBORDER_WIDTH_NAMES) || token.isNumber("0"))){
	bWidth = token.value;
}
else if (!bStyle && (token.isIdent() && token.value in this.kBORDER_STYLE_NAMES)){
	bStyle = token.value;
}
else{
	var color = (aProperty == "outline" && token.isIdent("invert")) ? "invert":this.parseColor(token);
	if (!bColor && color) bColor = color;
	else return "";
}
token = this.getToken(true,true);
}
// create the declarations this.forgetState();
	bWidth = bWidth ? bWidth:"medium";
	bStyle = bStyle ? bStyle:"none";
	bColor = bColor ? bColor:"-moz-initial";
	function addPropertyToDecl(aSelf,aDecl,property,w,s,c){
	aDecl.push(aSelf._createJscsspDeclarationFromValue(property + "-width",w));
	aDecl.push(aSelf._createJscsspDeclarationFromValue(property + "-style",s));
	aDecl.push(aSelf._createJscsspDeclarationFromValue(property + "-color",c));
}
if (aProperty == "border"){
	addPropertyToDecl(this,aDecl,"border-top",bWidth,bStyle,bColor);
	addPropertyToDecl(this,aDecl,"border-right",bWidth,bStyle,bColor);
	addPropertyToDecl(this,aDecl,"border-bottom",bWidth,bStyle,bColor);
	addPropertyToDecl(this,aDecl,"border-left",bWidth,bStyle,bColor);
}
else addPropertyToDecl(this,aDecl,aProperty,bWidth,bStyle,bColor);
	return bWidth + " " + bStyle + " " + bColor;
}
,parseBackgroundShorthand:function(token,aDecl,aAcceptPriority){
	var kHPos ={
	"left":true,"right":true}
;
	var kVPos ={
	"top":true,"bottom":true}
;
	var kPos ={
	"left":true,"right":true,"top":true,"bottom":true,"center":true}
;
	var bgColor = null;
	var bgRepeat = null;
	var bgAttachment = null;
	var bgImage = null;
	var bgPosition = null;
	while (true){
	if (!token.isNotNull()) break;
	if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (!bgColor && !bgRepeat && !bgAttachment && !bgImage && !bgPosition && token.isIdent(this.kINHERIT)){
	bgColor = this.kINHERIT;
	bgRepeat = this.kINHERIT;
	bgAttachment = this.kINHERIT;
	bgImage = this.kINHERIT;
	bgPosition = this.kINHERIT;
}
else{
	if (!bgAttachment && (token.isIdent("scroll") || token.isIdent("fixed"))){
	bgAttachment = token.value;
}
else if (!bgPosition && ((token.isIdent() && token.value in kPos) || token.isDimension() || token.isNumber("0") || token.isPercentage())){
	bgPosition = token.value;
	token = this.getToken(true,true);
	if (token.isDimension() || token.isNumber("0") || token.isPercentage()){
	bgPosition += " " + token.value;
}
else if (token.isIdent() && token.value in kPos){
	if ((bgPosition in kHPos && token.value in kHPos) || (bgPosition in kVPos && token.value in kVPos)) return "";
	bgPosition += " " + token.value;
}
else{
	this.ungetToken();
	bgPosition += " center";
}
}
else if (!bgRepeat && (token.isIdent("repeat") || token.isIdent("repeat-x") || token.isIdent("repeat-y") || token.isIdent("no-repeat"))){
	bgRepeat = token.value;
}
else if (!bgImage && (token.isFunction("url(") || token.isIdent("none"))){
	bgImage = token.value;
	if (token.isFunction("url(")){
	token = this.getToken(true,true);
	var url = this.parseURL(token);
	// TODO if (url) bgImage += url;
	else return "";
}
}
else if (!bgImage && (token.isFunction("-moz-linear-gradient(") || token.isFunction("-moz-radial-gradient(") || token.isFunction("-moz-repeating-linear-gradient(") || token.isFunction("-moz-repeating-radial-gradient("))){
	var gradient = CssInspector.parseGradient(this,token);
	if (gradient) bgImage = CssInspector.serializeGradient(gradient);
	else return "";
}
else{
	var color = this.parseColor(token);
	if (!bgColor && color) bgColor = color;
	else return "";
}
}
token = this.getToken(true,true);
}
// create the declarations this.forgetState();
	bgColor = bgColor ? bgColor:"transparent";
	bgImage = bgImage ? bgImage:"none";
	bgRepeat = bgRepeat ? bgRepeat:"repeat";
	bgAttachment = bgAttachment ? bgAttachment:"scroll";
	bgPosition = bgPosition ? bgPosition:"top left";
	aDecl.push(this._createJscsspDeclarationFromValue("background-color",bgColor));
	aDecl.push(this._createJscsspDeclarationFromValue("background-image",bgImage));
	aDecl.push(this._createJscsspDeclarationFromValue("background-repeat",bgRepeat));
	aDecl.push(this._createJscsspDeclarationFromValue("background-attachment",bgAttachment));
	aDecl.push(this._createJscsspDeclarationFromValue("background-position",bgPosition));
	return bgColor + " " + bgImage + " " + bgRepeat + " " + bgAttachment + " " + bgPosition;
}
,parseListStyleShorthand:function(token,aDecl,aAcceptPriority){
	var kPosition ={
	"inside":true,"outside":true}
;
	var lType = null;
	var lPosition = null;
	var lImage = null;
	while (true){
	if (!token.isNotNull()) break;
	if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (!lType && !lPosition && ! lImage && token.isIdent(this.kINHERIT)){
	lType = this.kINHERIT;
	lPosition = this.kINHERIT;
	lImage = this.kINHERIT;
}
else if (!lType && (token.isIdent() && token.value in this.kLIST_STYLE_TYPE_NAMES)){
	lType = token.value;
}
else if (!lPosition && (token.isIdent() && token.value in kPosition)){
	lPosition = token.value;
}
else if (!lImage && token.isFunction("url")){
	token = this.getToken(true,true);
	var urlContent = this.parseURL(token);
	if (urlContent){
	lImage = "url(" + urlContent;
}
else return "";
}
else if (!token.isIdent("none")) return "";
	token = this.getToken(true,true);
}
// create the declarations this.forgetState();
	lType = lType ? lType:"none";
	lImage = lImage ? lImage:"none";
	lPosition = lPosition ? lPosition:"outside";
	aDecl.push(this._createJscsspDeclarationFromValue("list-style-type",lType));
	aDecl.push(this._createJscsspDeclarationFromValue("list-style-position",lPosition));
	aDecl.push(this._createJscsspDeclarationFromValue("list-style-image",lImage));
	return lType + " " + lPosition + " " + lImage;
}
,parseFontShorthand:function(token,aDecl,aAcceptPriority){
	var kStyle ={
	"italic":true,"oblique":true}
;
	var kVariant ={
	"small-caps":true}
;
	var kWeight ={
	"bold":true,"bolder":true,"lighter":true,"100":true,"200":true,"300":true,"400":true,"500":true,"600":true,"700":true,"800":true,"900":true}
;
	var kSize ={
	"xx-small":true,"x-small":true,"small":true,"medium":true,"large":true,"x-large":true,"xx-large":true,"larger":true,"smaller":true}
;
	var kValues ={
	"caption":true,"icon":true,"menu":true,"message-box":true,"small-caption":true,"status-bar":true}
;
	var kFamily ={
	"serif":true,"sans-serif":true,"cursive":true,"fantasy":true,"monospace":true}
;
	var fStyle = null;
	var fVariant = null;
	var fWeight = null;
	var fSize = null;
	var fLineHeight = null;
	var fFamily = "";
	var fSystem = null;
	var fFamilyValues = [];
	var normalCount = 0;
	while (true){
	if (!token.isNotNull()) break;
	if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (!fStyle && !fVariant && !fWeight && !fSize && !fLineHeight && !fFamily && !fSystem && token.isIdent(this.kINHERIT)){
	fStyle = this.kINHERIT;
	fVariant = this.kINHERIT;
	fWeight = this.kINHERIT;
	fSize = this.kINHERIT;
	fLineHeight = this.kINHERIT;
	fFamily = this.kINHERIT;
	fSystem = this.kINHERIT;
}
else{
	if (!fSystem && (token.isIdent() && token.value in kValues)){
	fSystem = token.value;
	break;
}
else{
	if (!fStyle && token.isIdent() && (token.value in kStyle)){
	fStyle = token.value;
}
else if (!fVariant && token.isIdent() && (token.value in kVariant)){
	fVariant = token.value;
}
else if (!fWeight && (token.isIdent() || token.isNumber()) && (token.value in kWeight)){
	fWeight = token.value;
}
else if (!fSize && ((token.isIdent() && (token.value in kSize)) || token.isDimension() || token.isPercentage())){
	fSize = token.value;
	var token = this.getToken(false,false);
	if (token.isSymbol("/")){
	token = this.getToken(false,false);
	if (!fLineHeight && (token.isDimension() || token.isNumber() || token.isPercentage())){
	fLineHeight = token.value;
}
else return "";
}
else this.ungetToken();
}
else if (token.isIdent("normal")){
	normalCount++;
	if (normalCount > 3) return "";
}
else if (!fFamily && // *MUST* be last to be tested here (token.isString() || token.isIdent())){
	var lastWasComma = false;
	while (true){
	if (!token.isNotNull()) break;
	else if (token.isSymbol(";
	") || (aAcceptPriority && token.isSymbol("!")) || token.isSymbol("}
")){
	this.ungetToken();
	break;
}
else if (token.isIdent() && token.value in kFamily){
	var value = new jscsspVariable(kJscsspPRIMITIVE_VALUE,null);
	value.value = token.value;
	fFamilyValues.push(value);
	fFamily += token.value;
	break;
}
else if (token.isString() || token.isIdent()){
	var value = new jscsspVariable(kJscsspPRIMITIVE_VALUE,null);
	value.value = token.value;
	fFamilyValues.push(value);
	fFamily += token.value;
	lastWasComma = false;
}
else if (!lastWasComma && token.isSymbol(",")){
	fFamily += ",";
	lastWasComma = true;
}
else return "";
	token = this.getToken(true,true);
}
}
else{
	return "";
}
}
}
token = this.getToken(true,true);
}
// create the declarations this.forgetState();
	if (fSystem){
	aDecl.push(this._createJscsspDeclarationFromValue("font",fSystem));
	return fSystem;
}
fStyle = fStyle ? fStyle:"normal";
	fVariant = fVariant ? fVariant:"normal";
	fWeight = fWeight ? fWeight:"normal";
	fSize = fSize ? fSize:"medium";
	fLineHeight = fLineHeight ? fLineHeight:"normal";
	fFamily = fFamily ? fFamily:"-moz-initial";
	aDecl.push(this._createJscsspDeclarationFromValue("font-style",fStyle));
	aDecl.push(this._createJscsspDeclarationFromValue("font-variant",fVariant));
	aDecl.push(this._createJscsspDeclarationFromValue("font-weight",fWeight));
	aDecl.push(this._createJscsspDeclarationFromValue("font-size",fSize));
	aDecl.push(this._createJscsspDeclarationFromValue("line-height",fLineHeight));
	aDecl.push(this._createJscsspDeclarationFromValuesArray("font-family",fFamilyValues,fFamily));
	return fStyle + " " + fVariant + " " + fWeight + " " + fSize + "/" + fLineHeight + " " + fFamily;
}
,_createJscsspDeclaration:function(property,value){
	var decl = new jscsspDeclaration();
	decl.property = property;
	decl.value = this.trim11(value);
	decl.parsedCssText = property + ":" + value + ";
	";
	return decl;
}
,_createJscsspDeclarationFromValue:function(property,valueText){
	var decl = new jscsspDeclaration();
	decl.property = property;
	var value = new jscsspVariable(kJscsspPRIMITIVE_VALUE,null);
	value.value = valueText;
	decl.values = [value];
	decl.valueText = valueText;
	decl.parsedCssText = property + ":" + valueText + ";
	";
	return decl;
}
,_createJscsspDeclarationFromValuesArray:function(property,values,valueText){
	var decl = new jscsspDeclaration();
	decl.property = property;
	decl.values = values;
	decl.valueText = valueText;
	decl.parsedCssText = property + ":" + valueText + ";
	";
	return decl;
}
,parseURL:function(token){
	var value = "";
	if (token.isString()){
	value += token.value;
	token = this.getToken(true,true);
}
else while (true){
	if (!token.isNotNull()){
	this.reportError(kURL_EOF);
	return "";
}
if (token.isWhiteSpace()){
	nextToken = this.lookAhead(true,true);
	// if next token is not a closing parenthesis,that's an error if (!nextToken.isSymbol(")")){
	this.reportError(kURL_WS_INSIDE);
	token = this.currentToken();
	break;
}
}
if (token.isSymbol(")")){
	break;
}
value += token.value;
	token = this.getToken(false,false);
}
if (token.isSymbol(")")){
	return value + ")";
}
return "";
}
,parseFunctionArgument:function(token){
	var value = "";
	if (token.isString()){
	value += token.value;
	token = this.getToken(true,true);
}
else{
	var parenthesis = 1;
	while (true){
	if (!token.isNotNull()) return "";
	if (token.isFunction() || token.isSymbol("(")) parenthesis++;
	if (token.isSymbol(")")){
	parenthesis--;
	if (!parenthesis) break;
}
value += token.value;
	token = this.getToken(false,false);
}
}
if (token.isSymbol(")")) return value + ")";
	return "";
}
,parseColor:function(token){
	var color = "";
	if (token.isFunction("rgb(") || token.isFunction("rgba(")){
	color = token.value;
	var isRgba = token.isFunction("rgba(") token = this.getToken(true,true);
	if (!token.isNumber() && !token.isPercentage()) return "";
	color += token.value;
	token = this.getToken(true,true);
	if (!token.isSymbol(",")) return "";
	color += ",";
	token = this.getToken(true,true);
	if (!token.isNumber() && !token.isPercentage()) return "";
	color += token.value;
	token = this.getToken(true,true);
	if (!token.isSymbol(",")) return "";
	color += ",";
	token = this.getToken(true,true);
	if (!token.isNumber() && !token.isPercentage()) return "";
	color += token.value;
	if (isRgba){
	token = this.getToken(true,true);
	if (!token.isSymbol(",")) return "";
	color += ",";
	token = this.getToken(true,true);
	if (!token.isNumber()) return "";
	color += token.value;
}
token = this.getToken(true,true);
	if (!token.isSymbol(")")) return "";
	color += token.value;
}
else if (token.isFunction("hsl(") || token.isFunction("hsla(")){
	color = token.value;
	var isHsla = token.isFunction("hsla(") token = this.getToken(true,true);
	if (!token.isNumber()) return "";
	color += token.value;
	token = this.getToken(true,true);
	if (!token.isSymbol(",")) return "";
	color += ",";
	token = this.getToken(true,true);
	if (!token.isPercentage()) return "";
	color += token.value;
	token = this.getToken(true,true);
	if (!token.isSymbol(",")) return "";
	color += ",";
	token = this.getToken(true,true);
	if (!token.isPercentage()) return "";
	color += token.value;
	if (isHsla){
	token = this.getToken(true,true);
	if (!token.isSymbol(",")) return "";
	color += ",";
	token = this.getToken(true,true);
	if (!token.isNumber()) return "";
	color += token.value;
}
token = this.getToken(true,true);
	if (!token.isSymbol(")")) return "";
	color += token.value;
}
else if (token.isIdent() && (token.value in this.kCOLOR_NAMES)) color = token.value;
	else if (token.isSymbol("#")){
	token = this.getHexValue();
	if (!token.isHex()) return "";
	var length = token.value.length;
	if (length != 3 && length != 6) return "";
	if (token.value.match( /[a-fA-F0-9]/g ).length != length) return "";
	color = "#" + token.value;
}
return color;
}
,parseDeclaration:function(aToken,aDecl,aAcceptPriority,aExpandShorthands,aSheet){
	this.preserveState();
	var blocks = [];
	if (aToken.isIdent()){
	var descriptor = aToken.value.toLowerCase();
	var token = this.getToken(true,true);
	if (token.isSymbol(":")){
	var token = this.getToken(true,true);
	var value = "";
	var declarations = [];
	if (aExpandShorthands) switch (descriptor){
	case "background":value = this.parseBackgroundShorthand(token,declarations,aAcceptPriority);
	break;
	case "margin":case "padding":value = this.parseMarginOrPaddingShorthand(token,declarations,aAcceptPriority,descriptor);
	break;
	case "border-color":value = this.parseBorderColorShorthand(token,declarations,aAcceptPriority);
	break;
	case "border-style":value = this.parseBorderStyleShorthand(token,declarations,aAcceptPriority);
	break;
	case "border-width":value = this.parseBorderWidthShorthand(token,declarations,aAcceptPriority);
	break;
	case "border-top":case "border-right":case "border-bottom":case "border-left":case "border":case "outline":value = this.parseBorderEdgeOrOutlineShorthand(token,declarations,aAcceptPriority,descriptor);
	break;
	case "cue":value = this.parseCueShorthand(token,declarations,aAcceptPriority);
	break;
	case "pause":value = this.parsePauseShorthand(token,declarations,aAcceptPriority);
	break;
	case "font":value = this.parseFontShorthand(token,declarations,aAcceptPriority);
	break;
	case "list-style":value = this.parseListStyleShorthand(token,declarations,aAcceptPriority);
	break;
	default:value = this.parseDefaultPropertyValue(token,declarations,aAcceptPriority,descriptor,aSheet);
	break;
}
else value = this.parseDefaultPropertyValue(token,declarations,aAcceptPriority,descriptor,aSheet);
	token = this.currentToken();
	if (value) // no error above{
	var priority = false;
	if (token.isSymbol("!")){
	token = this.getToken(true,true);
	if (token.isIdent("important")){
	priority = true;
	token = this.getToken(true,true);
	if (token.isSymbol(";
	") || token.isSymbol("}
")){
	if (token.isSymbol("}
")) this.ungetToken();
}
else return "";
}
else return "";
}
else if (token.isNotNull() && !token.isSymbol(";
	") && !token.isSymbol("}
")) return "";
	for (var i = 0;
	i < declarations.length;
	i++){
	declarations[i].priority = priority;
	aDecl.push(declarations[i]);
}
return descriptor + ":" + value + ";
	";
}
}
}
else if (aToken.isComment()){
	if (this.mPreserveComments){
	this.forgetState();
	var comment = new jscsspComment();
	comment.parsedCssText = aToken.value;
	aDecl.push(comment);
}
return aToken.value;
}
// we have an error here,let's skip it this.restoreState();
	var s = aToken.value;
	blocks = [];
	var token = this.getToken(false,false);
	while (token.isNotNull()){
	s += token.value;
	if ((token.isSymbol(";
	") || token.isSymbol("}
")) && !blocks.length){
	if (token.isSymbol("}
")) this.ungetToken();
	break;
}
else if (token.isSymbol("{
	") || token.isSymbol("(") || token.isSymbol("[") || token.isFunction()){
	blocks.push(token.isFunction() ? "(":token.value);
}
else if (token.isSymbol("}
") || token.isSymbol(")") || token.isSymbol("]")){
	if (blocks.length){
	var ontop = blocks[blocks.length - 1];
	if ((token.isSymbol("}
") && ontop == "{
	") || (token.isSymbol(")") && ontop == "(") || (token.isSymbol("]") && ontop == "[")){
	blocks.pop();
}
}
}
token = this.getToken(false,false);
}
return "";
}
,parseKeyframesRule:function(aToken,aSheet){
	var currentLine = CountLF(this.mScanner.getAlreadyScanned());
	var s = aToken.value;
	var valid = false;
	var keyframesRule = new jscsspKeyframesRule();
	keyframesRule.currentLine = currentLine;
	this.preserveState();
	var token = this.getToken(true,true);
	var foundName = false;
	while (token.isNotNull()){
	if (token.isIdent()){
	// should be the keyframes' name foundName = true;
	s += " " + token.value;
	keyframesRule.name = token.value;
	token = this.getToken(true,true);
	if (token.isSymbol("{
	")) this.ungetToken();
	else{
	// error... token.type = jscsspToken.NULL_TYPE;
	break;
}
}
else if (token.isSymbol("{
	")){
	if (!foundName){
	token.type = jscsspToken.NULL_TYPE;
	// not a valid keyframes at-rule}
break;
}
else{
	token.type = jscsspToken.NULL_TYPE;
	// not a valid keyframes at-rule break;
}
token = this.getToken(true,true);
}
if (token.isSymbol("{
	") && keyframesRule.name){
	// ok let's parse keyframe rules now... s += "{
	";
	token = this.getToken(true,false);
	while (token.isNotNull()){
	if (token.isComment() && this.mPreserveComments){
	s += " " + token.value;
	var comment = new jscsspComment();
	comment.parsedCssText = token.value;
	keyframesRule.cssRules.push(comment);
}
else if (token.isSymbol("}
")){
	valid = true;
	break;
}
else{
	var r = this.parseKeyframeRule(token,keyframesRule,true);
	if (r) s += r;
}
token = this.getToken(true,false);
}
}
if (valid){
	this.forgetState();
	keyframesRule.currentLine = currentLine;
	keyframesRule.parsedCssText = s;
	aSheet.cssRules.push(keyframesRule);
	return true;
}
this.restoreState();
	return false;
}
,parseKeyframeRule:function(aToken,aOwner){
	var currentLine = CountLF(this.mScanner.getAlreadyScanned());
	this.preserveState();
	var token = aToken;
	// find the keyframe keys var key = "";
	while (token.isNotNull()){
	if (token.isIdent() || token.isPercentage()){
	if (token.isIdent() && !token.isIdent("from") && !token.isIdent("to")){
	key = "";
	break;
}
key += token.value;
	token = this.getToken(true,true);
	if (token.isSymbol("{
	")){
	this.ungetToken();
	break;
}
else if (token.isSymbol(",")){
	key += ",";
}
else{
	key = "";
	break;
}
}
else{
	key = "";
	break;
}
token = this.getToken(true,true);
}
var valid = false;
	var declarations = [];
	if (key){
	var s = key;
	token = this.getToken(true,true);
	if (token.isSymbol("{
	")){
	s += "{
	";
	token = this.getToken(true,false);
	while (true){
	if (!token.isNotNull()){
	valid = true;
	break;
}
if (token.isSymbol("}
")){
	s += "}
";
	valid = true;
	break;
}
else{
	var d = this.parseDeclaration(token,declarations,true,true,aOwner);
	s += ((d && declarations.length) ? " ":"") + d;
}
token = this.getToken(true,false);
}
}
}
else{
	// key is invalid so the whole rule is invalid with it}
if (valid){
	var rule = new jscsspKeyframeRule();
	rule.currentLine = currentLine;
	rule.parsedCssText = s;
	rule.declarations = declarations;
	rule.keyText = key;
	rule.parentRule = aOwner;
	aOwner.cssRules.push(rule);
	return s;
}
this.restoreState();
	s = this.currentToken().value;
	this.addUnknownAtRule(aOwner,s);
	return "";
}
,parseMediaRule:function(aToken,aSheet){
	this.mScanner.mMediaQueryMode = true;
	var currentLine = CountLF(this.mScanner.getAlreadyScanned());
	var s = aToken.value;
	var valid = false;
	var mediaRule = new jscsspMediaRule();
	mediaRule.currentLine = currentLine;
	this.preserveState();
	var token = this.getToken(true,true);
	var foundMedia = false;
	while (token.isNotNull()){
	if (token.isIdent()){
	foundMedia = true;
	s += " " + token.value;
	mediaRule.media.push(token.value);
	token = this.getToken(true,true);
	if (token.isSymbol(",")){
	s += ",";
}
else{
	if (token.isSymbol("{
	")) this.ungetToken();
	else{
	// error... token.type = jscsspToken.NULL_TYPE;
	break;
}
}
}
else if (token.isSymbol("{
	")) break;
	else if (foundMedia){
	token.type = jscsspToken.NULL_TYPE;
	// not a media list break;
}
token = this.getToken(true,true);
}
if (token.isSymbol("{
	") && mediaRule.media.length){
	// ok let's parse style rules now... s += "{
	";
	token = this.getToken(true,false);
	while (token.isNotNull()){
	if (token.isComment() && this.mPreserveComments){
	s += " " + token.value;
	var comment = new jscsspComment();
	comment.parsedCssText = token.value;
	mediaRule.cssRules.push(comment);
}
else if (token.isSymbol("}
")){
	valid = true;
	break;
}
else{
	var r = this.parseStyleRule(token,mediaRule,true);
	if (r) s += r;
}
token = this.getToken(true,false);
}
}
if (valid){
	this.forgetState();
	mediaRule.parsedCssText = s;
	aSheet.cssRules.push(mediaRule);
	return true;
}
this.restoreState();
	return false;
}
,trim11:function(str){
	str = str.replace(/^\s+/,'');
	for (var i = str.length - 1;
	i >= 0;
	i--){
	if (/\S/.test( str.charAt(i) )){
	// XXX charat str = str.substring(0,i + 1);
	break;
}
}
return str;
}
,parseStyleRule:function(aToken,aOwner,aIsInsideMediaRule){
	var currentLine = CountLF(this.mScanner.getAlreadyScanned());
	this.preserveState();
	// first let's see if we have a selector here... var selector = this.parseSelector(aToken,false);
	var valid = false;
	var declarations = [];
	if (selector){
	selector = this.trim11(selector.selector);
	var s = selector;
	var token = this.getToken(true,true);
	if (token.isSymbol("{
	")){
	s += "{
	";
	var token = this.getToken(true,false);
	while (true){
	if (!token.isNotNull()){
	valid = true;
	break;
}
if (token.isSymbol("}
")){
	s += "}
";
	valid = true;
	break;
}
else{
	var d = this.parseDeclaration(token,declarations,true,true,aOwner);
	s += ((d && declarations.length) ? " ":"") + d;
}
token = this.getToken(true,false);
}
}
}
else{
	// selector is invalid so the whole rule is invalid with it}
if (valid){
	var rule = new jscsspStyleRule();
	rule.currentLine = currentLine;
	rule.parsedCssText = s;
	rule.declarations = declarations;
	rule.mSelectorText = selector;
	if (aIsInsideMediaRule) rule.parentRule = aOwner;
	else rule.parentStyleSheet = aOwner;
	aOwner.cssRules.push(rule);
	return s;
}
this.restoreState();
	s = this.currentToken().value;
	this.addUnknownAtRule(aOwner,s);
	return "";
}
,parseSelector:function(aToken,aParseSelectorOnly){
	var s = "";
	var specificity ={
	a:0,b:0,c:0,d:0}
;
	// CSS 2.1 section 6.4.3 var isFirstInChain = true;
	var token = aToken;
	var valid = false;
	var combinatorFound = false;
	while (true){
	if (!token.isNotNull()){
	if (aParseSelectorOnly) return{
	selector:s,specificity:specificity}
;
	return "";
}
if (!aParseSelectorOnly && token.isSymbol("{
	")){
	// end of selector valid = !combinatorFound;
	if (valid) this.ungetToken();
	break;
}
if (token.isSymbol(",")){
	// group of selectors s += token.value;
	isFirstInChain = true;
	combinatorFound = false;
	token = this.getToken(false,true);
	continue;
}
// now combinators and grouping... else if (!combinatorFound && (token.isWhiteSpace() || token.isSymbol(">") || token.isSymbol("+") || token.isSymbol("~"))){
	if (token.isWhiteSpace()){
	s += " ";
	var nextToken = this.lookAhead(true,true);
	if (!nextToken.isNotNull()){
	if (aParseSelectorOnly) return{
	selector:s,specificity:specificity}
;
	return "";
}
if (nextToken.isSymbol(">") || nextToken.isSymbol("+") || nextToken.isSymbol("~")){
	token = this.getToken(true,true);
	s += token.value + " ";
	combinatorFound = true;
}
}
else{
	s += token.value;
	combinatorFound = true;
}
isFirstInChain = true;
	token = this.getToken(true,true);
	continue;
}
else{
	var simpleSelector = this.parseSimpleSelector(token,isFirstInChain,true);
	if (!simpleSelector) break;
	// error s += simpleSelector.selector;
	specificity.b += simpleSelector.specificity.b;
	specificity.c += simpleSelector.specificity.c;
	specificity.d += simpleSelector.specificity.d;
	isFirstInChain = false;
	combinatorFound = false;
}
token = this.getToken(false,true);
}
if (valid){
	return{
	selector:s,specificity:specificity}
;
}
return "";
}
,isPseudoElement:function(aIdent){
	switch (aIdent){
	case "first-letter":case "first-line":case "before":case "after":case "marker":return true;
	break;
	default:return false;
	break;
}
}
,parseSimpleSelector:function(token,isFirstInChain,canNegate){
	var s = "";
	var specificity ={
	a:0,b:0,c:0,d:0}
;
	// CSS 2.1 section 6.4.3 if (isFirstInChain && (token.isSymbol("*") || token.isSymbol("|") || token.isIdent())){
	// type or universal selector if (token.isSymbol("*") || token.isIdent()){
	// we don't know yet if it's a prefix or a universal // selector s += token.value;
	var isIdent = token.isIdent();
	token = this.getToken(false,true);
	if (token.isSymbol("|")){
	// it's a prefix s += token.value;
	token = this.getToken(false,true);
	if (token.isIdent() || token.isSymbol("*")){
	// ok we now have a type element or universal // selector s += token.value;
	if (token.isIdent()) specificity.d++;
}
else // oops that's an error... return null;
}
else{
	this.ungetToken();
	if (isIdent) specificity.d++;
}
}
else if (token.isSymbol("|")){
	s += token.value;
	token = this.getToken(false,true);
	if (token.isIdent() || token.isSymbol("*")){
	s += token.value;
	if (token.isIdent()) specificity.d++;
}
else // oops that's an error return null;
}
}
else if (token.isSymbol(".") || token.isSymbol("#")){
	var isClass = token.isSymbol(".");
	s += token.value;
	token = this.getToken(false,true);
	if (token.isIdent()){
	s += token.value;
	if (isClass) specificity.c++;
	else specificity.b++;
}
else return null;
}
else if (token.isSymbol(":")){
	s += token.value;
	token = this.getToken(false,true);
	if (token.isSymbol(":")){
	s += token.value;
	token = this.getToken(false,true);
}
if (token.isIdent()){
	s += token.value;
	if (this.isPseudoElement(token.value)) specificity.d++;
	else specificity.c++;
}
else if (token.isFunction()){
	s += token.value;
	if (token.isFunction(":not(")){
	if (!canNegate) return null;
	token = this.getToken(true,true);
	var simpleSelector = this.parseSimpleSelector(token,isFirstInChain,false);
	if (!simpleSelector) return null;
	else{
	s += simpleSelector.selector;
	token = this.getToken(true,true);
	if (token.isSymbol(")")) s += ")";
	else return null;
}
specificity.c++;
}
else{
	while (true){
	token = this.getToken(false,true);
	if (token.isSymbol(")")){
	s += ")";
	break;
}
else s += token.value;
}
specificity.c++;
}
}
else return null;
}
else if (token.isSymbol("[")){
	s += "[";
	token = this.getToken(true,true);
	if (token.isIdent() || token.isSymbol("*")){
	s += token.value;
	var nextToken = this.getToken(true,true);
	if (token.isSymbol("|")){
	s += "|";
	token = this.getToken(true,true);
	if (token.isIdent()) s += token.value;
	else return null;
}
else this.ungetToken();
}
else if (token.isSymbol("|")){
	s += "|";
	token = this.getToken(true,true);
	if (token.isIdent()) s += token.value;
	else return null;
}
else return null;
	// nothing,=,*=,$=,^=,|= token = this.getToken(true,true);
	if (token.isIncludes() || token.isDashmatch() || token.isBeginsmatch() || token.isEndsmatch() || token.isContainsmatch() || token.isSymbol("=")){
	s += token.value;
	token = this.getToken(true,true);
	if (token.isString() || token.isIdent()){
	s += token.value;
	token = this.getToken(true,true);
}
else return null;
	if (token.isSymbol("]")){
	s += token.value;
	specificity.c++;
}
else return null;
}
else if (token.isSymbol("]")){
	s += token.value;
	specificity.c++;
}
else return null;
}
else if (token.isWhiteSpace()){
	var t = this.lookAhead(true,true);
	if (t.isSymbol('{
	')) return ""}
if (s) return{
	selector:s,specificity:specificity}
;
	return null;
}
,preserveState:function(){
	this.mPreservedTokens.push(this.currentToken());
	this.mScanner.preserveState();
}
,restoreState:function(){
	if (this.mPreservedTokens.length){
	this.mScanner.restoreState();
	this.mToken = this.mPreservedTokens.pop();
}
}
,forgetState:function(){
	if (this.mPreservedTokens.length){
	this.mScanner.forgetState();
	this.mPreservedTokens.pop();
}
}
,parse:function(aString,aTryToPreserveWhitespaces,aTryToPreserveComments){
	if (!aString) return null;
	// early way out if we can this.mPreserveWS = aTryToPreserveWhitespaces;
	this.mPreserveComments = aTryToPreserveComments;
	this.mPreservedTokens = [];
	this.mScanner.init(aString);
	var sheet = new jscsspStylesheet();
	// @charset can only appear at first char of the stylesheet var token = this.getToken(false,false);
	if (!token.isNotNull()) return;
	if (token.isAtRule("@charset")){
	this.parseCharsetRule(token,sheet);
	token = this.getToken(false,false);
}
var foundStyleRules = false;
	var foundImportRules = false;
	var foundNameSpaceRules = false;
	while (true){
	if (!token.isNotNull()) break;
	if (token.isWhiteSpace()){
	if (aTryToPreserveWhitespaces) this.addWhitespace(sheet,token.value);
}
else if (token.isComment()){
	if (this.mPreserveComments) this.addComment(sheet,token.value);
}
else if (token.isAtRule()){
	if (token.isAtRule("@variables")){
	if (!foundImportRules && !foundStyleRules) this.parseVariablesRule(token,sheet);
	else{
	this.reportError(kVARIABLES_RULE_POSITION);
	this.addUnknownAtRule(sheet,token.value);
}
}
else if (token.isAtRule("@import")){
	// @import rules MUST occur before all style and namespace // rules if (!foundStyleRules && !foundNameSpaceRules) foundImportRules = this.parseImportRule(token,sheet);
	else{
	this.reportError(kIMPORT_RULE_POSITION);
	this.addUnknownAtRule(sheet,token.value);
}
}
else if (token.isAtRule("@namespace")){
	// @namespace rules MUST occur before all style rule and // after all @import rules if (!foundStyleRules) foundNameSpaceRules = this.parseNamespaceRule(token,sheet);
	else{
	this.reportError(kNAMESPACE_RULE_POSITION);
	this.addUnknownAtRule(sheet,token.value);
}
}
else if (token.isAtRule("@font-face")){
	if (this.parseFontFaceRule(token,sheet)) foundStyleRules = true;
	else this.addUnknownAtRule(sheet,token.value);
}
else if (token.isAtRule("@page")){
	if (this.parsePageRule(token,sheet)) foundStyleRules = true;
	else this.addUnknownAtRule(sheet,token.value);
}
else if (token.isAtRule("@media")){
	if (this.parseMediaRule(token,sheet)) foundStyleRules = true;
	else this.addUnknownAtRule(sheet,token.value);
}
else if (token.isAtRule("@keyframes")){
	if (!this.parseKeyframesRule(token,sheet)) this.addUnknownAtRule(sheet,token.value);
}
else if (token.isAtRule("@charset")){
	this.reportError(kCHARSET_RULE_CHARSET_SOF);
	this.addUnknownAtRule(sheet,token.value);
}
else{
	this.reportError(kUNKNOWN_AT_RULE);
	this.addUnknownAtRule(sheet,token.value);
}
}
else // plain style rules{
	var ruleText = this.parseStyleRule(token,sheet,false);
	if (ruleText) foundStyleRules = true;
}
token = this.getToken(false);
}
return sheet;
}
}
;
	function jscsspToken(aType,aValue,aUnit){
	this.type = aType;
	this.value = aValue;
	this.unit = aUnit;
}
jscsspToken.NULL_TYPE = 0;
	jscsspToken.WHITESPACE_TYPE = 1;
	jscsspToken.STRING_TYPE = 2;
	jscsspToken.COMMENT_TYPE = 3;
	jscsspToken.NUMBER_TYPE = 4;
	jscsspToken.IDENT_TYPE = 5;
	jscsspToken.FUNCTION_TYPE = 6;
	jscsspToken.ATRULE_TYPE = 7;
	jscsspToken.INCLUDES_TYPE = 8;
	jscsspToken.DASHMATCH_TYPE = 9;
	jscsspToken.BEGINSMATCH_TYPE = 10;
	jscsspToken.ENDSMATCH_TYPE = 11;
	jscsspToken.CONTAINSMATCH_TYPE = 12;
	jscsspToken.SYMBOL_TYPE = 13;
	jscsspToken.DIMENSION_TYPE = 14;
	jscsspToken.PERCENTAGE_TYPE = 15;
	jscsspToken.HEX_TYPE = 16;
	jscsspToken.prototype ={
	isNotNull:function (){
	return this.type;
}
,_isOfType:function (aType,aValue){
	return (this.type == aType && (!aValue || this.value.toLowerCase() == aValue));
}
,isWhiteSpace:function(w){
	return this._isOfType(jscsspToken.WHITESPACE_TYPE,w);
}
,isString:function(){
	return this._isOfType(jscsspToken.STRING_TYPE);
}
,isComment:function(){
	return this._isOfType(jscsspToken.COMMENT_TYPE);
}
,isNumber:function(n){
	return this._isOfType(jscsspToken.NUMBER_TYPE,n);
}
,isSymbol:function(c){
	return this._isOfType(jscsspToken.SYMBOL_TYPE,c);
}
,isIdent:function(i){
	return this._isOfType(jscsspToken.IDENT_TYPE,i);
}
,isFunction:function(f){
	return this._isOfType(jscsspToken.FUNCTION_TYPE,f);
}
,isAtRule:function(a){
	return this._isOfType(jscsspToken.ATRULE_TYPE,a);
}
,isIncludes:function(){
	return this._isOfType(jscsspToken.INCLUDES_TYPE);
}
,isDashmatch:function(){
	return this._isOfType(jscsspToken.DASHMATCH_TYPE);
}
,isBeginsmatch:function(){
	return this._isOfType(jscsspToken.BEGINSMATCH_TYPE);
}
,isEndsmatch:function(){
	return this._isOfType(jscsspToken.ENDSMATCH_TYPE);
}
,isContainsmatch:function(){
	return this._isOfType(jscsspToken.CONTAINSMATCH_TYPE);
}
,isSymbol:function(c){
	return this._isOfType(jscsspToken.SYMBOL_TYPE,c);
}
,isDimension:function(){
	return this._isOfType(jscsspToken.DIMENSION_TYPE);
}
,isPercentage:function(){
	return this._isOfType(jscsspToken.PERCENTAGE_TYPE);
}
,isHex:function(){
	return this._isOfType(jscsspToken.HEX_TYPE);
}
,isDimensionOfUnit:function(aUnit){
	return (this.isDimension() && this.unit == aUnit);
}
,isLength:function(){
	return (this.isPercentage() || this.isDimensionOfUnit("cm") || this.isDimensionOfUnit("mm") || this.isDimensionOfUnit("in") || this.isDimensionOfUnit("pc") || this.isDimensionOfUnit("px") || this.isDimensionOfUnit("em") || this.isDimensionOfUnit("ex") || this.isDimensionOfUnit("pt"));
}
,isAngle:function(){
	return (this.isDimensionOfUnit("deg") || this.isDimensionOfUnit("rad") || this.isDimensionOfUnit("grad"));
}
}
var kJscsspUNKNOWN_RULE = 0;
	var kJscsspSTYLE_RULE = 1var kJscsspCHARSET_RULE = 2;
	var kJscsspIMPORT_RULE = 3;
	var kJscsspMEDIA_RULE = 4;
	var kJscsspFONT_FACE_RULE = 5;
	var kJscsspPAGE_RULE = 6;
	var kJscsspKEYFRAMES_RULE = 7;
	var kJscsspKEYFRAME_RULE = 8;
	var kJscsspNAMESPACE_RULE = 100;
	var kJscsspCOMMENT = 101;
	var kJscsspWHITE_SPACE = 102;
	var kJscsspVARIABLES_RULE = 200;
	var kJscsspSTYLE_DECLARATION = 1000;
	var gTABS = "";
	function jscsspStylesheet(){
	this.cssRules = [];
	this.variables ={
}
;
}
jscsspStylesheet.prototype ={
	insertRule:function(aRule,aIndex){
	try{
	this.cssRules.splice(aIndex,1,aRule);
}
catch(e){
}
}
,deleteRule:function(aIndex){
	try{
	this.cssRules.splice(aIndex);
}
catch(e){
}
}
,cssText:function(){
	var rv = "";
	for (var i = 0;
	i < this.cssRules.length;
	i++) rv += this.cssRules[i].cssText() + "\n";
	return rv;
}
,resolveVariables:function(aMedium){
	function ItemFoundInArray(aArray,aItem){
	for (var i = 0;
	i < aArray.length;
	i++) if (aItem == aArray[i]) return true;
	return false;
}
for (var i = 0;
	i < this.cssRules.length;
	i++){
	var rule = this.cssRules[i];
	if (rule.type == kJscsspSTYLE_RULE || rule.type == kJscsspIMPORT_RULE) break;
	else if (rule.type == kJscsspVARIABLES_RULE && (!rule.media.length || ItemFoundInArray(rule.media,aMedium))){
	for (var j = 0;
	j < rule.declarations.length;
	j++){
	var valueText = "";
	for (var k = 0;
	k < rule.declarations[j].values.length;
	k++) valueText += (k ? " ":"") + rule.declarations[j].values[k].value;
	this.variables[rule.declarations[j].property] = valueText;
}
}
}
}
}
;
	/* kJscsspCHARSET_RULE */
function jscsspCharsetRule(){
	this.type = kJscsspCHARSET_RULE;
	this.encoding = null;
	this.parsedCssText = null;
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspCharsetRule.prototype ={
	cssText:function(){
	return "@charset " + this.encoding + ";
	";
}
,setCssText:function(val){
	var sheet ={
	cssRules:[]}
;
	var parser = new CSSParser(val);
	var token = parser.getToken(false,false);
	if (token.isAtRule("@charset")){
	if (parser.parseCharsetRule(token,sheet)){
	var newRule = sheet.cssRules[0];
	this.encoding = newRule.encoding;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspUNKNOWN_RULE */
function jscsspErrorRule(aErrorMsg){
	this.error = aErrorMsg ? aErrorMsg:"INVALID";
	this.type = kJscsspUNKNOWN_RULE;
	this.parsedCssText = null;
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspErrorRule.prototype ={
	cssText:function(){
	return this.parsedCssText;
}
}
;
	/* kJscsspCOMMENT */
function jscsspComment(){
	this.type = kJscsspCOMMENT;
	this.parsedCssText = null;
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspComment.prototype ={
	cssText:function(){
	return this.parsedCssText;
}
,setCssText:function(val){
	var parser = new CSSParser(val);
	var token = parser.getToken(true,false);
	if (token.isComment()) this.parsedCssText = token.value;
	else throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspWHITE_SPACE */
function jscsspWhitespace(){
	this.type = kJscsspWHITE_SPACE;
	this.parsedCssText = null;
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspWhitespace.prototype ={
	cssText:function(){
	return this.parsedCssText;
}
}
;
	/* kJscsspIMPORT_RULE */
function jscsspImportRule(){
	this.type = kJscsspIMPORT_RULE;
	this.parsedCssText = null;
	this.href = null;
	this.media = [];
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspImportRule.prototype ={
	cssText:function(){
	var mediaString = this.media.join(",");
	return "@import " + this.href + ((mediaString && mediaString != "all") ? mediaString + " ":"") + ";
	";
}
,setCssText:function(val){
	var sheet ={
	cssRules:[]}
;
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (token.isAtRule("@import")){
	if (parser.parseImportRule(token,sheet)){
	var newRule = sheet.cssRules[0];
	this.href = newRule.href;
	this.media = newRule.media;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspNAMESPACE_RULE */
function jscsspNamespaceRule(){
	this.type = kJscsspNAMESPACE_RULE;
	this.parsedCssText = null;
	this.prefix = null;
	this.url = null;
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspNamespaceRule.prototype ={
	cssText:function(){
	return "@namespace " + (this.prefix ? this.prefix + " ":"") + this.url + ";
	";
}
,setCssText:function(val){
	var sheet ={
	cssRules:[]}
;
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (token.isAtRule("@namespace")){
	if (parser.parseNamespaceRule(token,sheet)){
	var newRule = sheet.cssRules[0];
	this.url = newRule.url;
	this.prefix = newRule.prefix;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspSTYLE_DECLARATION */
function jscsspDeclaration(){
	this.type = kJscsspSTYLE_DECLARATION;
	this.property = null;
	this.values = [];
	this.valueText = null;
	this.priority = null;
	this.parsedCssText = null;
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspDeclaration.prototype ={
	kCOMMA_SEPARATED:{
	"cursor":true,"font-family":true,"voice-family":true,"background-image":true}
,kUNMODIFIED_COMMA_SEPARATED_PROPERTIES:{
	"text-shadow":true,"box-shadow":true,"-moz-transition":true,"-moz-transition-property":true,"-moz-transition-duration":true,"-moz-transition-timing-function":true,"-moz-transition-delay":true}
,cssText:function(){
	var prefixes = CssInspector.prefixesForProperty(this.property);
	if (this.property in this.kUNMODIFIED_COMMA_SEPARATED_PROPERTIES){
	if (prefixes){
	var rv = "";
	for (var propertyIndex = 0;
	propertyIndex < prefixes.length;
	propertyIndex++){
	var property = prefixes[propertyIndex];
	rv += (propertyIndex ? gTABS:"") + property + ":";
	rv += this.valueText + (this.priority ? " !important":"") + ";
	";
	rv += ((prefixes.length > 1 && propertyIndex != prefixes.length -1) ? "\n":"");
}
return rv;
}
return this.property + ":" + this.valueText + (this.priority ? " !important":"") + ";
	"}
if (prefixes){
	var rv = "";
	for (var propertyIndex = 0;
	propertyIndex < prefixes.length;
	propertyIndex++){
	var property = prefixes[propertyIndex];
	rv += (propertyIndex ? gTABS:"") + property + ":";
	var separator = (property in this.kCOMMA_SEPARATED) ? ",":" ";
	for (var i = 0;
	i < this.values.length;
	i++) if (this.values[i].cssText() != null) rv += (i ? separator:"") + this.values[i].cssText();
	else return null;
	rv += (this.priority ? " !important":"") + ";
	" + ((prefixes.length > 1 && propertyIndex != prefixes.length -1) ? "\n":"");
}
return rv;
}
var rv = this.property + ":";
	var separator = (this.property in this.kCOMMA_SEPARATED) ? ",":" ";
	var extras ={
	"webkit":false,"presto":false,"trident":false,"generic":false}
for (var i = 0;
	i < this.values.length;
	i++){
	var v = this.values[i].cssText();
	if (v != null){
	var paren = v.indexOf("(");
	var kwd = v;
	if (paren != -1) kwd = v.substr(0,paren);
	if (kwd in kCSS_VENDOR_VALUES){
	for (var j in kCSS_VENDOR_VALUES[kwd]){
	extras[j] = extras[j] || (kCSS_VENDOR_VALUES[kwd][j] != "");
}
}
rv += (i ? separator:"") + v;
}
else return null;
}
rv += (this.priority ? " !important":"") + ";
	";
	for (var j in extras){
	if (extras[j]){
	var str = "\n" + gTABS + this.property + ":";
	for (var i = 0;
	i < this.values.length;
	i++){
	var v = this.values[i].cssText();
	if (v != null){
	var paren = v.indexOf("(");
	var kwd = v;
	if (paren != -1) kwd = v.substr(0,paren);
	if (kwd in kCSS_VENDOR_VALUES){
	functor = kCSS_VENDOR_VALUES[kwd][j];
	if (functor){
	v = (typeof functor == "string") ? functor:functor(v,j);
	if (!v){
	str = null;
	break;
}
}
}
str += (i ? separator:"") + v;
}
else return null;
}
if (str) rv += str + ";
	" else rv += "\n" + gTABS + "/* Impossible to translate property " + this.property + " for " + j + " */
";
}
}
return rv;
}
,setCssText:function(val){
	var declarations = [];
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (parser.parseDeclaration(token,declarations,true,true,null) && declarations.length && declarations[0].type == kJscsspSTYLE_DECLARATION){
	var newDecl = declarations.cssRules[0];
	this.property = newDecl.property;
	this.value = newDecl.value;
	this.priority = newDecl.priority;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspFONT_FACE_RULE */
function jscsspFontFaceRule(){
	this.type = kJscsspFONT_FACE_RULE;
	this.parsedCssText = null;
	this.descriptors = [];
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspFontFaceRule.prototype ={
	cssText:function(){
	var rv = gTABS + "@font-face{
	\n";
	var preservedGTABS = gTABS;
	gTABS += " ";
	for (var i = 0;
	i < this.descriptors.length;
	i++) rv += gTABS + this.descriptors[i].cssText() + "\n";
	gTABS = preservedGTABS;
	return rv + gTABS + "}
";
}
,setCssText:function(val){
	var sheet ={
	cssRules:[]}
;
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (token.isAtRule("@font-face")){
	if (parser.parseFontFaceRule(token,sheet)){
	var newRule = sheet.cssRules[0];
	this.descriptors = newRule.descriptors;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspKEYFRAMES_RULE */
function jscsspKeyframesRule(){
	this.type = kJscsspKEYFRAMES_RULE;
	this.parsedCssText = null;
	this.cssRules = [];
	this.name = null;
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspKeyframesRule.prototype ={
	cssText:function(){
	var rv = gTABS + "@keyframes " + this.name + "{
	\n";
	var preservedGTABS = gTABS;
	gTABS += " ";
	for (var i = 0;
	i < this.cssRules.length;
	i++) rv += gTABS + this.cssRules[i].cssText() + "\n";
	gTABS = preservedGTABS;
	rv += gTABS + "}
\n";
	return rv;
}
,setCssText:function(val){
	var sheet ={
	cssRules:[]}
;
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (token.isAtRule("@keyframes")){
	if (parser.parseKeyframesRule(token,sheet)){
	var newRule = sheet.cssRules[0];
	this.cssRules = newRule.cssRules;
	this.name = newRule.name;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspKEYFRAME_RULE */
function jscsspKeyframeRule(){
	this.type = kJscsspKEYFRAME_RULE;
	this.parsedCssText = null;
	this.declarations = [] this.keyText = null;
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspKeyframeRule.prototype ={
	cssText:function(){
	var rv = this.keyText + "{
	\n";
	var preservedGTABS = gTABS;
	gTABS += " ";
	for (var i = 0;
	i < this.declarations.length;
	i++){
	var declText = this.declarations[i].cssText();
	if (declText) rv += gTABS + this.declarations[i].cssText() + "\n";
}
gTABS = preservedGTABS;
	return rv + gTABS + "}
";
}
,setCssText:function(val){
	var sheet ={
	cssRules:[]}
;
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (!token.isNotNull()){
	if (parser.parseKeyframeRule(token,sheet,false)){
	var newRule = sheet.cssRules[0];
	this.keyText = newRule.keyText;
	this.declarations = newRule.declarations;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspMEDIA_RULE */
function jscsspMediaRule(){
	this.type = kJscsspMEDIA_RULE;
	this.parsedCssText = null;
	this.cssRules = [];
	this.media = [];
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspMediaRule.prototype ={
	cssText:function(){
	var rv = gTABS + "@media " + this.media.join(",") + "{
	\n";
	var preservedGTABS = gTABS;
	gTABS += " ";
	for (var i = 0;
	i < this.cssRules.length;
	i++) rv += gTABS + this.cssRules[i].cssText() + "\n";
	gTABS = preservedGTABS;
	return rv + gTABS + "}
";
}
,setCssText:function(val){
	var sheet ={
	cssRules:[]}
;
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (token.isAtRule("@media")){
	if (parser.parseMediaRule(token,sheet)){
	var newRule = sheet.cssRules[0];
	this.cssRules = newRule.cssRules;
	this.media = newRule.media;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspSTYLE_RULE */
function jscsspStyleRule(){
	this.type = kJscsspSTYLE_RULE;
	this.parsedCssText = null;
	this.declarations = [] this.mSelectorText = null;
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspStyleRule.prototype ={
	cssText:function(){
	var rv = this.mSelectorText + "{
	\n";
	var preservedGTABS = gTABS;
	gTABS += " ";
	for (var i = 0;
	i < this.declarations.length;
	i++){
	var declText = this.declarations[i].cssText();
	if (declText) rv += gTABS + this.declarations[i].cssText() + "\n";
}
gTABS = preservedGTABS;
	return rv + gTABS + "}
";
}
,setCssText:function(val){
	var sheet ={
	cssRules:[]}
;
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (!token.isNotNull()){
	if (parser.parseStyleRule(token,sheet,false)){
	var newRule = sheet.cssRules[0];
	this.mSelectorText = newRule.mSelectorText;
	this.declarations = newRule.declarations;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
,selectorText:function(){
	return this.mSelectorText;
}
,setSelectorText:function(val){
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (!token.isNotNull()){
	var s = parser.parseSelector(token,true);
	if (s){
	this.mSelectorText = s.selector;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspPAGE_RULE */
function jscsspPageRule(){
	this.type = kJscsspPAGE_RULE;
	this.parsedCssText = null;
	this.pageSelector = null;
	this.declarations = [];
	this.parentStyleSheet = null;
	this.parentRule = null;
}
jscsspPageRule.prototype ={
	cssText:function(){
	var rv = gTABS + "@page " + (this.pageSelector ? this.pageSelector + " ":"") + "{
	\n";
	var preservedGTABS = gTABS;
	gTABS += " ";
	for (var i = 0;
	i < this.declarations.length;
	i++) rv += gTABS + this.declarations[i].cssText() + "\n";
	gTABS = preservedGTABS;
	return rv + gTABS + "}
";
}
,setCssText:function(val){
	var sheet ={
	cssRules:[]}
;
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (token.isAtRule("@page")){
	if (parser.parsePageRule(token,sheet)){
	var newRule = sheet.cssRules[0];
	this.pageSelector = newRule.pageSelector;
	this.declarations = newRule.declarations;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
}
;
	/* kJscsspVARIABLES_RULE */
function jscsspVariablesRule(){
	this.type = kJscsspVARIABLES_RULE;
	this.parsedCssText = null;
	this.declarations = [];
	this.parentStyleSheet = null;
	this.parentRule = null;
	this.media = null;
}
jscsspVariablesRule.prototype ={
	cssText:function(){
	var rv = gTABS + "@variables " + (this.media.length ? this.media.join(",") + " ":"") + "{
	\n";
	var preservedGTABS = gTABS;
	gTABS += " ";
	for (var i = 0;
	i < this.declarations.length;
	i++) rv += gTABS + this.declarations[i].cssText() + "\n";
	gTABS = preservedGTABS;
	return rv + gTABS + "}
";
}
,setCssText:function(val){
	var sheet ={
	cssRules:[]}
;
	var parser = new CSSParser(val);
	var token = parser.getToken(true,true);
	if (token.isAtRule("@variables")){
	if (parser.parseVariablesRule(token,sheet)){
	var newRule = sheet.cssRules[0];
	this.declarations = newRule.declarations;
	this.parsedCssText = newRule.parsedCssText;
	return;
}
}
throw DOMException.SYNTAX_ERR;
}
}
;
	var kJscsspINHERIT_VALUE = 0;
	var kJscsspPRIMITIVE_VALUE = 1;
	var kJscsspVARIABLE_VALUE = 4;
	function jscsspVariable(aType,aSheet){
	this.value = "";
	this.type = aType;
	this.name = null;
	this.parentRule = null;
	this.parentStyleSheet = aSheet;
}
jscsspVariable.prototype ={
	cssText:function(){
	if (this.type == kJscsspVARIABLE_VALUE) return this.resolveVariable(this.name,this.parentRule,this.parentStyleSheet);
	else return this.value;
}
,setCssText:function(val){
	if (this.type == kJscsspVARIABLE_VALUE) throw DOMException.SYNTAX_ERR;
	else this.value = val;
}
,resolveVariable:function(aName,aRule,aSheet){
	if (aName.toLowerCase() in aSheet.variables) return aSheet.variables[aName.toLowerCase()];
	return null;
}
}
;
	function ParseURL(buffer){
	var result ={
}
;
	result.protocol = "";
	result.user = "";
	result.password = "";
	result.host = "";
	result.port = "";
	result.path = "";
	result.query = "";
	var section = "PROTOCOL";
	var start = 0;
	var wasSlash = false;
	while(start < buffer.length){
	if(section == "PROTOCOL"){
	if(buffer.charAt(start) == ':'){
	section = "AFTER_PROTOCOL";
	start++;
}
else if(buffer.charAt(start) == '/' && result.protocol.length() == 0){
	section = PATH;
}
else{
	result.protocol += buffer.charAt(start++);
}
}
else if(section == "AFTER_PROTOCOL"){
	if(buffer.charAt(start) == '/'){
	if(!wasSlash){
	wasSlash = true;
}
else{
	wasSlash = false;
	section = "USER";
}
start ++;
}
else{
	throw new ParseException("Protocol shell be separated with 2 slashes");
}
}
else if(section == "USER"){
	if(buffer.charAt(start) == '/'){
	result.host = result.user;
	result.user = "";
	section = "PATH";
}
else if(buffer.charAt(start) == '?'){
	result.host = result.user;
	result.user = "";
	section = "QUERY";
	start++;
}
else if(buffer.charAt(start) == ':'){
	section = "PASSWORD";
	start++;
}
else if(buffer.charAt(start) == '@'){
	section = "HOST";
	start++;
}
else{
	result.user += buffer.charAt(start++);
}
}
else if(section == "PASSWORD"){
	if(buffer.charAt(start) == '/'){
	result.host = result.user;
	result.port = result.password;
	result.user = "";
	result.password = "";
	section = "PATH";
}
else if(buffer.charAt(start) == '?'){
	result.host = result.user;
	result.port = result.password;
	result.user = "";
	result.password = "";
	section = "QUERY";
	start ++;
}
else if(buffer.charAt(start) == '@'){
	section = "HOST";
	start++;
}
else{
	result.password += buffer.charAt(start++);
}
}
else if(section == "HOST"){
	if(buffer.charAt(start) == '/'){
	section = "PATH";
}
else if(buffer.charAt(start) == ':'){
	section = "PORT";
	start++;
}
else if(buffer.charAt(start) == '?'){
	section = "QUERY";
	start++;
}
else{
	result.host += buffer.charAt(start++);
}
}
else if(section == "PORT"){
	if(buffer.charAt(start) == '/'){
	section = "PATH";
}
else if(buffer.charAt(start) == '?'){
	section = "QUERY";
	start++;
}
else{
	result.port += buffer.charAt(start++);
}
}
else if(section == "PATH"){
	if(buffer.charAt(start) == '?'){
	section = "QUERY";
	start ++;
}
else{
	result.path += buffer.charAt(start++);
}
}
else if(section == "QUERY"){
	result.query += buffer.charAt(start++);
}
}
if(section == "PROTOCOL"){
	result.host = result.protocol;
	result.protocol = "http";
}
else if(section == "AFTER_PROTOCOL"){
	throw new ParseException("Invalid url");
}
else if(section == "USER"){
	result.host = result.user;
	result.user = "";
}
else if(section == "PASSWORD"){
	result.host = result.user;
	result.port = result.password;
	result.user = "";
	result.password = "";
}
return result;
}
function ParseException(description){
	this.description = description;
}
function CountLF(s){
	var nCR = s.match( /\n/g );
	return nCR ? nCR.length + 1:1;
}
function FilterLinearGradientForOutput(aValue,aEngine){
	if (aEngine == "generic") return aValue.substr(5);
	if (aEngine == "webkit") return aValue.replace( /\-moz\-/g,"-webkit-") if (aEngine != "webkit20110101") return "";
	var g = CssInspector.parseBackgroundImages(aValue)[0];
	var cancelled = false;
	var str = "-webkit-gradient(linear,";
	var position = ("position" in g.value) ? g.value.position.toLowerCase():"";
	var angle = ("angle" in g.value) ? g.value.angle.toLowerCase():"";
	// normalize angle if (angle){
	var match = angle.match(/^([0-9\-\.\\+]+)([a-z]*)/);
	var angle = parseFloat(match[1]);
	var unit = match[2];
	switch (unit){
	case "grad":angle = angle * 90 / 100;
	break;
	case "rad":angle = angle * 180 / Math.PI;
	break;
	default:break;
}
while (angle < 0) angle += 360;
	while (angle >= 360) angle -= 360;
}
// get startpoint w/o keywords var startpoint = [];
	var endpoint = [];
	if (position != ""){
	if (position == "center") position = "center center";
	startpoint = position.split(" ");
	if (angle == "" && angle != 0){
	// no angle,then we just turn the point 180 degrees around center switch (startpoint[0]){
	case "left":endpoint.push("right");
	break;
	case "center":endpoint.push("center");
	break;
	case "right":endpoint.push("left");
	break;
	default:{
	var match = startpoint[0].match(/^([0-9\-\.\\+]+)([a-z]*)/);
	var v = parseFloat(match[0]);
	var unit = match[1];
	if (unit == "%"){
	endpoint.push((100-v) + "%");
}
else cancelled = true;
}
break;
}
if (!cancelled) switch (startpoint[1]){
	case "top":endpoint.push("bottom");
	break;
	case "center":endpoint.push("center");
	break;
	case "bottom":endpoint.push("top");
	break;
	default:{
	var match = startpoint[1].match(/^([0-9\-\.\\+]+)([a-z]*)/);
	var v = parseFloat(match[0]);
	var unit = match[1];
	if (unit == "%"){
	endpoint.push((100-v) + "%");
}
else cancelled = true;
}
break;
}
}
else{
	switch (angle){
	case 0:endpoint.push("right");
	endpoint.push(startpoint[1]);
	break;
	case 90:endpoint.push(startpoint[0]);
	endpoint.push("top");
	break;
	case 180:endpoint.push("left");
	endpoint.push(startpoint[1]);
	break;
	case 270:endpoint.push(startpoint[0]);
	endpoint.push("bottom");
	break;
	default:cancelled = true;
	break;
}
}
}
else{
	// no position defined,we accept only vertical and horizontal if (angle == "") angle = 270;
	switch (angle){
	case 0:startpoint= ["left","center"];
	endpoint = ["right","center"];
	break;
	case 90:startpoint= ["center","bottom"];
	endpoint = ["center","top"];
	break;
	case 180:startpoint= ["right","center"];
	endpoint = ["left","center"];
	break;
	case 270:startpoint= ["center","top"];
	endpoint = ["center","bottom"];
	break;
	default:cancelled = true;
	break;
}
}
if (cancelled) return "";
	str += startpoint.join(" ") + "," + endpoint.join(" ");
	if (!g.value.stops[0].position) g.value.stops[0].position = "0%";
	if (!g.value.stops[g.value.stops.length-1].position) g.value.stops[g.value.stops.length-1].position = "100%";
	var current = 0;
	for (var i = 0;
	i < g.value.stops.length && !cancelled;
	i++){
	var s = g.value.stops[i];
	if (s.position){
	if (s.position.indexOf("%") == -1){
	cancelled = true;
	break;
}
}
else{
	var j = i + 1;
	while (j < g.value.stops.length && !g.value.stops[j].position) j++;
	var inc = parseFloat(g.value.stops[j].position) - current;
	for (var k = i;
	k < j;
	k++){
	g.value.stops[k].position = (current + inc * (k - i + 1) / (j - i + 1)) + "%";
}
}
current = parseFloat(s.position);
	str += ",color-stop(" + (parseFloat(current) / 100) + "," + s.color + ")";
}
if (cancelled) return "";
	return str + ")";
}
function FilterRadialGradientForOutput(aValue,aEngine){
	if (aEngine == "generic") return aValue.substr(5);
	else if (aEngine == "webkit") return aValue.replace( /\-moz\-/g,"-webkit-") else if (aEngine != "webkit20110101") return "";
	var g = CssInspector.parseBackgroundImages(aValue)[0];
	var shape = ("shape" in g.value) ? g.value.shape:"";
	var size = ("size" in g.value) ? g.value.size:"";
	if (shape != "circle" || (size != "farthest-corner" && size != "cover")) return "";
	if (g.value.stops.length < 2 || !("position" in g.value.stops[0]) || !g.value.stops[g.value.stops.length - 1].position || !("position" in g.value.stops[0]) || !g.value.stops[g.value.stops.length - 1].position) return "";
	for (var i = 0;
	i < g.value.stops.length;
	i++){
	var s = g.value.stops[i];
	if (("position" in s) && s.position && s.position.indexOf("px") == -1) return "";
}
var str = "-webkit-gradient(radial,";
	var position = ("position" in g.value) ? g.value.position:"center center";
	str += position + "," + parseFloat(g.value.stops[0].position) + ",";
	str += position + "," + parseFloat(g.value.stops[g.value.stops.length - 1].position);
	// at this point we're sure to deal with pixels var current = parseFloat(g.value.stops[0].position);
	for (var i = 0;
	i < g.value.stops.length;
	i++){
	var s = g.value.stops[i];
	if (!("position" in s) || !s.position){
	var j = i + 1;
	while (j < g.value.stops.length && !g.value.stops[j].position) j++;
	var inc = parseFloat(g.value.stops[j].position) - current;
	for (var k = i;
	k < j;
	k++){
	g.value.stops[k].position = (current + inc * (k - i + 1) / (j - i + 1)) + "px";
}
}
current = parseFloat(s.position);
	var c = (current - parseFloat(g.value.stops[0].position)) / (parseFloat(g.value.stops[g.value.stops.length - 1].position) - parseFloat(g.value.stops[0].position));
	str += ",color-stop(" + c + "," + s.color + ")";
}
str += ")" return str;
}
function FilterRepeatingGradientForOutput(aValue,aEngine){
	if (aEngine == "generic") return aValue.substr(5);
	else if (aEngine == "webkit") return aValue.replace( /\-moz\-/g,"-webkit-") return "";
}

CSS代码(demo.css):

/* General Demo Style */
@import url(http://fonts.googleapis.com/css?family=Lato:300,400,700);*,*:after,*:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
body,html{font-size:100%;padding:0;margin:0;}
/* Clearfix hack by Nicolas Gallagher:http://nicolasgallagher.com/micro-clearfix-hack/ */
.clearfix:before,.clearfix:after{content:" ";display:table;}
.clearfix:after{clear:both;}
body{font-family:'Lato',Calibri,Arial,sans-serif;color:#fff;background:#3598db;}
a{color:#D5D6E2;text-decoration:none;}
a:hover,a:active{color:#333;}
/* Header Style */
.main,.container > header{margin:0 auto;padding:2em;}
.container > header{text-align:center;background:#d94839;padding:3em;}
.container > header h1{font-size:2.625em;line-height:1.3;margin:0;font-weight:300;}
.container > header span{display:block;font-size:60%;opacity:0.7;padding:0 0 0.6em 0.1em;}
/* Main Content */
.main{max-width:69em;}
.column{float:left;width:50%;padding:0 2em;min-height:300px;position:relative;}
.column:nth-child(2){box-shadow:-1px 0 0 rgba(0,0,0,0.1);}
.column p{font-weight:300;font-size:2em;padding:0;margin:0;text-align:right;line-height:1.5;}
button{border:none;padding:0.6em 1.2em;background:#297fb8;color:#fff;font-family:'Lato',Calibri,Arial,sans-serif;font-size:1em;letter-spacing:1px;text-transform:uppercase;cursor:pointer;display:inline-block;margin:3px 2px;border-radius:2px;}
button:hover{background:#0f5d91;}
@media screen and (max-width:46.0625em){.column{width:100%;min-width:auto;min-height:auto;padding:1em;}
.column p{text-align:left;font-size:1.5em;}
.column:nth-child(2){box-shadow:0 -1px 0 rgba(0,0,0,0.1);}
}
.invisible{visibility:hidden;}
.original,.info-download{border-radius:3px 3px 3px 3px;box-shadow:0 1px 3px -2px #FFFFFF inset;color:#FFFFFF !important;font-family:'Open Sans',sans-serif;font-size:12px;font-weight:600;line-height:30px;padding:6px 10px;text-shadow:0 0 1px #333333;text-transform:uppercase;transition:all 0.4s linear 0s;vertical-align:middle;white-space:nowrap;border:5px solid #444;}
.original{background:linear-gradient(to bottom,#6CBBE2 0%,#457991 100%) repeat scroll 0 0 transparent;}
.info-download{background:linear-gradient(to bottom,#FFA84C 0%,#FF7B0D 100%) repeat scroll 0 0 transparent;}
附件:下载该文件资源,减少时间成本(增值服务)
留言
该资源可下载
File Source
.rar
79.40 KB
Html CSS3特效
最新结算
jquery虚拟键盘中文打字效果js代码
类型: .rar 金额: CNY 2.31¥ 状态: 待结算 详细>
jquery虚拟键盘中文打字效果js代码
类型: .rar 金额: CNY 0.29¥ 状态: 待结算 详细>
HTML5实现CSS滤镜图片切换特效代码
类型: .rar 金额: CNY 2.31¥ 状态: 待结算 详细>
jQuery头像裁剪插件cropbox js代码
类型: .rar 金额: CNY 0.29¥ 状态: 待结算 详细>
jQuery头像裁剪插件cropbox js代码
类型: .rar 金额: CNY 2.31¥ 状态: 待结算 详细>
CSS3制作3D图片立方体旋转特效
类型: .rar 金额: CNY 2.31¥ 状态: 待结算 详细>
CSS3制作3D图片立方体旋转特效
类型: .rar 金额: CNY 0.29¥ 状态: 待结算 详细>
CSS3制作3D图片立方体旋转特效
类型: .rar 金额: CNY 2.31¥ 状态: 待结算 详细>
CSS3制作3D图片立方体旋转特效
类型: .rar 金额: CNY 0.29¥ 状态: 待结算 详细>
jQuery+css3实现信封效果
类型: .rar 金额: CNY 0.29¥ 状态: 待结算 详细>
我们力求给您提供有用的文章,再此基础上,会附加营收资源,不做任何广告,让平台可以更好发展 若您发现您的权利被侵害,或使用了您的版权,请发邮件联系 sunlifel@foxmail.com ggbig觉得 : 不提供源码的文章不是好文章
合作伙伴
联系我们
  • QQ:21499807
  • 邮箱:sunlifel@foxmail.com
  • QQ扫一扫加QQ
    QQ扫一扫
Copyright 2023-2024 ggbig.com·皖ICP备2023004211号-1
打赏文章