
/**
 * Verkeersspecifieke functies
 * @author 	Kevin Franke
 * @version 	1.0 
 */

var tooltip1;
var plopup;
var plopupOverlay;
var mouseOutTimer;
var mouseInTimer;
var lastEventX;
var lastEventY;
var onOffSwitchRegioMelding; 

var traphicVerkeer = {
	init: function(){
		plopup = new YAHOO.util.Motion("popupWin");
		plopupOverlay = new YAHOO.widget.Overlay("popupWin", {iframe:true}); 
		plopupOverlay.hide();
				
		// scroll de bovenbalk binnen beeld
		regioMeldingWindow = new YAHOO.widget.Overlay("bandBovenaanScherm", {iframe:true}); 
		YAHOO.util.Event.addListener('bandBovenaanScherm', "mousedown", traphicVerkeer.showRegioMelding);
		//traphicVerkeer.getRegioMelding();
			
		var files=document.getElementsByTagName('area');		
		// hang mouseovers en mouseouts aan de files	
		YAHOO.util.Event.addListener(files, "mouseover", traphicVerkeer.showFileInfo,new Array('file','1'));
		YAHOO.util.Event.addListener(files, "mouseout", traphicVerkeer.hideFileInfo);
		
		var cameras=YAHOO.util.Dom.getElementsByClassName('camera');
		YAHOO.util.Event.addListener(cameras, "mouseover", traphicVerkeer.showFileInfo,new Array('camera','1'));
		YAHOO.util.Event.addListener(cameras, "mouseout", traphicVerkeer.hideFileInfo);
		YAHOO.util.Event.addListener('bigmap', "mousedown", traphicVerkeer.hideFileInfo,'nu');
		},
	showRegioMelding: function(){
		// toon of verberg de Regio melding...
		onOffSwitchRegioMelding = (onOffSwitchRegioMelding=='on') ? 'off' : 'on';
				
		var regioMelding_anim = new YAHOO.util.Anim('bandBovenaanScherm', { height: { to: 65 } }); 
		//regioMeldingWindow = new YAHOO.widget.Overlay("bandBovenaanScherm", {iframe:true}); 
		//window.status = 'bandBovenaanScherm hoogte = '+traphic.getSize('bandBovenaanScherm');
		var regioMeldingHoogte = traphic.getSize('bandBovenaanScherm');
		//regioMelding_anim.animate();
		// verberg weer na 10 sec
		 
		if (onOffSwitchRegioMelding=='on'){
			//regioMelding_anim_uit = new YAHOO.util.Motion('bandBovenaanScherm', { points:  { to: [0,(17-regioMeldingHoogte)] } },0.5);
			regioMelding_anim_uit = new YAHOO.util.Motion('bandBovenaanScherm', { points:  { to: [0,0] } },0.5);  
			//var ti=setTimeout("regioMelding_anim_uit.animate()", 10000);
			regioMelding_anim_uit.animate()
			autoHidetimer=setTimeout("traphicVerkeer.showRegioMelding()",20000); // hide the regiomelding after 20 seconds
			}
		if (onOffSwitchRegioMelding=='off'){
			//regioMelding_anim_in = new YAHOO.util.Motion('bandBovenaanScherm', { points:  { to: [0,0] } },0.5); 
			regioMelding_anim_in = new YAHOO.util.Motion('bandBovenaanScherm', { points:  { to: [0,(17-regioMeldingHoogte)] } },0.5);
			regioMelding_anim_in.animate();
			clearTimeout(autoHidetimer);
			}
		},		
	showFileInfo:function(e,soort){		
		// als de timer om de popup te verbergen nog niet is
		// afgelopen, wis dan de timer niet!
		// de popup blijft staat.
		clearTimeout(mouseOutTimer);	

		mouseInTimer=setTimeout("plopupOverlay.show();",400)
		//plopupOverlay.show();
		plopupOverlay.setBody('...data ophalen...');

		if (soort&&soort[0]=='file'){
			//plopupOverlay.setBody(traphicVerkeer.getFileDetails(this.id));
			traphicVerkeer.getFileDetails(this.id);
			}
		if (soort&&soort[0]=='camera'){
			traphicVerkeer.getCameraDetails(this.id);			
			}
		// positioneer de popup voorlopig...
		var huidigeX=parseFloat(YAHOO.util.Event.getPageX(e));
		var huidigeY=parseFloat(YAHOO.util.Event.getPageY(e));
		lastEventX = huidigeX; // remember the current event X and Y for the repositioning...
		lastEventY = huidigeY;
		plopupOverlay.moveTo(huidigeX+10, huidigeY+10);
		},
	hideFileInfo:function(e,nunu){
		// verberg de popup na een kleine vertraging, tenzij 'nunu' wordt meegeven...
		if (nunu){plopupOverlay.hide()} else {
			mouseOutTimer=setTimeout("plopupOverlay.hide(); plopupOverlay.setBody('');",300)
			}
		// de muis weer van de melding verdwenen, de popup hoeft dus niet getoont te worden...
		clearTimeout(mouseInTimer);
		},
	repositionPopup: function(){
		// nadat de inhoud geladen is, moeten we controleren of er geen delen buiten beeld vallen:
		var huidigeX = lastEventX; // read the current event X and Y for the repositioning...
		var huidigeY = lastEventY;
		var schermBreedte =parseFloat(YAHOO.util.Dom.getViewportWidth());
		var schermHoogte = parseFloat(YAHOO.util.Dom.getViewportHeight());
		//window.status ='scherm b x h ='+schermBreedte+', '+schermHoogte;
		var plopupBreedte= parseFloat(traphic.getSize("popupWin",0));
		var plopupHoogte=parseFloat(traphic.getSize("popupWin",1));
		//window.status ='huidigeX+plopupBreedte<(schermBreedte-10) = ' + (huidigeX+plopupBreedte<(schermBreedte-10))+ 'huidigeX='+huidigeX+', plopupBreedte='+plopupBreedte+', schermBreedte='+schermBreedte;
		var plopupX = (huidigeX+plopupBreedte<(schermBreedte-10)) ? huidigeX+10 : (huidigeX-plopupBreedte-10);
		//var plopupY = (huidigeY+plopupHoogte<(schermHoogte-10)) ? huidigeY+10 : (huidigeY-plopupHoogte-10);
		if (huidigeY+plopupHoogte>(schermHoogte-10)){
			// het scherm valt beneden uit beeld
			if (huidigeY < plopupHoogte ) {
				// maar de plopup past ook niet boven de cursor:
				plopupY = schermHoogte - plopupHoogte - 10;				
				}	
			else {plopupY = huidigeY-plopupHoogte-10};	
			}
		else {plopupY = huidigeY+10 }
		plopup = new YAHOO.util.Motion("popupWin", { points: { to: [plopupX, plopupY] } },0.1);
		plopup.animate();			
		},
	getFileDetails:function(id){
		// xhml http request naar de server...			
		var callback ={success:traphicVerkeer.updateVerkeersPlopup, failure:traphicVerkeer.handleFailure};
		//var connect = YAHOO.util.Connect.asyncRequest('GET', 'generated/melding.xml', callback); 
		var connect = YAHOO.util.Connect.asyncRequest('GET', 'melding.aspx?messageid=' + id, callback);
		},
	getCameraDetails:function(id){
		// xhml http request naar de server...			
		var callback ={success:traphicVerkeer.updateCameraPlopup, failure:traphicVerkeer.handleFailure, argument: id  };
		var connect = YAHOO.util.Connect.asyncRequest('GET', 'generated/cameras.xml', callback); 
		},
	getRegioMelding:function(){
		// xhml http request naar de server...			
		var callback ={success:traphicVerkeer.updateRegioMelding, failure:traphicVerkeer.handleFailure};
		var connect = YAHOO.util.Connect.asyncRequest('GET', 'generated/regiomelding.xml', callback); 
		},
	updateVerkeersPlopup: function(o){
		var xmlObject=o.responseXML;
		var fileMelding=o.responseXML.getElementsByTagName("Verkeersmelding");	
		
		var locatieType=xmlObject.getElementsByTagName("LOC_TYPE")[0]?
			xmlObject.getElementsByTagName("LOC_TYPE")[0].childNodes[0].nodeValue : '';			
		var wegNummer=xmlObject.getElementsByTagName("WEGNR")[0]?
			xmlObject.getElementsByTagName("WEGNR")[0].childNodes[0].nodeValue : '';
		var vanWeg= xmlObject.getElementsByTagName("VAN_WEG")[0] ? 
			xmlObject.getElementsByTagName("VAN_WEG")[0].childNodes[0].nodeValue : '';
		var naarWeg=xmlObject.getElementsByTagName("NAAR_WEG")[0]?
			xmlObject.getElementsByTagName("NAAR_WEG")[0].childNodes[0].nodeValue : '';
			
		var weg = wegNummer +' van '+ vanWeg + ' naar ' + naarWeg;
		
		var locatieTrajectStartType=xmlObject.getElementsByTagName("LOC_DES_VAN")[0] ?
			xmlObject.getElementsByTagName("LOC_DES_VAN")[0].childNodes[0].nodeValue : '';
		var locatieTrajectStart=xmlObject.getElementsByTagName("VAN")[0] ?
			xmlObject.getElementsByTagName("VAN")[0].childNodes[0].nodeValue : '';
		var locatieTrajectSEindeType=xmlObject.getElementsByTagName("LOC_DES_NAAR")[0] ?
			xmlObject.getElementsByTagName("LOC_DES_NAAR")[0].childNodes[0].nodeValue : '';
		var locatieTrajectSEinde=xmlObject.getElementsByTagName("NAAR")[0] ?
			xmlObject.getElementsByTagName("NAAR")[0].childNodes[0].nodeValue : '';
			
		if (locatieTrajectStartType=='Brug') locatieTrajectStartType='';
		if (locatieTrajectSEindeType=='Brug') locatieTrajectSEindeType='';
		
		if (locatieTrajectStartType=='Knooppunt (triangle)') locatieTrajectStartType='Knooppunt';
		if (locatieTrajectSEindeType=='Knooppunt (triangle)') locatieTrajectSEindeType='Knooppunt';

		//var traject = 'tussen '+locatieTrajectStartType +' ' + locatieTrajectStart +
		// ' en ' + locatieTrajectSEindeType +' '+ locatieTrajectSEinde;
		if (locatieTrajectSEinde!=''&&locatieTrajectStart!=''){
			// traject
			var traject = 'tussen '+locatieTrajectStartType +' ' + locatieTrajectStart +
			 ' en ' + locatieTrajectSEindeType +' '+ locatieTrajectSEinde;
			 }
		else {var traject = 'ter hoogte van ' + locatieTrajectSEindeType +' '+ locatieTrajectSEinde;}
		 
		var situatie=xmlObject.getElementsByTagName("SITUATIE")[0] ?
		xmlObject.getElementsByTagName("SITUATIE")[0].childNodes[0].nodeValue : '';
	
		var filelengte = (xmlObject.getElementsByTagName("PRI_QUANTITY_VALUE")[0])?
				xmlObject.getElementsByTagName("PRI_QUANTITY_VALUE")[0].childNodes[0].nodeValue + "km " : '';
				
		var melding=filelengte+situatie
		
		var vertragingsTijd= (xmlObject.getElementsByTagName("DELAY")[0])?
		Math.round(parseFloat(xmlObject.getElementsByTagName("DELAY")[0].childNodes[0].nodeValue/60)): '';
		var vertraging = (vertragingsTijd>0) ? "Extra reistijd: ca. "+(vertragingsTijd)+" minuten" : "";
		
		var startTime=xmlObject.getElementsByTagName("START_TIME")[0] ?
			xmlObject.getElementsByTagName("START_TIME")[0].childNodes[0].nodeValue : '';
		var versionTime=xmlObject.getElementsByTagName("VERSION_TIME")[0] ?
			xmlObject.getElementsByTagName("VERSION_TIME")[0].childNodes[0].nodeValue : '';
		var eersteMeldTijd=traphicVerkeer.getReadableTime(startTime);
		var meldTijd=traphicVerkeer.getReadableTime(versionTime);

		var oorzaak=xmlObject.getElementsByTagName("OORZAAK")[0] ?
			xmlObject.getElementsByTagName("OORZAAK")[0].childNodes[0].nodeValue : '';
			
		var vrijetekst=xmlObject.getElementsByTagName("FREE_TEXT")[0] ?
			xmlObject.getElementsByTagName("FREE_TEXT")[0].childNodes[0].nodeValue : '';

		var tekst=""
		var plaatje=""
		
		if (locatieType=='TRAJECT'){
			plaatje="<img src='images/filebord.png' width='90' height='110' align='left' alt='' />"
			}
		if (locatieType=='PUNT'){
			plaatje="<img src='images/meldingsbord.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='WERKZAAMHEDEN'||oorzaak=='Wegwerkzaamheden'){
			plaatje="<img src='images/werkzaamheden.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Ongeval'||oorzaak=='Eerder ongeval'||oorzaak=='Verkeersongeval'){
			plaatje="<img src='images/ongeval.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Vrachtwagenongeluk'|| oorzaak=='Defecte vrachtwagen'){
			plaatje="<img src='images/vrachtwagenongeval.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Gekanteld vrachtwagen'){ // spelfout zit in database!
			plaatje="<img src='images/gekanteldevrachtwagen.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Defect voertuig' || oorzaak=='Defect voertuig afgehandeld'){
			plaatje="<img src='images/pech.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Politieonderzoek' || oorzaak=='Ongevalsonderzoek'){
			plaatje="<img src='images/politie.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Ongevalsafhandeling'){
			plaatje="<img src='images/takel.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Brandend voertuig'){
			plaatje="<img src='images/brand.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Modder op het wegdek'|| oorzaak=='Olie op het wegdek'){
			plaatje="<img src='images/slipgevaar.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Harde wind'){
			plaatje="<img src='images/wind.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Sneeuwval'){
			plaatje="<img src='images/sneeuw.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Brug gesloten'){
			plaatje="<img src='images/brug.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Obstakel op de weg' || oorzaak=='Afgevallen lading' ){
			plaatje="<img src='images/obstakel.png' width='90' height='110' align='left' alt='' />"
			}
		if (oorzaak=='Spookrijder'){
			plaatje="<img src='images/spookrijder.png' width='90' height='110' align='left' alt='' />"
			}
		tekst=plaatje
		tekst+="<h3>"+weg+"</h3><p>"+traject+"<br />";
		if (oorzaak!=""){tekst+=oorzaak+". "};
		if (melding!=""){tekst+=melding+". "};
		if (vrijetekst!=""){tekst+="<br />"+vrijetekst};
		tekst+="</p>"
		if (vertragingsTijd>0){
			tekst+="<p class='vertraging'><img src='images/vertraging.png' width='17' height='17' alt='' />"
			+vertraging+"</p>"
			}
		tekst+="<p class='meldtijd'>Eerst gemeld om: "+eersteMeldTijd+", laatst bijgewerkt om: "+meldTijd+"</p>"
		// soms is de melding al verdwenen, terwijl deze in het plaatje nog getoond wordt
		// we krijgen dan een lege melding terug, hierop moet de tekst nog worden aangepast...
		
		if (wegNummer==''||vanWeg==''||naarWeg==''){
			tekst="<img src='images/refresh.gif' width='48' height='48' align='left' alt='' />"
			tekst+="<h3>De Verkeersinformatie is verouderd.</h3><p>Nieuwe gegevens worden opgehaald...</p>";
			traphicVerkeer.refreshPage();
			}		
		plopupOverlay.setBody(tekst);	
		// nadat de content is geladen, bepaal de def. positie van de popup....
		traphicVerkeer.repositionPopup();	
		},
	handleFailure: function(o){
		window.status=o.statusText;
		},
	updateCameraPlopup: function(o){
		var xmlObject=o.responseXML;
		var cameras=xmlObject.getElementsByTagName("camera");
		// de gezochte camera wordt via de id meegegeven, uit te lezen via o.argument
		var gezochteCamera=o.argument;	
		for (var i=0;i<cameras.length;i++){
			// loop door de camera's heen....
			if (xmlObject.getElementsByTagName("description")[i].firstChild.nodeValue==gezochteCamera){
				// als we de gewenste description vinden, hebben we de bovenliggende node nodig...
				var camera=xmlObject.getElementsByTagName("description")[i].parentNode;
				}
			}
		if (camera){
			var cameraURL=camera.getElementsByTagName("filename")[0]?
			camera.getElementsByTagName("filename")[0].childNodes[0].nodeValue : '';	
			
			var cameraBeschrijving=camera.getElementsByTagName("description")[0]?
				camera.getElementsByTagName("description")[0].childNodes[0].nodeValue : '';
			var expired=camera.getElementsByTagName("expired")[0]?
				camera.getElementsByTagName("expired")[0].childNodes[0].nodeValue : '';	
			var timestamp=camera.getElementsByTagName("timestamp_now")[0]?
				camera.getElementsByTagName("timestamp_now")[0].childNodes[0].nodeValue : '';						
			if (expired=='false'){
			var tekst="<h3> Camera "+cameraBeschrijving+"</h3>";
				tekst+="<img src='generated/"+cameraURL+"' alt='"+cameraBeschrijving +"' width='352' height='288' />";
				tekst+="<br /><p class='meldtijd'>Laatst bijgewerkt: "+timestamp+"</p>";
				}
			else var tekst="Er is geen actueel camerabeeld beschikbaar...";
			}
		else var tekst="Er is geen actueel camerabeeld beschikbaar...";
		plopupOverlay.setBody(tekst);
		// nadat de content is geladen, bepaal de def. positie van de popup....
		traphicVerkeer.repositionPopup();	
		},
	updateRegioMelding: function (o){
		var xmlObject=o.responseXML;
		var regioMeldingen=o.responseXML.getElementsByTagName("Regiomelding");
		var tekst='<a href="#" onclick="return false">';
		tekst+='<img src="images/waarschuwing_geel.jpg" width="100" height="110" alt="" />';
		for (var i=0;i<regioMeldingen.length;i++){
			// loop door de regiomeldingen heen....
			tekst+='In  '+regioMeldingen[i].getElementsByTagName("END_LOC_HM")[0].childNodes[0].nodeValue+' '+regioMeldingen[i].getElementsByTagName("PHRASE_CODE")[0].childNodes[0].nodeValue +'<br/ >'
			}
		tekst+=i+' Regiomeldingen </a><br />';
		regioMeldingWindow.setBody(tekst);	
		if (regioMeldingen.length>0){traphicVerkeer.showRegioMelding()};
		},
	getReadableTime: function (time){
		var x=time.indexOf('T')+1;
		var y=time.indexOf('.')-3;
		return time.substring(x,y);
		},
	// ververs de filemeldingen op de kaart
	refreshFilemeldingen:function(id){
		// xhml http request naar de server...
		var callback2 ={success:traphicVerkeer.updateFiles, failure:traphicVerkeer.handleFailure2 };
		var connect  = YAHOO.util.Connect.asyncRequest('GET', 'script/fileImageMapAreas.xml', callback2);
		},
	updateFiles: function(o){

		var xmlObject=o.responseXML; //alert (xmlObject.nodeType);
		var map=document.getElementById('map');
		
		//document.getElementById('filelaag').setAttribute('usemap','#map2')
		//alert(document.getElementById('filelaag').getAttribute('usemap'));
		//mapParent.replaceChild(xmlObject.firstChild, map); 
		while (map.childNodes.length>0){map.removeChild(map.firstChild)}

		for (i=1;i<xmlObject.firstChild.childNodes.length;i++){
		//for (i=1;i<10;i++){
			alert(i+' van '+xmlObject.firstChild.childNodes.length);
			var j=i-1;
			// http://channel9.msdn.com/wiki/default.aspx/Channel9.InternetExplorerProgrammingBugs
			//  <area> tags added to the DOM programatically are stripped of any attributes - IE
			//map.appendChild(xmlObject.firstChild.childNodes[j]);
			//alert("j="+j+'-'+xmlObject.firstChild.childNodes[j].nodeType);
			}
		
		},
	refreshPage: function(){
		var refreshTimer=setTimeout("window.location.reload()",1000)
		}
	}

YAHOO.util.Event.addListener(window, "load", traphicVerkeer.init);
YAHOO.util.Event.addListener(window, "unload", traphic.rememberXY);


