/*
 *
 *  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 s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";

/* Default Skins */

global 
{
	color: #464646;
	text-roll-over-color:			#464646;
	text-selected-color:			#464646;
	dropDownStyleName:				dropDown;
	menu-style-name:				menu;
    selectionColor:                 #CCCCCC;
    rollOverColor:                  #EEEEEE;
}

s|Application
{
	skinClass: ClassReference("spark.skins.wireframe.ApplicationSkin");
}

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

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

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

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

s|ComboBox
{
    skinClass: ClassReference("spark.skins.wireframe.ComboBoxSkin");
}

s|DataGrid
{
    skinClass: ClassReference("spark.skins.wireframe.DataGridSkin");
}

s|DropDownList
{
	skinClass: ClassReference("spark.skins.wireframe.DropDownListSkin");
}

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

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

s|List
{
	skinClass: ClassReference("spark.skins.wireframe.ListSkin");
}

s|MuteButton
{
    skinClass: ClassReference("spark.skins.wireframe.mediaClasses.MuteButtonSkin");
}

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

s|Panel
{
	skinClass: ClassReference("spark.skins.wireframe.PanelSkin");
}

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

s|ScrubBar
{
    skinClass: ClassReference("spark.skins.wireframe.mediaClasses.ScrubBarSkin");
}

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

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

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

s|TabBar
{
    skinClass: ClassReference("spark.skins.wireframe.TabBarSkin");    
}

s|TextArea
{
	skinClass: ClassReference("spark.skins.wireframe.TextAreaSkin");
}

s|TextInput
{
	skinClass: ClassReference("spark.skins.wireframe.TextInputSkin");
}

s|TitleWindow
{
	skinClass: ClassReference("spark.skins.wireframe.TitleWindowSkin");
}

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

s|VideoPlayer
{
	skinClass: ClassReference("spark.skins.wireframe.VideoPlayerSkin");
}

s|VolumeBar
{
    skinClass: ClassReference("spark.skins.wireframe.mediaClasses.VolumeBarSkin");
}

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

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

mx|Accordion
{
	border-skin: 					ClassReference('mx.skins.wireframe.BorderSkin');
}

mx|AccordionHeader
{
	skin: 							ClassReference('mx.skins.wireframe.AccordionHeaderSkin');
}

mx|Button
{
	skin: 							ClassReference('mx.skins.wireframe.ButtonSkin');
	emphasizedSkin:					ClassReference('mx.skins.wireframe.EmphasizedButtonSkin');
}

mx|ButtonBar
{
	firstButtonStyleName:			buttonBarFirstButton;
	buttonStyleName:				buttonBarMiddleButton;
	lastButtonStyleName:			buttonBarLastButton;
}

.buttonBarFirstButton
{
	skin: 							ClassReference('mx.skins.wireframe.ButtonBarFirstButtonSkin');
}

.buttonBarMiddleButton
{
	skin: 							ClassReference('mx.skins.wireframe.ButtonBarMiddleButtonSkin');
}

.buttonBarLastButton
{
	skin: 							ClassReference('mx.skins.wireframe.ButtonBarLastButtonSkin');
}

mx|CheckBox
{
	icon: 							ClassReference('mx.skins.wireframe.CheckBoxSkin');
}

mx|ColorPicker
{
	skin: 							ClassReference('mx.skins.wireframe.ColorPickerSkin');
}

mx|SwatchPanel
{
	backgroundColor:		 		#FFFFFF;
	highlightColor:		 			#FFFFFF;
	borderColor:					#707070;
	shadowColor:					#707070;
	swatch-border-color:			#000000;
}

mx|ComboBox
{
	skin: 							ClassReference('mx.skins.wireframe.ComboBoxSkin');
	editableSkin: 					ClassReference('mx.skins.wireframe.EditableComboBoxSkin');
}

