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

package
{

import flash.display.Sprite;

/**
 *  The main class for the Assets.swf that gets embedded in various CSS
 *  files.
 */
public class Assets extends Sprite
{
	//--------------------------------------------------------------------------
	//
	//  Constructor
	//
	//--------------------------------------------------------------------------

    /**
     *  Constructor.
     */
    public function Assets()
    {
		super();
    }

	//--------------------------------------------------------------------------
	//
	//  Properties
	//
	//--------------------------------------------------------------------------
	private var boxDividerSkin:BoxDividerSkin;
	private var brokenImage:BrokenImage;
	private var busyCursor:BusyCursor;
	private var closeButtonDisabled:CloseButtonDisabled;
	private var closeButtonOver:CloseButtonOver;
	private var closeButtonUp:CloseButtonUp;
	private var closeButtonDown:CloseButtonDown;
	private var cursorHBoxDivider:CursorHBoxDivider;
	private var cursorStretch:CursorStretch;
	private var cursorVBoxDivider:CursorVBoxDivider;
	private var dragCopy:DragCopy;
	private var dragMove:DragMove;
	private var dragLink:DragLink;
	private var dragReject:DragReject;
	private var formItemRequired:FormItemRequired;
	private var menuBranchDisabled:MenuBranchDisabled;
	private var menuBranchEnabled:MenuBranchEnabled;
	private var menuCheckDisabled:MenuCheckDisabled;
	private var menuCheckEnabled:MenuCheckEnabled;
	private var menuRadioDisabled:MenuRadioDisabled;
	private var menuRadioEnabled:MenuRadioEnabled;
	private var menuSeparator:MenuSeparator;
	private var OpenDateDisabled:openDateDisabled;
	private var OpenDateOver:openDateOver;
	private var OpenDateUp:openDateUp;
	private var OpenDateDown:openDateDown;
	private var treeDisclosureClosed:TreeDisclosureClosed;
	private var treeDisclosureOpen:TreeDisclosureOpen;
	private var treeFolderClosed:TreeFolderClosed;
	private var treeFolderOpen:TreeFolderOpen;
	private var treeNodeIcon:TreeNodeIcon;
}

}
