var map;
var markers = [];
var markerById = [];
var city = {};

var rest = 0;

function resizeMap ()
{
	$('map').style.height = (document.body.clientHeight - 119 - 30)+"px";
	
	if(rest == 0)
	{
		var rightBox = $('right-box').getHeight();
		var groupsBox = $('groups-box').getHeight();
	
		rest = rightBox - groupsBox;
	}
	
	var newRightBox = (document.body.clientHeight - 119 - 30 - 10);
	
	$('right-box').style.height = newRightBox + "px";
	$('groups-box').style.height = (newRightBox - rest)+"px";

	map.checkResize();
}


function onCheckboxClickGroup(event)
{
	toggleMarkers(Event.element(event).value);
}

function loadMap() 
{
	if (GBrowserIsCompatible()) 
	{
		map = new GMap2($('map'));

		resizeMap();

		map.setCenter(new GLatLng(city.lat, city.lng), 15);

		map.addControl(new GLargeMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(180, 10)));
		map.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(240, 10)));
		
		var loadGroups = [];
		
		$$('input.groups').each(function (element) {
			element.observe('click', onCheckboxClickGroup);	
			//element.observe('click', onGroupExpandClick);	
			
			if(element.checked) loadGroups.push(element.value);
		});
		
		$$('li.marker').each(function (element) {
			element.observe('click', onAnchorClickMarker);	
		});
		
		if(loadGroups.length > 0) loadMarkers(loadGroups, true);

		Event.observe(window, 'unload', GUnload);
		Event.observe(window, 'resize', resizeMap);

		$$('img.trigger').each(function (element) {
			element.observe('click', onGroupExpandClick);
		});
	}
}

function onAnchorClickMarker(event)
{
	var element = Event.element(event);
	
	idsplit = element.id.split("_");
	gid = idsplit[1];
	mid = idsplit[2];
	
	if(markerById[mid])
	{
		GEvent.trigger(markerById[mid][0], "click");
	}
}

function onGroupExpandClick(event)
{
	var element = Event.element(event);
	
	idsplit = element.id.split("_");
	gid = idsplit[1];
	
	if(!element.hasClassName('expanded'))
	{
		$$('img.trigger').each(function (elm) {
			idsplit2 = elm.id.split("_");
			gid2 = idsplit2[1];
			$('markers_' + gid2).hide();
			elm.removeClassName('expanded');
			elm.src = 'client/mib/images/plus.gif';
		});
		
		$('markers_' + gid).show();
		if(!$(element.parentNode).select("input")[0].checked)
		{
			$(element.parentNode).select("input")[0].checked = true;
			toggleMarkers($(element.parentNode).select("input")[0].value);
		}
		element.addClassName('expanded');
		element.src = 'client/mib/images/minus.gif';
	}
	else
	{
		$('markers_' + gid).hide();
		element.removeClassName('expanded');
		element.src = 'client/mib/images/plus.gif';
	}
}

function loadMarkers(input, isArray)
{
	var loadGroups = [];
	
	if(!isArray) loadGroups.push(input);
	else loadGroups = input;
	
	loadGroups.each(function (group) {
		markers[group] = [];
	});
	
	new Ajax.Request('home/',
  	{
    		method:'get',
    		parameters: 'ajax=true&action=markers&city_id=' + city.id + '&group_id=' + loadGroups.join(','),   		
    		onSuccess: function(d)
    		{
      			var response = d.responseText;
      			
				var xml = GXml.parse(response);
				var xml_markers = xml.documentElement.getElementsByTagName("marker");
			
				for (var i = 0; i < xml_markers.length; i++) 
				{
					var point = new GLatLng(parseFloat(xml_markers[i].getAttribute("lat")), parseFloat(xml_markers[i].getAttribute("lng")));
					var html = xml_markers[i].getAttribute("html");
					var id = xml_markers[i].getAttribute("id");
					var name = xml_markers[i].getAttribute("name");
					var color = xml_markers[i].getAttribute("color");
					var group = xml_markers[i].getAttribute("group");
					
					var markerIcon = new GIcon(G_DEFAULT_ICON);
					markerIcon.image = 'client/mib/images/markers/' + color + '.png';
					markerIcon.shadow = 'client/mib/images/markers/shadow.png';

					markerIcon.iconSize = new GSize(16, 28);
					markerIcon.shadowSize = new GSize(40, 28);
					markerIcon.iconAnchor = new GPoint(7, 27);
					markerIcon.infoWindowAnchor = new GPoint(8, 27);
					
					markerIcon.imageMap = [0,5, 5,0, 10,0, 15,6, 15,10, 8,27, 7,27, 0,10]
					
					marker = new GMarker(point, {
						title: name,
						icon: markerIcon
					});
					marker.html = html;
					markers[group].push(marker);
					markerById[id] = [];
					markerById[id].push(marker);				
				}
				
				loadGroups.each(function (group) {
					toggleMarkers(group);
				});
    		},
    		onFailure: function()
    		{ 
    			alert('Er is een fout opgetreden tijdens het inladen van de bedrijven.') 
    		}
  	});
}

function toggleMarkers(group)
{
	if ($('group_' + group).checked)
	{
		if(markers[group])
		{
			markers[group].each(function (element) {
				map.addOverlay(element);
				
				GEvent.addListener(element, 'click', function() {
					map.setCenter(element.getLatLng(), map.getZoom());
					element.openInfoWindowHtml(element.html);
				});
			});
		}
		else loadMarkers(group);
	}
	else
	{
		if(markers[group])
		{
			markers[group].each(function (element) {
				map.removeOverlay(element);
			});
		}
		
		$('markers_' + group).hide();
		$('trigger_' + group).removeClassName('expanded');
		$('trigger_' + group).src = 'client/mib/images/plus.gif';
	}		
}