/*
 *************************************************************************
 *
 * Tourinform.hu public layered map functions, v1.1 2009-05-04 BT (UTF-8 version)
 *
 *************************************************************************
 */


var map;
var directionsPanel;
var directions;
var layer = new Array();
var toggleState = new Array();
var directions;
var lastclicked = new Array();
var geo; 
var geoMarker;
var ch;
var reasons = new Array();
var georesult;
var circle = new Array;
var borderColor = new Array();
  borderColor["5"]= "#550000";
  borderColor["15"]="#005500";
  borderColor["25"]="#000055";
  borderColor["50"]="#555500";
var bgColor = new Array();
  bgColor["5"]= "#ffeecc";
  bgColor["15"]="#ccccff";
  bgColor["25"]="#ffeeee";
  bgColor["50"]="#ffffff";

function initialize(sLat, sLon, sZoom) {
  if (!sLat)  var sLat  = 47.16801;
  if (!sLon)  var sLon  = 19.484768;
  if (!sZoom) var sZoom = 7;

  if (GBrowserIsCompatible()) {
    layer[ 0] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-gyogywellness.kml");
    layer[ 1] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-ajanlatok.kml");
    layer[ 2] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-kult-ajanlatok.kml");
    layer[ 3] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-muemlekek.kml");
    layer[ 4] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-muzeumok.kml");
    layer[ 5] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-kempingek.kml");
    layer[ 6] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-szallashelyek.kml");
    layer[ 7] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-szabadido.kml");
    layer[ 8] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-vadaszat.kml");
    layer[ 9] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-horgaszat.kml");
    layer[10] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-falusi-magan.kml");
    layer[11] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-utazasi-irodak.kml");
    layer[12] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-REMOVED.kml");
    layer[13] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-vendeglatas.kml");
    layer[14] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-konferencia.kml");
    layer[15] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-golf.kml");
    layer[16] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-szakmai-szervezetek.kml");
    layer[17] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-vizisport.kml");
    layer[18] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-termeszeti-ertekek.kml");
    layer[19] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-templomok.kml");
    layer[20] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-programok.kml");
    layer[21] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-lovaglas.kml");
    layer[22] = new GGeoXml("http://itthon.hu/site/upload/2009/11/tourinform-hu-tourinform-irodak.kml");
              
    map = new GMap2(document.getElementById("map_canvas"));
    GEvent.addListener(map, 'click', function(overlay, point, event) {
      if (overlay) {
          latlon = event.toString();
          latlon = latlon.substring(1, latlon.length-1);
          lastclicked = latlon.split(', ');
          if (document.getElementById('show_directions').checked) {
            document.getElementById("routeWrapper").style.display = 'block';
            var sA = ( (document.getElementById('startAddress').value != '' && document.getElementById('startAddress').value != 'Indulási cím') ? (document.getElementById('startAddress').value+', Magyarország') : 'Budapest Clark Ádám tér, Magyarország)');
            directions.load("from: " + sA + " to: " + lastclicked[0] + ', ' + lastclicked[1] + " (Cél)", { "locale": "hu_HU", "preserveViewport" : true });
            createCookie('startAddress', sA.substring(0, sA.indexOf(', M')), 7);
            document.getElementById('routeHeader').innerHTML = '<a href="javascript:void(0);" onclick="document.getElementById(\'routeWrapper\').style.display=\'none\';directions.clear();"><img style="margin: 3px 5px;" src="http://maps.google.com/intl/hu_ALL/mapfiles/iw_close.gif" alt="Bezár" /></a><a href="http://maps.google.com/maps?saddr='+ 
            encodeURIComponent(sA) +'&daddr='+ encodeURIComponent(lastclicked[0] + ', ' + lastclicked[1] + ' (Cél)')+
            '&ie=UTF8&v=2.x&cv=4.3.7191.6508&pw=2&z=7&hl=hu" target="_blank"><img src="http://itthon.hu/site/img/print.gif" style="border:0;vertical-align:middle;" />&nbsp;Útvonal nyomtatása</a>&nbsp;';
          }
        }
    });          
    new GKeyboardHandler(map);
    //map.enableScrollWheelZoom(); 
          map.setUIToDefault();
          map.disableScrollWheelZoom();

    map.setCenter(new GLatLng(sLat, sLon), sZoom); 
    map.addControl(new GLargeMapControl3D());
    //map.addControl(new GMapTypeControl());
    
    // geokódolás
    geo = new GClientGeocoder();
    reasons[G_GEO_SUCCESS]            = "Siker";
    reasons[G_GEO_MISSING_ADDRESS]    = "Hiányzó cím: a cím mező üres.";
    reasons[G_GEO_UNKNOWN_ADDRESS]    = "Ismeretlen cím: Nem található ilyen cím.";
    reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Cím nem elérhető: A címhez tartozó koordináták jogi/szerződéses okok miatt nem publikusak.";
    reasons[G_GEO_BAD_KEY]            = "Hibás kulcs: A Google API kulcs nem megfelelő.";
    reasons[G_GEO_TOO_MANY_QUERIES]   = "Túl sok lekérés: A site elérte az indítható címlekérdezések napi maximumát.";
    reasons[G_GEO_SERVER_ERROR]       = "Szerverhiba: A címkeresés jelenleg nem végezhető el.";

    // útvonaltervezés
    directionsPanel = document.getElementById("route");
    directions = new GDirections(map, directionsPanel);
  } else alert( "Az Ön böngészője nem kompatibilis a Google Maps motorral." );
} 

