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

/* Global style declaration */
global
{
	backgroundAlpha: 1.0; /* this runs the opacity of nearly every square piece of the components */
	/* backgroundDisabledColor: #DDDDDD; */
	backgroundSize: "auto";
	bevel: true;
	borderAlpha: 1.0;
  	borderCapColor: #919999;
	borderColor: #B7BABC;
	borderSides: "left top right bottom";
	borderSkin: ClassReference("mx.skins.halo.HaloBorder");
	borderStyle: "inset";
	borderThickness: 1;
	buttonColor: #6F7777;
	closeDuration: 250;
	color: #0B333C;
	cornerRadius: 0;
	disabledColor: #AAB3B3;
	disabledIconColor: #999999;
	dropShadowColor: #000000;
	dropShadowEnabled: false;
	embedFonts: false;
	errorColor: #FF0000;
	fillAlphas: 0.6, 0.4, 0.75, 0.65; /* last pair are for OVER state */
	fillColor: #FFFFFF; /* kill this?? */
	fillColors: #FFFFFF, #CCCCCC, #FFFFFF, #EEEEEE;
	filled: true;
	focusAlpha: 0.4;
	focusBlendMode: "normal";
	focusRoundedCorners: "tl tr bl br";
	focusSkin: ClassReference("mx.skins.halo.HaloFocusRect");
	focusThickness: 2;
	fontAntiAliasType: "advanced";
	fontFamily: "Verdana";
	fontGridFitType: "pixel";
	fontSharpness: 0;
	fontSize: 10;
	fontStyle: "normal";
	fontThickness: 0;
	fontWeight: "normal";
	/* footerColors: #E7E7E7, #C7C7C7; */
	/* headerColors: #E7E7E7, #D9D9D9; */
	/* headerHeight: 28; */
	highlightAlphas: 0.3, 0; /* use this to control the 'light' cast on the components */
	horizontalAlign: "left";
	horizontalGap: 8;
	horizontalGridLineColor: #F7F7F7;
	horizontalGridLines: false;
	iconColor: #111111;
	indentation: 17;
	indicatorGap: 14;
	kerning: false;
	leading: 2;
	letterSpacing: 0;
	modalTransparency: 0.5;
	modalTransparencyBlur: 3;
	modalTransparencyColor: #DDDDDD;
	modalTransparencyDuration: 100;
	openDuration: 250;
	paddingBottom: 0;
	paddingLeft: 0;
	paddingRight: 0;
	paddingTop: 0;
	roundedBottomCorners: true;
	repeatDelay: 500;
	repeatInterval: 35;
	selectionDisabledColor: #DDDDDD;
	selectionDuration: 250;
  	shadowCapColor: #D5DDDD;
  	shadowColor: #EEEEEE;
	shadowDirection: "center";
	shadowDistance: 2;
	stroked: false;
	strokeWidth: 1;
	textAlign: "left";
	textDecoration: "none";
	textIndent: 0;
	textRollOverColor: #2B333C;
	textSelectedColor: #2B333C;

	themeColor: #009DFF;		/* haloBlue */
	/*
	//themeColor: #80FF4D;		// haloGreen
	//themeColor: #FFB600;		// haloOrange
	//themeColor: #AECAD9;		// haloSilver
	*/

	useRollOver: true;
	version: "3.0.0";
	verticalAlign: "top";
	verticalGap: 6;
	verticalGridLineColor: #D5DDDD;
	verticalGridLines: true;
}


/*
//------------------------------
//  CursorManager
//------------------------------
*/

CursorManager
{
	busyCursor: ClassReference("mx.skins.halo.BusyCursor");
	busyCursorBackground: Embed(source="Assets.swf",symbol="mx.skins.cursor.BusyCursor");
}

/*
//------------------------------
//  DragManager
//------------------------------
*/

DragManager
{
	copyCursor: Embed(source="Assets.swf",symbol="mx.skins.cursor.DragCopy");
	defaultDragImageSkin: ClassReference("mx.skins.halo.DefaultDragImage");
	linkCursor: Embed(source="Assets.swf",symbol="mx.skins.cursor.DragLink");
	moveCursor: Embed(source="Assets.swf",symbol="mx.skins.cursor.DragMove");
	rejectCursor: Embed(source="Assets.swf",symbol="mx.skins.cursor.DragReject");
}

/*
//------------------------------
//  .errorTip
//------------------------------
*/

.errorTip
{
	borderColor: #CE2929;
	borderStyle: "errorTipRight";
	color: #FFFFFF;
	fontSize: 9;
	fontWeight: "bold";
	shadowColor: #000000;
	paddingBottom: 4;
	paddingLeft: 4;
	paddingRight: 4;
	paddingTop: 4;
}

/*
//------------------------------
//  SWFLoader
//------------------------------
*/

SWFLoader
{
	borderStyle: "none";
	brokenImageBorderSkin: ClassReference("mx.skins.halo.BrokenImageBorderSkin");
	brokenImageSkin: Embed(source="Assets.swf",symbol="__brokenImage");
}

/*
//------------------------------
//  ToolTip
//------------------------------
*/

ToolTip
{
	backgroundColor: #FFFFCC;
	backgroundAlpha: 0.95;
	borderColor: #919999;
	borderSkin: ClassReference("mx.skins.halo.ToolTipBorder");
	borderStyle: "toolTip";
	cornerRadius: 2;
	fontSize: 9;
	paddingBottom: 2;
	paddingLeft: 4;
	paddingRight: 4;
	paddingTop: 2;
	shadowColor: #000000;
}


