/*-----------------------------------------------------------------------
toolbar JavaScript File

version: 	4.0
author:		sebastian kupke
email:		sebastian.kupke@baral.de
website:	http://www.baral.de
-----------------------------------------------------------------------*/


var startX = 0;
var startY = 0;

var zoom = false;

/* =Zoom in
-----------------------------------------------------------------------*/
function zoomIn() {
	
	destroyAllMapEvents();
	
	$('#maps').css('cursor','url(style/' + styleFolder + '/img/cursor/zoomin.cur),crosshair');
	
	/* =mousedown
	----------------------------------------*/
	$('#maps').mousedown(function(e) {
		
		if (e.target.id == 'map_image') {
			
			var pos = getMapPos(e);
		    startX = pos.x;
		    startY = pos.y;
		    
			$('#zoomInRect').css({
				width: '0px',
				height: '0px',
				top: pos.y + 'px',
				left: pos.x + 'px',
				display: 'block'
			});
			
			zoom = true;
		
			/* =mousemove
			----------------------------------------*/
			$('#maps').mousemove(function(e) {
				if (zoom) {
					
			        var pos = getMapPos(e);
			        
			        var top = (pos.y - startY > 0) ? startY : pos.y;
			        var left = (pos.x - startX > 0) ? startX : pos.x;
					
					$('#zoomInRect').css({
						width: Math.abs(pos.x - startX) + 'px',
						height: Math.abs(pos.y - startY) + 'px',
						top: top + 'px',
						left: left + 'px'
					});
				}
				
				return false;
			});
			
			/* =mouseup
			----------------------------------------*/
			$('#maps').mouseup(function(e) {
				zoom = false;
		
				$('#zoomInRect').hide();
				
				$('#maps').unbind('mousemove');
			    $('#maps').unbind('mouseup');
			   
			    // Calculate center coords
			    var pos = getMapPos(e);
			    
			    var widthRect = Math.abs(pos.x - startX);
			    var heightRect = Math.abs(pos.y - startY);
				
				if (widthRect > 1 || heightRect > 1) {
					
					var leftUpperX = (pos.x < startX) ? pos.x : startX;
			        var leftUpperY = (pos.y < startY) ? pos.y : startY;
					
					var leftUpperCoordsX = center.x - (($('#map_div').width() / 2) * scaleFactor);
					var leftUpperCoordsY = center.y + (($('#map_div').height() / 2) * scaleFactor);
					
					center.x = leftUpperCoordsX + ((leftUpperX + (widthRect / 2)) * scaleFactor);
					center.y = leftUpperCoordsY - ((leftUpperY + (heightRect / 2)) * scaleFactor);
					
					// Calculate scale factor
					if (widthRect > heightRect) {
						scaleFactor = (widthRect * scaleFactor) / $('#map_div').width();
					} else {
						scaleFactor = (heightRect * scaleFactor) / $('#map_div').height();
					}
				// Only mouse click
				} else {	
					var leftUpperCoordsX = center.x - (($('#map_div').width() / 2) * scaleFactor);
					var leftUpperCoordsY = center.y + (($('#map_div').height() / 2) * scaleFactor);
					
					center.x = leftUpperCoordsX + (pos.x * scaleFactor);
					center.y = leftUpperCoordsY - (pos.y * scaleFactor);
					
					// Calculate scale factor
					scaleFactor = scaleFactor / 2;
				}
				
				// Get zoomin map
				getMap();
				
				return false;
			});
		
			return false;
		
		}
	});
}

