Beautifl - Flash Gallery

Thumbnail : Calendar (祝日あり)
Calendar (祝日あり)
ProjectNya 2010-05-21 MIT License

再生するにはFlash Playerが必要です。デスクトップのブラウザでご覧ください。

////////////////////////////////////////////////////////////////////////////////
// [AS3.0] Calendarクラスに挑戦! (1)
// http://www.project-nya.jp/modules/weblog/details.php?blog_id=1043
////////////////////////////////////////////////////////////////////////////////

package {

	import flash.display.Sprite;

	[SWF(backgroundColor="#FFFFFF", width="465", height="465", frameRate="30")]

	public class Main extends Sprite {
		private var display:Display;

		public function Main() {
			//Wonderfl.capture_delay(1);
			init();
		}

		private function init():void {
			display = new Display();
			addChild(display);
			display.x = 18;
			display.y = 72;
		}

	}

}


import flash.display.Sprite;
import flash.display.Shape;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.text.AntiAliasType;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.filters.DropShadowFilter;

class Display extends Sprite {
	private var calendar:Array;
	private var year:uint;
	private var month:uint;
	private var today:Object;
	private static var limit:uint = 2010;
	private static var max:uint = 37;
	private var dayList:Array;
	private var monthTitle:TextField;
	private var eTitle:TextField;
	private var yearTitle:TextField;
	private static var fontType:String = "_ゴシック";
	private static var _width:uint;
	private static var _height:uint;
	private static var hHeight:uint = 20;
	private static var wHeight:uint = 12;
	private static var bWidth:uint = 60;
	private static var bHeight:uint = 44;
	private static var bColor:uint = 0xFFFFFF;
	private static var sColor:uint = 0x000000;
	private static var headerColor:uint = 0xCCFF00;
	private var months:Array;
	private var weekdays:Array;
	private var colors:Array;
	private static var sunColor:uint = 0xFF6699;
	private static var weekColor:uint = 0x66CC00;
	private static var satColor:uint = 0x6699CC;
	private var yPrevBtn:IconBtn;
	private var mPrevBtn:IconBtn;
	private var todayBtn:IconBtn;
	private var mNextBtn:IconBtn;
	private var yNextBtn:IconBtn;
	private var help:HelpPanel;

	public function Display() {
		init();
		draw();
		getToday();
		if (stage) initialize();
		else addEventListener(Event.ADDED_TO_STAGE, initialize, false, 0, true);
	}

