/*-----------------------------------------------------------------------
Tool print JavaScript File

version: 	4.2
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 sURL = 'scripts/modules/print/preview.gsp'+ws.c.ur+'?format=' + $('#m_print_format').val();
		var printWindow = window.open(sURL,'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);
		}
	}
}












