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 gruppenlist;
var stationenlist;
var abgabeselect;
var rules = {
   '#calcer' : function(el) {
		el.onclick = function() {
			calcer();
		}
	},
   '#abgabeselect' : function(el) {
		el.onchange = function() {
			calcer();
		}
	},

   '#station' : function(el) {
   	  var ndx = 1;  // ersten Eintrag gibt es schon 	
   	  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) {
		if (map) return;
		var baseIcon = new GIcon();
          baseIcon.iconSize=new GSize(32,32);
          baseIcon.shadowSize=new GSize(56,32);
          baseIcon.iconAnchor=new GPoint(0,0);
    
	    star  = new GIcon(baseIcon, "./img/star.png",null,"./img/schatten.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);

	var copyright = new GCopyright(1,
	new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0,
	'(<a rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>)');
	var copyrightCollection =
	new GCopyrightCollection('Kartendaten &copy; 2009 <a href="http://www.openstreetmap.org/">OpenStreetMap</a> Contributors');
	copyrightCollection.addCopyright(copyright);
	var tilelayers_mapnik = new Array();
	tilelayers_mapnik[0] = new GTileLayer(copyrightCollection, 0, 18);
	tilelayers_mapnik[0].getTileUrl = GetTileUrl_Mapnik;
	tilelayers_mapnik[0].isPng = function () { return true; };
	tilelayers_mapnik[0].getOpacity = function () { return 1.0; };
	var mapnik_map = new GMapType(tilelayers_mapnik,
	new GMercatorProjection(19), "Mapnik",{ 
		urlArg: 'mapnik', 
		linkColor: '#000000'
	});
	map.addMapType(mapnik_map);
	var tilelayers_tah = new Array();
	tilelayers_tah[0] = new GTileLayer(copyrightCollection, 0, 17);
	tilelayers_tah[0].getTileUrl = GetTileUrl_TaH;
	tilelayers_tah[0].isPng = function () { return true; };
	tilelayers_tah[0].getOpacity = function () { return 1.0; };
	var tah_map = new GMapType(tilelayers_tah,
	new GMercatorProjection(19), "T@H",	{ 
		urlArg: 'tah', 
		linkColor: '#000000' });
	map.addMapType(tah_map);
	map.setMapType(mapnik_map);
   		
    	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) {
		e.style.width='80px';
		el.onclick = function() {
			showAddress();
		}
	},
	'#to' : function(e) {
		e.onkeyup = function() {
			var stationen = stationenlist.getSelectedValue();
		    $('go').disabled = ($F('to').length>2 && stationen) ? null : 'disabled';
		},
		e.onfocus = function() {
		//	e.value='';
		}
	},
	'#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() {
		var stationen = stationenlist.getSelectedValue();
			$('go').disabled = ($F('to').length>1 && stationen) ? null : 'disabled';
			if (stationen) route();
		}
	},
	'#datum' : function(e) {
		e.onchange = function() {
			alert($F('datum'));
		}
	
	}
	
};

function callbackonchange() {
	new Ajax.Updater($('abgabe'),'./calcdays.php',{parameters:'datum='+$F('datum'),onComplete:function() {
		abgabeselect  = dhtmlXComboFromSelect("abgabeselect");
		abgabeselect.attachEvent("onChange",calcer);  
		abgabeselect.readonly(true);  
		
		Behaviour.apply(rules); 
	}});				
}


function initCombos() {
    window.dhx_globalImgPath = "./lib/dhtmlx/imgs/";
    
    e=$('gruppe');
 	for (var i=0; i < e.length; i++) {
		 		var url = './img/'+ e[i].value +'.png';
     			e[i].style.backgroundImage = 'url(\''+url+'\')';
     			e[i].setAttribute('img_src',url);
    }	
	gruppenlist = dhtmlXComboFromSelect("gruppe");
	gruppenlist.attachEvent("onChange",calcer); 
    gruppenlist.readonly(true);
 	//gruppenlist.enableOptionAutoHeight(1);
	var sid = $F('station');
	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);
			  option.setAttribute('img_src','./img/star.png');
			  $('station')[ndx] = option;
    		  ndx++;
   	}
   	stationenlist = dhtmlXComboFromSelect("station");
	stationenlist.readonly(true);
	stationenlist.attachEvent("onChange",function() {
	    if ( stationenlist.getSelectedValue().length>0) {
	    	$('to').disabled = null;
			if ($F('to').length) route();
		} else {
			$('to').disabled = 'disabled';
		}
	 }); 
	 stationenlist.setDefaultImage("./img/star.png");

}	

function Init() {
	initCombos();
	new Ajax.Autocompleter('to','cliste','./getcities.php',{afterUpdateElement:route});

	$('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();
				var stationen = stationenlist.getSelectedValue();
				for (var j=0;j<markers.length;j++) {
					if (markers[j].id == stationen) {
						var station = new GLatLng(markers[j].latlng[0],markers[j].latlng[1]) ;
				   } 
				}	
				dirn.loadFromWaypoints([station,reisezielmarker.getPoint()],{locale:'de_DE',getPolyline:true,getSteps:true});
		 });
           
    });
	setTimeout(calcWindow,1000);
	
}

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;
	var stationen = stationenlist.getSelectedValue();
	for (var j=0;j<markers.length;j++) {
		if (markers[j].id == stationen) {
			station = markers[j].latlng[0] + ',' + markers[j].latlng[1] ;
		}
	}
	Effect.Fade('geduld',{duration:5,delay:0});
	
	dirn.loadFromWaypoints([station,$F('to')],{locale:"de_DE",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 gruppe = gruppenlist.getSelectedValue();
	if (!abgabeselect) return;

	var params = 'd=' + abgabeselect.getSelectedValue()	 
			+ '&g='   + 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';
 	
//#4229041 Viviayn	
    
}
function GetTileUrl_Mapnik(a, z) {
    return "http://tile.openstreetmap.org/" +
                z + "/" + a.x + "/" + a.y + ".png";
}

function GetTileUrl_TaH(a, z) {
    return "http://tah.openstreetmap.org/Tiles/tile/" +
                z + "/" + a.x + "/" + a.y + ".png";
}
Event.observe(window, 'load', Init);
window.onresize = calcWindow;

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