	private function getToday():void {
		var todayDate:Date = new Date();
		year = todayDate.getFullYear();
		month = todayDate.getMonth() + 1;
		var day:uint = todayDate.getDate();
		today = {year: year, month: month, day: day};
		create(year, month);
	}
	private function create(y:uint, m:uint):void {
		calendar = Calendar.create(y, m);
		createDates();
		monthTitle.text = String(m);
		eTitle.text = months[m-1];
		yearTitle.text = String(y);
		manageBtns();
	}
	private function createDates():void {
		var first:uint = calendar[1].weekday;
		for (var n:uint = 0; n < max; n++) {
			var d:int = n - first + 1;
			var day:Day = dayList[n];
			if (d > 0) {
				var date:CalendarDate = calendar[d];
				if (date) {
					if (year == today.year && month == today.month && date.day == today.day) {
						day.init(date, true);
					} else {
						day.init(date);
					}
					if (date.holiday) {
						day.addEventListener(MouseEvent.MOUSE_OVER, showHelp, false, 0, true);
						day.addEventListener(MouseEvent.MOUSE_OUT, hideHelp, false, 0, true);
					} else {
						day.removeEventListener(MouseEvent.MOUSE_OVER, showHelp);
						day.removeEventListener(MouseEvent.MOUSE_OUT, hideHelp);
					}
				} else {
					day.init();
				}
			} else {
				day.init();
			}
		}
	}
	private function init():void {
		calendar = new Array();
		today = new Object();
		_width = bWidth*7 + 8;
		_height = hHeight + wHeight + bHeight*6 + 10;
		months = new Array();
		months.push("January");
		months.push("February");
		months.push("March");
		months.push("April");
		months.push("May");
		months.push("June");
		months.push("July");
		months.push("August");
		months.push("September");
		months.push("October");
		months.push("November");
		months.push("December");
		weekdays = new Array();
		weekdays.push(Calendar.SUN);
		weekdays.push(Calendar.MON);
		weekdays.push(Calendar.TUE);
		weekdays.push(Calendar.WED);
		weekdays.push(Calendar.THU);
		weekdays.push(Calendar.FRI);
		weekdays.push(Calendar.SAT);
		colors = new Array();
		colors.push(sunColor);
		colors.push(weekColor);
		colors.push(weekColor);
		colors.push(weekColor);
		colors.push(weekColor);
		colors.push(weekColor);
		colors.push(satColor);
	}
	private function draw():void {
		graphics.beginFill(bColor);
		graphics.drawRoundRect(0, 0, _width, _height, 10);
		graphics.endFill();
		graphics.beginFill(headerColor);
		graphics.moveTo(5, 0);
		graphics.lineTo(_width - 5, 0);
		graphics.curveTo(_width, 0, _width, 5);
		graphics.lineTo(_width, hHeight);
		graphics.lineTo(0, hHeight);
		graphics.lineTo(0, 5);
		graphics.curveTo(0, 0, 5, 0);
		graphics.endFill();
		drawTitle();
		createWeek();
		createDays();
		createBtns();
		var shade:DropShadowFilter = new DropShadowFilter(0, 90, sColor, 0.5, 4, 4, 1.5, 2, false, false);
		filters = [shade];
	}
	private function initialize(evt:Event = null):void {
		removeEventListener(Event.ADDED_TO_STAGE, initialize);
		help = new HelpPanel();
		stage.addChild(help);
		help.init({width: 80, height: 32});
	}
	private function createDays():void {
		dayList = new Array();
		for (var n:uint = 0; n < max; n++) {
			var day:Day = new Day();
			addChild(day);
			dayList.push(day);
			day.x = (bWidth + 1)*(n%7) + 1;
			day.y = (bHeight + 1)*Math.floor(n/7) + hHeight + wHeight + 2;
		}
	}
	private function createBtns():void {
		yPrevBtn = new IconBtn(PrevDouble);
		addChild(yPrevBtn);
		yPrevBtn.x = 240;
		yPrevBtn.y = 285;
		yPrevBtn.init({width: 20});
		yPrevBtn.addEventListener(MouseEvent.CLICK, prevYear, false, 0, true);
		mPrevBtn = new IconBtn(Prev);
		addChild(mPrevBtn);
		mPrevBtn.x = 270;
		mPrevBtn.y = 285;
		mPrevBtn.init({width: 20});
		mPrevBtn.addEventListener(MouseEvent.CLICK, prevMonth, false, 0, true);
		todayBtn = new IconBtn(Today);
		addChild(todayBtn);
		todayBtn.x = 320;
		todayBtn.y = 285;
		todayBtn.init({width: 60});
		todayBtn.addEventListener(MouseEvent.CLICK, setToday, false, 0, true);
		mNextBtn = new IconBtn(Next);
		addChild(mNextBtn);
		mNextBtn.x = 370;
		mNextBtn.y = 285;
		mNextBtn.init({width: 20});
		mNextBtn.addEventListener(MouseEvent.CLICK, nextMonth, false, 0, true);
		yNextBtn = new IconBtn(NextDouble);
		addChild(yNextBtn);
		yNextBtn.x = 400;
		yNextBtn.y = 285;
		yNextBtn.init({width: 20});
		yNextBtn.addEventListener(MouseEvent.CLICK, nextYear, false, 0, true);
	}
	private function prevYear(evt:MouseEvent):void {
		manage(-1, 0);
	}
	private function prevMonth(evt:MouseEvent):void {
		manage(0, -1);
	}
	private function setToday(evt:MouseEvent):void {
		getToday();
		create(year, month);
	}
	private function nextMonth(evt:MouseEvent):void {
		manage(0, 1);
	}
	private function nextYear(evt:MouseEvent):void {
		manage(1, 0);
	}
	private function manage(y:int, m:int):void {
		year += y;
		month += m;
		if (month > 12) {
			year += 1;
			month = 1;
		}
		if (month < 1) {
			year -= 1;
			month = 12;
		}
		create(year, month);
	}
	private function manageBtns():void {
		if (year > limit) {
			yPrevBtn.enabled = true;
		} else {
			yPrevBtn.enabled = false;
		}
		var ym:uint = uint(year + ("0"+month).substr(-2));
		if (ym > uint(limit+"01")) {
			mPrevBtn.enabled = true;
		} else {
			mPrevBtn.enabled = false;
		}
	}
	private function showHelp(evt:MouseEvent):void {
		var date:CalendarDate = evt.currentTarget.date;
		if (date) help.show(date.holiday);
	}
	private function hideHelp(evt:MouseEvent):void {
		help.hide();
	}
	private function drawTitle():void {
		var tfr:TextFormat = new TextFormat();
		tfr.font = fontType;
		tfr.size = 14;
		tfr.align = TextFormatAlign.RIGHT;
		var tfl:TextFormat = new TextFormat();
		tfl.font = fontType;
		tfl.size = 14;
		tfl.align = TextFormatAlign.LEFT;
		var shade:DropShadowFilter = new DropShadowFilter(0, 90, sColor, 0.5, 2, 2, 3, 2, false, false);
		monthTitle = new TextField();
		addChild(monthTitle);
		monthTitle.x = 130;
		monthTitle.y = 0;
		monthTitle.width = 30;
		monthTitle.height = 21;
		monthTitle.type = TextFieldType.DYNAMIC;
		monthTitle.selectable = false;
		//monthTitle.embedFonts = true;
		//monthTitle.antiAliasType = AntiAliasType.ADVANCED;
		monthTitle.defaultTextFormat = tfr;
		monthTitle.textColor = 0xFFFFFF;
		monthTitle.filters = [shade];
		eTitle = new TextField();
		addChild(eTitle);
		eTitle.x = 160;
		eTitle.y = 0;
		eTitle.width = 90;
		eTitle.height = 21;
		eTitle.type = TextFieldType.DYNAMIC;
		eTitle.selectable = false;
		//eTitle.embedFonts = true;
		//eTitle.antiAliasType = AntiAliasType.ADVANCED;
		eTitle.defaultTextFormat = tfl;
		eTitle.textColor = 0xFFFFFF;
		eTitle.filters = [shade];
		yearTitle = new TextField();
		addChild(yearTitle);
		yearTitle.x = 250;
		yearTitle.y = 0;
		yearTitle.width = 40;
		yearTitle.height = 21;
		yearTitle.type = TextFieldType.DYNAMIC;
		yearTitle.selectable = false;
		//yearTitle.embedFonts = true;
		//yearTitle.antiAliasType = AntiAliasType.ADVANCED;
		yearTitle.defaultTextFormat = tfl;
		yearTitle.textColor = bColor;
		yearTitle.filters = [shade];
	}
	private function createWeek():void {
		var tf:TextFormat = new TextFormat();
		tf.font = fontType;
		tf.size = 10;
		tf.align = TextFormatAlign.CENTER;
		for (var n:uint = 0; n < 7; n++) {
			var base:Shape = new Shape();
			addChild(base);
			base.graphics.beginFill(colors[n]);
			base.graphics.drawRect(0, 0, bWidth, wHeight);
			base.graphics.endFill();
			base.x = (bWidth + 1)*n + 1;
			base.y = hHeight + 1;
			var txt:TextField = new TextField();
			addChild(txt);
			txt.x = (bWidth + 1)*n + 11;
			txt.y = hHeight - 1;
			txt.width = 40;
			txt.height = 17;
			txt.type = TextFieldType.DYNAMIC;
			txt.selectable = false;
			//txt.embedFonts = true;
			//txt.antiAliasType = AntiAliasType.ADVANCED;
			txt.defaultTextFormat = tf;
			txt.textColor = bColor;
			txt.text = weekdays[n];
		}
	}

}


