// Globale Variable:
var i_flv,i_rot,i_pan,i_img;
// die Karte
var mmap;
// mit ihren Grenzen
var globalBounds;
// die Marker
var markers = new Array;
var baseIcon;
// Semaphoren zur Reboundingsteuerung:
var tracksdone = true;
var pointsdone = true;
var logo;
var slider;
var directlink = false;
var gruppe;
Event.observe(window, 'load', Init);

// wird vom Bodyladen aufgerufen:
function Init() {
    var poi = getGET('poi');
  	gruppe = getGET('gruppe');
  	if (gruppe) {
  		$$('.groupselector').each(function(e) {
  			e.checked = false;
  			if (e.value == gruppe || e.nextSibling == gruppe) e.checked = true;
  		});
  	}
  	if (poi) {
  		directlink=true;
  		new Ajax.Request('index.php?type=500&id=38&poi=' + poi + '&_=' + Math.random(), {
		method: 'get',
		// jetzt kommen alle Daten für nachfolgende Ajax-Anforderungen zurück:
		onSuccess: function(transport) {
			var res = eval('(' +transport.responseText+')');
			// Gruppen ankreuzen:
			$$('.groupselector').each(function(el) {
				el.checked = false;
				if (el.value==res.gids) el.checked=true;	
			}); 
			// Kalender holen und setzen:
			var tag = res.monat + '-' + res.tag;
			setCal(res.monat);
			setTimeout(function(){
			$$('.calcell').each(function(el) {
				if (el.getAttribute('title') == tag) {
					el.className='red run callcell';
				}	
			});},500);
			poisdone = true;
			tracksdone=true;
			getOverlayByDay(tag,res.uid);
			
	}});

  			
  	}
      new Draggable('navi');
      new Effect.MoveBy($('navi'),0,160,{delay:1,duration:3,transition:Effect.Transitions.sinoidal}); 
	   var meinAkkordion = new accordion('acontainer', {
			classNames : {
        	toggle : 'atoggle',
        	toggleActive : 'aactive',
        	content : 'acontent'
    	},
    	animating:false,
    	duration:11,
    	defaultSize : {
    		height : '200px',
    		width : '100%'
    	}
    
	});

	meinAkkordion.activate($$('#acontainer .atoggle')[1]);

	$$('.acontent').each(function(e){Element.setOpacity(e,'0.8');});
    // Höhe einstellen:
    var h= window.innerHeight || self.innerHeight ||  document.body.clientHeight;
    var hstr = h + 'px';
	$('map').setStyle ({height: hstr});
	// Abfrage, ob Google verfügbar:
   	if (typeof(GMap2) != 'function') {
   	   		alert('Leider ist kein Zugriff auf den Google-Server möglich. Bitte wenden Sie sich an der Proxiekonfigurator.');   	   
 	   		return null;
  	   }
    mmap = new GMap2($("map"));
    logo = new GScreenOverlay('/typo3conf/ext/ras_geoblog/templates/logogsw.png', 
    		new GScreenPoint(.796, .91, 'fraction', 'fraction'), 
			new GScreenPoint(0, 0), 
			new GScreenSize(.2, .08, 'fraction', 'fraction'));
	mmap.addOverlay(logo);
    mmap.setCenter(new GLatLng(53.4,11),7);
    mmap.setMapType(G_NORMAL_MAP);
		
    globalBounds = new GLatLngBounds();      
	// Icons vorbereiten:
	baseIcon = new GIcon();
	baseIcon.iconSize=new GSize(24,24);
	baseIcon.shadowSize=new GSize(24,18);
	baseIcon.iconAnchor=new GPoint(1,2);
	baseIcon.infoWindowAnchor=new GPoint(0,0);
	i_flv  = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal2/icon30.png", null, "http://maps.google.com/mapfiles/kml/pal2/icon27s.png");
	i_img  = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal4/icon38.png", null, "http://maps.google.com/mapfiles/kml/pal2/icon56s.png");
	i_rot  = new GIcon(baseIcon, "/typo3conf/ext/ras_geoblog//res/rot.png", null, "http://maps.google.com/mapfiles/kml/pal2/icon56s.png");
	i_pan  = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal3/icon29.png", null, "http://maps.google.com/mapfiles/kml/pal5/icon14s.png");
	baseIcon.iconSize=new GSize(16,16);
	i_au   =  new GIcon(baseIcon, "/typo3conf/ext/ras_geoblog/res/audio.png", null, "http://maps.google.com/mapfiles/kml/pal3/icon29s.png");
	baseIcon.iconSize=new GSize(18,18);
	i_yt   = new GIcon(baseIcon, "/typo3conf/ext/ras_geoblog/res/yt.gif", null, "http://maps.google.com/mapfiles/kml/pal3/icon29s.png");

	// Kartenumschaltung:	
	Element.observe($('mapselect'),'change',function(e) {
		var type = $F('mapselect');
		switch (type) {
			case '3':
				mmap.setMapType(G_PHYSICAL_MAP);
			break;
			case '2':
				mmap.setMapType(G_HYBRID_MAP);
			break;
			case '1':
				mmap.setMapType(G_SATELLITE_MAP);
			break;
			case '0':
				mmap.setMapType(G_NORMAL_MAP);
			break;
		}	
	});
  	if (!directlink) setTimeout(function() {setCal();},100);
  	
  	// 

	// Gruppenumschaltung:
	$$('.groupselector').each(function(e) {
		e.onchange = function() {
			var actives = $$('.red');
			if (actives.length > 0 ) { // wenn Kalender markiert:
				var tag = actives[0].getAttribute('title');
				getOverlayByDay(tag);
			} else { // ansonsten => date_min,date_max auswerten:
				getOverlayBySlider();
			}
			}}
    );

 	
}


