var geocoder = null;
var map = null;
var zoom = 13;

function loadGoogleMaps(lat, lng, zoom, size) {
    var mapDiv = document.getElementById("map");
    if (mapDiv && GBrowserIsCompatible()) {
        map = new GMap2(mapDiv);
        // center to GeoIP or default location
        map.setCenter(new GLatLng(lat, lng), zoom);
        
        // controls
        if (size == 1) {
            map.addControl(new GLargeMapControl());
            map.addControl(new GMenuMapTypeControl());
            map.addControl(new GScaleControl());
            map.addControl(new GOverviewMapControl());
			map.addControl(new SearchControl());
			map.addControl(new LinksControl());
        } else if (size == 2) {
            map.addControl(new GSmallMapControl());;
        }
        
        // zoom
        map.enableDoubleClickZoom();
        map.enableContinuousZoom();
        map.enableScrollWheelZoom();
        
        // search form
        geocoder = new GClientGeocoder();
        geocoder.setBaseCountryCode('at');
        
        // AJAX request
        GDownloadUrl("/services/restaurants.php", function(data, responseCode) {
            var xml = GXml.parse(data);
            var markers     = xml.documentElement.getElementsByTagName("restaurant");
            var names       = xml.documentElement.getElementsByTagName("name");
            var cities      = xml.documentElement.getElementsByTagName("city");
            var zips        = xml.documentElement.getElementsByTagName("zip");
            var addresses   = xml.documentElement.getElementsByTagName("address");
            var pictures    = xml.documentElement.getElementsByTagName("picture");
            for (var i = 0; i < markers.length; i++) {
                var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
                
                if (size == 1) {
                    var info1 = '<table><tr><td><a href="/' + cities[i].getAttribute("url") + '/' + names[i].getAttribute("url") + '.html"><img src="' + pictures[i].firstChild.nodeValue + '" width="60" height="60" border="0" /></a></td><td valign="top" style="padding-left: 10px;"><a href="/' + cities[i].getAttribute("url") + '/' + names[i].getAttribute("url") + '.html">' + names[i].firstChild.nodeValue + '</a><br />' + addresses[i].firstChild.nodeValue + '<br />' + zips[i].firstChild.nodeValue + ' ' + cities[i].firstChild.nodeValue + '</td></tr></table>';
                    var info2 = '/' + cities[i].getAttribute("url") + '/' + names[i].getAttribute("url") + '.html';
                } else if (size == 2) {
                    var info1 = '/' + cities[i].getAttribute("url") + '/' + names[i].getAttribute("url") + '.html';
                    var info2 = '';
                }
                
                var marker = createMarker(point, size, info1, info2);
                
                map.addOverlay(marker);
            }
        });
        if (size == 1) {
        	document.getElementById('map-search').style.display = 'block';
        	document.getElementById('map-links').style.display = 'block';
        }
    }
}

// search control
function SearchControl() {};
SearchControl.prototype = new GControl();
SearchControl.prototype.initialize = function(map) {
	var search = document.getElementById("map-search");
	map.getContainer().appendChild(search);
	return search;
}
SearchControl.prototype.getDefaultPosition = function() {
	return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(97, 7));
}

// links control
function LinksControl() {};
LinksControl.prototype = new GControl();
LinksControl.prototype.initialize = function(map) {
	var links = document.getElementById("map-links");
	map.getContainer().appendChild(links);
	return links;
}
LinksControl.prototype.getDefaultPosition = function() {
	return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(8, 216));
}

function createMarker(point, size, info1, info2) {
    // create custom marker
    var lunchmail = new GIcon(G_DEFAULT_ICON);
    lunchmail.image = "http://www.lunchmail.at/images/marker-schwarz.png";
    lunchmail.shadow = "";
    lunchmail.iconSize = new GSize(32, 32);
    lunchmail.iconAnchor = new GPoint(16, 32);
    lunchmail.infoWindowAnchor = new GPoint(16, 0);
    lunchmail.imageMap = new Array(0, 0, 31, 0, 31, 31, 0, 31);
                    
    // set up GMarkerOptions object
    markerOptions = { icon: lunchmail };
    
    var marker = new GMarker(point, markerOptions);
    if (size == 1) {
        GEvent.addListener(marker, "mouseover", function() {
            marker.openInfoWindowHtml(info1);
        });
        GEvent.addListener(marker, "click", function() {
            location.href = info2;
        });
    } else if (size == 2) {
        GEvent.addListener(marker, "click", function() {
            location.href = info1;
        });
    }
    return marker;
}

function showAddress(address) {
    if (geocoder) {
        geocoder.getLatLng(address, function(point) {
            if (!point) {
                alert(address + " konnte leider nicht gefunden werden!");
            } else {
                map.setCenter(point, 15);
            }
        });
    }
}

function unloadGoogleMaps(setCookie) {
    var mapDiv = document.getElementById("map");
    if (mapDiv && GBrowserIsCompatible() && setCookie) {
        var center = map.getCenter();
        var zoom = map.getZoom();
        // AJAX request
        GDownloadUrl("/services/cookie.php?center=" + center.toUrlValue() + "&zoom=" + zoom, function(data, responseCode) {
            ;
        });
        GUnload();
    }
}