import flash.display.Sprite;
import flash.display.Shape;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.text.AntiAliasType;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.filters.DropShadowFilter;
import flash.filters.GlowFilter;

class Day extends Sprite {
	public var date:CalendarDate;
	private var txt:TextField;
	private static var fontType:String = "_ゴシック";
	private var base:Sprite;
	private static var bWidth:uint = 60;
	private static var bHeight:uint = 44;
	private static var bColor:uint = 0xFFFFFF;
	private static var sColor:uint = 0x000000;
	private static var sunColor:uint = 0xFF6699;
	private static var sunLight:uint = 0xFF3366;
	private static var weekColor:uint = 0x66CC00;
	private static var satColor:uint = 0x6699CC;
	private static var satLight:uint = 0x3399CC;
	private static var todayColor:uint = 0x66CC00;
	private var today:Shape;
	private var flag:Flag;

	public function Day() {
		draw();
	}

	public function init(d:CalendarDate = null, now:Boolean = false):void {
		date = d;
		var type:* = Calendar.NONE;
		var holiday:* = null;
		if (date) {
			type = date.weekday;
			holiday = date.holiday;
		}
		if (holiday) type = Calendar.HOLI;
		var bgColor:uint;
		var bgAlpha:Number;
		var filter:*;
		switch (type) {
			case 0 :
				bgColor = sunColor;
				bgAlpha = 0.16;
				filter = new GlowFilter(sunLight, 1, 2, 2, 3, 2, false, false);
				break;
			case 6 :
				bgColor = satColor;
				bgAlpha = 0.16;
				filter = new GlowFilter(satLight, 1, 2, 2, 3, 2, false, false);
				break;
			case Calendar.HOLI :
				bgColor = sunColor;
				bgAlpha = 0.16;
				filter = new GlowFilter(sunLight, 1, 2, 2, 3, 2, false, false);
				break;
			case Calendar.NONE :
				bgColor = bColor;
				bgAlpha = 1;
				filter = null;
				break;
			default :
				bgColor = bColor;
				bgAlpha = 1;
				filter = new DropShadowFilter(0, 90, sColor, 0.75, 2, 2, 3, 2, false, false, false);
				break;
		}
		base.graphics.clear();
		base.graphics.beginFill(bgColor, bgAlpha);
		base.graphics.drawRect(0, 0, bWidth, bHeight);
		base.graphics.endFill();
		if (date && date.day > 0) txt.text = String(date.day);
		if (filter) {
			txt.filters = [filter];
		} else {
			txt.filters = [];
		}
		today.visible = now;
		if (holiday) {
			flag.visible = true;
		} else {
			flag.visible = false;
		}
	}
	private function draw():void {
		base = new Sprite();
		addChild(base);
		mouseChildren = false;
		hitArea = base;
		today = new Shape();
		addChild(today);
		today.graphics.beginFill(todayColor);
		today.graphics.drawRect(0, 0, bWidth, bHeight);
		today.graphics.drawRect(1, 1, bWidth-2, bHeight-2);
		today.graphics.endFill();
		today.visible = false;
		var tf:TextFormat = new TextFormat();
		tf.font = fontType;
		tf.size = 14;
		tf.align = TextFormatAlign.CENTER;
		txt = new TextField();
		addChild(txt);
		txt.x = -3;
		txt.y = 1;
		txt.width = 28;
		txt.height = 21;
		txt.type = TextFieldType.DYNAMIC;
		txt.selectable = false;
		//txt.embedFonts = true;
		//txt.antiAliasType = AntiAliasType.ADVANCED;
		txt.defaultTextFormat = tf;
		txt.textColor = bColor;
		flag = new Flag();
		addChild(flag);
		flag.x = 42;
		flag.y = 3;
		flag.visible = false;
	}

}


