var geocoder = new GClientGeocoder();
var map = false;
var markers = new Array;
var icons = new Object;
var extramarkers = new Array;

var directions = false;
var destinationPoint = false;
var destinationMarker = false;
var destinationCity = false;

var mapCenter = false;
var mapZoom = false;

//hakuoptiot
var kunta = 'varsinais-suomi';
var word = '';
var lajit = {jateasema:false,yhteis:false,seka:false,kartonki:false,paristot:false,ser:false,ongelma:false};

function resetMap() {
	map.setCenter(mapCenter, mapZoom);
//	destinationMarker = false;
//	if(directions)
//		directions.clear();
//	checkAll();
}

/* initialize map data */
function load(lat, lng, zoom, city) {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
//		map.addControl(new GSmallMapControl());
        map.addControl(new TextualZoomControl());		
//		map.addControl(new GMapTypeControl());
        map.addControl(new TextualMapTypeControl());		
        
		mapCenter = new GLatLng(lat, lng);
		mapZoom = zoom;

		// resetoi checkboxit
//		checkInit();
		resetMap();

		document.getElementById('reititys').onclick = makeRoute;
//		document.getElementById('postirajaus').onclick = filterZip;
//		document.getElementById('pnum').onkey = filterZip;
		
		destinationCity = city;
//		document.getElementById('reset').onclick = resetMap;

		directions = new GDirections(map);

		/* generate markers to show */

		/* base icon */
		var icon = new GIcon();
		icon.iconSize = new GSize(16,16);
		icon.shadowSize = 0;
		icon.iconAnchor = new GPoint(8,8);
		icon.infoWindowAnchor = new GPoint(0,8);

        var iconpath = '/images/';

		/* tuntematon/uusi */
		icons['unk'] = new GIcon(icon, iconpath+'ico_unknown.gif');
		/* jateasema */
		icons['jateasema'] = new GIcon(icon, iconpath+'ico_jateasema.gif');
		/* kierrätyspiste */
		icons['yhteis'] = new GIcon(icon, iconpath+'ico_kierratyspiste.gif');
//		icons['yhteis'].image = iconpath+'ico_kierratyspiste.gif';
		/* sekajate */
		icons['seka'] = new GIcon(icon, iconpath+'ico_sekajate.gif');
		/* kartonki */
		icons['kartonki'] = new GIcon(icon, iconpath+'ico_kartonki.gif');
		/* paristot */
		icons['paristot'] = new GIcon(icon, iconpath+'ico_paristot.gif');
		/* sahko ja elektroniikka */
		icons['ser'] = new GIcon(icon, iconpath+'ico_ser.gif');
		/* ongelmajate */
		icons['ongelma'] = new GIcon(icon, iconpath+'ico_ongelma.gif');

		getMarkerData('/tsj_alue_pisteet2.xml');
        refreshMap();
	}
}

//nämä kaikki ei datassa vielä
function lajiToVar(laji) {
	if(laji == 'Jäteasema') return 'jateasema';
	if(laji == 'Kierrätyspiste') return 'yhteis';
	if(laji == 'Sekajäte') return 'seka';
	if(laji == 'Keräyskartonki') return 'kartonki';
	if(laji == 'Paristot') return 'paristot';
	if(laji == 'SER') return 'ser';
	if(laji == 'Ongelmajäte') return 'ongelma';
	return 'unk';
}

function makeRoute() {
	var katu = document.getElementById('katu').value;
	directions.load('from: '+katu+' to: '+destinationPoint.lat()+' ,'+destinationPoint.lng());

	// make routing
//	checkAll(true);
//	destinationMarker.show();
}

function filterZip() {
	var pnum = document.getElementById('pnum').value;
	checkAll(true);
	markerShow(false, false, true);
	markerShow(false, pnum, false);
}