/* =Zoom out
-----------------------------------------------------------------------*/
function zoomOut() {
	
	destroyAllMapEvents();
	
	$('#maps').css('cursor','url(style/' + styleFolder + '/img/cursor/zoomout.cur),crosshair');
	
	/* =mousedown
	----------------------------------------*/
	$('#maps').mousedown(function(e) {
		
		if (e.target.id == 'map_image') {
			
			var pos = getMapPos(e);
		    startX = pos.x;
		    startY = pos.y;
		    
			$('#zoomOutRect').css({
				width: '0px',
				height: '0px',
				top: pos.y + 'px',
				left: pos.x + 'px',
				display: 'block'
			});
			
			zoom = true;
			
			/* =mousemove
			----------------------------------------*/
			$('#maps').mousemove(function(e) {
				if (zoom) {
					
			        var pos = getMapPos(e);
			        var top = (pos.x - startX > 0) ? startY : pos.y;
			        var left = (pos.y - startY > 0) ? startX : pos.x;
					
					$('#zoomOutRect').css({
						width: Math.abs(pos.x - startX) + 'px',
						height: Math.abs(pos.y - startY) + 'px',
						top: top + 'px',
						left: left + 'px'
					});
				}
				
				return false;
			});
			
			/* =mouseup
			----------------------------------------*/
			$('#maps').mouseup(function(e) {
				zoom = false;
		
				$('#zoomOutRect').hide();
				
				$('#maps').unbind('mousemove');
				$('#maps').unbind('mouseup');
				
				var pos = getMapPos(e);
				
			    // Calculate center coords
			    var widthRect = Math.abs(pos.x - startX);
			    var heightRect = Math.abs(pos.y - startY);
				
			    if (widthRect > 1 && heightRect > 1) {
					
					var leftUpperX = (pos.x < startX) ? pos.x : startX;
			        var leftUpperY = (pos.y < startY) ? pos.y : startY;
					
					var leftUpperCoordsX = center.x - (($('#map_div').width() / 2) * scaleFactor);
					var leftUpperCoordsY = center.y + (($('#map_div').height() / 2) * scaleFactor);
					
					center.x = leftUpperCoordsX + ((leftUpperX + (widthRect / 2)) * scaleFactor);
					center.y = leftUpperCoordsY - ((leftUpperY + (heightRect / 2)) * scaleFactor);
					
					// Calculate scale factor
					if (widthRect > heightRect) {
						scaleFactor = ($('#map_div').width() * scaleFactor) / widthRect;
					} else {
						scaleFactor = ($('#map_div').height() * scaleFactor) / heightRect;
					}
				// Only mouse click
				} else {
					var leftUpperCoordsX = center.x - (($('#map_div').width() / 2) * scaleFactor);
					var leftUpperCoordsY = center.y + (($('#map_div').height() / 2) * scaleFactor);
					
					center.x = leftUpperCoordsX + (getMapPos(e).x * scaleFactor);
					center.y = leftUpperCoordsY - (getMapPos(e).y * scaleFactor);
					
					// Calculate scale factor
					scaleFactor = scaleFactor * 2;
				}
				
			    // Get zoomout map
			    getMap();
				
				return false;
			});
			
			return false;
		}
	});
}

/* =Plus
-----------------------------------------------------------------------*/
function plus() {

	// Calculate scale factor
	scaleFactor = scaleFactor / 2;
	
	// Get zoomin map
	getMap();
}

/* =Minus
-----------------------------------------------------------------------*/
function minus() {

	// Calculate scale factor
	scaleFactor = scaleFactor * 2;
	
	// Get zoomin map
	getMap();
}

var mapCount = 0;

/* =Pan
-----------------------------------------------------------------------*/
function pan() {
	
	destroyAllMapEvents();

	$('#maps').css('cursor','url(style/' + styleFolder + '/img/cursor/pan.cur),move');
	
	/* =mousedown
	----------------------------------------*/
	$('#map_div').mousedown(function(e) {
		
		if (e.target.id == 'map_image') {
			
		    startX = e.pageX;
		    startY = e.pageY;
		    
			zoom = true;
		
			/* =mousemove
			----------------------------------------*/
			$('#map_div').mousemove(function(e) {
				if (zoom) {
					
			        var left = e.pageX - startX;
			        var top = e.pageY - startY;
			        
					$('#map_div').css({
						top: top + 'px',
						left: left + 'px'
					});
				}
				
				return false;
			});
			
			/* =mouseup
			----------------------------------------*/
			$('#map_div').mouseup(function(e) {
				zoom = false;
				
				$('#map_div').unbind('mousemove');
			    $('#map_div').unbind('mouseup');
			   
			    var diffX = e.pageX - startX;
			    var diffY = e.pageY - startY;
			    
				center.x = center.x - ((diffX) * scaleFactor);
				center.y = center.y + ((diffY) * scaleFactor);
				
			    // Get zoomin map
				getMap();
				
				return false;
			});
		
			return false;
		}
	});
}