//////////////////////////////////////////////////
//	var calendar:Array = Calendar.create(2009, 5);
//	# 2009年5月のカレンダー情報(配列)を返す
//
//	var date:CalendarDate = calendar[3];
//	# 2009年5月3日のカレンダー情報(CalendarDate)を返す
//	# date のプロパティ
//	#	@year: 2009
//	#	@month: 5
//	#	@day: 3
//	#	@week: 1 (1週目)
//	#	@weekday: 0 (日曜日)
//	#	@holiday: "憲法記念日"
//
//	# 祝日については2009年以降適用
//////////////////////////////////////////////////

class Calendar {
	private static var year:uint;
	private static var month:uint;
	private static var first:uint;
	private static var days:uint;
	private static var calendarList:Object;
	private static var calendar:Array;
	private static var holidays:Array;
	private static var initialized:Boolean = init();
	public static const SUN:String = "Sun";
	public static const MON:String = "Mon";
	public static const TUE:String = "Tue";
	public static const WED:String = "Wed";
	public static const THU:String = "Thu";
	public static const FRI:String = "Fri";
	public static const SAT:String = "Sat";
	public static const NONE:String = "none";
	public static const HOLI:String = "holiday";
	public static const EQUINOX_SPRING:String = "春分の日";
	public static const EQUINOX_AUTUMN:String = "秋分の日";
	public static const HOLIDAY_IN_LIEU:String = "振替休日";
	public static const HOLIDAY_BY_LAW:String = "国民の休日";

	public function Calendar() {
	}

