/*-----------------------------------------------------------------------
Basic JavaScript File

version: 	4.0
author:		sebastian kupke
email:		sebastian.kupke@baral.de
website:	http://www.baral.de
-----------------------------------------------------------------------*/


/* =Do browser resize
-----------------------------------------------------------------------*/
var countResize = 0;

window.onresize = function() {
	countResize = countResize + 1;
	setTimeout('doResizeGo(' + countResize + ')',500);
};

function doResizeGo(currentCount) {

    var width = $(window).width();
    var height = $(window).height();

	if (currentCount == countResize && (currentWidth != width || currentHeight != height)) {
        
        var modHeight = height - 40;
        $('#wrapper').css('height',modHeight + 'px');
        $('#maps').css('height',modHeight + 'px');
        
		getMap();
		loadFisheye();

		currentWidth = width;
		currentHeight = height;
	}
}

/* =AJAX Callback functions
-----------------------------------------------------------------------*/
var showError = function(r) {

	alert('Error: ' + r.status + '/t' + r.statusText);
}

/* =Returns an JavaScript point object
-----------------------------------------------------------------------*/
function getPositionFromCoords(x,y) {

    var point;
    
    if (arguments.length == 1) {
        point = x;
    } else {
        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;
        }
        
        point = new Point(convX,convY);
    }

	var diffX = point.x - center.x;
	var diffY = point.y - center.y;

	var diffPixelX = diffX / scaleFactor;
	var diffPixelY = diffY / scaleFactor;
    
	var mapDivWidthHalf = $('#map_div').width() / 2;
	var mapDivHeightHalf = $('#map_div').height() / 2;

	var absolutePixelObjectX = mapDivWidthHalf + diffPixelX;
	var absolutePixelObjectY = mapDivHeightHalf - diffPixelY;

	absolutePixelObjectX = Math.round(absolutePixelObjectX);
	absolutePixelObjectY = Math.round(absolutePixelObjectY);

	return new Point(absolutePixelObjectX,absolutePixelObjectY);
}

/* =Returns an JavaScript point object
-----------------------------------------------------------------------*/
function getCoordsFromPosition(x,y) {

    var point;
    
    if (arguments.length == 1) {
        point = x;
    } else {
        point = new Point(x,y);
    }
	
	var centerPixX = ($('#map_div').width() / 2) - point.x;
	var centerPixY = ($('#map_div').height() / 2) - point.y;
	
	var diffMeterX = centerPixX * scaleFactor;
	var diffMeterY = centerPixY * scaleFactor;
	
	var coordsX = Math.abs((diffMeterX - center.x).toFixed(3));
	var coordsY = Math.abs((diffMeterY + center.y).toFixed(3));
	
	return new Point(coordsX,coordsY);
}

/* =Zooms to a point in the map
-----------------------------------------------------------------------*/
function zoomtoPoint(x,y,scaleNumber) {

	if (x.constructor == String) {
		center.x = parseFloat(x);
	} else if (x.constructor == Number) {
		center.x = x;
	}
	
	if (y.constructor == String) {
		center.y = parseFloat(y);
	} else if (y.constructor == Number) {
		center.y = y;
	}

	if (scaleNumber) {
		setScaleFactor(scaleNumber);
	}

	getMap();
}

/* =Returns a service object with a given id
-----------------------------------------------------------------------*/
function getService(service) {
	for (i = 0; i < services.length; i++) {
		if (services[i].id == service) {
			return services[i];
		}
	}
}

/* =Get map position
-----------------------------------------------------------------------*/
function getMapPos(e) {
    
    var offset = $('#maps').offset();
    
    var x = e.pageX - offset.left;
    var y = e.pageY - offset.top;
        
    return new Point(x,y);
}

/* =Scale factor and scale number functions
-----------------------------------------------------------------------*/
function getScaleNumber() {

	var widthPixel = $('#map_div').width();

	var mapWidthCm = widthPixel / ppcm;

	var widthMeter = scaleFactor * widthPixel;
	var scaleNumber = widthMeter * 100 / mapWidthCm;
	scaleNumber = Math.round(scaleNumber);

	return scaleNumber;
}

function setScaleFactor(scaleNumber) {

	var widthPixel = $('#map_div').width();
	var mapWidthCm = widthPixel / ppcm;
	var widthMeter = mapWidthCm * scaleNumber / 100;
	scaleFactor = widthMeter / widthPixel;
}

/* =Loading
-----------------------------------------------------------------------*/
function showLoadingDiv(text) {

	$('#loading_text').html(text);
	$('#loading_div').show();
}

function hideLoadingDiv() {
	
	$('#loading_div').hide();
}

/* =Destroy all map events (make it clear again)
-----------------------------------------------------------------------*/
function destroyAllMapEvents() {

	try {
		$('#map_div').draggable({});
		$('#map_div').draggable('destroy');
	} catch(e) {

	}

	try {
		TJPzoomset(document.getElementById('map_image'),0);
	} catch(e) {

	}
    
	$('#map_div').unbind();
    $('#maps').unbind();
}

/* =Pin functions
-----------------------------------------------------------------------*/
function setUserPin() {
    
    // Set the image
    $('#user_pin_image').attr('src','style/' + styleFolder + '/img/pins/' + userPin.img);
    
    // Set the image width
    if (userPin.imgWidth) {
        $('#user_pin_image').css('width',userPin.imgWidth + 'px');
    }
    
    // Set the image height
    if (userPin.imgHeight) {
        $('#user_pin_image').css('height',userPin.imgHeight + 'px');
    }

    // Set the position
    var position = getPositionFromCoords(userPin.point.x,userPin.point.y);

    position.y = position.y - ($('#user_pin').height() / 2);
    position.x = position.x - ($('#user_pin').width() / 2);

    $('#user_pin').css({
    	top: position.y + 'px',
    	left: position.x + 'px'
    });
}

function clearAllSelection() {
	
	selectPolygonObj = new Polygon();
    selectPolygonObj.points = new Array();
	selectCircleObj = new Circle();
	
	// Hide all select geometries
	$('#select_rect').hide();
	$('#select_polygon_polygon').html('');
    $('#select_polygon_vertexes').html('');
    $('#select_circle_circle').html('');
    $('#select_circle_vertexes').html('');
}








