var geo;
var dirn;
var bounds;
var dottedpoly;
var markers = [
		{id:"s1",latlng:[52.503649,13.350441],name:"Berlin – Tiergarten",html:'Schillstraße 10 / Nähe Lützowplatz<br>10785 Berlin<br>Tel: 030 / 25 75 770<br>Fax: 030 / 25 75 77 20'},
		{id:"s2",latlng:[52.468448,13.459433],name:"Berlin – Neukölln",html:'Neuköllnische Allee 25<br>12057 Berlin<br>Tel: 030 / 68 29 68 - 0<br>Fax: 030 / 68 29 68 - 29'},
		{id:"s16",latlng:[52.561309,13.427982],name:"Berlin – Pankow",html:'Prenzlauer Promenade 43<br>13089 Berlin<br>Tel: 030/8092795-0<br>Fax: 030/8092795-20'},
		{id:"s6",latlng:[52.278877,10.519422],name:"Braunschweig",html:'Hamburger Str. 268<br>38114 Braunschweig<br>Tel: 0531 / 28 85 37 40<br>Fax: 0531 / 28 85 37 49'},
		{id:"s10",latlng:[ 53.080271,8.862543],name:"Bremen – Vahr",html:'Barbarossastraße 1 / Ecke Kurfürstenallee<br>28329 Bremen<br>Tel: 0421 / 46 86 7 - 3<br>Fax: 0421 / 46 86 7 - 45'},
		{id:"s8",latlng:[51.464406,7.009584],name:"Essen",html:'Gladbecker Straße 18<br>45141 Essen<br>Tel: 0201 - 74 72 82 0<br>Fax: 0201 - 74 72 82 - 20'},
		{id:"s12",latlng:[53.601094,9.975119],name:"Hamburg – Eppendorf",html:'EKZ Nedderfeld 70<br>22529 Hamburg<br>Tel: 040 / 46 88 30 - 0<br>Fax: 040 / 46 88 30 - 26'},
		{id:"s13",latlng:[53.468170,9.967415],name:"Hamburg – Harburg",html:'Buxtehuder Straße 41<br>21073 Hamburg<br>Tel: 040 / 85 40 16 - 0<br>Fax: 040 / 85 40 16 - 20'},
		{id:"s14",latlng:[53.547504,10.106913],name:"Hamburg – Billstedt",html:'Schiffbeker Weg 85<br>22119 Hamburg<br>Tel: 040 / 65 38 95 89<br>Fax: 040 / 71 40 42 62'},
		{id:"s15",latlng:[53.571125,10.124826],name:"Hamburg – Jenfeld",html:'Jenfelder Allee 2<br>22043 Hamburg<br>Tel: 040 / 68 86 039 - 0<br>Fax: 040 / 68 86 039 - 20'},
		{id:"s3",latlng:[53.551353,10.053446],name:"Hamburg – City-Süd",html:'Eiffestraße 580<br>20537 Hamburg<br>Tel: 040 / 21 97 17 - 0<br>Fax: 040 / 21 97 17 - 17'},
		{id:"s4",latlng:[53.489562,10.186423],name:"Hamburg – Bergedorf",html:'Oberer Landweg 7<br>21033 Hamburg<br>Tel: 040 / 72 56 06 - 0<br>Fax: 040 / 72 56 06 - 10'},
		{id:"s11",latlng:[52.392085,9.799890],name:"Hannover  – Buchholz",html:'Karl-Wiechert-Allee 57<br>30625 Hannover<br>Tel: 0511 / 16 76 93 3<br>Fax: 0511 / 16 76 93 45'},
		{id:"s7",latlng:[50.945374, 6.907698],name:"Köln – Ehrenfeld",html:'Oskar-Jäger-Straße 155<br>50825 Köln<br>Tel: 0221 / 54 02 21 - 0<br>Fax: 0221 / 54 02 21 - 20'},
		{id:"s17",latlng:[50.904994,6.964171],name:"Köln – Bayenthal",html:'Bonner Straße 324<br>50968 Köln<br>Tel: 0221 / 93 75 8 - 0<br>Fax: 0221 / 93 75 8 - 20'},
		{id:"s18",latlng:[50.904994,6.964171],name:"Köln – Kalk",latlng:[50.943491,7.001420],html:'Kalk-Mülheimer Straße 177<br>51103 Köln<br>Tel: 0221 / 98 94 37 - 0<br>Fax: 0221 / 98 94 37 -20'},
		{id:"s9",latlng:[53.878569,10.669282],name:"Lübeck",html:'Bei der Lohmühle 21a<br>23554 Lübeck<br>Tel: 0451 / 40 62 42<br>Fax: 0451 / 40 50 963'}];