	private static function init():Boolean {
		if (!initialized) initialize();
		return true;
	}
	// 月の基本情報・祝日
	private static function initialize():void {
		calendarList = new Object();
		holidays = new Array();
		for (var n:uint = 1; n <= 12; n++) {
			holidays[n] = new Object();
		}
		holidays[1][1] = "元旦";
		holidays[1]["Mon2"] = "成人の日";
		holidays[2][11] = "建国記念の日";
		holidays[4][29] = "昭和の日";
		holidays[5][3] = "憲法記念日";
		holidays[5][4] = "みどりの日";
		holidays[5][5] = "こどもの日";
		holidays[7]["Mon3"] = "海の日";
		holidays[9]["Mon3"] = "敬老の日";
		holidays[10]["Mon2"] = "体育の日";
		holidays[11][3] = "文化の日";
		holidays[11][23] = "勤労感謝の日";
		holidays[12][23] = "天皇誕生日";
	}
	// カレンダー情報の配列生成
	public static function create(y:uint, m:uint):Array {
		year = y;
		month = m;
		if (year < 2009) return null;
		var monthID:String = "m" + year + ("0"+month).substr(-2);
		if (!calendarList[monthID]) {
			calendarList[monthID] = createDate();
		}
		return calendarList[monthID];
	}
	private static function createDate():Array {
		var last:Date = new Date(year, month, 0);
		days = last.getDate();
		calendar = new Array();
		if (month == 3) equinoxSpring(year);
		if (month == 9) equinoxAutumn(year);
		for (var n:uint = 0; n < days; n++) {
			var date:CalendarDate = new CalendarDate(year, month, n+1);
			var holiday:* = getHoliday(date);
			if (holiday) date.holiday = holiday;
			calendar[n+1] = date;
		}
		switch (month) {
		case 1 :
		case 2 :
		case 3 :
		case 4 :
		case 11 :
		case 12 :
			holidayInLieu();
			break;
		case 5 :
			holidayInMay();
			break;
		case 9 :
			holidayInLieu();
			holidayBetween();
			break;
		default :
			break;
		}
		return calendar;
	}
	// 祝日の基本処理
	private static function getHoliday(date:CalendarDate):* {
		var holiday1:String = holidays[date.month][date.day];
		if (date.weekday == 1) {
			var holiday2:String = holidays[date.month]["Mon"+date.week];
		}
		if (!holiday1 && !holiday2) return null;
		if (holiday1) return holiday1;
		if (holiday2) return holiday2;
	}
	// 春分・秋分の日
	private static function equinoxSpring(y:uint):void {
		var d:uint = Math.floor(20.8431+0.242194*(y-1980)-Math.floor((y-1980)/4));
		holidays[3][d] = Calendar.EQUINOX_SPRING;
	}
	private static function equinoxAutumn(y:uint):void {
		var d:uint = Math.floor(23.248+0.242194*(y-1980)-Math.floor((y-1980)/4));
		holidays[9][d] = Calendar.EQUINOX_AUTUMN;
	}
	// 振替休日・国民の休日
	private static function holidayInLieu():void {
		for (var n:uint = 0; n < days; n++) {
			var date1:CalendarDate = calendar[n+1];
			var date2:CalendarDate = calendar[n+2];
			if (date1.weekday == 0 && date1.holiday) {
				if (date2.weekday != 0 && !date2.holiday) {
					date2.holiday = Calendar.HOLIDAY_IN_LIEU;
				}
			}
		}
	}
	private static function holidayInMay():void {
		var date1:CalendarDate = calendar[3];
		var date2:CalendarDate = calendar[4];
		var date3:CalendarDate = calendar[5];
		var date4:CalendarDate = calendar[6];
		if (date1.weekday == 0 || date2.weekday == 0 || date3.weekday == 0) {
			if (!date4.holiday) {
				date4.holiday = Calendar.HOLIDAY_IN_LIEU;
			}
		}
	}
	private static function holidayBetween():void {
		for (var n:uint = 0; n < days; n++) {
			var date1:CalendarDate = calendar[n+1];
			var date2:CalendarDate = calendar[n+2];
			var date3:CalendarDate = calendar[n+3];
			if (date1.holiday && date3.holiday) {
				if (!date2.holiday) {
					date2.holiday = Calendar.HOLIDAY_BY_LAW;
				}
			}
		}
	}

}


class CalendarDate {
	private var _year:uint;
	private var _month:uint;
	private var _day:uint;
	private var _week:uint;
	private var _weekday:uint;
	private var _holiday:* = null;

	public function CalendarDate(y:uint, m:uint, d:uint) {
		_year = y;
		_month = m;
		_day = d;
		init();
	}

	private function init():void {
		_week = Math.floor((_day - 1)/7)+1;
		var date:Date = new Date(year, month - 1, day);
		_weekday = date.getDay();
	}
	public function get year():uint {
		return _year;
	}
	public function get month():uint {
		return _month;
	}
	public function get day():uint {
		return _day;
	}
	public function get week():uint {
		return _week;
	}
	public function get weekday():uint {
		return _weekday;
	}
	public function get holiday():String {
		return _holiday;
	}
	public function set holiday(param:String):void {
		_holiday = param;
	}

}


