/*-----------------------------------------------------------------------
Tool print JavaScript File

version: 	4.0
author:		sebastian kupke
email:		sebastian.kupke@baral.de
website:	http://www.baral.de
-----------------------------------------------------------------------*/



/* =Print preview
-----------------------------------------------------------------------*/
function mPrintPreview() {

	var printWindow = window.open('scripts/modules/print/printPreview.gsp?format=' + $('#m_print_format').val() + '&style=' + $('#m_print_style').val(),'printwindow','width=600,height=800,left=50,top=50,scrollbars=yes,resizable=yes');
	printWindow.focus();
}

var minx;
var miny;
var maxx;
var maxy;

/* =Gets the print map
-----------------------------------------------------------------------*/
function mPrintGetMap() {

	// Get width and height of map div
	var divPrintSite = $('#m_print_map');
	
	var center = parent.opener.center;
	var scaleFactor = parent.opener.scaleFactor;

	minx = center.x - (divPrintSite.width() / 2 * scaleFactor);
	miny = center.y - (divPrintSite.height() / 2 * scaleFactor);
	maxx = center.x + (divPrintSite.width() / 2 * scaleFactor);
	maxy = center.y + (divPrintSite.height() / 2 * scaleFactor);

	minx = Math.round(minx * 1000) / 1000;
	miny = Math.round(miny * 1000) / 1000;
	maxx = Math.round(maxx * 1000) / 1000;
	maxy = Math.round(maxy * 1000) / 1000;

	var scaleNumber = parent.opener.getScaleNumber();
	var curService = parent.opener.currentService;
	
	// Get layers
	var service = parent.opener.getService(curService);
	var lvl = service.getLevelInScale(scaleNumber);
	var layer = lvl.getLayer(lvl.currentLayer);
	
	$.ajax({
        url: '../../getMap.gsp',
        data: {
			url: service.url,
			layers: layer.layer,
			width: divPrintSite.width(),
			height: divPrintSite.height(),
			bbox: minx + ',' + miny + ',' + maxx + ',' + maxy,
			datasource: 'IMS:de:' + service.sessionId
		},
        dataType: 'json',
        type: 'post',
        success: function(data){

			$('#m_print_loading_div').hide(400, function() {
				$('#m_print_image').attr('src','../../../temp/' + data.img);
			});

			if (parent.opener.websisObjects) {
				mPrintShowObjectsInMap();
			}
			
			$('#m_print_copyright_div').html(layer.copyrightText);
			
			//window.print();
        }
    });
}

/* =Writes the html for the divs into the print map
-----------------------------------------------------------------------*/
function mPrintShowObjectsInMap() {
	
	var objectHtml = '';
	
	var objs = parent.opener.websisObjects;
	var dsns = parent.opener.dsns;
	
	var mapWidth = $('#m_print_map').width();
	var mapHeight = $('#m_print_map').height();
	
	for (var i in objs.items) {
		
		var obj = objs.items[i];
		
		// Show objects only when in map view
		if (obj && obj.id && obj.x > minx && obj.x < maxx && obj.y > miny && obj.y < maxy) {
			var pos = mPrintGetPositionFromCoords(obj.x,obj.y);
			
			var widthHeight = 0;
			if (dsns[obj.dsn].imgScale) {
				widthHeight = parent.opener.getImageWidthHeight(dsns[obj.dsn].imgScale);
			}
			
			var top = Math.round(pos.y - (widthHeight / 2));
			var left = Math.round(pos.x - (widthHeight / 2));
			
			// Now write the html
			objectHtml += '<div obj_id="' + obj.id + '" dsn="' + obj.dsn + '" style="position: absolute; top: ' + top + 'px; left: ' + left + 'px; z-index: 750;">';
			objectHtml += '<img src="../../../' + obj.logo + '"';
			if (widthHeight > 0) {
				objectHtml += ' style="width: ' + widthHeight + 'px; height: ' + widthHeight + 'px;"'; 
			}
			objectHtml += ' />';
			objectHtml += '</div>';
		}
	}

	$('#m_print_objects').html(objectHtml);
}

/* =Returns an x/y array
-----------------------------------------------------------------------*/
function mPrintGetPositionFromCoords(x,y) {
    
    var convX = null;
    var convY = null;

    if (x.constructor == String) {
        convX = parseFloat(x);
    } else if (x.constructor == Number) {
        convX = x;
    } else {
        convX = x;
    }

    if (y.constructor == String) {
        convY = parseFloat(y);
    } else if (y.constructor == Number) {
        convY = y;
    } else {
        convY = y;
    }
    
    var point = new Point(convX,convY);
    
    var center = parent.opener.center;
    var scaleFactor = parent.opener.scaleFactor;

	var diffX = point.x - center.x;
	var diffY = point.y - center.y;

	var diffPixelX = diffX / scaleFactor;
	var diffPixelY = diffY / scaleFactor;
    
	var mapDivWidthHalf = $('#m_print_map').width() / 2;
	var mapDivHeightHalf = $('#m_print_map').height() / 2;

	var absolutePixelObjectX = mapDivWidthHalf + diffPixelX;
	var absolutePixelObjectY = mapDivHeightHalf - diffPixelY;

	absolutePixelObjectX = Math.round(absolutePixelObjectX);
	absolutePixelObjectY = Math.round(absolutePixelObjectY);

	return new Point(absolutePixelObjectX,absolutePixelObjectY);
}























