package HiRISE
{
   import flash.display.Loader;
   import flash.display.LoaderInfo;
   import flash.display.LineScaleMode;
   import flash.display.CapsStyle;
   import flash.display.Sprite;
   import flash.events.Event;
   import flash.events.MouseEvent;
   import flash.net.URLRequest;
   import flash.text.TextField;
   import flash.text.TextFormat;
   import flash.text.TextFieldAutoSize;

   /* Default settings, these can be changed in the HTML */
   [SWF(width="512", height="512", backgroundColor="0xffffff")]

   public class Scroller extends Sprite
   {
      private var length:int;
      private var image:String;
      private var scale:String;
      private var loader:Loader;

      private var linecolor:uint = 0xe89800; // rgb

      private var thickness:int = 6; // pixels
      private var margin:int = 25;  // pixels

      private var scalegrp:Sprite = new Sprite();

      private var paused:Boolean = false;

      public function Scroller()
      {
         scale  = root.loaderInfo.parameters.scale;
         image  = root.loaderInfo.parameters.image;
         length = root.loaderInfo.parameters.length;

         /* Image */
         trace("Loading " + image);

         loader = new Loader();
      
         loader.load( new URLRequest(image));

         /* Scale Bar */
         var scalebar:Sprite = new Sprite();
         scalebar.graphics.lineStyle
         (
            thickness,            // thickness in pixels
            linecolor,            // color
            1,
            true,
            LineScaleMode.NONE,
            CapsStyle.SQUARE
         );

         scalebar.graphics.moveTo(stage.stageWidth - margin - length, margin);
         scalebar.graphics.lineTo(stage.stageWidth - margin, margin);

         /* Text Format */
         var scalefmt:TextFormat = new TextFormat();
         scalefmt.font = "Verdana, Arial, Helvetica, Sans, Bitstream Vera Sans";
         scalefmt.size = 14;
         scalefmt.bold = true;
         scalefmt.color = linecolor;

         /* Scale Text */
         var scaletxt:TextField = new TextField();
         scaletxt.text = scale;
         scaletxt.setTextFormat(scalefmt);
         scaletxt.x = stage.stageWidth - length - margin;
         scaletxt.y = margin + margin / 2;
         scaletxt.width = length;
         scaletxt.autoSize = TextFieldAutoSize.CENTER;

         /* Scale Group */
         scalegrp.addChild(scalebar);
         scalegrp.addChild(scaletxt);

         /* Scale group event listeners */
         scalegrp.addEventListener(MouseEvent.MOUSE_DOWN, startScaleDrag);
         scalegrp.addEventListener(MouseEvent.MOUSE_UP, stopScaleDrag);

         /* Child Nodes */
         addChild(loader);
         addChild(scalegrp);

         /* Our event listeners */
         addEventListener(Event.ENTER_FRAME, onEnterFrame);
         addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
         addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel);
      }

      public function startScaleDrag(event:MouseEvent):void
      {
         paused = true;
         scalegrp.startDrag();
         event.stopPropagation();
      }

      public function stopScaleDrag(event:MouseEvent):void
      {
         paused = false;
         scalegrp.stopDrag();
         //event.stopPropagation();
      }

      public function onMouseDown(event:MouseEvent):void
      {
         paused = ! paused;
      }

      public function onMouseWheel(event:MouseEvent):void
      {
         loader.y += event.delta;
      }

      public function onEnterFrame(event:Event):void
      {

         if (paused) return;

         loader.y -= 2;

         try
         {
            if ( -loader.y > (loader.loaderInfo.height + stage.stageHeight))
            {
               loader.y = 0;
            }
         }
         catch (err:Error)
         {
            trace(err);
         }
      }

   }
}