import flash.display.Sprite;
import flash.display.Shape;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.text.AntiAliasType;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.DropShadowFilter;

class HelpPanel extends Sprite {
	private var base:Sprite;
	private var panel:Shape;
	private var arrow:Shape;
	private var board:Shape;
	private var txt:TextField;
	private static var fontType:String = "_ゴシック";
	private var px:uint;
	private var py:uint;
	private var _width:uint = 100;
	private var _height:uint = 60;
	private var type:uint = 1;
	private static var xOffset:uint = 15;
	private static var yOffset:uint = 10;
	private static var bColor:uint = 0xFFFFFF;
	private static var sColor:uint = 0x000000;
	private static var cColor:uint = 0xEEEEEE;
	private static var tColor:uint = 0x000000;
	private var shade:DropShadowFilter;
	private var deceleration:Number = 0.25;
	private var step:uint = 10;
	private var _visible:Boolean = false;

	public function HelpPanel() {
		if (stage) initialize();
		else addEventListener(Event.ADDED_TO_STAGE, initialize, false, 0, true);
	}

	public function init(option:Object):void {
		if (option.width != undefined) _width = option.width;
		if (option.height != undefined) _height = option.height;
		if (option.type != undefined) type = option.type;
		if (option.dec) deceleration = option.dec;
		if (option.step) step = option.step;
		draw();
	}
	private function draw():void {
		switch (type) {
		case 1 :
			bColor = 0xFFFFFF;
			cColor = 0xEEEEEE;
			tColor = 0x000000;
			break;
		case 2 :
			bColor = 0x000000;
			cColor = 0x333333;
			tColor = 0xFFFFFF;
			break;
		}
		shade = new DropShadowFilter(1, 90, sColor, 0.4, 4, 4, 1.5, 2, false, false);
		base = new Sprite();
		panel = new Shape();
		arrow = new Shape();
		board = new Shape();
		txt = new TextField();
		addChild(base);
		base.addChild(panel);
		base.addChild(arrow);
		base.addChild(board);
		base.addChild(txt);
		createBox(panel, -_width*0.5, -_height, _width, _height, 4);
		createArrow(arrow, 6, 8);
		createBase(board, -_width*0.5+5, -_height+5, _width-10, _height-10);
		base.y = - yOffset;
		txt.x = -_width*0.5 + 8;
		txt.y = -_height + 8;
		txt.width = _width - 16;
		txt.height = _height - 16;
		txt.type = TextFieldType.DYNAMIC;
		txt.selectable = false;
		txt.multiline = true;
		txt.wordWrap = true;
		txt.antiAliasType = AntiAliasType.ADVANCED;
		var tf:TextFormat = new TextFormat();
		tf.font = fontType;
		tf.size = 10;
		tf.align = TextFormatAlign.LEFT;
		txt.defaultTextFormat = tf;
		txt.textColor = tColor;
		filters = [shade];
	}
	private function initialize(evt:Event = null):void {
		removeEventListener(Event.ADDED_TO_STAGE, initialize);
		visible = false;
		x = stage.stageWidth*0.5;
		y = stage.stageHeight*0.5;
		stage.addEventListener(Event.ENTER_FRAME, move, false, 0, true);
		mouseChildren = false;
		mouseEnabled = false;
	}
	private function move(evt:Event):void {
		var xMouse:uint = stage.mouseX;
		var yMouse:uint = stage.mouseY;
		if (xMouse >= 0 && xMouse <= stage.stageWidth) {
			px += (xMouse - px)*deceleration;
			py += (yMouse - py)*deceleration;
		}
		x = Math.round(px);
		y = Math.round(py);
		showPanel();
	}
	private function showPanel():void {
		var a:Number = 1/step;
		if (_visible) {
			visible = true;
			alpha += a;
			if (alpha >= 1) alpha = 1;
		} else {
			alpha -= a;
			if (alpha <= 0) {
				alpha = 0;
				visible = false;
			}
		}
	}
	public function show(t:String):void {
		txt.text = t;
		_visible = true;
	}
	public function hide():void {
		_visible = false;
	}
	private function createBox(target:Shape, x:int, y:int, w:uint, h:uint, c:uint):void {
		target.graphics.beginFill(bColor);
		target.graphics.drawRoundRect(x, y, w, h, c*2);
		target.graphics.endFill();
	}
	private function createArrow(target:Shape, w:uint, h:uint):void {
		target.graphics.beginFill(bColor);
		target.graphics.moveTo(0, 0);
		target.graphics.lineTo(-w*0.5, 0);
		target.graphics.lineTo(0, h);
		target.graphics.lineTo(w*0.5, 0);
		target.graphics.lineTo(0, 0);
		target.graphics.endFill();
	}
	private function createBase(target:Shape, x:int, y:int, w:uint, h:uint):void {
		target.graphics.beginFill(cColor);
		target.graphics.drawRect(x, y, w, h);
		target.graphics.endFill();
	}

}