mx|DataGrid
{
	borderSkin:						ClassReference("mx.skins.wireframe.BorderSkin");
	borderColor:					#707070;
	verticalGridLineColor:			#707070;
	horizontalGridLineColor:		#707070;
	symbolColor:					#666666;
	headerBackgroundSkin:			ClassReference('mx.skins.wireframe.DataGridHeaderBackgroundSkin');
	headerSeparatorSkin:			ClassReference('mx.skins.wireframe.DataGridHeaderSeparatorSkin');
}

mx|DateChooser
{
	headerColors:					#EEEEEE,#EEEEEE;
	borderColor:					#707070;
	next-month-skin:				ClassReference('mx.skins.wireframe.DateChooserNextMonthSkin');
	prev-month-skin:				ClassReference('mx.skins.wireframe.DateChooserPrevMonthSkin');
	next-year-skin:					ClassReference('mx.skins.wireframe.DateChooserNextYearSkin');
	prev-year-skin:					ClassReference('mx.skins.wireframe.DateChooserPrevYearSkin');
	/*	rollOverIndicatorSkin:			ClassReference('mx.skins.wireframe.DateChooserRollOverIndicatorSkin');
	todayIndicatorSkin:				ClassReference('mx.skins.wireframe.DateChooserTodayIndicatorSkin');*/
}

mx|DateField
{
	
}

.dropDown
{
	borderSkin: 					ClassReference('mx.skins.wireframe.DropDownSkin');
}

mx|HDividedBox
{
	divider-skin: 					ClassReference('mx.skins.wireframe.DividerSkin');	
}

mx|HorizontalList
{
	borderSkin:						ClassReference('mx.skins.wireframe.BorderSkin');
}

mx|HRule
{
	strokeColor:					#707070;
	stroke-width:					1;	
}

mx|LinkButton
{
	skin: 							ClassReference('mx.skins.wireframe.LinkButtonSkin');	
}

mx|List
{
	borderSkin:						ClassReference('mx.skins.wireframe.BorderSkin');
}

mx|MenuBar
{
	backgroundSkin: 				ClassReference('mx.skins.wireframe.MenuBarSkin');
}

mx|Menu
{
	borderSkin: 					ClassReference('mx.skins.wireframe.MenuSkin');
	checkIcon:						ClassReference('mx.skins.wireframe.MenuCheck');
	arrowIcon:						ClassReference('mx.skins.wireframe.MenuArrow');
}

.menu
{
	borderSkin: 					ClassReference('mx.skins.wireframe.MenuSkin');
	checkIcon:						ClassReference('mx.skins.wireframe.MenuCheck');
	arrowIcon:						ClassReference('mx.skins.wireframe.MenuArrow');
}

mx|MenuBarItem
{
	itemUpSkin: 					ClassReference('mx.skins.wireframe.MenuBarItemSkin');
	itemOverSkin: 					ClassReference('mx.skins.wireframe.MenuBarItemSkin');
	itemDownSkin: 					ClassReference('mx.skins.wireframe.MenuBarItemSkin');
}

mx|NumericStepper
{
	downArrowSkin: 					ClassReference('mx.skins.wireframe.StepperDecrButtonSkin');
	upArrowSkin: 					ClassReference('mx.skins.wireframe.StepperIncrButtonSkin');
}

mx|Panel
{
	borderSkin: 					ClassReference('mx.skins.wireframe.PanelBorderSkin');
	controlBarStyleName:			controlBar;
}

.controlBar
{
	borderSkin: 					ClassReference('mx.skins.wireframe.ControlBarSkin');	
}

mx|PopUpButton
{
	skin: 							ClassReference('mx.skins.wireframe.PopUpButtonSkin');
}

mx|PopUpMenuButton
{
	skin: 							ClassReference('mx.skins.wireframe.PopUpButtonSkin');
}

mx|ProgressBar
{
	barSkin:						ClassReference('mx.skins.wireframe.ProgressBarSkin');
	trackSkin:						ClassReference('mx.skins.wireframe.ProgressBarTrackSkin');
	indeterminateSkin:				ClassReference('mx.skins.wireframe.ProgressIndeterminateSkin');
}