var reasons=[];
reasons[G_GEO_SUCCESS]            = "Success";
reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value.";
reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed.";
reasons[G_GEO_BAD_REQUEST]        = "A directions request could not be successfully parsed.";
reasons[G_GEO_MISSING_QUERY]      = "No query was specified in the input.";
reasons[G_GEO_UNKNOWN_DIRECTIONS] = "The GDirections object could not compute directions between the points.";

var gmarkers = [];
var star;
var car;
var reisezielmarker;
var map;

var rules = {
   '#calcer' : function(el) {
		el.onclick = function() {
			calcer();
		}
	},
   '#station' : function(el) {
   	  var ndx = 1;  // ersten Eintrag gibt es schon 	
   	  for (var i=0;i<markers.length;i++) {
			  var option = new Option(markers[i].name,markers[i].id);
    		  $('station')[ndx] = option;
    		  ndx++;
   	  }
   	  el.onchange = function() {
   	    var sid = $F('station');
   	    var html;
   	    $('go').disabled=null;
   	  			
			  
   	  	
   	  	for (var j=0;j<markers.length;j++) {
			if (markers[j].id == sid) {
				var point = new GLatLng(markers[j].latlng[0],markers[j].latlng[1]);
   	  			map.setCenter(point,11);
   	  			html = '<h1>' + markers[j].name + '</h1><div>' +markers[j].html +'</div><br>&nbsp;<br><img  width=200 src="http://www.starcar.de/img/g_logo.gif" />'; 
				//map.openInfoWindowHtml(point,html);

   	  		}
   	  		
   	    }
   	    $('go').disabled = ($F('to').length>2 && $F('station')) ? null : 'disabled';
   	    route();
   	    
   	    
   	 }
   },
	'#map' : function(e) {
	    star  = new GIcon(G_DEFAULT_ICON, "./img/star.png");
	    star.iconSize = new GSize(24,24);
   		star.iconAnchor = new GPoint(10,10);
   		car  = new GIcon(G_DEFAULT_ICON, "./img/caricon.png");
	    car.iconSize = new GSize(32,18);
		map = new GMap2($('map'));
   		map.setCenter(new GLatLng( 52.5573,10.04383),6);
    	map.addControl(new GSmallMapControl());
    	for (var i=0;i<markers.length;i++) {
    		var point = new GLatLng(markers[i].latlng[0],markers[i].latlng[1]);
			gmarkers[i] = new GMarker(point,{icon:star});
			map.addOverlay(gmarkers[i]);
			GEvent.addListener(gmarkers[i],'click', function(ll) {
				var html;
				for (var j=0;j<markers.length;j++) {
					// Liste anpassen:
					if (markers[j].latlng[0] == ll.y && markers[j].latlng[1] == ll.x ) {
						$('station').value = markers[j].id;
						html = '<h1>' + markers[j].name + '</h1><div>' +markers[j].html +'</div><img vspace=10 width=160 src="http://www.starcar.de/img/g_logo.gif" />'; 
					}
		
			    }
			    map.openInfoWindowHtml(ll,html);
			    // neu routen:
			    if ($F('to').length) {
					var station = ll.y + ',' + ll.x;
					Element.show('geduld');
					Effect.Fade('geduld',{duration:5,delay:0});
					dirn.loadFromWaypoints([station,$F('to')],{getPolyline:true,getSteps:true});
				}

			});
			
		}
		GEvent.addListener(map, "load", function() {Element.hide('geduld');});
  		Effect.Fade('geduld',{duration:5,delay:0});
	
   //////////////////////////////////////////
     	
	},
	'#start' : function(e) {
		el.onclick = function() {
			scwShow(e,e); 
		}
	},
	'#gruppe' : function(e) {
		 e.onchange = calcer;
		 for (var i=0; i < e.length; i++) {
		 		var url = './img/'+ e[i].value +'.png';
     			e[i].style.backgroundImage = 'url(\''+url+'\')';
     				
     	 }		

	},
	'#to' : function(e) {
		e.onkeyup = function() {
			$('go').disabled = ($F('to').length>2 && $F('station')) ? null : 'disabled';
		}
	},
	'#km' : function(e) {
	},
	'#tage' : function(e) {
		e.onchange = calcer;
	},
	'#w' : function(e) {
		e.onclick = calcer;
	},
	'#n' : function(e) {
		e.onclick = calcer;
	},
	'#go' : function(el) {
		el.onclick = function() {
			$('go').disabled = ($F('to').length>2 && $F('station')) ? null : 'disabled';
			if ($F('station')) route();
		}
	},
	'#start' : function(e) {
		e.style.width='80px';
		e.onclick = showAddress;
	}
};