function getMarkerData(file) {
	var request = GXmlHttp.create();
	request.open('GET', file, true);
	request.setRequestHeader("Content-type", "text/xml");

	request.onreadystatechange = function() {
		if (request.readyState == 4 && request.status == 200) {
			var xmlmarkers = GXml.parse(request.responseText);
            if(!xmlmarkers.documentElement){
              alert("XML Error");
              return false;
            }
			xmlmarkers= xmlmarkers.documentElement.getElementsByTagName("marker");

			var j = 0;
			for(i=0;i<xmlmarkers.length;i++) {
				var node = xmlmarkers[i];
				if(node.nodeName == 'marker') {
					var id = node.getAttribute('id');
					var laji = node.getAttribute('laji');
					var lahiosoite = node.getAttribute('lahiosoite');
					var lajitarkennus = node.getAttribute('lajitarkennus');
					var laji2 = lajiToVar(laji);
					var kerayspaikka = node.getAttribute('kerayspaikka');
					
					//Kerätään nämä jätejakeet yhdeksi symbooliksi kartalle.
					if(laji2 == 'metalli' || laji2 == 'paperi' || laji2 == 'lasi'){
					  extramarkers[lahiosoite]++;
					  if(extramarkers[lahiosoite] == 3){
					  	laji = 'Kierrätyspiste';
					  	laji2 = 'yhteis';
					  	lajitarkennus = 'Lasi, metalli ja paperi';
					  } else {
					    continue;
					  }
					}
					
					if(id == 394 || id == 446 || id == 447) {
					  laji = 'Jäteasema';
					  laji2 = 'jateasema';
					}
/*					
					if(kerayspaikka.toLowerCase().indexOf('jäteasema') >= 0){
					  laji = 'Jäteasema';
					  laji2 = 'jateasema';
					}
					if(kerayspaikka.toLowerCase().indexOf('jätekeskus') >= 0){
					  laji = 'Jäteasema';
					  laji2 = 'jateasema';
					}
*/					
					var lat = parseFloat(node.getAttribute('lat'));
					var lng = parseFloat(node.getAttribute('lng'));

				    if(icons[laji2])
					  var marker = new GMarker(new GLatLng(lat, lng), {icon:icons[laji2]});
					else
					  var marker = new GMarker(new GLatLng(lat, lng), {icon:icons['unk']});

					marker.laji = laji;
					marker.kerayspaikka = kerayspaikka;
					marker.kunta = node.getAttribute('kunta');
					marker.lahiosoite = lahiosoite;
					marker.pnro = node.getAttribute('pnro');
					marker.lisatiedot = node.getAttribute('lisatiedot');
					marker.lajitarkennus = lajitarkennus;
					marker.clickable = true;
					GEvent.addListener(marker, 'click', markerClick);

					var text = '<p><b>' + marker.kerayspaikka +'</b><br>';
					if(marker.lajitarkennus.length > 0)
						text += marker.lajitarkennus+'<br>';
					text += marker.lahiosoite + '<br>' + marker.pnro + '<br>';
					text += marker.kunta + '<br>';

					if(marker.lisatiedot.length > 0)
						text += marker.lisatiedot;
//					text += marker.laji + '<br>';
					text += '</p>';

					marker.bindInfoWindowHtml(text);
//					marker.hidden = true;

					/* add marker to map */
					map.addOverlay(marker);

					/* save markers to our array for visibility control */
					markers[j] = marker;
					j++;
				}
			}
			xmlmarkers = null;
		}	
	} // function
	request.send(null);
}


/* clicking a marker will set our destination point for driving instructions */
function markerClick(point) {
	destinationPoint = point;
	destinationMarker = this;
	document.getElementById('reititys').disabled = false;
}

function formKey(elem, key, value){
  if(key == "kunta"){
      kunta = value.toLowerCase();
//    kunta = kunta.replace(/ö/, "o");
//    kunta = kunta.replace(/ä/, "a");
//    kunta = kunta.replace(/å/, "a");
    if(kunta == 'länsi-turunmaa')
      geocoder.getLatLng('parainen, Finland', function(point) {
        if(!point) alert(kunta);
        map.setCenter(point, 11);
      });
    else 
      geocoder.getLatLng(kunta+', Finland', function(point) {
        if(!point) alert(kunta);
        map.setCenter(point, 11);
      });

//	mapCenter = new GLatLng(coords[kunta]['lat'], coords[kunta]['lng']);
//	mapZoom = coords[kunta]['zoom'];
//	map.setCenter(mapCenter, mapZoom);
	
  } else if(key == 'word') {
    word = value;
    reLocateMapKey(word);
  } else if(key == 'laji') {
      lajit[value] = $(elem).is(':checked');
  }
  refreshMap();
}

function refreshMap(){
	for(i=0;i<markers.length;i++) {
		var marker = markers[i];

//alert((kunta == 'varsinais-suomi' || marker.kunta.toLowerCase() == kunta))
//alert(lajit[lajiToVar(marker.laji)]);			
//alert((!word || marker.lahiosoite.toLowerCase().charAt(word) >= 0 || marker.pnro.toLowerCase().charAt(word) >= 0 || marker.lisatiedot.toLowerCase().charAt(word) >= 0 || marker.lajitarkennus.toLowerCase().charAt(word) >= 0));
//return;
/*
		if((kunta == 'varsinais-suomi' || marker.kunta.toLowerCase() == kunta) 
		  &&  lajit[lajiToVar(marker.laji)]
		  && (word == "" || marker.lahiosoite.toLowerCase().indexOf(word) >= 0
			|| marker.pnro.toLowerCase().indexOf(word) >= 0
			|| marker.lisatiedot.toLowerCase().indexOf(word) >= 0
			|| marker.lajitarkennus.toLowerCase().indexOf(word) >= 0
			)
	      ) {
*/
		if( lajit[lajiToVar(marker.laji)] ) {
	        marker.show();
	      } else {
	        marker.closeInfoWindow();
	        marker.hide();
	      }
    }
}

var timeoutId = false;
function reLocateMapKey(paikka){
    if(paikka.length < 4) return;
    if(timeoutId) clearTimeout( timeoutId );
    timeoutId = setTimeout('reLocateMap(\''+paikka+'\')',3000);
}

function reLocateMap(paikka){
    geocoder.getLatLng(kunta+', '+paikka+', Finland', function(point) {
        map.setCenter(point, 13)
		var marker = new GMarker(point);
		map.addOverlay(marker);
     });
}