function toggleLayer(layer_id, ch) {
  if (ch.checked) {
    map.addOverlay(layer[layer_id]);
    toggleState[layer_id] = 1;
  } else {
    map.removeOverlay(layer[layer_id]);
    toggleState[layer_id] = 0;
  }
}

function geocode(address) {
  if ( (address != '') && (address != 'Település keresése') ) {
    document.getElementById('geo_errormsg').innerHTML = '';
    geo.setBaseCountryCode('HU');
    geo.getLocations(address + ', Magyarország', function (result) {
      if (result.Status.code == G_GEO_SUCCESS) {
        // egynél több találat
        if (result.Placemark.length > 1) {
          document.getElementById("routeWrapper").style.display = 'block'; 
          var results_out = '<strong>Találatok:</strong><ol>';
          for (var i=0; i<result.Placemark.length; i++) {
            var p = result.Placemark[i].Point.coordinates;
            results_out +=  "<li> <a href='javascript:void(0);' onclick='javascript:place(" +p[1]+","+p[0]+",\""+result.Placemark[i].address+"\")'>"+ result.Placemark[i].address+"</a></li>";
          }
          results_out += '</ol>';
          document.getElementById("route").innerHTML = results_out;  
        }
        // egy találat volt
        else {
          document.getElementById("route").innerHTML = "";
          document.getElementById("routeWrapper").style.display = 'none';
          document.getElementById("cb_5km").checked =  false;
          document.getElementById("cb_15km").checked = false;
          document.getElementById("cb_25km").checked = false;
          document.getElementById("cb_50km").checked = false;
          if (circle[5]) map.removeOverlay(circle[5]);
          if (circle[15]) map.removeOverlay(circle[15]);
          if (circle[25]) map.removeOverlay(circle[25]);
          if (circle[50]) map.removeOverlay(circle[50]);
          var p = result.Placemark[0].Point.coordinates;
          place(p[1],p[0]);
        }
      } else {
        var reason="Code "+result.Status.code;
        if (reasons[result.Status.code]) reason = reasons[result.Status.code]
        document.getElementById('geo_errormsg').innerHTML='Hiba: ' + reason;
      }
    }
    );
  } else {
    document.getElementById('geo_errormsg').innerHTML =  'Írja be a keresett település nevét.';
  }
  document.getElementById('req').style.backgroundImage = 'none';
}

function place(lat,lng,address) {
  if (geoMarker) map.removeOverlay(geoMarker);
  var point = new GLatLng(lat,lng);
  map.panTo(point);
  geoMarker = new GMarker(point); 
  map.addOverlay(geoMarker);
  georesult = point;
  document.body.focus();
}

function drawCircle( dist, on ) {
  if (on) {
  	if (circle[dist]) map.removeOverlay(circle[dist]);
    if (georesult) { 
      map.setCenter(georesult);
    	var bounds = new GLatLngBounds();
    	var circlePoints = Array();
      
    	with (Math) {
    		var d = dist/6378.8;
    		var lat1 = (PI/180)* georesult.lat();
    		var lng1 = (PI/180)* georesult.lng();
    		for (var a = 0 ; a < 361 ; a++ ) {
    			var tc = (PI/180)*a;
    			var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
    			var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
    			var x = ((lng1-dlng+PI) % (2*PI)) - PI ; 
    			var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
    			circlePoints.push(point);
    			bounds.extend(point);
    		}
    
    		if (d < 1.5678565720686044) circle[dist] = new GPolygon(circlePoints, ( ( borderColor[dist] ) ? borderColor[dist]:'#550000'), 1, 1, ( ( bgColor[dist] ) ? bgColor[dist]:'#ffeecc'), 0.2);	
    			else circle[dist] = new GPolygon(circlePoints, ( ( borderColor[dist] ) ? borderColor[dist]:'#550000'), 1, 1);	
    		map.addOverlay(circle[dist]); 
    		if (dist > 20) map.setZoom(map.getBoundsZoomLevel(bounds));
    	}
  	}
  } else {
    if (circle[dist]) map.removeOverlay(circle[dist]);
  }
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}


addLoadEvent(function() {
  // *** init *************************************************************
  document.getElementById('req').style.backgroundImage = 'none';
  //if (screen.height > 1000) document.getElementById('map_canvas').style.height='680px';
  if (readCookie('startAddress')) document.getElementById('startAddress').value = readCookie('startAddress'); 
  initialize(); 
  document.getElementById('lcb22').checked=true;
  toggleLayer(22, document.getElementById('lcb22'));
});