/* =Home
-----------------------------------------------------------------------*/
function home() {
	
	// Sets the center coords
	center.x = (startExtent.minx + startExtent.maxx) / 2;
	center.y = (startExtent.miny + startExtent.maxy) / 2;
	
	//------------------------------
	// Extern parameters (bbox)
	//------------------------------
	if (extParams.bbox && extParams.bbox.minx && extParams.bbox.miny && extParams.bbox.maxx && extParams.bbox.maxy) {
		center.x = (extParams.bbox.minx + extParams.bbox.maxx) / 2;
		center.y = (extParams.bbox.miny + extParams.bbox.maxy) / 2;
	}

	center.x = Math.round(center.x * 1000) / 1000;
	center.y = Math.round(center.y * 1000) / 1000;
	
	//------------------------------
	// Extern parameters (x and y)
	//------------------------------
	if (extParams.x) {
		center.x = extParams.x;
	}
	if (extParams.y) {
		center.y = extParams.y;
	}

	// Sets the scale factor
	var widthPixel = $('#map_div').width();
	var widthMeter = startExtent.maxy - startExtent.miny;
	
	//------------------------------
	// Extern parameters (bbox)
	//------------------------------
	if (extParams.bbox && extParams.bbox.minx && extParams.bbox.miny && extParams.bbox.maxx && extParams.bbox.maxy) {
		widthMeter = extParams.bbox.maxy - extParams.bbox.miny;
	}

	scaleFactor = widthMeter / widthPixel;
	
	//------------------------------
	// Extern parameters (scale)
	//------------------------------
	if (extParams.scale) {
		setScaleFactor(extParams.scale);
	}

	// Now get the first map
	getMap();
}

/* =Undo
-----------------------------------------------------------------------*/
function undo() {
	if (currentView > 0) {
		var view = views[currentView - 1];
		center.x = view.centerX;
		center.y = view.centerY;
		scaleFactor = view.scaleFactor;
		
		currentView -= 1;
		
		registerView = false;
		
		getMap();
	} else {
		//alert('Noch keine Karte aufgerufen!');
	}
}

/* =Redo
-----------------------------------------------------------------------*/
function redo() {
	if (maxView > currentView) {
		var view = views[currentView + 1];
		center.x = view.centerX;
		center.y = view.centerY;
		scaleFactor = view.scaleFactor;
		
		currentView += 1;
		
		registerView = false;
		
		getMap();
	} else {
		//alert('Noch keine neue Karte aufgerufen!');
	}
}

/* =Select rect
-----------------------------------------------------------------------*/
function selectRect() {
	
	destroyAllMapEvents();
	
	// Hide all select geometries
	clearAllSelection();
	
	// Set cursor
	$('#maps').css('cursor','url(style/' + styleFolder + '/img/cursor/select.cur),crosshair');
	
	// mousedown
	$('#maps').mousedown(function(e) {
			
		var pos = getMapPos(e);		
	    startX = pos.x;
	    startY = pos.y;
	    
		$('#select_rect').css({
			width: '0px',
			height: '0px',
			top: pos.y + 'px',
			left: pos.x + 'px',
			display: 'block'
		});
		
		zoom = true;
		
		$('#maps').mousemove(function(e) {
			if (zoom) {
				
				var pos = getMapPos(e);
		        var top = (pos.x - startX > 0) ? startY : pos.y;
		        var left = (pos.y - startY > 0) ? startX : pos.x;
				
				$('#select_rect').css({
					width: Math.abs(pos.x - startX) + 'px',
					height: Math.abs(pos.y - startY) + 'px',
					top: top + 'px',
					left: left + 'px'
				});
			}
			
			return false;
		});
		
		$('#maps').mouseup(function(e) {
			zoom = false;
			
			$('#maps').unbind('mousemove');
			$('#maps').unbind('mouseup');
			
			var pos = getMapPos(e);
			
			if (pos.x - startX > 1 || pos.y - startY > 1) {
		        
				var x1,y1,x2,y2;
				
				if (startX <= pos.x) {
					x1 = startX;
					x2 = pos.x;
				} else {
					x1 = pos.x;
					x2 = startX;
				}
				
				if (startY <= pos.y) {
					y1 = pos.y;
					y2 = startY;
				} else {
					y1 = startY;
					y2 = pos.y;
				}
		        
				selectRectObj = new Rect(getCoordsFromPosition(x1,y1),getCoordsFromPosition(x2,y2));
				
				showSelectRect();
				
				selectRectEnd('rect',selectRectObj);
			// Only mouse click	
			} else {
				
				selectRectEnd('point',getCoordsFromPosition(pos));
			}
			
			return false;
		});
		
		return false;
	});
}

