import nl.idgis.giclient.gui.ContainerContent;
import nl.idgis.giclient.webserviceconnector.MapConnector;
import nl.idgis.giclient.gis.Layer;
import nl.idgis.giclient.gis.GIS;
import nl.idgis.giclient.util.Strings;
import nl.idgis.giclient.gis.CentreScale;
import nl.idgis.giclient.template.TemplateMovie;
import nl.idgis.giclient.template.Page;
import nl.idgis.giclient.framework.SinglePaneComponent;
import nl.idgis.giclient.event.StateEvent;
import nl.idgis.giclient.event.StateEventListener;

/**
 * @author copierrj
 */
class nl.idgis.giclient.print.PrintMovie extends ContainerContent implements StateEventListener {
	
	function onLoad() {
		_parent.refreshPane();
		
		var printDialog:SinglePaneComponent = 
			SinglePaneComponent(ruler.getGIClientConfig().getGIComponent("PrintDialog"));
		printDialog.addEventListener(this, StateEvent.CHANGE, "visible");
	}
	
	static var screenPrintFactor:Number = 1.2597631645250692869740488788108;
	private static var margin:Number = 10;	
	
	private var currentElement:Number = 0;
	
	public static function toPoints(value : Number) : Number {
		return value * screenPrintFactor;		
	}	

	public function renderPages(pages:Array, handler:Object):Void {
		for(var clipName:String in this) {
			if(clipName.indexOf("print") != -1) {
				MovieClip(this[clipName]).removeMovieClip();
			}
		}
		
		var subHandler:Object = new Object();
		subHandler.handler = handler;
		subHandler.counter = pages.length;			
		subHandler.printButton = this["printButton"];
		subHandler.onReady = function() {
			this.counter--;
			if(this.counter == 0) {
				handler.onReady();
			}
		};
		
		var y:Number = margin;
		
		for(var i:Number = 0; i < pages.length; i++) {
			var page:Page = pages[i];
			
			drawPrint(TemplateMovie(attachMovie("TemplateMovie", "print" + i, 
				this.getNextHighestDepth(), {_y: y, _x: margin}))
			, subHandler, page);
			y += (page.getHeight() + margin) * PrintMovie.screenPrintFactor;
		} 
	}
	
	private function drawPrint(printMovie:TemplateMovie, printHandler:Object, page:Page):Void {
		printMovie._visible = false;		
		
		printMovie.createEmptyMovieClip("background", printMovie.getNextHighestDepth());	
		
		this.currentElement = 0;					
		var handler:Object = new Object();		
		handler.handler = printHandler;
		handler.parent = _parent;
		handler.screenPrintFactor = screenPrintFactor;
		handler.onReady = function() {		
			var background:MovieClip = printMovie["background"];
			var width:Number = printMovie._width;
			var height:Number = printMovie._height;
			background.beginFill(0xffffff, 100);
			background.moveTo(0, 0);
			background.lineTo(width, 0);
			background.lineTo(width, height);
			background.lineTo(0, height);
			background.lineTo(0, 0);
			
			printMovie._xscale = 100 * PrintMovie.screenPrintFactor;			
			printMovie._yscale = 100 * PrintMovie.screenPrintFactor;			
				
			printMovie._visible = true;
			this.parent.refreshPane();
			this.handler.onReady();	
		};
		
		page.renderPage(printMovie, handler);
	}
	
	function onStateEvent(stateEvent : StateEvent) : Void {
		if(stateEvent.getActionType() == StateEvent.CHANGE &&
			stateEvent.getPropertyName() == "visible" &&
			stateEvent.getSourceClassName() == "SinglePaneComponent") {
			if(SinglePaneComponent(stateEvent.getSource()).getPane() == null) {
				SinglePaneComponent(ruler.getGIClientConfig()
					.getGIComponent("PrintPreview")).hidePane();
			}			
		}
	}
}