function Init() {
	$('map').innerHTML = 'Danke. Großartige Map kommt gleich.';
	calcWindow();
	dirn = new GDirections(null,null);
	geo  = new GClientGeocoder(); 
    bounds= new GBounds();
    Behaviour.register(rules);
	Behaviour.apply(rules); 
			
    // Routenbestimmung war erfolgreich:
    GEvent.addListener(dirn,"error", function(e) {
     	var code = e.getStatus().code;
        var reason="Code "+code;
        if (reasons[code]) {
          reason = reasons[code]
        } 
        $('km').value='';
       // alert("So geht das nicht, "+reason);
    
    });
    GEvent.addListener(dirn,"load", function(e) {
     		var poly = dirn.getPolyline();  
     		var min = Math.round(dirn.getDuration().seconds/60);
     		var hh = Math.ceil(min/60)-1;
     		var mm = parseInt(min) - 60 * parseInt(hh);
     		//if (mm < 10) mm = '0' + mm; 
     			Element.hide('geduld');

     		$('zeit').innerHTML = 'geschätzte Zeit eine Fahrstrecke:<b> '+ hh + ':' + mm + ' Stunden</b>'; 
     		$('km').value = Math.round(2 * dirn.getDistance().meters /1000);
    		geo.getLocations(poly.getVertex(poly.getVertexCount()-1), showZiel);

    		if (reisezielmarker) map.removeOverlay(reisezielmarker);
            if (dottedpoly) map.removeOverlay(dottedpoly);
            dottedpoly = new GPolyline(poly.getPointArray(),'red', 4, 0.9);
     		map.addOverlay(dottedpoly);
         	bounds.extend(dottedpoly);
        	map.fit(poly.getBounds());
     		reisezielmarker = new GMarker(dirn.getPolyline().getVertex(poly.getVertexCount()-1),{icon:car,draggable:true});
  			map.addOverlay(reisezielmarker);
           	calcer();
           	GEvent.addListener(reisezielmarker, "dragstart", function() {
			
			
        	});   	
           	// Zielauto wurde bewegt
			GEvent.addListener(reisezielmarker, "dragend", function() {
				map.removeOverlay(dottedpoly);
				$('geduld').show();
		//		calcer();
				for (var j=0;j<markers.length;j++) {
					if (markers[j].id == $F('station')) {
						var station = new GLatLng(markers[j].latlng[0],markers[j].latlng[1]) ;
				   } 
				}	
				dirn.loadFromWaypoints([station,reisezielmarker.getPoint()],{getPolyline:true,getSteps:true});
		 });
           
    });
	calcWindow();
}

function showZiel(response) {
	//console.log(response);
	if (response.Status.code == G_GEO_SUCCESS) {
    	place = response.Placemark[0].address;
        $('to').value=place;
  	}  else $('km').value='';
		Element.hide('geduld');
}

function route() {
	$('geduld').show();
    var station;
	for (var j=0;j<markers.length;j++) {
		if (markers[j].id == $F('station')) {
			station = markers[j].latlng[0] + ',' + markers[j].latlng[1] ;
		}
	}
	Effect.Fade('geduld',{duration:5,delay:0});
	dirn.loadFromWaypoints([station,$F('to')],{getPolyline:true,getSteps:false});
}

GMap2.prototype.fit = function(bounds){
    this.setZoom(map.getBoundsZoomLevel(bounds));
    this.panTo(bounds.getCenter()); 
}

GPolyline.prototype.getPointArray = function () {
  var points = new Array;
  var len = this.getVertexCount()||0;
  var lastpoint;
  for (var i=0; i<len; i++){
  		var point = this.getVertex(i);
 	    points.push(point);
  }
  return points;
}

function calcer() {
	var params = 'd=' + $F('tage') + '&g=' + $F('gruppe') + '&km=' + $F('km') + '&w=' + $F('w')+'&n=' + $F('n');
	$('out').innerHTML = '<img src="img/geduld.gif" >';
	new Ajax.Updater($('out'),'./calcer.php',{parameters:params});				
}

function calcWindow() {
	var objBody = document.getElementsByTagName("body").item(0);
  	var h= window.innerHeight || self.innerHeight || document.body.clientHeight;
    var w= window.innerWidth || self.innerWidth || document.body.clientWidth;
    w = w - 250;
	$('map').style.width = w + 'px';
 	$('map').style.height = h + 'px';
    $('calcwrap').style.left = w + 'px';
    var g =  (w-100)/2; 
    $('geduld').style.left = g + 'px';
    
    $('map').style.height = h + 'px';
 	h = h-20;
 	$('calcwrap').style.height = h + 'px';
 	
 	
    
}


Event.observe(window, 'load', Init);
window.onresize = calcWindow;

Event.observe(window, 'unload', GUnload);