function showSelectRect() {
	
	var lowerLeft = getPositionFromCoords(selectRectObj.lowerLeftPoint);
	var upperRight = getPositionFromCoords(selectRectObj.upperRightPoint);
	
	var width = upperRight.x - lowerLeft.x;
	var height = lowerLeft.y - upperRight.y;
	
    $('#select_rect').css({
        top: upperRight.y + 'px',
        left: lowerLeft.x + 'px',
        width: width + 'px',
        height: height + 'px',
        display: 'block'
    });
    
    $('#select_rect').tooltip({
		bodyHandler: function() {
	        return 'Selektion' + '<br /><br />' + 'Rechtswert unten links: ' + Math.round(selectRectObj.lowerLeftPoint.x) + '<br />Hochwert unten links: ' + Math.round(selectRectObj.lowerLeftPoint.y) + '<br />Rechtswert oben rechts: ' + Math.round(selectRectObj.upperRightPoint.x) + '<br />Hochwert oben rechts: ' + Math.round(selectRectObj.upperRightPoint.y); 
	    }, 
	    showURL: false,
	    fixPNG: true
	});
}

/* =Select polygon
-----------------------------------------------------------------------*/
function selectPolygon() {
    
	destroyAllMapEvents();
	
	// Hide all select geometries
	clearAllSelection();
	$('#select_polygon_message_div').hide();
	
	// Cursor
	$('#maps').css('cursor','url(style/' + styleFolder + '/img/cursor/select.cur),crosshair');
    
    /* =click
    --------------------------------------*/
    $('#maps').click(function(e) {
        var point = getMapPos(e);
        var coords = getCoordsFromPosition(point);
        selectPolygonObj.points.push(coords);
        
        showSelectPolygon('open');
    });
}

function selectPolygonSubmit() {
	showSelectPolygon('closed');
	selectPolygonEnd(selectPolygonObj);
}

function showSelectPolygon(type) {

	if (selectPolygonObj.points.length > 2) {
    	$('#select_polygon_message_div').show();
	} else {
    	$('#select_polygon_message_div').hide();
	}
	
    $('#select_polygon_polygon').html('');
    
    var polygon = new jsGraphics('select_polygon_polygon');
    polygon.setColor('#A2BF17');
    polygon.setStroke(3);
    
    var xArr = new Array();
    var yArr = new Array();
    
    var vertexes = '';
    
    for (var i = 0; i < selectPolygonObj.points.length; i++) {
        var point = getPositionFromCoords(selectPolygonObj.points[i]);
        xArr.push(point.x);
        yArr.push(point.y);
        
        // vertex
        var left = point.x - 8;
        var top = point.y - 8;
        
        var title = mInterfaceSelectPolygonMouseoverContent.replace(/\{0\}/,selectPolygonObj.points[i].x).replace(/\{1\}/,selectPolygonObj.points[i].y)
        
        vertexes += '<img id="vertex" vertex_id="' + i + '" class="vertex" src="style/' + styleFolder + '/img/toolbar/selectPolygon/vertex.png" style="position: absolute; top: ' + top + 'px; left: ' + left + 'px; cursor: move; z-index: 20000;" title="' + title + '" />';
    }
    
    if (selectPolygonObj.points.length > 0) {
	    if (type == 'open') {
	        polygon.drawPolyline(xArr,yArr);
	    } else {
	        polygon.drawPolygon(xArr,yArr);
	    }
	    
	    polygon.paint();
    }
    
    $('#select_polygon_vertexes').html('');
    $('#select_polygon_vertexes').append(vertexes);
    
    if (selectPolygonObj.dragVertexes) {
	    $('.vertex').draggable({
	        stop: function(e) {
	        	var id = $(this).attr('vertex_id');
	            
	            var point = getMapPos(e);
	            var coords = getCoordsFromPosition(point);
	            selectPolygonObj.points[id] = coords;
	            
	            showSelectPolygon();
	        }
	    });
    }
    
    $('#select_polygon').show();
}

