var customControl;
var base = "/";
var map = null;
var baseIcon = null;
var icon_purple = null;
var icon_black = null;
var icon_darkblue = null;
var icon_blue = null;
var icon_green = null;
var icon_orange = null;
var icon_red = null;
var icon_yellow = null;
var icon_white = null;

baseIcon = new GIcon();
baseIcon.shadow = base+"themes/default/images/icons/mm_20_shadow.png";
baseIcon.iconSize = new GSize(12, 20);
baseIcon.shadowSize = new GSize(22, 20);
baseIcon.iconAnchor = new GPoint(6, 20);
baseIcon.infoWindowAnchor = new GPoint(6, 1);
baseIcon.infoShadowAnchor = new GPoint(13, 13);

icon_purple = new GIcon(baseIcon, base+"themes/default/images/icons/mm_20_purple.png");
icon_black = new GIcon(baseIcon, base+"themes/default/images/icons/mm_20_black.png");
icon_blue = new GIcon(baseIcon, base+"themes/default/images/icons/mm_20_blue.png");
icon_green = new GIcon(baseIcon, base+"themes/default/images/icons/mm_20_green.png");
icon_orange = new GIcon(baseIcon, base+"themes/default/images/icons/mm_20_orange.png");
icon_red = new GIcon(baseIcon, base+"themes/default/images/icons/mm_20_red.png");
icon_yellow = new GIcon(baseIcon, base+"themes/default/images/icons/mm_20_yellow.png");
icon_white = new GIcon(baseIcon, base+"themes/default/images/icons/mm_20_white.png");

var tooltip = document.createElement("div");
tooltip.setAttribute("id","div_marker_tooltip");
tooltip.style.border="1px #666 solid";
tooltip.style.backgroundColor="#ffffff";
tooltip.style.fontWeight="bold";
tooltip.style.overflow="hidden";
tooltip.style.width="202px";

function addCustomControl (innerHTML)
{
    var innerHTML = innerHTML;
    removeCustomControl();

    function CustomControl() {}

    CustomControl.prototype = new GControl();

    CustomControl.prototype.initialize = function (map) {
        var container = document.createElement("div");
        this.setButtonStyle_(container);
        container.appendChild(document.createTextNode(''));
        map.getContainer().appendChild(container);
        return container;
    }

    CustomControl.prototype.getDefaultPosition = function() {
        return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(275, 200));
    }

    CustomControl.prototype.setButtonStyle_ = function(button) {
        button.innerHTML  = innerHTML;
        //button.innerHTML  = '<img src="/idx/images/loading.gif"><br /><img src="/idx/images/loading_bar.gif">';
        button.style.textDecoration = "none";
        button.style.color = "#000000";
        button.style.backgroundColor = "white";
        button.style.font = "small Arial";
        button.style.border = "1px solid black";
        button.style.padding = "20px";
        button.style.marginBottom = "3px";
        button.style.textAlign = "center";
        button.style.width = "150px";
        button.style.cursor = "pointer";
    }

    customControl = new CustomControl();

    map.addControl(customControl);
    map.disableDragging();
}

function removeCustomControl()
{
    map.removeControl(customControl);
    map.enableDragging();
}

function showTooltip(marker)
{
    tooltip.innerHTML = marker.tooltip;
    var point = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(), map.getZoom());
    var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(), map.getZoom());
    var anchor = marker.getIcon().iconAnchor;
    var width = marker.getIcon().iconSize.width;

	var tooltipwidth = tooltip.clientWidth;
	var height = tooltip.clientHeight;
	var y = (- offset.y + point.y + anchor.y);
	var mapwidth = map.getSize().width;
	var x;
	var bounds = map.getBounds();
	var longspan = bounds.toSpan().lng();
	var ttwidthdeg = (tooltipwidth + width) / mapwidth * longspan;

	if ( marker.getPoint().lng() + ttwidthdeg > bounds.getNorthEast().lng() ) {
		x = offset.x - point.x - anchor.x - tooltipwidth;
	} else {
		x = offset.x - point.x - anchor.x + width;
	}

	var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(x,y));
	pos.apply(tooltip);
    tooltip.style.visibility="visible";
}

function onMapMove()
{
    map.clearOverlays();
    requestData('move');
}

function onMapZoom(zoomLevel)
{
    map.clearOverlays();
    requestData('zoom');
}

function onMapSubmit()
{
    map.clearOverlays();
    requestData('submit');
    //new Ajax.Updater("mapAction", "map_search.php", { evalScripts:true, asynchronous:true, parameters:Form.serialize($('searchFormData'))});
}

function mapInit()
{
    map.clearOverlays();
    requestData('init');
}

function requestData(type)
{
    addCustomControl('<img src=\''+base+'themes/default/images/ajax-loading.gif\'>');
    location_types = '';
    if($('type1').checked) location_types += $('type1').value+"|";
    if($('type2').checked) location_types += $('type2').value+"|";
    if($('type3').checked) location_types += $('type3').value+"|";
    if($('type4').checked) location_types += $('type4').value+"|";
    if($('type5').checked) location_types += $('type5').value+"|";
    if($('type6').checked) location_types += $('type6').value+"|";
    if($('type7').checked) location_types += $('type7').value+"|";
    if($('type8').checked) location_types += $('type8').value+"|";
    queryString = '';
    queryString += '&types=' + location_types;
    var center = map.getCenter();
    queryString += "&longitude=" + center.lng() + "&latitude=" + center.lat() + "&zoomLevel=" + (map.getZoom());
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    queryString += "&right="+northEast.lng()+"&left="+southWest.lng()+"&top="+northEast.lat()+"&bottom="+southWest.lat();
    new Ajax.Updater("mapAction", base+"themes/default/map_search.php?sel=" + type + queryString, {asynchronous:true, evalScripts:true});
}

function moveMap(lon,lat,zoom)
{
    map.centerAndZoom(new GLatLng(lon,lat));
    //map.centerAndZoom(new GLatLng(lon,lat), zoom);
    //map.centerAndZoom(new GPoint(lon,lat), zoom);
    //var centerPoint = new GPoint(lon,lat);
}

function moveZoom(leftx, lefty, rightx, righty) {
    var rectObj = new GLatLngBounds(new GLatLng(leftx,lefty), new GLatLng(rightx,righty));
    var zm = map.getBoundsZoomLevel(rectObj);
    //if(zm > 12) zm = 12;
    map.setZoom(zm);
}

function noResults(msg)
{
    addCustomControl('<img src=\''+base+'themes/default/images/ajax-loading.gif\'><br />' + msg);
}

function generateMap()
{
    if (GBrowserIsCompatible()) {
        map = new GMap(document.getElementById("googmap"));
        map.enableDoubleClickZoom();
        map.centerAndZoom(new GLatLng(42.489695,-96.399729), 5);

        map.addControl(new GLargeMapControl());
        //map.addControl(new GOverviewMapControl());
        map.addControl(new GMapTypeControl());

        addCustomControl('<img src=\''+base+'themes/default/images/ajax-loading.gif\'>');
        GEvent.addListener(map, "dragend", function() {
            onMapMove();
            });

        GEvent.addListener(map, "zoomend", function(oldLevel, newLevel) {
            onMapZoom(newLevel);
            });

        removeCustomControl();
        mapInit();
        document.getElementById("googmap").appendChild(tooltip);
        tooltip.style.visibility="hidden";
    }
}

window.onload = generateMap;
window.onunload = GUnload;