import flash.display.Sprite;
import flash.display.Shape;
import flash.filters.GlowFilter;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;

class IconBtn extends Sprite {
	public var id:uint;
	private var shade:Shape;
	private var bottom:Shape;
	private var light:Shape;
	private var base:Shape;
	private var icon:Shape;
	private var _width:uint = 60;
	private static var _height:uint = 20;
	private static var corner:uint = 5;
	private var type:uint = 1;
	private static var bColor:uint = 0xFFFFFF;
	private static var sColor:uint = 0x000000;
	private static var upColor:uint = 0x666666;
	private static var overColor:uint = 0x333333;
	private static var offColor:uint = 0x999999;
	private static var upColorTrans:ColorTransform;
	private static var overColorTrans:ColorTransform;
	private static var offColorTrans:ColorTransform;
	private var cColor:uint = 0x0099FF;
	private var colorGlow:GlowFilter;
	private var shadeGlow:GlowFilter;
	private var _clicked:Boolean = false;
	private var _enabled:Boolean = true;

	public function IconBtn(Icon:Class) {
		icon = new Icon();
	}

	public function init(option:Object):void {
		if (option.id != undefined) id = option.id;
		if (option.width != undefined) _width = option.width;
		if (option.type != undefined) type = option.type;
		if (option.color != undefined) cColor = option.color;
		draw();
	}
	private function draw():void {
		switch (type) {
		case 1 :
			bColor = 0xFFFFFF;
			sColor = 0x000000;
			upColor = 0x666666;
			overColor = 0x333333;
			offColor = 0x999999;
			break;
		case 2 :
			bColor = 0x000000;
			sColor = 0xFFFFFF;
			upColor = 0x666666;
			overColor = 0x999999;
			offColor = 0x333333;
			break;
		}
		colorGlow = new GlowFilter(cColor, 0.6, 5, 5, 2, 3, false, true);
		shadeGlow = new GlowFilter(sColor, 0.3, 4, 4, 2, 3, false, true);
		upColorTrans = new ColorTransform();
		upColorTrans.color = upColor;
		overColorTrans = new ColorTransform();
		overColorTrans.color = overColor;
		offColorTrans = new ColorTransform();
		offColorTrans.color = offColor;
		shade = new Shape();
		bottom = new Shape();
		light = new Shape();
		base = new Shape();
		addChild(shade);
		addChild(bottom);
		addChild(light);
		addChild(base);
		addChild(icon);
		createBase(shade, _width, _height, corner, sColor);
		shade.filters = [shadeGlow];
		createBase(bottom, _width, _height, corner, sColor, 0.3);
		createBase(light, _width, _height, corner, cColor);
		light.filters = [colorGlow];
		createBase(base, _width, _height, corner, bColor);
		icon.y = -1;
		enabled = true;
		mouseChildren = false;
	}
	private function rollOver(evt:MouseEvent):void {
		_over();
	}
	private function rollOut(evt:MouseEvent):void {
		_up();
	}
	private function press(evt:MouseEvent):void {
		_down();
	}
	private function release(evt:MouseEvent):void {
		_up();
	}
	private function click(evt:MouseEvent):void {
	}
	private function _up():void {
		icon.y = -1;
		icon.transform.colorTransform = upColorTrans;
		base.y = -1;
		light.visible = false;
		light.y = -1;
	}
	private function _over():void {
		icon.y = -1;
		icon.transform.colorTransform = overColorTrans;
		base.y = -1;
		light.visible = true;
		light.y = -1;
	}
	private function _down():void {
		icon.y = 0;
		icon.transform.colorTransform = overColorTrans;
		base.y = 0;
		light.visible = true;
		light.y = 0;
	}
	private function _off():void {
		icon.y = 0;
		icon.transform.colorTransform = offColorTrans;
		base.y = 0;
		light.visible = false;
		light.y = 0;
	}
	public function get clicked():Boolean {
		return _clicked;
	}
	public function set clicked(param:Boolean):void {
		_clicked = param;
		if (_clicked) {
			_down();
			removeEventListener(MouseEvent.MOUSE_OVER, rollOver);
			removeEventListener(MouseEvent.MOUSE_OUT, rollOut);
			removeEventListener(MouseEvent.MOUSE_DOWN, press);
			removeEventListener(MouseEvent.MOUSE_UP, release);
		} else {
			_up();
			addEventListener(MouseEvent.MOUSE_OVER, rollOver, false, 0, true);
			addEventListener(MouseEvent.MOUSE_OUT, rollOut, false, 0, true);
			addEventListener(MouseEvent.MOUSE_DOWN, press, false, 0, true);
			addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
		}
	}
	public function get enabled():Boolean {
		return _enabled;
	}
	public function set enabled(param:Boolean):void {
		_enabled = param;
		buttonMode = _enabled;
		mouseEnabled = _enabled;
		useHandCursor = _enabled;
		if (_enabled) {
			_up();
			addEventListener(MouseEvent.MOUSE_OVER, rollOver, false, 0, true);
			addEventListener(MouseEvent.MOUSE_OUT, rollOut, false, 0, true);
			addEventListener(MouseEvent.MOUSE_DOWN, press, false, 0, true);
			addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
			addEventListener(MouseEvent.CLICK, click, false, 0, true);
		} else {
			_off();
			removeEventListener(MouseEvent.MOUSE_OVER, rollOver);
			removeEventListener(MouseEvent.MOUSE_OUT, rollOut);
			removeEventListener(MouseEvent.MOUSE_DOWN, press);
			removeEventListener(MouseEvent.MOUSE_UP, release);
			removeEventListener(MouseEvent.CLICK, click);
		}
	}
	private function createBase(target:Shape, w:uint, h:uint, c:uint, color:uint, alpha:Number = 1):void {
		target.graphics.beginFill(color, alpha);
		target.graphics.drawRoundRect(-w*0.5, -h*0.5, w, h, c*2);
		target.graphics.endFill();
	}

}