mx|RadioButton
{
	icon: 							ClassReference('mx.skins.wireframe.RadioButtonSkin');
}

mx|ScrollBar
{
	trackSkin: 						ClassReference('mx.skins.wireframe.ScrollBarTrackSkin');
	thumbSkin: 						ClassReference('mx.skins.wireframe.ScrollBarThumbSkin');
	upArrowSkin:					ClassReference('mx.skins.wireframe.ScrollBarUpButtonSkin');
	downArrowSkin:					ClassReference('mx.skins.wireframe.ScrollBarDownButtonSkin');
}

mx|Slider
{
	trackSkin: 						ClassReference('mx.skins.wireframe.SliderTrackSkin');
	thumbSkin: 						ClassReference('mx.skins.wireframe.SliderThumbSkin');
}

mx|TabBar
{
	firstTabStyleName:				tabBarTab;
	tabStyleName:					tabBarTab;
	lastTabStyleName:				tabBarTab;
}

.tabBarTab
{
	skin: 							ClassReference('mx.skins.wireframe.TabSkin');	
}

mx|TabNavigator
{
	borderSkin:						ClassReference('mx.skins.wireframe.BorderSkin');
}

mx|TextInput
{
	borderSkin: 					ClassReference('mx.skins.wireframe.TextInputSkin');
}

mx|TextArea
{
	borderSkin: 					ClassReference('mx.skins.wireframe.TextAreaSkin');
}

mx|TileList
{
	borderSkin:						ClassReference('mx.skins.wireframe.BorderSkin');
}

mx|TitleWindow
{
	closeButtonUpSkin: 				ClassReference('mx.skins.wireframe.TitleWindowCloseButtonUpSkin');
	closeButtonOverSkin: 			ClassReference('mx.skins.wireframe.TitleWindowCloseButtonOverSkin');
	closeButtonDownSkin: 			ClassReference('mx.skins.wireframe.TitleWindowCloseButtonDownSkin');
}

mx|ToolTip
{
	borderSkin:		 				ClassReference('mx.skins.wireframe.ToolTipSkin');
}

mx|Tree
{
	folderClosedIcon: 				Embed(source="assets/Tree_folderClosedIcon.png");
	folderOpenIcon: 				Embed(source="assets/Tree_folderOpenIcon.png");
}

mx|VDividedBox
{
	divider-skin: 					ClassReference('mx.skins.wireframe.DividerSkin');	
}

mx|VRule
{
	strokeColor:					#707070;
	stroke-width:					1;
}

mx|WindowedApplication
{
	closeButtonUpSkin: 				ClassReference('mx.skins.wireframe.TitleWindowCloseButtonUpSkin');
	closeButtonOverSkin: 			ClassReference('mx.skins.wireframe.TitleWindowCloseButtonOverSkin');
	closeButtonDownSkin: 			ClassReference('mx.skins.wireframe.TitleWindowCloseButtonDownSkin');
	borderSkin: 					ClassReference('mx.skins.wireframe.WindowedApplicationSkin');
	status-bar-background-skin:		ClassReference('mx.skins.wireframe.windowChrome.StatusBarSkin');
	title-bar-background-skin:		ClassReference('mx.skins.wireframe.windowChrome.TitleBarSkin');
	maximize-button-skin:			ClassReference('mx.skins.wireframe.windowChrome.MaximizeButtonSkin');
	minimize-button-skin:			ClassReference('mx.skins.wireframe.windowChrome.MinimizeButtonSkin');
	close-button-skin:				ClassReference('mx.skins.wireframe.windowChrome.CloseButtonSkin');
	restore-button-skin:			ClassReference('mx.skins.wireframe.windowChrome.RestoreButtonSkin');
	/*	gripper-style-name:				gripper;*/
}

.gripper
{
	/*	skin:							ClassReference('mx.skins.wireframe.TitleWindowCloseButtonUpSkin');*/
}