package charts.Elements {
	import charts.Elements.PointDotBase;
	import flash.display.BlendMode;
	import flash.display.Graphics;
	import flash.display.Sprite;
	
	public class Star extends PointDotBase {
		
		public function Star( index:Number, style:Object ) {
			
			super( index, style );
			
			this.visible = true;
			
			this.graphics.clear();
			this.graphics.lineStyle( style.width, style.colour, 1);// style.alpha );
			var rotation:Number = isNaN(style['rotation']) ? 0 : style['rotation'];
			
			this.drawStar( this.graphics, style['dot-size'], rotation );
			
			var haloSize:Number = style['halo-size']+style['dot-size'];
			var s:Sprite = new Sprite();
			s.graphics.lineStyle( 0, 0, 0 );
			s.graphics.beginFill( 0, 1 );
			this.drawStar(s.graphics, haloSize, rotation );
			s.blendMode = BlendMode.ERASE;
			s.graphics.endFill();
			this.line_mask = s;
			
			this.attach_events();
			
		}
		
		private function calcXOnCircle(radius:Number, degrees:Number):Number
		{
			return radius * Math.cos(degrees / 180 * Math.PI);
		}
		
		private function calcYOnCircle(radius:Number, degrees:Number):Number
		{
			return radius * Math.sin(degrees / 180 * Math.PI);
		}
		
		private function drawStar( graphics:Graphics, radius:Number, rotation:Number ):void 
		{
			var angle:Number = 360 / 5;

			// Start at top point (unrotated)
			var degrees:Number = -90 + rotation;
			for (var i:int = 0; i <= 5; i++)
			{
				var x:Number = this.calcXOnCircle(radius, degrees);
				var y:Number = this.calcYOnCircle(radius, degrees);
				
				if (i == 0)
					graphics.moveTo(x, y);
				else
					graphics.lineTo(x, y);
					
				// Move 2 points clockwise
				degrees += (2 * angle);
			}
		}
	}
}