 //<![CDATA[
	var map; 
	
	var paintArray = new Array();
	var noOfPending = 15;
	
	var remainArray = new Array();
	var pauseOverlay;
	var finishedOverlay;
	
	var stationCounter;
	var noOfStats;
	
	var statProcTimeout = null;
	var timeoutMillis = 9;
	
	var semaphore = 0;
	
	var iconTempUrl = ""; // kein sprintf :(
	var iconTempSize = new GSize(22, 34);
	var iconMosUrl = "http://labs.google.com/ridefinder/images/mm_20_gray.png";
	//var iconMosUrl = "http://www.weather.us/test/icon/temp12.png";
	var iconMosSize = new GSize(12, 20);
	var iconPlainUrl = "http://labs.google.com/ridefinder/images/mm_20_red.png";
	var iconPlainSize = new GSize(12, 20);
	var iconShadowUrl = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	var iconShadowSize = new GSize(22, 20);
  
  
  	var radarBaseTime=null;
  	var step = 5;
  	var map3 = null;
  	
  	var waitOverlay = null;
  	var geoOverlays = new Array();
  	var geoOverlaysSteps = new Array();
  	var geoO = null;
  	
  	var t = null;
  	var play = null;
    /**
     * Zeichnet die Karte
     */	
    
    function load() {
    
      if (GBrowserIsCompatible()) {
      
		var options = {
		
			suppressInitialResultSelection : true,
			suppressZoomToBounds : true
		
		};
      
      	if(document.getElementById("map")!=null){
	
	       pauseOverlay = new GScreenOverlay(
	       		"../img/pause.png",
	       		new GScreenPoint(285,462),
	       		new GScreenPoint(40,40),
	       		new GScreenSize(20,20));
	       		
	       	finishedOverlay  = new GScreenOverlay(
	       		"../img/ready.png",
	       		new GScreenPoint(285,462),
	       		new GScreenPoint(40,40),
	       		new GScreenSize(20,20));
	       
	       
	        map = new GMap2(document.getElementById("map"),{googleBarOptions: options});
	       
	        map.setCenter(new GLatLng(45, -116), 3);
	       	
	       	map.addMapType(G_PHYSICAL_MAP);
		 	map.setMapType(G_PHYSICAL_MAP);
		 	
	        map.addControl(new GLargeMapControl());
	        map.addControl(new GMapTypeControl());
	        map.enableScrollWheelZoom();
			map.enableGoogleBar();	
			
			map.addOverlay(pauseOverlay);
			map.addOverlay(finishedOverlay);
			finishedOverlay.hide();
			
			window.setTimeout("loadStations()","2");
		} //map
		
		if(document.getElementById("map_ens")!=null){
			
			map2 = new GMap2(document.getElementById("map_ens"),{googleBarOptions: options});
			  
			map2.setCenter(new GLatLng(45, -116), 3);
			map2.addMapType(G_PHYSICAL_MAP);
		 	map2.setMapType(G_PHYSICAL_MAP);
		 	
	        map2.addControl(new GLargeMapControl());
	        map2.addControl(new GMapTypeControl());
	        map2.enableScrollWheelZoom();
			map2.enableGoogleBar();
			geoO = new GGeoXml("http://www.weather.us/stations_b.kml");
			map2.addOverlay(geoO);
			
			
		}
		
		if(document.getElementById("map_radar")!=null){
		
			var request = GXmlHttp.create();
			request.open("GET", "radar_kml.php?timeinfo", true);
			request.onreadystatechange = function() {
			  if (request.readyState == 4) {
			    //alert(request.responseText);
			    radarBaseTime= eval('('+request.responseText+')');
			    displayBaseTime();
			  }
			}
			request.send(null);
		
			map3 = new GMap2(document.getElementById("map_radar"),{googleBarOptions: options});
			
			map3.setCenter(new GLatLng(39, -100), 4);
			map3.addMapType(G_PHYSICAL_MAP);
		 	map3.setMapType(G_PHYSICAL_MAP);
			
			map3.addControl(new GLargeMapControl());
	        map3.addControl(new GMapTypeControl());
	        map3.enableScrollWheelZoom();
			
	    	 waitOverlay = new GScreenOverlay(
			       		"http://www.weather.us/images/wait.gif",
			       		new GScreenPoint(100,350),
			       		new GScreenPoint(0,199),
			       		new GScreenSize(200,200));
	    	 map3.addOverlay(waitOverlay);
	    	 setTimeout("waitOverlay.hide();",3000);
	    	 changeStep(5);

			var stepDiv = document.getElementById("Step");
			stepDiv.innerHTML = step;
		}
		
      }//compatible
    } 
    
    function stepUp(){
    	if(step <=105){
    		changeStep(step+15);
    	}
    }
    
    function stepDown(){
    	if(step >=20){
    		changeStep(step-15);
    	}
    }
    /*
     * Aendere den Step
     */
     function changeStep(newStep){
     		
    	step = newStep;
		var stepDiv = document.getElementById("Step");
		stepDiv.innerHTML = step;
     		
 		var request = GXmlHttp.create();
		request.open("GET", "radar_kml.php?timeinfo", true);
		request.onreadystatechange = function() {
		  if (request.readyState == 4) {
		    //alert(request.responseText);
		    radarBaseTime= eval('('+request.responseText+')');
		    displayBaseTime();
		  }
		}
		request.send(null);

			
		if(step>=120){
    		document.getElementById("upControl").style.visibility="hidden";
    	}
    	if(step<=5){
    		document.getElementById("downControl").style.visibility="hidden";
    	}
		if(step >5 && step <120){
    		document.getElementById("upControl").style.visibility="visible";
    		document.getElementById("downControl").style.visibility="visible";
    	}
			
		pos = getStepPOS(step);
		if(pos==null){	
			waitOverlay.show();
			geoOverlays.push(new GGeoXml("http://www.weather.us/radar_kml.php?step="+step));
			geoOverlaysSteps.push(step);
			
			pos = getStepPOS(step);
			map3.addOverlay(geoOverlays[pos]);
			geoOverlays[pos].hide();
			
			if(play!=null){
				waitOverlay.show();
				var curStep = step;
				for(j=step; j<=120; j+=5){
					cpos = getStepPOS(j);
					if(cpos==null){
						geoOverlays.push(new GGeoXml("http://www.weather.us/radar_kml.php?step="+j));
						geoOverlaysSteps.push(j);
						cpos = getStepPOS(j);
						map3.addOverlay(geoOverlays[cpos]);
						geoOverlays[cpos].hide();
					}

				}
				
				waitOverlay.hide();
			}
 		}

 		for(i=0; i<geoOverlays.length; i++){
 				geoOverlays[i].hide();
 		}
 		
 		pos = getStepPOS(step);
 		geoOverlays[pos].show();
 		
 		t = setTimeout("toggleWaitScreen()", 10);

 		//waitOverlay.hide();
		//map3.clearOverlays();
		//map3.addOverlay(waitOverlay);
		//map3.addOverlay(geoO);	
     }
    
     function getStepPOS(stepNo){
			arrayPos = null;
     		for(k=0; k<geoOverlaysSteps.length;k++){
     			if(geoOverlaysSteps[k]==stepNo){
     				arrayPos = k;
     			}
     		}
     		return arrayPos;
     }
     
     function playAni(){
    	 var img = document.getElementById("playControl");
    	 
    	 if(play!=null){
    		 clearTimeout(play);
    		 play=null;
    		 
    		 var newIMG = new Image();
    		 newIMG.src = "http://www.weather.us/images/player_play.png";
    		 img.src = newIMG.src;
    	 }else{
    		 play = setTimeout("privatePlay()",2);
    		 
    		 var newIMG = new Image();
    		 newIMG.src = "http://www.weather.us/images/player_stop.png";
    		 img.src = newIMG.src;
    	 } 
     }
     
     
     function privatePlay(){
    	 
    		 if(step<=105){
    			 changeStep(step+15);
    		 }else{
    			 changeStep(5);
    		 }
    		 play = setTimeout("privatePlay()",1000);
     }
     
     
     function toggleWaitScreen(){
    	
    	 pos = getStepPOS(step);
    	 if(geoOverlays[pos].hasLoaded()){
    		setTimeout("waitOverlay.hide();",1500);
    		clearTimeout(t);
    		
    	 }else{
    		 waitOverlay.show();
    		 t = setTimeout("toggleWaitScreen()", 100);
    	 }
    	 
     }
    
    /*
     * Zeige Basetime auf der maps-Karte an. 
     */
     function displayBaseTime(){
     	if(radarBaseTime!=null && map3!=null){
     		var baseTimeDiv = document.getElementById("baseTime");
     		var date = new Date();
     		date.setUTCFullYear(radarBaseTime.year);
     		date.setUTCMonth(radarBaseTime.month-1);
     		date.setUTCDate(radarBaseTime.day);
     		date.setUTCHours(radarBaseTime.hour); 
     		date.setUTCMinutes(radarBaseTime.minute);
     		date.setUTCSeconds(00);
     		
     		baseTimeDiv.innerHTML = date.toLocaleString();
     		
     	}
     }
     
    
     
    /*
     * Verarbeitet die eingelesenen Stationen
     */
    function processStations(statJSON){
    	
    	remainArray = new Array();
    	paintArray = new Array();
    	
    	var stations = eval("("+statJSON+")");
    	var bounds = map.getBounds();
    	var statPos;
    	var j=0;
    	
		for (i in stations){
				
			remainArray.push(stations[i]);
			statPos = new GLatLng(stations[i]['lat'],stations[i]['lon']);
		
			if(bounds.contains(statPos) && (paintArray.length < noOfPending)){
				
				paintArray.push(stations[i]);
				remainArray.splice(j,1);		
			}
			j++;	
		}
		
		stationCounter = 0;
		noOfStats = remainArray.length;
		
		GEvent.addListener(map, 'zoomend', function() {
	  			fillPaintArray();
				
			});
			
			
			GEvent.addListener(map, 'moveend', function() {
	  			fillPaintArray();
			});
		
		processNextStation();
		
    }
	
	function fillPaintArray(){
		semaphore++;
 			
   		var bounds = map.getBounds();
   		var statPos;
		var j = 0;
		
		for (i in remainArray){
				
			statPos = new GLatLng(remainArray[i]['lat'],remainArray[i]['lon']);
		
			if(bounds.contains(statPos) && (paintArray.length < noOfPending)){
				paintArray.push(remainArray[i]);
				remainArray.splice(j,1);		
			}else if(paintArray.length >= noOfPending){
				break;
			}
			j++;	
		}
		
		semaphore--;
	}


    function processNextStation(){
		
		if(semaphore==0){
			
			semaphore++;
		
	    	var	station = paintArray.shift();
	    	var waitdiv = document.getElementById("controls");
	  
	
	   	   if(station!=null ){
	   	   
				//waitdiv.innerHTML=stationCounter+" / "+noOfStats;
				pauseOverlay.hide();
				stationCounter++;
	    	   
	    	   //Paint marker
				text = station['webname']+"<br><a href=\""+station['mosUrl']+"\">10-Day Forecast</a>"; 
				marker = createMarker(station['lon'], station['lat'],iconMosUrl,iconMosSize,text);
				map.addOverlay(marker);
	   		}
	    	
	  		if(stationCounter == noOfStats){
	  			//waitdiv.innerHTML="All "+noOfStats+" stations loaded";
	  			pauseOverlay.hide();
	  			finishedOverlay.show();
	  			statProcTimeout = null;
	  		}else{
	  			statProcTimeout = window.setTimeout("processNextStation()",timeoutMillis);
	  		}
	    	
	    	if(station == null && stationCounter < noOfStats && paintArray.length == 0){
	    		//waitdiv.innerHTML=stationCounter+" / "+noOfStats+" - waiting";
	    		pauseOverlay.show();
	    		fillPaintArray();
	    	}
	    	
	    	semaphore--;
		}
    }

    /*
     * Erzeugt einen Marker
     */
    
	function createMarker(lon, lat, iconUrl, iconSize, text) {

 		var icon = new GIcon();
 		icon.image = iconUrl;
 		icon.iconSize = iconSize;
 		icon.shadow = iconShadowUrl;
 		icon.shadowSize = iconShadowSize;
 		icon.iconAnchor = new GPoint(6, 20);
 		icon.infoWindowAnchor = new GPoint(5, 1);

 		var point = new GLatLng(lat, lon);
		var marker = new GMarker(point, icon);

 		GEvent.addListener(marker, 'click', function() { //mouseover
 		marker.openInfoWindowHtml(text);
 		});
 		return marker;

	}
    
    
    /*
     * Lädt das JSON File mit allen Stationen
     */
      function loadStations(){
		
		var xmlHttp = null;
		
		if (typeof XMLHttpRequest != 'undefined') {
		    xmlHttp = new XMLHttpRequest();
		}
		
		if (!xmlHttp) {
		    try {
		        xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
		    } catch(e) {
		        try {
		            xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
		        } catch(e) {
		            xmlHttp  = null;
		        }
		    }
		}
		if (xmlHttp) {
		    xmlHttp.open('GET', 'http://www.weather.us/test/stations.json', true);
		    xmlHttp.onreadystatechange = function () {
		        
		        if (xmlHttp.readyState == 4) {
		           processStations(xmlHttp.responseText);
		        }
		    };
		   xmlHttp.send(null);
		}
  	} //end loadStations
    

	
	function NeuFenster(x) {
		if (x=="nothing") {}
 		else {
 			MeinFenster=window.open("../"+x,"forecast","width=1030,height=790,scrollbars=no");
			MeinFenster.focus();
		}
	}
 //]]>
