/*-----------------------------------------------------------------------
Tool print JavaScript File

version: 	4.1
author:		sebastian kupke
email:		sebastian.kupke@baral-geohaus.de
website:	http://www.baral.de
-----------------------------------------------------------------------*/

/* =namespace module print
-----------------------------------------------------------------------*/
ws.m.print = {
	
	minx: 0,
	miny: 0,
	maxx: 0,
	maxy: 0,
	
	/* =init
	-----------------------------------------------------------------------*/
	init: function() {
		
	},
	
	/* =preview
	-----------------------------------------------------------------------*/
	preview: function() {
		
		var printWindow = window.open('scripts/modules/print/preview.gsp?format=' + $('#m_print_format').val(),'printwindow','width=600,height=800,left=50,top=50,scrollbars=yes,resizable=yes,menubar=yes');
		printWindow.focus();
	},
	
	/* =initPreview
	-----------------------------------------------------------------------*/
	initPreview: function() {
		
		var p = ws.m.print;
		
		// Get width and height of map div
		var printDiv = $('#m_print_map');
		
		var center = parent.opener.ws.map.center;
		var scaleFactor = parent.opener.ws.map.scale;
	
		p.minx = center.x - (printDiv.width() / 2 * scaleFactor);
		p.miny = center.y - (printDiv.height() / 2 * scaleFactor);
		p.maxx = center.x + (printDiv.width() / 2 * scaleFactor);
		p.maxy = center.y + (printDiv.height() / 2 * scaleFactor);
	
		p.minx = Math.round(p.minx * 1000) / 1000;
		p.miny = Math.round(p.miny * 1000) / 1000;
		p.maxx = Math.round(p.maxx * 1000) / 1000;
		p.maxy = Math.round(p.maxy * 1000) / 1000;
		
		// Get layers
		var service = parent.opener.ws.map.getService();
		var level = service.getLevel();
		var layer = level.getLayer();
		
		$.ajax({
	        url: '../../get_map.gsp' + parent.opener.ws.c.ur,
	        data: {
				service: service.id,
				layers: layer.layer,
				width: printDiv.width(),
				height: printDiv.height(),
				bbox: p.minx + ',' + p.miny + ',' + p.maxx + ',' + p.maxy
			},
	        dataType: 'json',
	        success: function(data){
				$('#m_print_loading_div').hide(400, function() {
					$('#m_print_image').attr('src','../../../temp/' + data.img);
				});
	
				if (parent.opener.ws.m.objects) {
					ws.m.print.showObjects();
				}
				
				$('#m_print_copyright_div').html(layer.copyrightText);
	        }
	    });
	},
	
	/* =Shows all the objects from the hash ws.m.objects.objects in the map.
	 * In IE VML is used
	 * In all other browsers SVG is used
	 * Shape types can be image, point, line, polygon
	-----------------------------------------------------------------------*/
	showObjects: function() {
		
		var extent = parent.opener.ws.map.getExtentCoords();
		var scaleNumber = parent.opener.ws.map.getScaleNumber();
		
		var mapDivWidth = $('#m_print_map').width();
		var mapDivHeight = $('#m_print_map').height();
		
		var objectsDiv = $('#m_print_objects_div').empty().width(mapDivWidth).height(mapDivHeight);
		
		if ($.browser.msie) {
			/* =VML
			-----------------------------------------------------------------------*/
			for (var i in parent.opener.ws.m.objects.objects.items) {
				
				var obj = parent.opener.ws.m.objects.objects.items[i];
				
				if (obj && obj.type && obj.shape && ((obj.maxx > extent.minx && obj.minx < extent.maxx) && (obj.maxy > extent.miny && obj.miny < extent.maxy))) {

					/* =image
					-----------------------------------------------------------------------*/
					if (obj.type == 'image') {

						var image = parent.opener.ws.g.vml.createImage(obj, mapDivWidth, mapDivHeight, scaleNumber, '../../../');
						objectsDiv.append(image);
						
					/* =point
					-----------------------------------------------------------------------*/
					} else if (obj.type == 'point') {
						
						var point = parent.opener.ws.g.vml.createPoint(obj, mapDivWidth, mapDivHeight);
						objectsDiv.append(point);
					
					/* =line
					-----------------------------------------------------------------------*/
					} else if (obj.type == 'line') {
						
						var line = parent.opener.ws.g.vml.createLine(obj, mapDivWidth, mapDivHeight);
						objectsDiv.append(line);
					
					/* =polygon
					-----------------------------------------------------------------------*/
					} else if (obj.type == 'polygon') {
						
						var polygon = parent.opener.ws.g.vml.createPolygon(obj, mapDivWidth, mapDivHeight);
						objectsDiv.append(polygon);
						
					} else {
						alert('No valid geometry type!');
					}
				}
			}
			
		} else {
			/* =SVG
			-----------------------------------------------------------------------*/
			var svgNs = "http://www.w3.org/2000/svg";
			var svgRoot = document.createElementNS(svgNs,"svg");
			
			for (var i in parent.opener.ws.m.objects.objects.items) {
				
				var obj = parent.opener.ws.m.objects.objects.items[i];
				
				if (obj && obj.type && obj.shape && ((obj.maxx > extent.minx && obj.minx < extent.maxx) && (obj.maxy > extent.miny && obj.miny < extent.maxy))) {
					
					/* =image
					-----------------------------------------------------------------------*/
					if (obj.type == 'image') {
						
						var image = parent.opener.ws.g.svg.createImage(obj, mapDivWidth, mapDivHeight, scaleNumber, '../../../');
						svgRoot.appendChild(image);
						
					/* =point
					-----------------------------------------------------------------------*/
					} else if (obj.type == 'point') {
						
						var point = parent.opener.ws.g.svg.createPoint(obj, mapDivWidth, mapDivHeight);
						svgRoot.appendChild(point);
						
					/* =line
					-----------------------------------------------------------------------*/
					} else if (obj.type == 'line') {
						
						var line = parent.opener.ws.g.svg.createLine(obj, mapDivWidth, mapDivHeight);
						svgRoot.appendChild(line);
						
					/* =polygon
					-----------------------------------------------------------------------*/
					} else if (obj.type == 'polygon') {
						
						var polygon = parent.opener.ws.g.svg.createPolygon(obj, mapDivWidth, mapDivHeight);
						svgRoot.appendChild(polygon);
						
					} else {
						alert('Cannot draw geometry, type is missing!')
					}
				}
			}
		
			// insert it into the dom
			$('#m_print_objects_div').append(svgRoot);
		}
	}
}












