
var pmaps = {
	start:function(){
	
		pmaps.createMap();
		
		if ($('goStr')){
			$('goStr').addEvent('click',pmaps.requestPoint);
		}

		if ($('delLink')){
			$('delLink').addEvent('click',pmaps.cleanLatLng);
		}

		$('iCode').empty();

		scrolling = new Fx.Scroll(window, { wait: false, duration: 1000, transition: Fx.Transitions.Quad.easeInOut });
		sliderWidth = pmaps.getSlider('areaWidth','knobWidth',1280,550,'pointWidth','width', false);
		sliderHeight = pmaps.getSlider('areaHeight','knobHeight',1280,450,'pointHeight','height', true);
		
		$('pointName').focus();
	},	
	getComboValueNum: function(elem){
		return $(elem).options[$(elem).selectedIndex].value.toFloat();
	},
	
	getComboValue: function(elem){
		return $(elem).options[$(elem).selectedIndex].value.toString();
	},
	
	getSlider: function(elem,knob,steps,setTo,upd,resize,resizeContainer){	
		var element = new Slider($(elem), $(knob), {
			steps: steps,
			onChange: function(step){
				$(upd).value = step;
				$(upd+'Hold').value = step;
				$('map').setStyle(resize,step);
				if (resizeContainer == true){
					$('mapContainer').setStyle(resize,step);
				}
				mapp.checkResize();
			}
		}).set(setTo);
		
		return element;
	},
	
	checkSlider: function(elem,resize,resizeContainer,isWidth){
		if (isNaN(elem.value) == false){
			$(elem.id + 'Hold').value = elem.value;
			$('map').setStyle(resize,elem.value);
			if (resizeContainer == true){
				$('mapContainer').setStyle(resize,elem.value);
			};
			if (isWidth == true){
				sliderWidth.set(elem.value.toFloat());
			}
			else {
				sliderHeight.set(elem.value.toFloat());
			}
			mapp.checkResize();
		}
		else {
			alert("Das ist keine gültige Eingabe!\n\nBitte geben Sie nur Zahlen ein!");
			elem.value = $(elem.id + 'Hold').value;
		}
	},
	
	createMap: function(){
  		if (GBrowserIsCompatible()) {
      		mapp = new GMap2($("map"));
      		point = new GLatLng(51.500067,10.8731);
      		mapp.addMapType(G_PHYSICAL_MAP);
      		mapp.setMapType(G_NORMAL_MAP);
			
			mapp.setCenter(point, 5);
			//mapp.enableScrollWheelZoom();
			c1 = new GSmallMapControl();
			c2 = new GLargeMapControl();
			c3 = new GMapTypeControl();
			//c3 = new GMenuMapTypeControl();
			c4 = new GOverviewMapControl();
			c5 = new GScaleControl();
		}
	},
	
	addControls: function(){

		mapp.removeControl(c1);
		mapp.removeControl(c2);
		mapp.removeControl(c3);
		mapp.removeControl(c4);
		mapp.removeControl(c5);
		
		/*var customUI = mapp.getDefaultUI();
		
		customUI.controls.smallzoomcontrol3d = false;
		customUI.controls.largemapcontrol3d = false;
		customUI.controls.maptypecontrol = false;
		customUI.controls.overviewmapcontrol = false;
		customUI.controls.scalecontrol = false;*/
		
		if ($('GSmallMapControl').checked) {
			mapp.addControl(c1);
			//customUI.controls.smallzoomcontrol3d = true;
		}
		
		if ($('GLargeMapControl').checked) {
			mapp.addControl(c2);
			//customUI.controls.largemapcontrol3d = true;
		}
		
		if ($('GMapTypeControl').checked) {
			mapp.addControl(c3);
			//customUI.controls.maptypecontrol = true;
		}
		
		if ($('GOverviewMapControl').checked) {
			mapp.addControl(c4);
			//customUI.controls.overviewmapcontrol = true;
		}
		
		if ($('GScaleControl').checked) {
			mapp.addControl(c5);
			//customUI.controls.scalecontrol = true;
		}
		
		//customUI.zoom.scrollwheel = true;
		//mapp.setUI(customUI);
		
		//mapp.enableScrollWheelZoom();
        //mapp.addControl(new DragZoomControl());
	},
	
	addIcon: function(){
        icon = new GIcon();
		var image = new Array("../images/pins/pin_red.png",24,24);
		icon.image = image[0];
		icon.iconSize = new GSize(image[1], image[2]);
		subt = image[2] / 100 * 11;
		subt = Math.ceil(subt);
		var anchor = image[2] - subt;
		icon.iconAnchor= new GPoint(10, anchor);
		var infoanchor = image[2] / 3;
		infoanchor = Math.floor(infoanchor);
		icon.infoWindowAnchor = new GPoint(infoanchor, 2);
	},
	
	addMarker: function (){
		var content = $('pointName').value != "" ? '<strong>' + $('pointName').value + '</strong><br />' : "<br />";
		var content2 = $('pointAdress').value;
		mapp.clearOverlays();
		var marker = new GMarker(point, {draggable: true});
		mapp.addOverlay(marker);
		marker.openInfoWindowHtml("<p class=\"marker\">" + content + content2 + "</p>");
        GEvent.addListener(marker, "dragstart", function() {
			mapp.closeInfoWindow();
			oldPoint = marker.getLatLng();
        });
        GEvent.addListener(marker, "dragend", function() {
        	if (confirm("Möchten Sie diesen Punkt übernehmen?")){
	        	tmpPoint = marker.getLatLng();
	        	tmpPoint2 =  tmpPoint.toString().split(",");
				$('pointCoordLon').value = tmpPoint2[0].substr(1,11);
				$('pointCoordLat').value = tmpPoint2[1].substr(0,tmpPoint2[1].length-1);
			}
			else {
				marker.setLatLng(oldPoint);
			}
          	marker.openInfoWindowHtml("<p class=\"marker\">" + content + content2 + "</p>");
        });
	},
	
	setMapType: function(i){
		switch (i){
			case 0: mapp.setMapType(G_NORMAL_MAP); break;
			case 1: mapp.setMapType(G_HYBRID_MAP); break;
			case 2: mapp.setMapType(G_SATELLITE_MAP); break;
			case 3: mapp.setMapType(G_PHYSICAL_MAP); break;
			default: mapp.setMapType(G_NORMAL_MAP); break;
		}
	},
	
	cleanLatLng: function(){
		$('pointCoordLon').value = "---"; 
		$('pointCoordLat').value = "---"; 
	},
	
	moveToMap: function(){
		scrolling.toElement($('map'));
	},
	
	moveToTop: function(){
		scrolling.toElement($('top'));
	},
	
	requestPoint: function(){
		
		$('iCode').empty();
		
		var coordLat = $('pointCoordLat').value;
		var coordLon = $('pointCoordLon').value;
		
		coordLat = coordLat == "---" ? "" : coordLat; 
		coordLon = coordLon == "---" ? "" : coordLon;
		
		coordLat = coordLat != "" ? coordLat.toFloat() : "";
		coordLon = coordLon != "" ? coordLon.toFloat() : "";
		
		var a  = "&d[a]="+$('pointAdress').value;
		var n  = "&d[n]="+$('pointName').value;
		var la = (coordLat != "" && isNaN(coordLat) == false) ? "&d[la]="+coordLat : "";
		var lo = (coordLon != "" && isNaN(coordLon) == false) ? "&d[lo]="+coordLon : "";
		var c1 = $('GSmallMapControl').checked ? "&d[c1]=1" : "";
		var c2 = $('GLargeMapControl').checked ? "&d[c2]=1" : "";
		var c3 = $('GMapTypeControl').checked ? "&d[c3]=1" : "";
		var c4 = $('GOverviewMapControl').checked ? "&d[c4]=1" : "";
		var c5 = $('GScaleControl').checked ? "&d[c5]=1" : "";
		var t  = "&d[t]="+$('pointMaptype').selectedIndex;
		var z  = "&d[z]="+pmaps.getComboValueNum('pointZoom');
		var w  = "&d[w]="+$('pointWidth').value.replace(/ px/,"");
		var h  = "&d[h]="+$('pointHeight').value.replace(/ px/,"");
	
		if (a != "" && (coordLat == "" || coordLon == "")){
			var rUrl = "requestGoogleMap.php?method=req" + a + n + la + lo + c1 + c2 + c3 + c4 + c5 + t + z + w + h;
			new Ajax(rUrl, {
				onComplete: function(response){
					var params = eval("(" + response + ")");
					var lat = params.items.lat;
					var lon = params.items.lon;
					var html = params.items.html;
					var code = params.items.code;
					
					if (lon != 0 && lat != 0){
					
						$('iCode').empty().value = 	html;
					
						$('pointCoordLon').value = lon; 
						$('pointCoordLat').value = lat; 
						point = new GLatLng(lon, lat);
						mapp.setZoom(pmaps.getComboValueNum('pointZoom'));
						mapp.panTo(point);
						pmaps.setMapType($('pointMaptype').selectedIndex);
						pmaps.addControls();
						//pmaps.addIcon();
						pmaps.addMarker();
						pmaps.moveToMap();
					}
					else {
						$('iCode').empty();
						alert("Es konnte kein Punkt ermittelt werden!\nBitte verfeinerern Sie ggf. Ihre Eingaben!");
					}
				}
			}).request();
		}
		else if(coordLat != "" &&  coordLon != "" && isNaN(coordLat) == false && isNaN(coordLon) == false){
		
			var rUrl = "requestGoogleMap.php?method=cod" + a + n + la + lo + c1 + c2 + c3 + c4 + c5 + t + z + w + h;
			new Ajax(rUrl, {
				onComplete: function(response){
					var params = eval("(" + response + ")");
					var lat = params.items.lat;
					var lon = params.items.lon;
					var html = params.items.html;
					var code = params.items.code;
					
					$('iCode').empty().value = 	html;
					point = new GLatLng(coordLon, coordLat);
					mapp.setZoom(pmaps.getComboValueNum('pointZoom'));
					mapp.panTo(point);
					pmaps.setMapType($('pointMaptype').selectedIndex);
					pmaps.addControls();
					//pmaps.addIcon();
					pmaps.addMarker();
					pmaps.moveToMap();
				}
			}).request();
		}
		else {
			alert("Bitte geben Sie eine Adresse ein!");
			$('pointAdress').focus();
			pmaps.moveToTop();
		}
	}
}
window.addEvent('domready', pmaps.start);
