var marker = new Array();
var pin = new google.maps.MarkerImage('images/pin.png',
    new google.maps.Size(16, 41),
    new google.maps.Point(0,0));
var pinshadow = new google.maps.MarkerImage('images/pinshadow.png',
    new google.maps.Size(50, 20),
    new google.maps.Point(-16,0));
var map;

function iniMap(targetMap) {
    var mapName = '';
    if (targetMap == 'mapI') {
        var latlng = new google.maps.LatLng(45, 0);
        var mapOptions = {
            backgroundColor: '99b3cc',
            zoom: 1,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            scrollwheel: false,
            disableDoubleClickZoom: true,
            disableDefaultUI: true,
            keyboardShortcuts: false
        }
        mapName = 'gmapindex';
    }
    else if (targetMap == 'mapD') {
        var latlng = new google.maps.LatLng(0, 0);
        var mapOptions = {
            backgroundColor: 'ffffff', // remvoe this?
            zoom: 1,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU },
            scrollwheel: false,
            disableDoubleClickZoom: true
        }
        mapName = 'gmapdisplay';
    }
    else if (targetMap == 'mapW') {
        var latlng = new google.maps.LatLng(40, 0);
        var mapOptions = {
            backgroundColor: 'ffffff',
            zoom: 0,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU },
            scrollwheel: false,
            disableDoubleClickZoom: true
        }
        mapName = 'gmapwrite';
    }

    map = new google.maps.Map(document.getElementById(mapName), mapOptions);
    
if (targetMap == 'mapW') { google.maps.event.addListener(map, 'click', function(event) { placeMarker(event.latLng); }); }
else if (targetMap == 'mapI' || targetMap == 'mapD') {
    var infoWindow = new google.maps.InfoWindow;

    downloadUrl('/mapxml.php', function(data) {
        var xml = parseXml(data);
        var markers = xml.documentElement.getElementsByTagName('marker');
            for (var i = 0; i < markers.length; i++) {
                var name = markers[i].getAttribute('name');
                var loc = markers[i].getAttribute('loc');
                var point = new google.maps.LatLng(
                parseFloat(markers[i].getAttribute('lat')),
                parseFloat(markers[i].getAttribute('lng')),
                parseFloat(markers[i].getAttribute('zoom')));
                var html = name;
                var marker = new google.maps.Marker({
                    map: map,
                    position: point,
                    icon: pin,
                    shadow: pinshadow,
                    title: loc
                });
                bindInfoWindow(marker, map, infoWindow, html);
            }
        });
    }
}

function bindInfoWindow(marker, map, infoWindow, html) {
    google.maps.event.addListener(marker, 'click', function() {
        map.setCenter(marker.getPosition());
        infoWindow.setContent(html);
        infoWindow.open(map, marker);
    });
}

function downloadUrl(url, callback) {
    var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            request.onreadystatechange = doNothing;
            callback(request.responseText, request.status);
        }
    };
    request.open('GET', url, true);
    request.send(null);
}

function parseXml(str) {
    if (window.ActiveXObject) {
        var doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.loadXML(str);
        return doc;
        }
    else if (window.DOMParser) { return (new DOMParser).parseFromString(str, 'text/xml'); }
}

function doNothing() {}

function codeAddress(targetMap) {
    geocoder = new google.maps.Geocoder();
    var locName;
	if (geocoder) {
        if (targetMap == 'mapW') { locfield = 'gmaploc'; }
        if (targetMap == 'mapD') { locfield = 'mapsearchtext'; }
		geocoder.geocode( { 'address': document.getElementById(locfield).value}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
                
                locName = results[0].formatted_address;
                map.fitBounds(results[0].geometry.viewport);
                if (targetMap == 'mapW') { placeMarker(results[0].geometry.location, targetMap, locName); }
			}
			else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT || status == google.maps.GeocoderStatus.REQUEST_DENIED) { }
		});
	}
}

function placeMarker(location, targetMap, locName) {
	clearMarker();
            map.setCenter(location);
            marker[0] = new google.maps.Marker({
            position: location, 
            map: map,
            draggable: true,
            icon: pin,
            shadow: pinshadow
        });
    writeField(location, locName);
    google.maps.event.addListener(marker[0], 'dragend', function() { writeField(marker[0].getPosition()); });
}
function writeField(location, locName) {
    document.getElementById('gmaplat').value = location.lat();
    document.getElementById('gmaplong').value = location.lng();
    document.getElementById('gmapzoom').value = map.getZoom();
    if (locName != null) {
        document.getElementById('gmaploc').value = locName;
    }
}


function clearsearch(thisfield, defaulttext) {
    if (thisfield.value == defaulttext) {
        thisfield.value = "";
    }
}

function clearMarker() { if (marker[0] != null) { marker[0].setMap(null); } }