function getGET(key) {
	gy = window.location.search.substring(1).split('&');
	for (i=0;i<gy.length;i++) {
		ft = gy[i].split("=");
		if (ft[0] == key) {
			return ft[1];
		}
	}
}


// setzt den Kalender und den Slider:
function setCal(m,d) {
 	var groups = Form.serialize($('groupsform'));
    if (m) {
    	mmap.clearOverlays();
		Element.show('warte');
	
	}
	new Ajax.Updater('cal','index.php?type=500&id=33&thisday='+ d+'&m='+m+'&'+groups+ '&_='+ Math.random(),{
		method:'get',
		evalScripts:'true',
		onSuccess:function(js) {
			$$('.sliderdate').each(function(e) {Element.removeClassName(e,'jpoint');});
			if (m) Element.hide('warte');
	}});
}




function log(o) {
//	Try.these(console.log(o));
}



function zoom(x) {
	mmap.setZoom(mmap.getZoom()+x);

}



function setViewport(caller) {
	if (pointsdone && tracksdone) {
		var zoom = mmap.getBoundsZoomLevel(globalBounds); 
	    $$('.sliderdate').each(function(e) {Element.removeClassName(e,'jpoint');});
	    slider.setEnabled();
		if (zoom>14) zoom=14;
		Element.hide('warte');
		mmap.setZoom(zoom);
		mmap.setCenter(globalBounds.getCenter());
	//	mmap.addOverlay(logo);
    
	}
}

function getOverlay(el,day) {
	if (!tracksdone || !pointsdone) {
	//	alert('Das geht gerade nicht, weil sehr beschäftigt …');
		return null; 
	}
	mmap.clearOverlays();
	Element.show('warte');
	globalBounds =  new GLatLngBounds();
	$$('.run').each(function(el){Element.removeClassName(el.parentNode,'red')});
	var c = el.parentNode;
	var groups = Form.serialize($('groupsform'));
	// PID fr Plugin3, sollte dynamaishc  hier rein. kommt noch.
	tracksdone = false;
	pointsdone = false; 
	new Ajax.Request('index.php?getjson=tracks&type=500&id=31&d=' +day +'&'+groups+ '&_=' + Math.random(), {
		method: 'get',
		onSuccess: function(transport) {
			tracksdone = true;
			var res = eval('(' +transport.responseText+')');
			for (var i=0;i<res.length;i++) {
				var poly = res[i];
				var epoints  = poly['encodedPoints'];
				var elevels  = poly['encodedLevels'];
				var color    = poly['trackcolor'];
				var polyline = new GPolyline.fromEncoded({points:epoints,levels:elevels,color:color,opacity:'0.9',weight:'3',numLevels:'18',zoomFactor:'2'});
				
				globalBounds.extend(polyline.getBounds().getSouthWest());
				globalBounds.extend(polyline.getBounds().getNorthEast());
				mmap.addOverlay(polyline);	
			}
			setViewport('tracks');
			}
		}
	);
	//setTimeout(function(){if (pointsdone==false) pointsdone=true;setViewport('timer');},15000);
	new Ajax.Request('index.php?getjson=pois&type=500&id=31&d=' +day +'&'+groups+ '&_=' + Math.random(), {
		method: 'get',
		onSuccess: function(transport) {
			var res = eval('(' +transport.responseText+')');
			pointsdone = true;
			setViewport('points');
	}});
	Element.addClassName(c,'red');
}


