<?xml version="1.0" encoding="utf-8"?>
<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (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.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

-->


<!--- The wireframe skin class for the current day indicator in a MX DateChooser component. 
        
      @see mx.controls.DateChooser

      @langversion 3.0
      @playerversion Flash 10
      @playerversion AIR 1.5
      @productversion Flex 4
-->
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark">

    <fx:Script>
    <![CDATA[
        import mx.styles.StyleManager;
        import mx.utils.ColorUtil;

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            var todayColor:uint = getStyle("todayColor");       
            if (todayColor != StyleManager.NOT_A_COLOR)
            {
                fill.color = todayColor;
                stroke.color = ColorUtil.adjustBrightness(todayColor, -45);
            }

            super.updateDisplayList(unscaledWidth, unscaledHeight);
        }
    ]]>
    </fx:Script>

    <s:Rect left="0" right="0" top="0" bottom="0" >
        <s:fill>
            <!--- @private -->
            <s:SolidColor id="fill" color="#EEEEEE" alpha="1" />
        </s:fill>
        <s:stroke>
            <!--- @private -->
            <s:SolidColorStroke id="stroke" color="#BABABA" />
        </s:stroke>
    </s:Rect>
    
</s:Skin>
