﻿/**
 * JavaScript-Bibliothek für TMSFG Steleportal
 * 
 * @author Niels Bobogk <niels.bobogk@googlemail.com>
 * @copy 2010 Niels Bobogk
 */
 
var circle;

//------------------------------------------------------------

/**
* Min-Max-Zoomstufen für die GoogleMap
*/
function InitMapMinMaxZoom() {
    try {
        var mt = GoogleMap1.getMapTypes();
        // Ueberschreiben der vorhandenen Funktionen
        for (var i=0; i < mt.length; i++) {
            mt[i].getMinimumResolution = function() {return 7;}
            mt[i].getMaximumResolution = function() {return 11;}
        }
    }
    catch(e) {
        console.error(e);
    }
}

//------------------------------------------------------------

/**
* Umkreis anzeigen
*/
function drawCircle(radius) {
    try {
	    if (circle) {
		    GoogleMap1.removeOverlay(circle);
	    }
	    var center = GoogleMap1.getCenter();
	    var bounds = new GLatLngBounds();
	    var circlePoints = Array(360);
        var d = radius / 6378.8; // Erdradius
        
	    with (Math) {
		    var lat1 = (PI / 180) * center.lat();
		    var lng1 = (PI / 180) * center.lng();

		    for (var a = 0 ; a <= 360 ; a++ ) {
			    var tc = (PI/180)*a;
			    var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
			    var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
			    var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
			    var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
			    
			    circlePoints[a] = point;
			    bounds.extend(point);
		    }
        }
	    if (d < 1.5678565720686044) {
		    circle = new GPolygon(circlePoints, '#FF0000', 1, 1, '#33CC33', 0.3);	
	    }
	    else {
		    circle = new GPolygon(circlePoints, '#FF0000', 1, 1);	
	    }
	    
	    GoogleMap1.addOverlay(circle); 
	} catch(e) {
	    console.error = e;
	}	
}

//------------------------------------------------------------

/**
* GoogleMap aus .Net heraus initialisieren
*/
function InitGoogleMap(radius) {
    InitMapMinMaxZoom();
    if (parseInt(radius) > 0) {
        drawCircle(radius);
    }
}

//------------------------------------------------------------

/**
* Bei der Umkreissuche nur Stadteingabe, wenn Umkreis gewählt ist
*/ 
function initSearchBox() {
    try 
    {
        var selectUmkreis = $$('#rowUmkreissucheRadiusDropDownList select');
        selectUmkreis = selectUmkreis[0];
        
        var inputOrt = $$('#rowUmkreissucheOrtTextBox input[type=text]');
        inputOrt = inputOrt[0];
        
        if (selectUmkreis && inputOrt) {
			/*
            if (0 == selectUmkreis.value) {
                inputOrt.disabled = true;
            }
            
            // Ort nur anzugeben, wenn Umkreis gewählt
            Event.observe(selectUmkreis, 'change', function() {
                if (this.value == 0) {
                    inputOrt.value = '';
                    inputOrt.disabled = true;
                } else {
                    inputOrt.disabled = false;
                }
            });
			*/
            
            // Submit bei gewähltem Umkreis nur, wenn Ort angegeben wurde
            var form = inputOrt.form;
            Event.observe(form, 'submit', function(event) {
                if (parseInt(selectUmkreis.value) > 0 && inputOrt.value.blank()) {
                    alert("Bitte geben Sie einen Ort für die Umkreissuche an!");
                    inputOrt.focus();
                    Event.stop(event);
                }
            });
        }
    }
    catch (e)
    {
        console.error(e);
    }
}

// ------------------------------------------------------------

Event.observe (window, 'load', function() {
	initSearchBox();
});