import flash.display.Shape;

class Today extends Shape {
	private static var bColor:uint = 0x000000;

	public function Today() {
		draw();
	}

	private function draw():void {
		graphics.beginFill(bColor);
		graphics.drawRect(-4, -4, 8, 8);
		graphics.endFill();
	}

}


import flash.display.Shape;

class Prev extends Shape {
	private static var bColor:uint = 0x000000;

	public function Prev() {
		draw();
	}

	private function draw():void {
		graphics.beginFill(bColor);
		graphics.moveTo(4, -4);
		graphics.lineTo(4, 4);
		graphics.lineTo(-6, 0);
		graphics.endFill();
	}

}


import flash.display.Shape;

class PrevDouble extends Shape {
	private static var bColor:uint = 0x000000;

	public function PrevDouble() {
		draw();
	}

	private function draw():void {
		graphics.beginFill(bColor);
		graphics.moveTo(5, -3);
		graphics.lineTo(5, 3);
		graphics.lineTo(-1, 0);
		graphics.moveTo(-1, -3);
		graphics.lineTo(-1, 3);
		graphics.lineTo(-7, 0);
		graphics.endFill();
	}

}


import flash.display.Shape;

class Next extends Shape {
	private static var bColor:uint = 0x000000;

	public function Next() {
		draw();
	}

	private function draw():void {
		graphics.beginFill(bColor);
		graphics.moveTo(-4, -4);
		graphics.lineTo(-4, 4);
		graphics.lineTo(6, 0);
		graphics.endFill();
	}

}


import flash.display.Shape;

class NextDouble extends Shape {
	private static var bColor:uint = 0x000000;

	public function NextDouble() {
		draw();
	}

	private function draw():void {
		graphics.beginFill(bColor);
		graphics.moveTo(-5, -3);
		graphics.lineTo(-5, 3);
		graphics.lineTo(1, 0);
		graphics.moveTo(1, -3);
		graphics.lineTo(1, 3);
		graphics.lineTo(7, 0);
		graphics.endFill();
	}

}

import flash.display.Shape;
import flash.filters.DropShadowFilter;

class Flag extends Shape {
	private static var bColor:uint = 0xFFFFFF;
	private static var sColor:uint = 0x000000;
	private static var cColor:uint = 0xFF0000;

	public function Flag() {
		draw();
	}

	private function draw():void {
		graphics.beginFill(bColor);
		graphics.drawRect(0, 0, 16, 10);
		graphics.endFill();
		graphics.beginFill(cColor);
		graphics.drawCircle(8, 5, 3);
		graphics.endFill();
		var shade:DropShadowFilter = new DropShadowFilter(0, 90, sColor, 0.5, 2, 2, 1.5, 2, false, false);
		filters = [shade];
	}

}