/* =Select circle
-----------------------------------------------------------------------*/
function selectCircle() {
    
	destroyAllMapEvents();
	
	// Hide all select geometries
	clearAllSelection();
	
	// Cursor
	$('#maps').css('cursor','url(style/' + styleFolder + '/img/cursor/select.cur),crosshair');
    
    var step = 0;

    /* =click
    --------------------------------------*/
    $('#maps').click(function(e) {
    
        if (step == 0) {
            $('#select_circle_circle').html('');
            $('#select_circle_vertexes').html('');
        
            var point = getMapPos(e);
            
            selectCircleObj.center = getCoordsFromPosition(point);
            
            // vertex
            var left = point.x - 8;
            var top = point.y - 8;
            
            var title = mInterfaceSelectCircleMouseoverContent.replace(/\{0\}/,selectCircleObj.center.x).replace(/\{1\}/,selectCircleObj.center.y);
            
            $('#select_circle_vertexes').append('<img src="style/' + styleFolder + '/img/toolbar/selectCircle/vertex.png" style="position: absolute; top: ' + top + 'px; left: ' + left + 'px; z-index: 20000;" title="' + title + '" />');
            
            step = 1;
        } else if (step == 1) {
            
            var center = getPositionFromCoords(selectCircleObj.center);
            var radiusPoint = getMapPos(e);
            
            var diffX = Math.abs(radiusPoint.x - center.x);
            var diffY = Math.abs(radiusPoint.y - center.y);
            
            var radius = Math.round(Math.sqrt(diffX * diffX + diffY * diffY));
            
            selectCircleObj.radius = radius;
            
            step = 0;
            
            showSelectCircle();
            
            selectCircleEnd(selectCircleObj);
        }
    });
}

function showSelectCircle() {

    $('#select_circle_circle').html('');
    $('#select_circle_vertexes').html('');
            
    var circle = new jsGraphics('select_circle_circle');
    circle.setColor('#A2BF17');
    circle.setStroke(3);
    
    var center = getPositionFromCoords(selectCircleObj.center);
    
    circle.drawEllipse(center.x - selectCircleObj.radius,center.y - selectCircleObj.radius,selectCircleObj.radius * 2,selectCircleObj.radius * 2);
    
    circle.paint();
    
    $('#select_circle').show();
}

/* =Identify
-----------------------------------------------------------------------*/
function identify() {
	
}

/* =Magnifier
-----------------------------------------------------------------------*/
function magnifier() {
	
	$('#map_image').css({
		position: 'static',
		width: $('#map_div').width() + 'px',
		height: $('#map_div').height() + 'px',
		top: '0px',
		left: '0px'
	});
	
	destroyAllMapEvents();
	
	try {
		document.getElementById('map_image').onmouseover = function() {
			TJPzoomif(this,null);
		}
	} catch (e) {
		
	}
	
	TJPzoomset(document.getElementById('map_image'),1);
	
	$('#maps').css('cursor','url(style/' + styleFolder + '/img/cursor/magnifier.cur),crosshair');
	
	attentionMagnifier = true;
}

/* =Ape
-----------------------------------------------------------------------*/
function ape() {
	
}

/* =Help
-----------------------------------------------------------------------*/
function help() {
	
}





