function getOverlayBySlider() {
	if (!tracksdone || !pointsdone) {
	//	alert('Das geht gerade nicht, weil sehr beschäftigt …');
    	return null; 
	}
	var min = $F('date_min');
	var max = $F('date_max');
	mmap.clearOverlays();

	Element.show('warte');
	globalBounds =  new GLatLngBounds();
	$$('.run').each(function(el){Element.removeClassName(el.parentNode,'red')});
	var groups = Form.serialize($('groupsform'));
	
	// PID für Plugin3, sollte dynamaishc  hier rein. kommt noch.
	tracksdone = false;
	pointsdone = false; 
	slider.setDisabled();
	    $$('.sliderdate').each(function(e) {Element.addClassName(e,'jpoint');});

	new Ajax.Request('index.php?getjson=tracks&type=500&id=31&min=' +min +'&max='+ max + '&' +groups+ '&_=' + Math.random(), {
		method: 'get',
		onSuccess: function(transport) {
			tracksdone = true;
			var res = eval('(' +transport.responseText+')');
			for (var i=0;i<res.length;i++) {
				var poly = res[i];
				var epoints  = poly['encodedPoints'];
				var elevels  = poly['encodedLevels'];
				var color    = poly['trackcolor'];
				
				var polyline = new GPolyline.fromEncoded({points:epoints,levels:elevels,color:color,opacity:'0.9',weight:'3',numLevels:'18',zoomFactor:'2'});
				globalBounds.extend(polyline.getBounds().getSouthWest());
				globalBounds.extend(polyline.getBounds().getNorthEast());
				mmap.addOverlay(polyline);	
			}
			setViewport('tracks');
			}
		}
	);
	new Ajax.Request('index.php?getjson=pois&type=500&id=31&min=' +min +'&max=' + max + '&'+groups+ '&_=' + Math.random(), {
		method: 'get',
		onSuccess: function(transport) {
			var res = eval('(' +transport.responseText+')');
			pointsdone = true;
			setViewport('points');
		}
	});
}


function getOverlayByDay(day,poi) {
	if (!tracksdone || !pointsdone) {
    	return null; 
	}
	
	mmap.clearOverlays();
	Element.show('warte');
	globalBounds =  new GLatLngBounds();
	var groups = Form.serialize($('groupsform'));
	// PID fr Plugin3, sollte dynamaishc  hier rein. kommt noch.
	tracksdone = false;
	pointsdone = false; 
    // Tracks holen:
	new Ajax.Request('index.php?getjson=tracks&type=500&poi=' + poi + '&id=31&d=' + day + '&'+groups+ '&_=' + Math.random(), {
		method: 'get',
		onSuccess: function(transport) {
			tracksdone = true;
			var res = eval('(' +transport.responseText+')');
			for (var i=0;i<res.length;i++) {
				var poly = res[i];
				var epoints  = poly['encodedPoints'];
				var elevels  = poly['encodedLevels'];
				var color    = poly['trackcolor'];
				
				var polyline = new GPolyline.fromEncoded({points:epoints,levels:elevels,color:color,opacity:'0.9',weight:'3',numLevels:'18',zoomFactor:'2'});
				globalBounds.extend(polyline.getBounds().getSouthWest());
				globalBounds.extend(polyline.getBounds().getNorthEast());
				mmap.addOverlay(polyline);	
			}
		}
	});
	// Punkte des Tages holen:
	new Ajax.Request('index.php?getjson=pois&type=500&poi=' + poi + '&id=31&d=' + day + '&'+groups+ '&_=' + Math.random(), {
		method: 'get',
		onSuccess: function(transport) {
			var res = eval('(' +transport.responseText+')');
			pointsdone = true;
			setViewport('points');
		}
	});
}


function insertContent(uid) {
 	new Ajax.Request('./index.php?id=32&type=500&uid=' + uid +  '&_='+ Math.random(),{method:'get'}); 	
}


var minmaxSlider = Class.create();
minmaxSlider.prototype = {
	// constructor
	initialize: function(name,min,max,val_min, val, val_max, step) {
		this.allowEvents = false;
		this.name = name;
		this.min = min;
		this.max = max;
		this.val_min = val_min;
		this.val_max = val_max;
		this.val = val;
		this.step = step;
		this.caption = null; // Caption for dual slider
		this.output = null; // Div to output current slider value
		this.track = null; // backlground of slider
		this.handle_min = null; // Handle for slider Min
		this.handle_max = null; // Handle for slider Max
		this.slider = null; // Instance of Control.Slider
		this.out = $(this.name + '_out');
		this.createSlider();
	},
	
	
	// Creates slider class;
	createSlider: function() {
	    // required, so only option elements remain!
		if (this.slider) {
			this.slider.dispose();
		}
	    var handles = [$(this.name + '_minhandle'),$(this.name + '_maxhandle')];
	    var values = [this.val_min, this.val, this.val_max];
		this.slider = new Control.Slider(handles, this.name + '_slider', {
	    	range:$R(this.min,this.max, false),
	    	step:this.step,
	    	restricted:true,
	    	sliderValue: values,
	    	onChange:this.onSliderChanged.bind(this),
	    	onSlide:this.onSliderSlides.bind(this)
	    });
	},
	setDisabled : function() {
		this.slider.setDisabled();
	},
	setEnabled : function() {
		this.slider.setEnabled();
	},

	onSliderChanged: function() {
		getOverlayBySlider();
	},
	onSliderSlides: function(value) {
		$('date_min').value = getgermandate(value[0]);
		$('date_max').value = getgermandate(value[1]);
		
	}
};


function getgermandate(d) {
	var date = new Date();
	date.setTime(d*1000);
	var tag = date.getDate();
	var mon = date.getMonth()+1;
	if (tag<10) tag = '0' + tag;
	if (mon<10) mon = '0' + mon;
	
	return  tag + '.' + mon + '.' + date.getFullYear();


}
