
var gmap = new Object();

gmap.latMax = parseFloat('-180');
gmap.lonMax = parseFloat('-180');
gmap.latMin = parseFloat('180');
gmap.lonMin = parseFloat('180');
gmap.color = '';

gmap.tours = new Array();
gmap.houses = new Array();

gmap.finish = false;

var stationCounter = 0;



function googleMap() {
	getMapData();
	
	map = createMap();
	paintMarker(map);
	gmap.finish = true;
	return;
}


function createMap () {

	var types = [google.maps.MapTypeId.ROADMAP,google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.HYBRID];
	var latlng = new google.maps.LatLng(gmap.latCenter, gmap.lonCenter);

	if (color = $('.gmap_data.tour').find('.gmap_color').html()) gmap.color = color;

	var myOptions = {
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		mapTypeControl: true,
		scrollwheel : false,
		mapTypeControlOptions: {
			mapTypeIds: types
		}
	};
	map = new google.maps.Map(document.getElementById('google_map'), myOptions);

	if ($('.gmap_data.tour')) {
		if (coord = parseFloat($('.gmap_data.tour').find('.gmap_latmin').html())) gmap.latMin = coord;
		if (coord = parseFloat($('.gmap_data.tour').find('.gmap_lonmin').html())) gmap.lonMin = coord;
		if (coord = parseFloat($('.gmap_data.tour').find('.gmap_latmax').html())) gmap.latMax = coord;
		if (coord = parseFloat($('.gmap_data.tour').find('.gmap_lonmax').html())) gmap.lonMax = coord;
	}
	
	if (gmap.latMin == gmap.latMax || gmap.lonMin == gmap.lonMax) {
		minBound = new google.maps.LatLng((gmap.latMin - 0.001),(gmap.lonMin - 0.001));
		maxBound = new google.maps.LatLng((gmap.latMax + 0.001),(gmap.lonMax + 0.001));
	} else {
		minBound = new google.maps.LatLng(gmap.latMin,gmap.lonMin);
		maxBound = new google.maps.LatLng(gmap.latMax,gmap.lonMax);
	}

/*
	console.log(gmap.latMin);
	console.log(gmap.lonMin);
	console.log(gmap.latMax);
	console.log(gmap.lonMax);
	
	marker = new google.maps.Marker({
		position: minBound,
		map: map
	});


	marker = new google.maps.Marker({
		position: maxBound,
		map: map
	});
*/
	bounds = new google.maps.LatLngBounds();
	bounds.extend(minBound);
	bounds.extend(maxBound);
	map.fitBounds(bounds);

	return map;
}

function paintMarker(map) {

	for (tourCounter = 0; tourCounter < gmap.tours.length; tourCounter++) {
		tour = gmap.tours[tourCounter];
		for (stationCounter = 0; stationCounter < tour.stations.length; stationCounter++) {
			station = tour.stations[stationCounter];
			createMarker(map, station, tour.folder);
		}
	}
	for (houseCounter = 0; houseCounter < gmap.houses.length; houseCounter++) {
		house = gmap.houses[houseCounter];
		$marker = createMarker(map, house, house.folder);
		if (house.focus == true) {
			var label = new Label({
				map: map,
				color: gmap.color
			});
			label.bindTo('position', marker, 'position');
			label.bindTo('text', marker, 'title');
		}
	}

}

function createMarker(map, data, folder) {
	myLatLng = new google.maps.LatLng(data.lat,data.lon);
	folder = folder != '' ? folder : data.folder;
	icon = folder ? 'http://' + window.document.domain + '/' + folder + data.icon : '';
	if (data.icon == 'drop.png') {
		var shadow = new google.maps.MarkerImage(
			'fileadmin/lange-nacht/media/images/website/touren/drop_shadow.png',
			new google.maps.Size(64,32),
			null,
			new google.maps.Point(16,32)
		);
		zIndex = 2;
		var iconObj = new google.maps.MarkerImage(
			icon,
			new google.maps.Size(32,32),
			null, null,
			new google.maps.Size(32,32)
		);
	} else {
		var iconObj = new google.maps.MarkerImage(
			icon,
			new google.maps.Size(24,24),
			null, null,
			new google.maps.Size(24,24)
		);
		var shadow = '';
		zIndex = 1;
	}
	marker = new google.maps.Marker({
		position: myLatLng,
		map: map, 
		shadow: shadow,
		title: data.title,
		icon: iconObj,
		zIndex: zIndex
	});

	google.maps.event.addListener(marker, 'click', function() {
		map.setCenter(this.position);
	});
	
	return marker;
}



function getMapData() {

		// get tours
	$('.gmap_tour_data').each( function() {
		var gmapTour = new Object()
		gmapTour.stations = new Array()
		tourObject = this;
		stationCounter = 0;
		gmapTour.folder = $(this).find('.gmap_folder').html();
		$(tourObject).find('.gmap_station_data').each( function () {
			var dataObject = this;
			gmapData = getGmapData(dataObject, 'station');
			if (gmapData) {
				gmapTour.stations.push(gmapData);
			}
		});
		gmap.tours.push(gmapTour);
	});
	
		// get houses
	$('.gmap_house_data').each( function() {
		var dataObject = this;
		gmapData = getGmapData(dataObject, 'house');
		if (gmapData) {
			gmap.houses.push(gmapData);
		}
	});
}

function getGmapData(dataObject, type) {
	if ($(dataObject).find('.gmap_suppress').html() != '1') {
		var gmapData = new Object();
		if ($(dataObject).find('.gmap_lat').html() == '' || $(dataObject).find('.gmap_lon').html()== '') {
			console.log('keine Koordination für' + $(dataObject).find('.gmap_title').html());
			return false;
		}
		gmapData.lat = parseFloat($(dataObject).find('.gmap_lat').html());
		gmapData.lon = parseFloat($(dataObject).find('.gmap_lon').html());
		gmapData.title = $(dataObject).find('.gmap_title').html();
		gmapData.CType = parseInt($(dataObject).find('.CType').html());
		gmapData.folder = $(dataObject).find('.gmap_folder').html();
		
		if (type == 'station') {
			if (stationCounter == 0) {
				if (gmapData.CType == 0) {
					gmapData.icon = 'start.png';
				} else {
					gmapData.icon = 'gH.png';
				}
				stationCounter++;
			} else {
				if (gmapData.CType == 0) {
					gmapData.icon = 'g' + stationCounter + '.png';
					stationCounter++;
				} else {
					gmapData.icon = 'gH.png';
				}
			}
		} else {
			gmapData.icon = 'drop.png';
		}
		
		if ($(dataObject).hasClass('focus')) {
			gmapData.focus = true;
			setMinMax(gmapData);
		} else {
			gmapData.focus = false;
		}
		
		return gmapData;
	}
	return false;
}



function setMinMax(gmapData) {
//	console.log(gmapData);
	gmap.latMax = parseFloat(gmap.latMax) < parseFloat(gmapData.lat) ? parseFloat(gmapData.lat) : parseFloat(gmap.latMax);
	gmap.latMin = parseFloat(gmap.latMin) > parseFloat(gmapData.lat) ? parseFloat(gmapData.lat) : parseFloat(gmap.latMin);
	gmap.lonMax = parseFloat(gmap.lonMax) < parseFloat(gmapData.lon) ? parseFloat(gmapData.lon) : parseFloat(gmap.lonMax);
	gmap.lonMin = parseFloat(gmap.lonMin) > parseFloat(gmapData.lon) ? parseFloat(gmapData.lon) : parseFloat(gmap.lonMin);
}


