package {
    import br.com.stimuli.loading.BulkErrorEvent;
    import br.com.stimuli.loading.BulkLoader;
    import br.com.stimuli.loading.BulkProgressEvent;
    
    import com.adobe.viewsource.ViewSource;
    import com.eccheung4.portfolio.controller.Portfolio;
    import com.eccheung4.portfolio.views.Preloader;
    
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.text.StyleSheet;
    import flash.text.TextField;
    
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.render.BasicRenderEngine;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.view.Viewport3D;    
    
    import caurina.transitions.Tweener;

    /**
     * Portfolio - Main file
     * 
     * @author Edwin Cheung
     * 
     */    

  [SWF(backgroundColor='#000000', frameRate='30')]
  public class Eccheung extends Sprite {
      
      private var scene:Scene3D;
    private var camera:Camera3D;
    private var viewport:Viewport3D;
    private var renderer:BasicRenderEngine;
    private var doRotation:Boolean = false;
    private var canRotate:Boolean = true;
    private var lastMouseX:int;
    private var lastMouseY:int; 
    private var cameraPitch:Number = 60;
    private var cameraYaw:Number = -60;
    
     private var title:TextField = new TextField();
     private var blog:TextField = new TextField();
    
    private var portfolio:Portfolio;
    
    public var bulkInstance:BulkLoader;
    
    public var preloader:Preloader;
      
      public function Eccheung():void {
          
          // set up the stage
      stage.align = StageAlign.TOP_LEFT;
      stage.scaleMode = StageScaleMode.NO_SCALE;
      
      // Create BulkLoader Instance for main stage
      bulkInstance = new BulkLoader("main");
      
      //Load Project XML
      bulkInstance.add("projects.xml", {id:"projects"});
      bulkInstance.get("projects").addEventListener(Event.COMPLETE, onProjectXMLLoaded);
      bulkInstance.addEventListener(BulkLoader.ERROR,onError);
      bulkInstance.addEventListener(BulkProgressEvent.PROGRESS, onProgress);
      bulkInstance.start();

        // Create bottom text footer
         var css:StyleSheet = new StyleSheet();
        var cssTitle:Object = new Object();
        cssTitle.fontSize = 16;
        cssTitle.fontFamily = "Verdana";
        cssTitle.color = "#FFFFFF";
        cssTitle.fontWeight = "bold";
             
         css.setStyle(".title", cssTitle);
     
         title.styleSheet = css;
         title.autoSize = "left";
         title.selectable = false;
         title.htmlText = "<span class='title'>edwin c cheung portfolio</span>";
         
         title.x = -title.width;
         title.y = stage.stageHeight - 50;
 
        var blogCSS:StyleSheet = new StyleSheet();
        var cssBlog:Object = new Object();
        cssBlog.fontSize = 16;
        cssBlog.fontFamily = "Verdana";
        cssBlog.color = "#398EBF";
        cssBlog.fontWeight = "bold";

        var cssBlogHover:Object = new Object();
        cssBlogHover.fontSize = 16;
        cssBlogHover.fontFamily = "Verdana";
        cssBlogHover.color = "#00CCFF";
        cssBlogHover.fontWeight = "bold";
        
        blogCSS.setStyle(".blog", cssBlog);
        blogCSS.setStyle("a:hover", cssBlogHover); 
         
         blog.styleSheet = blogCSS;
         blog.autoSize = "left";
         blog.selectable = false;
         blog.htmlText = "<span class='blog'><a href='http://eccheung.wordpress.com'>visit blog</a></span>";
         
         blog.x = -blog.width;
         blog.y = stage.stageHeight - 30;

         // Set up preloader
         preloader = new Preloader(100, 100);
         
         preloader.x = (stage.stageWidth - preloader.width)/2 - 50;
         preloader.y = stage.stageHeight/2 - 50;
         addChild(preloader);
         
         ViewSource.addMenuItem(this, "srcview/index.html");
      }
      
      private function initPortfolio():void {
          //Create portfolio
      portfolio = new Portfolio(this);
      
      addChild(portfolio);
      
      addChild(title);
       addChild(blog);
       
       Tweener.addTween(title, {x:(stage.stageWidth/2 - title.width/2), time:2, transition:"easeOutBack"});
       Tweener.addTween(blog, {x:(stage.stageWidth/2 - blog.width/2), time:2, delay:1, transition:"easeOutBack"});
      }
      
      private function onProgress(evt : BulkProgressEvent ) :void {
          //Update preloader animation
          preloader.progress();
      }
      
      private function onError(evt : BulkErrorEvent ) : void{
        trace("an error ocurred when loading");
        for each (var loadingItem:String in evt.errors){
         trace(loadingItem, "has failed to load");
        }
    }
      
      private function onProjectXMLLoaded(evt: Event):void {        
          // Create portfolio when Project XML loaded
        initPortfolio();   
      } 
  }
}