/*
 *
 *  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.
 *
 */

@namespace "library://ns.adobe.com/flex/spark";

/* Default Skins */

Application
{
    backgroundColor: #FFFFFF;
    skinClass: ClassReference("spark.skins.spark.ApplicationSkin");
}

BorderContainer
{
    backgroundColor: #FFFFFF;
    borderStyle : "solid"; 
    cornerRadius: 0;
    skinClass: ClassReference("spark.skins.spark.BorderContainerSkin");
}

Button
{
    skinClass: ClassReference("spark.skins.spark.ButtonSkin");
}

Button.emphasized
{
    skinClass: ClassReference("spark.skins.spark.DefaultButtonSkin");
}

ButtonBar
{
    skinClass: ClassReference("spark.skins.spark.ButtonBarSkin");
}

CheckBox
{
    skinClass: ClassReference("spark.skins.spark.CheckBoxSkin");
}

ComboBox
{
/*  dropShadowVisible: true; in spark.css */
    paddingBottom: 3;
    paddingLeft: 3;
    paddingRight: 3;
    paddingTop: 5;
    skinClass: ClassReference("spark.skins.spark.ComboBoxSkin");
}

DataGrid
{
    dragIndicatorClass: ClassReference("spark.components.gridClasses.DataGridDragProxy");
    dropIndicatorSkin: ClassReference("spark.skins.spark.ListDropIndicator");
    skinClass: ClassReference("spark.skins.spark.DataGridSkin");
    stretchCursor: Embed(source="Assets.swf",symbol="cursorStretch");    
}

DropDownList
{
/*  dropShadowVisible: true; in spark.css */
    skinClass: ClassReference("spark.skins.spark.DropDownListSkin");
}

Form
{
    skinClass : ClassReference("spark.skins.spark.FormSkin");
}

FormHeading
{
    fontSize : 15;
    fontWeight : "bold";
    skinClass : ClassReference("spark.skins.spark.FormHeadingSkin");
}

FormItem
{
    errorIndicatorSource : Embed(source="assets/ErrorIndicator.png");
    requiredIndicatorSource : Embed(source="assets/RequiredIndicator.png");
    skinClass : ClassReference("spark.skins.spark.FormItemSkin");
}

GridColumnHeaderGroup
{
    separatorAffordance: 5;
}

HScrollBar
{
    skinClass: ClassReference("spark.skins.spark.HScrollBarSkin");
}

HSlider
{
    skinClass: ClassReference("spark.skins.spark.HSliderSkin");
}

Image
{
    skinClass: ClassReference("spark.skins.spark.ImageSkin");
    enableLoadingState: false;
    showErrorSkin : false;
    smoothingQuality: "default";
}

List
{
    skinClass: ClassReference("spark.skins.spark.ListSkin");
    dragIndicatorClass: ClassReference("spark.components.supportClasses.ListItemDragProxy");
    dropIndicatorSkin: ClassReference("spark.skins.spark.ListDropIndicator");
}

MuteButton
{
    skinClass: ClassReference("spark.skins.spark.mediaClasses.normal.MuteButtonSkin");
}

NumericStepper
{
    skinClass: ClassReference("spark.skins.spark.NumericStepperSkin");
}

Panel
{
    backgroundColor: #FFFFFF;
/* in spark.css */
/*
    borderAlpha: 0.5;
    borderColor: 0;
    cornerRadius: 0;
    dropShadowVisible: true;
*/
	skinClass: ClassReference("spark.skins.spark.PanelSkin");
}

RadioButton
{
	skinClass: ClassReference("spark.skins.spark.RadioButtonSkin");
}

RichEditableText
{
    layoutDirection: "ltr";
}

Scroller
{
    skinClass: ClassReference("spark.skins.spark.ScrollerSkin");
}

ScrubBar
{
    skinClass: ClassReference("spark.skins.spark.mediaClasses.normal.ScrubBarSkin");
}

SkinnableDataContainer
{
    skinClass: ClassReference("spark.skins.spark.SkinnableDataContainerSkin");
}

SkinnableComponent
{
    errorSkin: ClassReference("spark.skins.spark.ErrorSkin");
    focusSkin: ClassReference("spark.skins.spark.FocusSkin");
}

SkinnableContainer
{
    skinClass: ClassReference("spark.skins.spark.SkinnableContainerSkin");
}

SkinnablePopUpContainer
{
    skinClass: ClassReference("spark.skins.spark.SkinnablePopUpContainerSkin");
}

SkinnableTextBase:normalWithPrompt 
{
    color: #BABABA;
    fontStyle: italic;
}

SkinnableTextBase:disabledWithPrompt 
{
    color: #BABABA;
    fontStyle: italic;
}

Spinner
{
    skinClass: ClassReference("spark.skins.spark.SpinnerSkin");    
}

TabBar
{
    skinClass: ClassReference("spark.skins.spark.TabBarSkin");
    cornerRadius: 4;
}

TextBase
{
    layoutDirection: "ltr";
}

TextArea
{
    paddingBottom: 3;
    paddingLeft: 3;
    paddingRight: 3;
    paddingTop: 5;
	skinClass: ClassReference("spark.skins.spark.TextAreaSkin");
}

TextInput
{
    paddingBottom: 3;
    paddingLeft: 3;
    paddingRight: 3;
    paddingTop: 5;
	skinClass: ClassReference("spark.skins.spark.TextInputSkin");
}

TitleWindow
{
/* in spark.css */
/*
	borderAlpha: 0.8;
	borderColor: 0;
	cornerRadius: 0;
	dropShadowVisible: true;
*/
	skinClass: ClassReference("spark.skins.spark.TitleWindowSkin");
}

ToggleButton
{
	skinClass: ClassReference("spark.skins.spark.ToggleButtonSkin");
}

VideoDisplay
{
    layoutDirection: "ltr";
}

VideoPlayer
{
/*  dropShadowVisible: true; in spark.css */
    layoutDirection: "ltr";
    skinClass: ClassReference("spark.skins.spark.VideoPlayerSkin");
}

VolumeBar
{
    skinClass: ClassReference("spark.skins.spark.mediaClasses.normal.VolumeBarSkin");
}

VScrollBar
{
    skinClass: ClassReference("spark.skins.spark.VScrollBarSkin");
}

VSlider
{
    skinClass: ClassReference("spark.skins.spark.VSliderSkin");
}

global
{
    softKeyboardEffectDuration: 150;
}