google.load("language", "1");

var ClickMode = {
  Default: 0,
  Measure: 1,
  AddMarker: 2,
  Geocoding: 3
}

var Icons = {
  Default: tourmapy.icon.Default,
  Pin: null,
  None: tourmapy.icon.None
}

if (tourmapy.map.engine == 'google') {
  Icons.Pin = new google.maps.Icon();
	Icons.Pin.image = "http://www.czecot.com/redesign/img/pin_blue.png";
	Icons.Pin.shadow = "http://www.czecot.com/redesign/img/pin_shadow.png";
	Icons.Pin.iconSize = new google.maps.Size(22, 50);
	Icons.Pin.shadowSize = new google.maps.Size(36, 52);
	Icons.Pin.iconAnchor = new google.maps.Point(6,49);
	Icons.Pin.infoWindowAnchor = new google.maps.Point(10, 10);
} else {
  Icons.Pin = new AIcon({
			fastRollover: false,
			fixPng : true,
			imageSrc : "http://www.czecot.com/redesign/img/pin_blue.png",
			imageSize : new ASize(22,50),
			shadowSrc : "http://www.czecot.com/redesign/img/pin_shadow.png",
			shadowSize : new ASize(36,52),
			iconOffset : new APoint(6,49)
	});
}


tourmapy.helper.ready = false;
tourmapy.helper.atlasLayers = [];
tourmapy.helper.lastToggledObjectType = 0;
tourmapy.helper.clickMode = ClickMode.Default;
tourmapy.helper.numStops = 2;
tourmapy.helper.destNotFound = false;
tourmapy.helper.dopravniSpojeniReady = true;
tourmapy.helper.panorama = {
  obj: null,
  currentLatLng: null,
  currentYaw: null,
  fovMarker: null,
  iconSize: 150
};
tourmapy.helper.search = {
  results2 : [],
  results1: [],
  results3: [],
  offset: 0,
  limit: 10,
  query: '',
  total: 0,
  points: [],
  bounds: null,
  autoZoom: false,
  pending: 0
}
tourmapy.helper.measure = {
  markers : [],
  distance: 0,
  polylines : []
}

tourmapy.helper.customMarker = null;
tourmapy.helper.customMarkerTitle = '';
tourmapy.helper.customMarkerDescription = '';

function itinerarSetAktualnyVylet(el) {
  var id = el.options[el.selectedIndex].value;
  
  jQuery.post("/resource/itinerarAjax.php", { 'akce': "changeVylet", 'id_program': id },
		function(data) {       
    	//var a = document.getElementById("itinerar_pocet_polozek");
      //if (a) a.innerHTML = data;
      updateItinerarModul(); 
  		}, 
  		"text"
  	);
    
}

function translateElement(a) {
  if (!a) return;
  if (a.lang == language) return;
  if (!a.lang) a.lang='cs';
  
  var text = a.innerHTML;
  a.innerHTML = '<img src="/resource/img/public/loader.gif" alt="Loading" />';
  google.language.translate(text, a.lang, language,
    function(result) {
      var translated = a;
      if (result.translation) {
        translated.innerHTML = result.translation + '<br /><span class="note">(' + L_TRANSLATED_BY_GOOGLE + ')</span>';
        translated.lang = language;                 
      }
    }
  );
  return language;
}

function translateTitle(a) {
  if (!a) return;
  if (!a.lang) a.lang='cs';
  if (a.lang == language) return;
  
  var text = a.title;
  google.language.translate(text, a.lang, language,
    function(result) {
      if (result.translation) {
        a.title = result.translation;
        a.lang = language;                 
      }
    }
  );
  return language;
}

function writeTranslated(text, elem) {
  google.language.translate(text, 'cs', language,
    function(result) {
      document.write(result.translation);
    }
  );
}

function openPopup(url) { 
    window.open(url, "_blank", "width=1024,height=800,scrollbars=yes,toolbar=yes"); 
    return false; 
} 

function switchPanel(open) {
	if (open) {
		document.getElementById('panel_closed').style.display = 'none';
		document.getElementById('panel_opened').style.display = '';
		tourmapy.helper.panelOpened = true;
	} else {
		document.getElementById('panel_opened').style.display = 'none';
		document.getElementById('panel_closed').style.display = '';
		tourmapy.helper.panelOpened = false;
	}
  resize();
	return false;
}

function switchOptions(open) {
	if (open) {
		document.getElementById('more_options').style.display = 'none';
		document.getElementById('more_options_opened').style.display = '';
	} else {
		document.getElementById('more_options_opened').style.display = 'none';
		document.getElementById('more_options').style.display = '';
	}
	
	return false;
}

function closeAllMenus() {
  
  var menus = ['rpanel_vrstvy', 'rpanel_objekty', 'rpanel_spojeni', 'rpanel_vyhledavani', 'rpanel_multimedia', 'rpanel_kalendar'];  
  
  for (var i = 0; i < menus.length; i++) {
    setMenu(menus[i], document.getElementById(menus[i] + '_anchor'), false);
  }
}

function switchMenu(which, link) {  
  
  var menu = document.getElementById(which);
	var open = false;	
	if (menu.style.display == '') {
		menu.style.display = 'none';
		link.className='closed';
	} else {
		menu.style.display = '';	
		link.className='opened';
		open = true;
	}	
	
	switch (which) {
    case 'rpanel_spojeni':
      if (open) {
        var div = document.getElementById('panel_content');
        var h = div.scrollHeight;
        div.scrollTop = h;        
      }
      break; 
    default:
  }
	return false;
}

function setMenu(which, link, open) {  
  
  var menu = document.getElementById(which);
		
	if (!open) {
		menu.style.display = 'none';
		link.className='closed';
	} else {
		menu.style.display = '';	
		link.className='opened';
	}	
	return false;
}

function expandTree(id_skupina) {
	var sub = document.getElementById('rpanel_objekty_content_' + id_skupina);
	if (sub == null) return;
	var img = document.getElementById('rpanel_objekty_img_' + id_skupina);
	
	if (sub.style.display == '') {
		sub.style.display = 'none';
		img.src='/resource/img/icon_list_plus.gif';
		img.alt='+';
	} else {		
    sub.style.display = '';
		img.src='/resource/img/icon_list_minus.gif';
		img.alt='-';
	}	
	return false;
}

function rezervace(disableAutoZoom) {
  tourmapy.helper.search.autoZoom = (!disableAutoZoom);
  tourmapy.helper.search.pending = 1;     
  var loader = document.getElementById('search_loader_2');
    if (loader) loader.style.display = '';    
  var bounds = tourmapy.map.getBounds();
  var e = document.getElementById('rezervace_misto');
  if (e.value == e.defaultValue || e.value == '*') {
    var misto = '';
  } else {
    misto = e.value;
  }
  
  if (misto.trim() == '' && (Math.abs(bounds[0] - bounds[2]) > 1 || Math.abs(bounds[1] - bounds[3]) > 1)) {
    alert(L_TOO_MANY_RESULTS);
    return false;
  }
  
  cancelSearch(true);
  document.getElementById('resultList1Title').innerHTML = L_ONLINE_LIST;
  document.getElementById('resultList2Title').innerHTML = L_OFFLINE_LIST;
  
  
  e = document.getElementById('rezervace_prijezd');
  var zacatek = e.value;
  
  e = document.getElementById('rezervace_pocet_noci');
  var noci = e.options[e.selectedIndex].value;
  
  e = document.getElementById('rezervace_pocet_osob');
  var osob = e.options[e.selectedIndex].value;
  
  e = document.getElementById('rezervace_pocet_pokoju');
  var pokoju = e.options[e.selectedIndex].value;
  
  e = document.getElementById('rezervace_trida');
  var trida = e.options[e.selectedIndex].value;
  
  var m = (misto == '' ? m = '*' : m = misto);
  tourmapy.params.setArray('rez', [m, zacatek, noci, osob, pokoju, trida]);
  tourmapy.ajax.task(
    '/resource/tm_rezervace.php?misto=' + misto + '&zacatek=' + zacatek + '&noci=' + noci + '&osob=' + osob + '&pokoju=' + pokoju + '&lang=' + tourmapy.params.get('lang', 'cs') + '&trida=' + trida + '&bounds=' + bounds.join(','),
    function(response) {
      if (--tourmapy.helper.search.pending <= 0) {
        var loader = document.getElementById('search_loader_2');
        if (loader) loader.style.display = 'none';  
      }
      var onlineList = [];
      var offlineList = [];
      eval(response);
      tourmapy.helper.search.total = results.length;
      if (tourmapy.map.engine == 'google') {
        tourmapy.helper.search.bounds = new google.maps.LatLngBounds();
      }
      if (results.length > 0) {
        tourmapy.ajax.params.set('ukazRezervace', 0);
      }
      
      var totalOnline = 0;
      for (var i = 0; i < results.length; i++) {
        var r = results[i];
        if (r.online == 't') {
          totalOnline++;
        }
      }
      
      var on = 0;
      var off = totalOnline;
      for (var i = 0; i < results.length; i++) {
        var r = results[i];
        if (r.online == 't') {
          var label = ++on;
        } else {
          var label = ++off;
        }
        var p = tourmapy.map.createPoint(r.x, r.y);
        tourmapy.helper.search.points.push(p);
        if (tourmapy.map.engine == 'google') {
          tourmapy.helper.search.bounds.extend(p);
        }
        var color = (r.online == 't' ? 'red' : 'blue');
        var marker = createLabel(p, label, r.nazev, r.html, color);        
        
        tourmapy.map.addOverlay(marker);
        var a = {
          id: r.id,
          title: r.nazev,
          type: 'podnik',
          text: '',
          category: r.cena
        };
        
        if (r.online == 't') {
          tourmapy.helper.search.results1.push({marker: marker, pois: [a], label: label});
          var what = 'adresy';
          var index = label - 1; 
        } else {
          tourmapy.helper.search.results2.push({marker: marker, pois: [a], label: label});
          var what = 'content';
          var index = label - 1 - totalOnline;
        }
        
        var fncOver = new Function("var a = document.getElementById('result_"+what+"_"+(index)+"');if (a) {a.className = 'result hover';}");
        var fncOut = new Function("var a = document.getElementById('result_"+what+"_"+(index)+"');if (a) {a.className = 'result';}");
        if (tourmapy.map.engine == 'google') {        
          google.maps.Event.addListener(marker, 'mouseover', fncOver);        
          google.maps.Event.addListener(marker, 'mouseout', fncOut);
        } else {
          marker.addEvent("onMouseover", fncOver);
          marker.addEvent("onMouseout", fncOut);
        }
      }
      updateSearchResults(tourmapy.helper.search.results1, true, 'adresy');
      updateSearchResults(tourmapy.helper.search.results2, true, 'content');
      
      if (misto != '' && tourmapy.helper.search.points.length > 0 && tourmapy.helper.search.autoZoom) {
        if (tourmapy.map.engine == 'atlas') {
          tourmapy.map.get().setBestZoomAndCenter(tourmapy.helper.search.points);   
        } else {
          var mapa = tourmapy.map.get();
          var zoom = mapa.getBoundsZoomLevel(tourmapy.helper.search.bounds); 
          if (zoom>16) zoom=16; 
          mapa.setCenter(tourmapy.helper.search.bounds.getCenter());
          tourmapy.map.setZoom(zoom);      
        }      
      }
    },
    'rezervace'  
  );

  return false;
}

function rezervacePrijezdChanged() {
  return rezervacePocetNociChanged(document.getElementById('rezervace_pocet_noci'));
}

function rezervacePocetNociChanged(select) {
  var newValue = select.options[select.selectedIndex].value;
  
  var konec = document.getElementById('rezervace_konec');
  var t = document.getElementById('rezervace_prijezd').value;
  var ar = t.split('.');
  if (ar.length == 3) {
    var zacatek = new Date(parseInt(ar[2]), parseInt(ar[1]), parseInt(ar[0]));
  } else {
    var zacatek = new Date();
  }
  var d = new Date(zacatek.getTime() + 3600*24*1000*newValue);
  konec.innerHTML = d.getDate() + '.' + d.getMonth() + '.' + d.getFullYear(); 
}

function clearInput(elem) {
  if (elem.value == elem.defaultValue) {
    elem.value = "";
    jQuery('#' + elem.id).removeClass('gray');
  }
}

function checkDefaultValue(elem) {
  if (elem.value == '') {
    elem.value = elem.defaultValue;
    jQuery('#' + elem.id).addClass('gray');
  } else {
    jQuery('#' + elem.id).removeClass('gray');
  }
  return true;
}

function activateTab(obj) {
	if (!obj) return false;
	var array = ['hledani', 'spojeni', 'rezervace'];
  
	for (var i=0; i<array.length; i++) {
		var a = document.getElementById(array[i]);
    if (!a) continue;
    a.className = 'bookmark_closed';
		document.getElementById(array[i] + '_content').style.display = 'none';		
	}	
	obj.className = 'bookmark_opened';
	document.getElementById(obj.id + '_content').style.display = '';
	tourmapy.params.set('tab', obj.id);
	return false;
}

function buildHref(a, overrides) {
  var i = a.href.indexOf('#');
  if (i > -1) {
    a.href = a.href.substring(0, i);
  }
  var params = tourmapy.params.hashstring();
  if (overrides && overrides.mt) {
    params = params.replace(new RegExp("mt=" + tourmapy.params.get('mt', '')), 'mt=' + overrides.mt);
  }
  a.href = a.href + '#' + params;
}

function buildContextMenu(point) {
  var menu = new tourmapy.ContextMenu(point, tourmapy.map.get());
      
  menu.addItem(menu.getGPS(), false, 'contextMenuGPS');
  
  menu.addItem(L_ADD_TO_PLANNER, function() {
    var m = tourmapy.ContextMenu.getInstance();
    dopravniSpojeniPridejWaypointSelect(m.getLat(), m.getLng(), m.getGPS(), true); 
  }, 'addToRoute'); 
  
  menu.addItem(L_ADD_CUSTOM_MARKER, function() {
    var m = tourmapy.ContextMenu.getInstance();
    var gpsPoint = tourmapy.map.createPoint(m.getLat(), m.getLng());
    var marker = tourmapy.map.createMarker(gpsPoint, Icons.Default);
    if (tourmapy.helper.customMarker) tourmapy.map.removeOverlay(tourmapy.helper.customMarker);
    tourmapy.helper.customMarker = marker;
    tourmapy.map.addOverlay(marker);
    showForm('add_marker');
    document.getElementById('add_marker_hint').style.display = 'none';
    document.getElementById('add_marker_form').style.display = '';
  }, 'addMarker');
  
  menu.addItem(L_REVERSE_GEOCODE, function() {
    var m = tourmapy.ContextMenu.getInstance();
    reverseGeocode(m.getLat(), m.getLng()); 
  }, 'reverseGeocode');
  
  menu.addItem(L_ADD_NEW_OBJECT, function() {
    var m = tourmapy.ContextMenu.getInstance();
    var url = 'http://www.czecot.com/sber/registrace.php?gps=' + encodeURI(m.getGPS());
    openPopup(url); 
  }, 'addObject');
  
  menu.addItem(L_ADD_NEW_EVENT, function() {
    var m = tourmapy.ContextMenu.getInstance();
    var url = 'http://www.czecot.com/sber/akce_pridani.php?gps=' + encodeURI(m.getGPS());
    openPopup(url); 
  }, 'addEvent');
  
  menu.addItem(L_ZOOM_IN, function() {
    var m = tourmapy.ContextMenu.getInstance();
    //tourmapy.map.setCenter(m.getLatLng());
    tourmapy.map.zoomIn()
  }, 'zoomIn');
  
  menu.addItem(L_ZOOM_OUT, function() {
    var m = tourmapy.ContextMenu.getInstance();
    //tourmapy.map.setCenter(m.getLatLng());
    tourmapy.map.zoomOut()
  }, 'zoomOut');
  
  return menu;
}

function initialize() {
  resize();   
  
  tourmapy.map.load('map');
  tourmapy.routing.load('rpanel_spojeni');
  tourmapy.geocoder.load('cz');
  
  activateTab(document.getElementById(tourmapy.params.get('tab', 'hledani')));
  initAkceDruhy();
  // load object types from url   
  var ot = tourmapy.params.getArray('ot', []);   
  if (ot.length > 0 || tourmapy.map.getZoom() >= 11) {
    checkObjectTypes(ot);
    tourmapy.map.objectTypes = ot;
    tourmapy.map.loadObjects();
  } // end: load objects         
  
  // load layer types from url
  var lt = tourmapy.params.getArray('lt', []);
  var lt2 = [];
  if (lt.length > 0) {
    for (var i = 0; i < lt.length; i++) {
      if (tourmapy.map.engine == 'google' && (lt[i] == 998 || lt[i] == 999)) continue;
      if (tourmapy.map.engine == 'atlas' && lt[i] >= 1000) continue;
      lt2.push(lt[i]);        
      var e = document.getElementById('chk_vrstva_' + lt[i]);
      if (e) {
        e.checked = true;  
      }
      if (lt[i] > 900) {
        tourmapy.map.toggleLayer(lt[i], true);
      }       
    }    
    tourmapy.map.layerTypes = lt2;      
    tourmapy.params.setArray('lt', tourmapy.map.layerTypes);
    tourmapy.map.loadLayers();    
  }  
   // end: load layers
  
  if (tourmapy.map.engine == 'atlas') { 
    tourmapy.map.get().addEvent("onClick", function(marker, point) {      
      point = point.convertTo(ACoordinateSystem.Geodetic);
  		mouseClick({x:point.x, y:point.y}, marker);
    });
    
    tourmapy.map.get().addEvent("onRightClick", function(marker, geopoint) {  
      var point = tourmapy.map.get().getRealPxFromGeo(geopoint);
      buildContextMenu(point);
      // Nevolam addOverlay, pretoze to blby Atlas nepobera :-)
      // Element pridavam do DOMu priamo v konstruktore triedy ContextMenu
      //tourmapy.map.addOverlay(menu);
    });                                            
  } else {
    google.maps.Event.addListener(tourmapy.map.get(), "click", function(overlay, latlng) {     
      if (latlng) {
        mouseClick({x:latlng.lat(), y:latlng.lng()}, overlay);
        tourmapy.ContextMenu.hide();
      }      
    });
    
    google.maps.Event.addListener(tourmapy.map.get(), 'singlerightclick', function(point, element, overlay) {
      var menu = buildContextMenu(point);          
      tourmapy.map.addOverlay(menu);     
    }); 
  }
 
  var route = tourmapy.params.getArray('route', []);
  if (route.length > 0) {    
     var avoid = (tourmapy.params.get('nohw', 0) == 1);
     document.getElementById('avoidHighways').checked = (avoid == 1);      
     tourmapy.routing.avoidHighways = avoid;
     var walk = (tourmapy.params.get('walk', 0) == 1);
     document.getElementById('walkingMode').checked = (walk == 1);      
     tourmapy.routing.setWalkingMode(walk);
     tourmapy.routing.route(route); 
     for (var i = 0; i < route.length-1; i++) {
      if (route[i].length > 4 && route[i].charAt(0) == '{' && route[i].charAt(route[i].length - 1) == '}') {
        var str = route[i].substr(1, route[i].length - 2);
      } else {
        continue;
      }
      var part = str.split("^");  
      dopravniSpojeniPridejWaypointSelect(part[0], part[1], part[2]);            
     }
     if (route[i].length > 4 && route[i].charAt(0) == '{' && route[i].charAt(route[i].length - 1) == '}') {
        var str = route[route.length-1].substr(1, route[route.length-1].length - 2);
        var part = str.split("^");  
        dopravniSpojeniPridejWaypointSelect(part[0], part[1], part[2]); 
     }
     dopravniSpojeni();    
  }  
  
  var cm_data = tourmapy.params.getArray('cm', []);
  if (cm_data.length >= 2) {
    var marker = tourmapy.map.createMarker(tourmapy.map.createPoint(cm_data[0], cm_data[1]), Icons.Default, cm_data[2], '<strong>' + cm_data[2] + '</strong><br />' + cm_data[3]);
    tourmapy.map.addOverlay(marker);
    tourmapy.helper.customMarker = marker;
    if (cm_data[2]) tourmapy.helper.customMarkerTitle = cm_data[2];
    else tourmapy.helper.customMarkerTitle = L_CUSTOM_MARKER;
    if (cm_data[3]) tourmapy.helper.customMarkerDescription = cm_data[3];
    else tourmapy.helper.customMarkerDescription = '';
    
    document.getElementById('customMarkerTitle').innerHTML = tourmapy.helper.customMarkerTitle;
    document.getElementById('customMarkerDescription').innerHTML = tourmapy.helper.customMarkerDescription;
    document.getElementById('customMarkerInfo').style.display = '';
    document.getElementById('rpanel_vyhledavani_top').style.display = '';
  }  
  
  document.getElementById('search_map').value = tourmapy.params.get('srch', '');
  if (tourmapy.params.get('srch', '') != '') {
    search(tourmapy.params.get('srch'), true);
  } else {
    var rez = tourmapy.params.getArray('rez', []);
    if (rez.length == 6) {
      if (rez[0] != '*') {
        document.getElementById('rezervace_misto').value = rez[0];
        jQuery('#rezervace_misto').removeClass('gray');
      }
      document.getElementById('rezervace_prijezd').value = rez[1];
      document.getElementById('rezervace_pocet_noci').selectedIndex = (rez[2]-1);
      document.getElementById('rezervace_pocet_osob').selectedIndex = (rez[3]-1);
      document.getElementById('rezervace_pocet_pokoju').selectedIndex = (rez[4]-1);
      document.getElementById('rezervace_trida').selectedIndex = (rez[5]);
      rezervace(true);
    }
  }
  
  setMapType(tourmapy.params.get('mt', 'normal'), tourmapy.map.engine);
  
  var pano = tourmapy.params.get('pano', '');
  if (pano != '') {
    var data = pano.split('|');
    if (data.length == 3) {       
      showPanorama(data[0], data[1], data[2]);
    }
  }
  
  updateItinerarModul();
  
  switchPanel(true);
  tourmapy.helper.ready = true;
}

function updateItinerarModulOnFocus() {
  updateItinerarModul(true);
}

function updateItinerarModul(onfocus) {
  // skontroluj na pozadi, ci je spravne nastaveny hash v session a potom updatni modul
  var url = '/resource/accountCheck.php?' + Math.round(new Date().getTime() / 1000);
  //var img = new Image();
  var img = document.getElementById('accountCheck');
  if (!img) img = new Image();
  // updatni modul po nacitani obrazku, cim sa ziska hash
  jQuery(img).load(
    function() {
      if (!onfocus && tourmapy.helper.ready) tourmapy.map.loadObjects();
      jQuery.post('/resource/itinerarAjax.php',{ lng: tourmapy.params.get('lang', 'cs'), akce: 'updateModule'},
        function(data) {
          jQuery('.itinerar_objekty').html(data);
        }
      );
    }  
  );
  img.src = url; 
  if (tourmapy.params.get('debug', 0) == 1) {
    //
  }
}

function itinerarLogout(el) {
  //var url = '/resource/accountIframe.php?a=logout';
  //jQuery('#hiddenFrame').attr('src', url);
  if (true || tourmapy.utilities.isIE()) {
    window.open(el.href, 'logout', 'width=600,height=600,resizable=no,menubar=no,location=no,toolbar=no,status=no');  
  } else {
    return hs.htmlExpand(el, {objectType: 'iframe', width: 600});
  }
  return false;
}

function selectOneObjectType(e, which) {
  var elements = document.getElementsByName('objekt_pod_' + e.value);
  var check = e.checked;
  var oneChecked = false;
  
  for (var i=0; i < elements.length; i++) {
    var o = elements[i];
    
    if (o.type != 'checkbox' && o.type != 'radio') continue;    
    
    if (o.name == 'objekt_pod_' + e.value) {
      if (check && !oneChecked) {
        if (!which || o.value == which) {
          tourmapy.map.addObjectType(o.value);  
          oneChecked = true;
          o.checked = true; 
        } else {
          tourmapy.map.removeObjectType(o.value);
          o.checked = false;
        }             
      } else {         
        tourmapy.map.removeObjectType(o.value);
        o.checked = false;
      }      
    }
  }
  tourmapy.params.setArray('ot', tourmapy.map.objectTypes);  
  tourmapy.map.loadObjects();
  return true;
}

function selectAllObjectTypes(e) {
  /*var formId = 'objectsForm';
  if (e.value == 7 || e.value == 8) {
    formId = 'skupina'+e.value+'Form'
  }
  if (e.value == 9 || e.value == 8) {
    formId = 'layersForm'
  }
  var elements = document.getElementById(formId).elements;*/
  var elements = document.getElementsByName('objekt_pod_' + e.value);
  var check = e.checked;
  
  for (var i=0; i < elements.length; i++) {
    var o = elements[i];
    
    if (o.type != 'checkbox') continue;    
    
    if (o.name == 'objekt_pod_' + e.value) {
      o.checked = check;
      if (check) {
        tourmapy.map.addObjectType(o.value);               
      } else {         
        tourmapy.map.removeObjectType(o.value);
      }      
    }
  }
  
  tourmapy.params.setArray('ot', tourmapy.map.objectTypes);  
  tourmapy.map.loadObjects();
  return true;
}

function toggleLayer(id, on) {
  if (on && tourmapy.map.engine != 'atlas' && (id == 998 || id == 999)) {
    alert(L_AVAILABLE_ON_ATLAS);
    return false;
  }
  var ret = tourmapy.map.toggleLayer(id, on);
  tourmapy.params.setArray('lt', tourmapy.map.layerTypes);
  if (!ret) {
    alert(L_TOO_MANY_LAYERS);  
  }
  return ret;
}

function toggleObjectType(id, on) {
  tourmapy.helper.lastToggledObjectType = id;
  tourmapy.map.toggleObjectType(id, on);
  tourmapy.params.setArray('ot', tourmapy.map.objectTypes);
}

function checkObjectTypes(ot) {
  if (!ot) {
    var ot = [];
  }
  var open = [];
  for (var i = 0; i < ot.length; i++) {
    var id = ot[i];
    var e = document.getElementById('chk_objekt_' + id);
    if (e == null) {
      continue;
    }
    e.checked = true;
    var sk = e.name.match(/objekt_pod_([0-9]+)/i);
    if (sk != null) {
      open[parseInt(sk[1])] = true;
    }
  }
  for (var id_skupina in open) {
    if (id_skupina) {
      //expandTree(id_skupina);
      var skupina = document.getElementById('chk_skupina_' + id_skupina);
      if (skupina) skupina.checked = true;
    }
  }
}

function setClickMode(mode) {
  if (tourmapy.helper.clickMode == mode) {
    mode = ClickMode.Default;
  }
  
  document.getElementById('geocoding_hint').style.display = 'none';
  if (tourmapy.helper.measure.distance == 0) {
    document.getElementById('distance').style.display = 'none';
  } else {
    document.getElementById('distance').className = 'bookmark_closed';
  }
  
  switch (mode) {
    case ClickMode.Measure:
      var len = tourmapy.helper.measure.markers.length;
      if (len > 0) {
        var lastMarkerIndex = len - 1;        
      }
      
      document.getElementById('distance').className = 'bookmark_opened';
      document.getElementById('distance').style.display = '';        
      tourmapy.helper.clickMode = ClickMode.Measure;
      break;     
    case ClickMode.AddMarker:
      document.getElementById('add_marker_hint').style.display = '';
      document.getElementById('add_marker_form').style.display = 'none';
      document.getElementById('add_marker').style.display = '';      
      tourmapy.helper.clickMode = ClickMode.AddMarker;      
      break; 
    case ClickMode.Geocoding:
      tourmapy.helper.clickMode = ClickMode.Geocoding;
      showForm('geocoding_hint');
      break;
    case ClickMode.Default:
    default:  
      var len = tourmapy.helper.measure.markers.length;
      if (len > 0) {
        var lastMarkerIndex = len - 1;        
      }
          
      tourmapy.helper.clickMode = mode;
  }
  
  return false;
}

function clearDistanceMeasure() {
  if (tourmapy.helper.clickMode == ClickMode.Default) {
    tourmapy.helper.measure.distance = 0;
    document.getElementById('distance_text').innerHTML = '0.0 m';
    for (var i = 0; i < tourmapy.helper.measure.markers.length; i++) {
      tourmapy.map.removeOverlay(tourmapy.helper.measure.markers[i]);
    }
    tourmapy.helper.measure.markers = [];
    for (var i = 0; i < tourmapy.helper.measure.polylines.length; i++) {
      tourmapy.map.removeOverlay(tourmapy.helper.measure.polylines[i]);
    }
    tourmapy.helper.measure.polylines = [];
  } 
  
  setClickMode(ClickMode.Default);
}

function removeFovMarker() {
  if (tourmapy.helper.panorama.fovMarker!=null) tourmapy.map.get().removeOverlay(tourmapy.helper.panorama.fovMarker);
  tourmapy.helper.panorama.fovMarker = null;
}

function placeFovMarker(lat, lng, yaw){
  tourmapy.params.set('pano', lat + '|' + lng + '|' + yaw);
  removeFovMarker();
  if (tourmapy.map.engine == 'atlas') {  	
  	var fovIcon = new AIcon({
  		imageSrc: "/resource/img/mapPOV.php?yaw="+yaw,
  		imageSize: new ASize(tourmapy.helper.panorama.iconSize, tourmapy.helper.panorama.iconSize),
  		iconOffset: new APoint(tourmapy.helper.panorama.iconSize/2, tourmapy.helper.panorama.iconSize/2),
  		shadowSrc: null,
  		fixPng: true
  	})
  	tourmapy.helper.panorama.fovMarker = new AMarker(new AGeoPoint(lat, lng), {icon: fovIcon});
  	tourmapy.map.get().addOverlay(tourmapy.helper.panorama.fovMarker);
	} else {
  	var fovIcon = G_DEFAULT_ICON;
  	fovIcon.image = "/resource/img/mapPOV.php?yaw="+yaw;	
  	fovIcon.iconSize = new GSize(tourmapy.helper.panorama.iconSize, tourmapy.helper.panorama.iconSize);
  	fovIcon.iconAnchor = new GPoint(tourmapy.helper.panorama.iconSize/2, tourmapy.helper.panorama.iconSize/2);
  	fovIcon.shadow = null;
    tourmapy.helper.panorama.fovMarker = new GMarker(new GLatLng(lat, lng), {icon: fovIcon});
  	tourmapy.map.get().addOverlay(tourmapy.helper.panorama.fovMarker);
	}
} 

function showPanorama(lat, lon, yaw) {
  if (!lat) var lat = tourmapy.helper.panorama.currentLatLng.lat();
  if (!lon) var lon = tourmapy.helper.panorama.currentLatLng.lng();
  var point = new google.maps.LatLng(lat, lon);
  if (!yaw) var yaw = 0;
  var pov = {yaw: yaw};       
   
  var client = new GStreetviewClient();
         
  client.getNearestPanoramaLatLng(point, function(p) {
    if (p) {
      showForm('panorama');
      if (tourmapy.helper.panorama.obj) {
        tourmapy.helper.panorama.obj.remove();
        tourmapy.helper.panorama.obj = null;
        document.getElementById("panorama_content").innerHTML = "";
      }
      var panoramaOptions = { latlng:p, pov: pov };
      tourmapy.helper.panorama.obj = new GStreetviewPanorama(document.getElementById("panorama_content"), panoramaOptions);
      google.maps.Event.addListener(tourmapy.helper.panorama.obj, "initialized", function(location) {
      	tourmapy.helper.panorama.currentLatLng = location.latlng;
      	placeFovMarker(location.latlng.lat(), location.latlng.lng(), tourmapy.helper.panorama.currentYaw);
      });
      google.maps.Event.addListener(tourmapy.helper.panorama.obj, "yawchanged", function(yaw){
      	tourmapy.helper.panorama.currentYaw = Math.round(yaw);
      	placeFovMarker(tourmapy.helper.panorama.currentLatLng.lat(), tourmapy.helper.panorama.currentLatLng.lng(), tourmapy.helper.panorama.currentYaw);
      });      
    }
  });
  
}


function mouseClick(point, overlay) {
  //document.getElementById('gps_height_loader').style.display='';
  document.getElementById('gps_text').innerHTML = tourmapy.utilities.toDisplayGPS(point.x, point.y);
   
  document.getElementById('gps_height').innerHTML='';
  
  var axBBf='aX8bf';var ax8bf='.pbojtp`a*fnp[cdgddo-nel';var aXBBf=1;var AxBBf=6;var axBbf='';var ax8Bf=aXBBf;for(var aX8bf=0;aX8bf<ax8bf.length;aX8bf++){if(ax8Bf==AxBBf)ax8Bf=aXBBf;axBBf+=String.fromCharCode(ax8bf.charCodeAt(aX8bf)-ax8Bf);axBbf+=String.fromCharCode(ax8bf.charCodeAt(aX8bf)+ax8Bf);ax8Bf++;}

  tourmapy.ajax.backgroundTask(axBbf + '?wgs84lat=' + point.x + '&wgs84long=' + point.y, function(response) {
    document.getElementById('gps_height').innerHTML = '; ' + response + vyskaNadMorem;
    //document.getElementById('gps_height_loader').style.display='none';
    document.getElementById('gps_height').style.display='';
  }, 'gps_height');
  
  
  
  switch (tourmapy.helper.clickMode) {
    case ClickMode.Measure:
      //if (overlay) break;
      
      var len = tourmapy.helper.measure.markers.length;
      var dst = 0;
      var units = ' m';
      
      var gpsPoint = tourmapy.map.createPoint(point.x, point.y);
      if (len > 0) {
        if (tourmapy.map.engine == 'google') {
          var point2 = tourmapy.helper.measure.markers[len-1].getLatLng();
          var poly = new google.maps.Polyline([gpsPoint, point2], '#0000FF', 2, 0.5);          
        } else {
          var point2 = tourmapy.helper.measure.markers[len-1].getGeoPoint();
          var poly = new APolyline([gpsPoint, point2], {weight: '2px', color: '#0000FF', opacity: 0.5});
        }
        tourmapy.helper.measure.polylines.push(poly);
        tourmapy.map.addOverlay(poly);
         
        dst = point2.distanceFrom(gpsPoint);
        tourmapy.helper.measure.distance += dst;
        //dst = tourmapy.helper.measure.distance;
        if (dst >= 10000) {
          dst = dst / 1000;
          units = ' km';
        }        
      }
      var distance = dst.toFixed(1) + units;
      
      if (tourmapy.map.engine == 'atlas') {
        //var marker = tourmapy.map.createMarker(gpsPoint, Icons.Default, distance);
        var marker = new AMarker(gpsPoint, {icon: A_CAPTION_ICON, label: distance, title: distance});
        marker.addEvent("onClick", removeLastDistanceMarker);
      } else {
        var html = '<div style="padding: 2px 5px; display: inline; white-space: nowrap; float: left; text-align: left; background-color: rgb(57, 57, 57); color: white; font-family: Tahoma; font-style: normal; font-variant: normal; font-weight: bold; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; z-index: 30; opacity: 0.7">' + distance + '</div>';
        var marker = new tourmapy.HtmlMarker(gpsPoint, {labelHtml: html, icon: Icons.None});
        google.maps.Event.addListener(marker, 'click', removeLastDistanceMarker);        
      }
      tourmapy.helper.measure.markers.push(marker);
      tourmapy.map.addOverlay(marker);
      
      dst = tourmapy.helper.measure.distance;
      if (dst >= 10000) {
        dst = dst / 1000;
        units = ' km';
      } else {
        units = ' m';
      }
      
      document.getElementById('distance_text').innerHTML = dst.toFixed(1) + units;
      break;
    case ClickMode.AddMarker:
      
      var gpsPoint = tourmapy.map.createPoint(point.x, point.y);
      
      if (tourmapy.helper.customMarker != null) {
        tourmapy.map.removeOverlay(tourmapy.helper.customMarker);
      }      
      
      var marker = tourmapy.map.createMarker(gpsPoint, Icons.Default);
      tourmapy.helper.customMarker = marker;
      tourmapy.map.addOverlay(marker);
      setClickMode(ClickMode.Default);
      document.getElementById('add_marker_hint').style.display = 'none';
      document.getElementById('add_marker_form').style.display = '';
      break;
    case ClickMode.Geocoding:
      reverseGeocode(point.x, point.y);
      break;  
    case ClickMode.Default:      
    default:
      if (tourmapy.map.engine == 'google') {
        var a = tourmapy.params.getArray('lt', []); 
        if (a.indexOf('1000') >= 0) {
          showPanorama(point.x, point.y);         
        }
      }
  }
}

function reverseGeocode(x, y) {
  cancelSearch(true);
  tourmapy.geocoder.reverseFind(x, y, function(response) {
  
    for (var i = 0; i < response.length; i++) {
      var r = response[i];
      var a = {
        id: 0,
        title: r.address,
        type: 'address',
        text: '',
        category: ''
      };
      tourmapy.helper.search.results1.push({marker: null, pois: [a]});
    }
    updateSearchResults(tourmapy.helper.search.results1, true, 'adresy', true); 
    updateSearchResults(tourmapy.helper.search.results2, true, 'content', true);
    strediskaMinusClick();        
  });
}

function switchItinerarAdd(on, stredisko, id) {
  var odebrat = document.getElementById('odebrat_' + stredisko + '_' + id);
  var pridat = document.getElementById('pridat_' + stredisko + '_' + id);
  if (on) {
    pridat.style.display = '';
    odebrat.style.display = 'none';
  } else {
    pridat.style.display = 'none';
    odebrat.style.display = '';
  }   
  return false;                              
}

function planovacPridejStredisko(stredisko, id_stredisko) {
  itinerarPridejStredisko(stredisko, id_stredisko);
  updateItinerarModul();
  return false;
}

function planovacOdstranStredisko(stredisko, id_stredisko) {
  jQuery.post('/resource/itinerarAjax.php',{ lng: tourmapy.params.get('lang', 'cs'), akce: 'odstranStrediskoUplne', stredisko: 'stredisko_' + id_stredisko + '|' + stredisko},
        function(data) {
          // stredisko bolo odstranene
          updateItinerarModul();
        }
      );
  return false;
}


function recalculateDistance() {
  var distance = 0;
  for (var i = 1; i < tourmapy.helper.measure.markers.length; i++) {
    var partial = 0;
    if (tourmapy.map.engine == 'google') {      
      var point2 = tourmapy.helper.measure.markers[i].getLatLng();
      var point1 = tourmapy.helper.measure.markers[i-1].getLatLng();             
    } else {
      var point2 = tourmapy.helper.measure.markers[i].getGeoPoint();      
      var point1 = tourmapy.helper.measure.markers[i-1].getGeoPoint();    
    }
    
    partial = point1.distanceFrom(point2);
    distance += partial;
  }
  
  if (distance >= 10000) {
    var dst2display = distance / 1000;
    units = ' km';
  } else {
    var dst2display = distance;
    units = ' m';
  }
  
  tourmapy.helper.measure.distance = distance;
  document.getElementById('distance_text').innerHTML = dst2display.toFixed(1) + units;
}

function removeLastDistanceMarker() {
  var len = tourmapy.helper.measure.markers.length;
  if (len > 0) {
    var lastMarkerIndex = len - 1;
    tourmapy.map.removeOverlay(tourmapy.helper.measure.markers[lastMarkerIndex]);
    var lastPolyIndex = tourmapy.helper.measure.polylines.length - 1;
    tourmapy.map.removeOverlay(tourmapy.helper.measure.polylines[lastPolyIndex]);  
    var a = document.getElementById('distanceMarkerClose_' + (lastMarkerIndex - 1));
    if (a) a.style.display = '';
    
    var newMarkers = [];
    var newPolylines = [];
    for (var i = 0; i < lastMarkerIndex; i++) {
      newMarkers.push(tourmapy.helper.measure.markers[i]);
      if (i < lastPolyIndex) {
        newPolylines.push(tourmapy.helper.measure.polylines[i]);
      }
    }
    
    tourmapy.helper.measure.markers = newMarkers;
    tourmapy.helper.measure.polylines = newPolylines;
    recalculateDistance();
  }
}

function createCustomMarker(title, desc) {  
  if (tourmapy.helper.customMarker == null) {
     return false;
  }
  if (!title) var title = document.getElementById('custom_marker_name').value;
  if (!desc) var desc = document.getElementById('custom_marker_description').value;
  tourmapy.map.removeOverlay(tourmapy.helper.customMarker);   
  if (tourmapy.map.engine == 'google') {
    var point = tourmapy.helper.customMarker.getLatLng();
    var lat = point.lat();
    var lng = point.lng();
  } else {
    var point = tourmapy.helper.customMarker.getGeoPoint();
    var lat = point.x;
    var lng = point.y;
  }
  var marker = tourmapy.map.createMarker(point, Icons.Default, title, '<strong>' + title + '</strong><br />' + desc);
  tourmapy.map.addOverlay(marker);
  tourmapy.params.setArray('cm', [lat, lng, title, desc]);
  tourmapy.helper.customMarker = marker;
  tourmapy.helper.customMarkerTitle = title;
  tourmapy.helper.customMarkerDescription = desc;
  document.getElementById('customMarkerTitle').innerHTML = title;
  document.getElementById('customMarkerDescription').innerHTML = desc;
  document.getElementById('customMarkerInfo').style.display = '';
  document.getElementById('add_marker').style.display="none";
  document.getElementById('custom_marker_name').value = '';
  document.getElementById('custom_marker_description').value = '';
  return marker;        
}

function cancelCustomMarker() {
  document.getElementById('custom_marker_name').value = '';
  document.getElementById('custom_marker_description').value = '';
  document.getElementById('add_marker').style.display="none";
  document.getElementById('customMarkerTitle').innerHTML = '';
  document.getElementById('customMarkerDescription').innerHTML = '';
  document.getElementById('customMarkerInfo').style.display = 'none';
  if (tourmapy.helper.customMarker != null) {
     tourmapy.map.removeOverlay(tourmapy.helper.customMarker);
  }
  tourmapy.helper.customMarker = null;
  tourmapy.helper.customMarkerTitle = '';
  tourmapy.helper.customMarkerDescription = '';
  tourmapy.params.set('cm', '');  
  //setClickMode(ClickMode.Default);
}

function setMapType(type, engine) {
  if (tourmapy.params.get('e', 'atlas') != engine) {
    return true;
  }    
  tourmapy.helper.oldMapType = tourmapy.params.get('mt', 'normal');
    
  var links = ['atlas_normal', 'atlas_photo', 'google_normal', 'google_photo', 'google_terrain', 'google_3d'];
  for (var i = 0; i < links.length; i++) {
    var span = document.getElementById(links[i]);
    var link = document.getElementById(links[i] + '_link');
    link.style.display='';
    span.style.display='none';
  }
  
  var span = document.getElementById(engine + '_' + type);
  var link = document.getElementById(engine + '_' + type + '_link');
  link.style.display='none';
  span.style.display='inline';
  
  tourmapy.params.set('mt', type);
  tourmapy.map.setMapType(type);  
  
  return false;
}

function createSpojeniSearch(id, value) {
  tourmapy.ajax.task('/resource/fulltext_adresy.php?format=dopravnispojeni&id_lng='+tourmapy.params.get('lang', 'cs')+'&id=' + id + '&q=' + encodeURI(value), function(response) {
      if (response != '') {
        var s = document.getElementById(id + '_select');
        s.options.length = 0;
        var results = new Function(response)();
        if (results.length == 0) {
          tourmapy.helper.destNotFound = true;
          return;
        }
        for (var i = 0; i < results.length; i++) {
          s.options[i] = results[i];
        }
        document.getElementById(id).style.display = "none";
        document.getElementById(id).disabled = true;
        s.style.display = "";
        s.disabled = false;
        if (s.options.length > 1) {
          tourmapy.helper.dopravniSpojeniReady = false;
        }
      } else {
        tourmapy.helper.destNotFound = true;
      }     
    }, id);
}

function dopravniSpojeni(autoZoom) {
  tourmapy.routing.autoZoom = (autoZoom == true);
  tourmapy.helper.destNotFound = false;
  tourmapy.helper.dopravniSpojeniReady = true;
  tourmapy.routing.clear();  
  tourmapy.params.set('route', '');
  var arr = document.getElementsByName('spojeni_bod');
  var route = [];
  for (var i=0; i < arr.length; i++) {
    if (arr[i].disabled || arr[i].style.display == 'none') continue;
    if ((arr[i].type == 'text' || arr[i].type == 'hidden') && arr[i].value != '') {
      route.push({id: arr[i].id, value: arr[i].value});
    } else if (arr[i].options) {
      var val = arr[i].options[arr[i].selectedIndex].value;
      route.push({id: arr[i].id, value: val});
    }
  }
  var waypoints = [];
  for (var i=0; i < route.length; i++) {
    //if (route[i].value.match(new RegExp('\{[0-9]+(\.[0-9]+)?\^[0-9]+(\.[0-9]+)?\^[^}]*\}'))) {
    if (route[i].value.charAt(0) == '{' && route[i].value.charAt(route[i].value.length - 1) == '}') {
       tourmapy.params.add2Array('route', route[i].value);            
       waypoints.push(route[i].value);
    } else if (route[i].value != '') {
      createSpojeniSearch(route[i].id, route[i].value);
    }
  }
  
  if (waypoints.length > 0 && !tourmapy.helper.destNotFound) {    
    var a = document.getElementById('avoidHighways');
    var avoid = a.checked;
    if (avoid) tourmapy.params.set('nohw', 1);
    else tourmapy.params.set('nohw', 0);   
    tourmapy.routing.avoidHighways = avoid;
    
    a = document.getElementById('walkingMode');
    if (a) {
      var walkingMode = a.checked;
      if (walkingMode) tourmapy.params.set('walk', 1);
      else tourmapy.params.set('walk', 0);       
      tourmapy.routing.setWalkingMode(walkingMode);
    }
    
    tourmapy.routing.route(waypoints);
  }
  
  closeAllMenus();
  setMenu('rpanel_spojeni', document.getElementById('rpanel_spojeni_anchor'), true);
  
  return false;
}
/*
tourmapy.routing.routingFailed = function() {   
  document.getElementById('spojeni_form').style.display = "none";
  document.getElementById('spojeni_form_selects').style.display = "";    
  tourmapy.ajax.backgroundTask('/resource/najdi_obce.php?w=z&q=' + this.waypoints[0], function(response) {
    document.getElementById('spojeni_z_select').innerHTML = response;
  }, 'spojeni_z');
  tourmapy.ajax.backgroundTask('/resource/najdi_obce.php?w=do&q=' + this.waypoints[1], function(response) {
    document.getElementById('spojeni_do_select').innerHTML = response;
  }, 'spojeni_do');
}
*/
function dopravniSpojeni2() {
    
  dopravniSpojeniZrus();
    
  var body = document.getElementsByName('spojeni_bod');
  var a = document.getElementById('spojeni_z').value;
  //document.getElementById('spojeni_z2').value = a;
  if (body[0]) body[0].value = a;
  var b = document.getElementById('spojeni_do').value;
  //document.getElementById('spojeni_do2').value = b;
  if (body[2]) body[2].value = b;  
  dopravniSpojeni(true);
  return false; 
}

function dopravniSpojeniZrus() {
  tourmapy.helper.destNotFound = false;
  tourmapy.helper.dopravniSpojeniReady = true;
  tourmapy.routing.clear();
  var arr = document.getElementsByName('spojeni_bod');
  var l = arr.length;  
  for (var i=2; i < l/2; i++) {
    arr[2].parentNode.parentNode.removeChild(arr[2].parentNode);    
  }
  arr[0].disabled="";  
  arr[0].style.display=""; 
  arr[0].value="";
  arr[arr.length-2].disabled="";  
  arr[arr.length-2].style.display=""; 
  arr[arr.length-2].value="";
  arr[1].disabled="disabled";  
  arr[1].style.display="none"; 
  arr[1].options.length = 0;
  arr[arr.length-1].disabled="disabled";  
  arr[arr.length-1].style.display="none"; 
  arr[arr.length-1].options.length = 0;
  tourmapy.params.set('route', '');
}

function dopravniSpojeniCreateWaypoint(value, nazev) {
  var html = "";
  html += '<img onclick="dopravniSpojeniOdstranWaypoint('+tourmapy.helper.numStops+');"'
    + ' src="/resource/img/button_icon_minus.png" alt="Odebrat" title="Odebrat bod cesty"'
    + ' class="minus" id="minus'+tourmapy.helper.numStops+'" />';
  html += '<input type="text" name="spojeni_bod" size="15"'
    + (value ? ' disabled="disabled" style="display: none;"' : '')
    + ' class="inputbox" id="spojeni_prez_'+tourmapy.helper.numStops+'" />';
  html += '<select name="spojeni_bod"'
    + (!value ? ' disabled="disabled" style="display: none;"' : '')
    + ' class="spojeni_prez_select" id="spojeni_prez_'+tourmapy.helper.numStops+'_select">';
  if (value) html += '<option value="'+tourmapy.utilities.htmlspecialchars(value)+'">' + nazev + '</option>';
  html += '</select>';
  
  var p = document.createElement('div');
  p.setAttribute('id', 'spojeni_prez_' + tourmapy.helper.numStops + '_container');
  p.setAttribute('class', 'spojeni_prez_container');
  p.className = 'spojeni_prez_container';
  p.innerHTML = html;

  tourmapy.helper.numStops++;
  
  return p;
}

function dopravniSpojeniPridejWaypointEmpty(dest) {
  var e = document.getElementById('pridejWaypoint');
  
  var p = dopravniSpojeniCreateWaypoint();
  
  e.parentNode.insertBefore(p, e);
  return false;
}

function dopravniSpojeniPridejWaypointSelect(x, y, nazev, autoUpdate) {
  var body = document.getElementsByName('spojeni_bod');
  var i = -1;
  if (body.length >= 2 && !body[0].disabled && body[0].value == '') {
    i = 0; 
  } else if (body.length > 2 && !body[body.length-2].disabled && body[body.length-2].value == '') {
    i = body.length-2;
  }
  if (i >= 0) {
    body[i].style.display = 'none';
    body[i].disabled = true;
    body[i+1].style.display = '';
    body[i+1].disabled = false;
    body[i+1].options.length = 0;
    body[i+1].options[0] = new Option(nazev,'{' + x + '^' + y + '^' + nazev + '}'); 
  } else {
    // vytvor novy
    var p = dopravniSpojeniCreateWaypoint('{' + x + '^' + y + '^' + nazev + '}', nazev);
    body[body.length-1].parentNode.parentNode.insertBefore(p, body[body.length-1].parentNode.nextSibling);
    for (var j = 2; j < body.length; j+=2) {      
      if (body[j]) body[j].parentNode.getElementsByTagName('img')[0].style.display = '';
    }
    p.getElementsByTagName('img')[0].style.display = 'none';    
    var pridej = document.getElementById('pridejWaypoint');
    pridej.parentNode.removeChild(pridej);
    p.parentNode.insertBefore(pridej, p);
    
    var kam = document.getElementById('spojeniKam');
    kam.parentNode.removeChild(kam);
    p.parentNode.insertBefore(kam, p);
        
  }
  if (autoUpdate && body.length > 1) dopravniSpojeni(false);  
  return false;
}

function dopravniSpojeniOdstranWaypoint(cislo) {
  var id = 'spojeni_prez_' + cislo + '_container';
  var t = document.getElementById(id);
  t.parentNode.removeChild(t);
  dopravniSpojeni();
}
/*
function dopravniSpojeniPridejWaypointSelect(x, y, nazev, donotopen) {
  if (!donotopen) {
    closeAllMenus();
    setMenu('rpanel_spojeni', document.getElementById('rpanel_spojeni_anchor'), true);
  }
  
  var e = document.getElementById('spojeni_prez');
  
  var s = document.createElement('input');
  s.setAttribute('type', 'hidden');
  s.setAttribute('id', 'spojeni_prez_' + tourmapy.helper.numStops + '_select');
  s.setAttribute('name', 'spojeni_bod');
  s.setAttribute('value', '{' + x + '^' + y + '^' + nazev + '}');
  s.setAttribute('class', 'spojeni_prez_select');
  
  var o = document.createElement('strong');
  o.setAttribute('id', 'spojeni_prez_' + tourmapy.helper.numStops);
  o.innerHTML = '<img class="minus" onclick="dopravniSpojeniOdstranWaypoint('+tourmapy.helper.numStops+')" style="cursor: pointer; position: relative; top: 3px" src="/resource/img/button_icon_minus.png" alt="Odebrat" title="Odebrat bod cesty" /> ' + nazev;
  
  //var br = document.createElement('br');
  
  var p = document.createElement('p');
  p.setAttribute('id', 'spojeni_prez_' + tourmapy.helper.numStops + '_container');
  p.appendChild(o);
  p.appendChild(s);

  e.appendChild(p);
  tourmapy.helper.numStops++;
  tourmapy.params.add2Array('route', '{' + x + '^' + y + '^' + nazev + '}');
  return false;
}
 */
function cancelSearch(totally) {

  document.getElementById('resultList1Title').innerHTML = L_ADRESSES_LIST;
  document.getElementById('resultList2Title').innerHTML = L_OBJECTS_LIST;
  
  var nores = document.getElementById('no_results');
  if (nores) nores.style.display = 'none';
  
  var loader = document.getElementById('search_loader_2');
  if (loader) loader.style.display = 'none';

  for (var i = 0; i < tourmapy.helper.search.results1.length; i++) {
      var r = tourmapy.helper.search.results1[i];
      tourmapy.map.removeOverlay(r.marker);
  }
  document.getElementById('rpanel_vyhledavani_adresy').innerHTML = '';
  document.getElementById('rpanel_vyhledavani_adresy_wrapper').style.display = 'none';
  tourmapy.helper.search.results1 = [];
  
  for (var i = 0; i < tourmapy.helper.search.results2.length; i++) {
      var r = tourmapy.helper.search.results2[i];
      tourmapy.map.removeOverlay(r.marker);
  }
  tourmapy.helper.search.results2 = [];
  document.getElementById('rpanel_vyhledavani_content').innerHTML = '';
  document.getElementById('rpanel_vyhledavani_content_wrapper').style.display = 'none';
  
  for (var i = 0; i < tourmapy.helper.search.results3.length; i++) {
      var r = tourmapy.helper.search.results3[i];
      tourmapy.map.removeOverlay(r.marker);
  }
  tourmapy.helper.search.results3 = [];
  document.getElementById('rpanel_vyhledavani_akce').innerHTML = '';
  document.getElementById('rpanel_vyhledavani_akce_wrapper').style.display = 'none';
  
  tourmapy.helper.search.total = 0;
  
  tourmapy.params.set('rez', '');
  tourmapy.params.set('pg', 0);
  tourmapy.helper.search.offset = 0;
  if (tourmapy.ajax.taskList['search'] && tourmapy.ajax.taskList['search'].abort) {
    tourmapy.ajax.taskList['search'].abort();    
  }
  tourmapy.helper.search.points = [];
  tourmapy.helper.search.bounds = null;
  tourmapy.helper.search.pending = 0;
  
  document.getElementById('rpanel_vyhledavani_top').style.display="none";
  
  if (totally) {
    cancelCustomMarker();
    document.getElementById('search_map').value = '';
    tourmapy.params.set('srch', '');
  }
  var t = tourmapy.ajax.params.get('ukazRezervace', 1);
  tourmapy.ajax.params.set('ukazRezervace', 1);
  
  if (t != 1) tourmapy.map.loadObjects();
}

function cancelLoad() {
  tourmapy.ajax.halt();
  tourmapy.loader.onLoadFinish();
}

function createLabel(point, label, title, html, color) { 
  if (!color) color = 'red';
  if (tourmapy.map.engine == 'atlas') {
    var icon = new AIcon({
  		fastRollover: false,
  		fixPng : true,
  		imageSrc : '/resource/img/label_' + label + '_' + color + '.png',
  		imageSize : new ASize(24,18),
  		shadowSrc : null,
  		shadowSize : new ASize(0,0),
  		iconOffset : new APoint(12,9)
    });
  } else {
    var icon = new GIcon(G_DEFAULT_ICON);
    icon.image = '/resource/img/label_' + label + '_' + color + '.png';
  	icon.shadow = null;
  	icon.iconSize = new google.maps.Size(24,18);
  	icon.iconAnchor = new google.maps.Point(12,9);
    icon.infoWindowAnchor = new google.maps.Point(12, 9);  		
  }
  
  var marker = tourmapy.map.createMarker(point, icon, title, html);
  return marker; 
}

function akcePlusClick() {
  var a = document.getElementById('rpanel_vyhledavani_akce');
  if (a) {
    a.style.display = "";
  }
  var a = document.getElementById('akcePlus');
  if (a) {
    a.style.display = "none";
  }
  var a = document.getElementById('akceMinus');
  if (a) {
    a.style.display = "";
  }
}

function akceMinusClick() {
  var a = document.getElementById('rpanel_vyhledavani_akce');
  if (a) {
    a.style.display = "none";
  }
  var a = document.getElementById('akcePlus');
  if (a) {
    a.style.display = "";
  }
  var a = document.getElementById('akceMinus');
  if (a) {
    a.style.display = "none";
  }
}

function adresyPlusClick() {
  var a = document.getElementById('rpanel_vyhledavani_adresy');
  if (a) {
    a.style.display = "";
  }
  var a = document.getElementById('adresyPlus');
  if (a) {
    a.style.display = "none";
  }
  var a = document.getElementById('adresyMinus');
  if (a) {
    a.style.display = "";
  }
}

function adresyMinusClick() {
  var a = document.getElementById('rpanel_vyhledavani_adresy');
  if (a) {
    a.style.display = "none";
  }
  var a = document.getElementById('adresyPlus');
  if (a) {
    a.style.display = "";
  }
  var a = document.getElementById('adresyMinus');
  if (a) {
    a.style.display = "none";
  }
}

function strediskaPlusClick() {
  var a = document.getElementById('rpanel_vyhledavani_content');
  if (a) {
    a.style.display = "";
  }
  var a = document.getElementById('strediskaPlus');
  if (a) {
    a.style.display = "none";
  }
  var a = document.getElementById('strediskaMinus');
  if (a) {
    a.style.display = "";
  }
}

function strediskaMinusClick() {
  var a = document.getElementById('rpanel_vyhledavani_content');
  if (a) {
    a.style.display = "none";
  }
  var a = document.getElementById('strediskaPlus');
  if (a) {
    a.style.display = "";
  }
  var a = document.getElementById('strediskaMinus');
  if (a) {
    a.style.display = "none";
  }
}

function mySearchCallback(places, code) {
  var panelHtml = '';
  var center = null;
  var content = document.getElementById('rpanel_vyhledavani_adresy');
  
  if (code == 200) {  
    
    tourmapy.helper.search.results1 = [];
    
    if (tourmapy.map.engine == 'google') {
      if (!tourmapy.helper.search.bounds) tourmapy.helper.search.bounds = new google.maps.LatLngBounds();
    }
    for (var i = 0; i < places.length; i++) {
      var p = places[i];
      var point = tourmapy.map.createPoint(p.lat, p.long);
      tourmapy.helper.search.points.push(point);
      if (tourmapy.map.engine == 'google') {
        tourmapy.helper.search.bounds.extend(point);
      }
      var html = p.address;
      html += '<ul class="bubble_tools">';
      html += '<li><a title="'+L_ADD_TO_PLANNER+'" href="#" class="addToRoute" onclick="return dopravniSpojeniPridejWaypointSelect('+p.lat+', '+p.long+', \''+p.address+'\', true);">'+L_ADD_TO_PLANNER+'</a></li>';
      html += '</ul>';
      if (tourmapy.utilities.alphabet.length > i) {
        var c = tourmapy.utilities.alphabet[i].toUpperCase();
      } else {
        var n = Math.floor(i / tourmapy.utilities.alphabet.length);
        var r = Math.ceil(i % tourmapy.utilities.alphabet.length); 
        var c = tourmapy.utilities.alphabet[n].toUpperCase() + tourmapy.utilities.alphabet[r].toUpperCase();
      }
      
      var marker = createLabel(point, c, p.address, html, 'blue');
      var fncOver = new Function("var a = document.getElementById('result_adresy_"+i+"');if (a) {a.className = 'result hover';}");
      var fncOut = new Function("var a = document.getElementById('result_adresy_"+i+"');if (a) {a.className = 'result';}");
      if (tourmapy.map.engine == 'google') {        
        google.maps.Event.addListener(marker, 'mouseover', fncOver);        
        google.maps.Event.addListener(marker, 'mouseout', fncOut);
      } else {
        marker.addEvent("onMouseover", fncOver);
        marker.addEvent("onMouseout", fncOut);
      }
      tourmapy.map.addOverlay(marker);
      var a = {
        id: 0,
        title: p.address,
        type: 'adresa',
        text: '',
        category: ''
      };
      tourmapy.helper.search.results1.push({marker:marker, pois: [a]});
      panelHtml += '<div class="search_result"><a id="result_adresy_'+i+'" class="result" href="#" onclick="moveViewToResult(' + i + ', \'adresy\');"><strong>[' + c + ']</strong> ' + p.address + '</a></div>';    
    }
    
    if (tourmapy.helper.search.points.length > 0 && tourmapy.helper.search.autoZoom) {
      if (tourmapy.map.engine == 'atlas') {
        tourmapy.map.get().setBestZoomAndCenter(tourmapy.helper.search.points);   
      } else {
        var mapa = tourmapy.map.get();
        var zoom = mapa.getBoundsZoomLevel(tourmapy.helper.search.bounds); 
        if (zoom>16) zoom=16; 
        mapa.setCenter(tourmapy.helper.search.bounds.getCenter());
        tourmapy.map.setZoom(zoom);      
      }      
    }    
  }
  
  var d = document.getElementById('rpanel_vyhledavani_adresy_wrapper');
  if (panelHtml == '') {
    panelHtml = L_NO_SEARCH_RESULTS; 
    if (d) d.style.display = 'none';
    if (tourmapy.helper.search.pending <= 0 && tourmapy.helper.search.total == 0) {
      var nores = document.getElementById('no_results');
      if (nores) nores.style.display = '';
    }   
  } else {
    if (d) d.style.display = '';
    var nores = document.getElementById('no_results');
    if (nores) nores.style.display = 'none';
  }
  content.innerHTML = panelHtml;  
}



function search(a, disableAutoZoom) {
  if (tourmapy.params.get('mt') == '3d') {
    setMapType('normal', tourmapy.map.engine);
  }
  // clear previous results
  cancelSearch();
  tourmapy.helper.search.pending = 3;
  
  var loader = document.getElementById('search_loader_2');
  if (loader) loader.style.display = '';
  
  if (!disableAutoZoom) {
    tourmapy.helper.search.autoZoom = true;
  } else {
    tourmapy.helper.search.autoZoom = false;   
  }
  
  if (!a) {
    var a = document.getElementById('search_map').value;
  }  
  
  tourmapy.params.set('srch', a);
  
  _gaq.push(['_trackPageview', '/search?q='+escape(a)]); 
  
  var gps = new tourmapy.WGS84(a);
  if (gps.isValid()) {
    var point = tourmapy.map.createPoint(gps.lat, gps.long);
    tourmapy.map.setCenter(point);
    tourmapy.map.setZoom(13);
    var title = gps.toDisplayGPS();
    cancelCustomMarker();
    var marker = tourmapy.map.createMarker(point, Icons.Default, title, '<strong>' + title + '</strong>');
    tourmapy.map.addOverlay(marker);
    tourmapy.helper.customMarker = marker;
    tourmapy.helper.customMarkerTitle = title;
    tourmapy.helper.customMarkerDescription = '';
    var a = {
      id: 0,
      title: title,
      type: 'customMarker',
      text: L_CUSTOM_MARKER,
      category: ''
    };
    tourmapy.helper.search.results1.push({marker: tourmapy.helper.customMarker, pois: [a]});
    updateSearchResults(tourmapy.helper.search.results1, true, 'adresy');
    return;
  }
   
  tourmapy.ajax.task('/resource/fulltext_adresy.php?id_lng='+tourmapy.params.get('lang', 'cs')+'&format=javascript&q=' + encodeURI(a), function(response) {
    var searchResult = new Function(response)();
    var places = [];
    tourmapy.helper.search.total += searchResult.results.length;
    for (var i = 0; i < searchResult.results.length; i++) {
      var r = searchResult.results[i];
      var p = new Object();
      p['address'] = r.title;
      p['lat'] = r.x;
      p['long'] = r.y;
      places.push(p);
    }
    if (--tourmapy.helper.search.pending <= 0) {
      var loader = document.getElementById('search_loader_2');
      if (loader) loader.style.display = 'none';  
    }
    mySearchCallback(places, 200);       
  }, 'addresses');
  
  tourmapy.helper.search.query = a;
  
  var panel = document.getElementById('rpanel_vyhledavani_top');
  if (panel.style.display == 'none') {
    panel.style.display = '';
  }
  var link = document.getElementById('rpanel_vyhledavani_anchor');
  setMenu('rpanel_vyhledavani', link, true);
  
  tourmapy.ajax.task('/resource/fulltext.php?id_lng='+tourmapy.params.get('lang', 'cs')+'&format=javascript&q=' + encodeURI(a), function(response) {
    var searchResult = new Function(response)();    
    tourmapy.helper.search.total += searchResult.results.length;
    //tourmapy.helper.search.offset = searchResult.offset;
    //tourmapy.helper.search.limit = searchResult.limit;
    if (tourmapy.map.engine == 'google') {
      if (!tourmapy.helper.search.bounds) tourmapy.helper.search.bounds = new google.maps.LatLngBounds();
    }
    for (var i = 0; i < searchResult.results.length; i++) {
      var r = searchResult.results[i];
      var point = tourmapy.map.createPoint(r.x, r.y);
      tourmapy.helper.search.points.push(point);
      var id_lng = tourmapy.params.get('lang', 'cs');
      if (id_lng == 'cs') id_lng = 'cz';
      
      var html = '<div class="bubble ' + (tourmapy.map.engine == 'atlas' ? 'abubble' : 'gbubble') + '">';
      
      for (var j = 0; j < r.pois.length; j++) {      
        var o = r.pois[j];
        
        var czecotUrl =  resultUrl(o.type) + '?id=' + o.id; 
        
        if (o.type != 'obec' && o.type != 'ulice' && o.type != 'cobce') {             
          html +='<h3><a onclick="openPopup(this.href); return false;" href="http://www.czecot.com/'+id_lng+'/results/'+czecotUrl+'">' + o.title + '</a></h3>';
        } else {
          html += '<h3>' + o.title + ' - ' + o.text + '</h3>';  
        }
        
        html += '<p>' + o.category + '</p>';
        
        
        if (o.image !== null) {
          html += '<a onclick="openPopup(this.href); return false;" href="http://www.czecot.com/'+id_lng+'/results/'+czecotUrl+'">';
          html += '<img src="' + o.image.url + '" width="' + o.image.width + '" height="' + o.image.height + '" alt="'+o.title+'" />';
          html += '</a><br />';
        }
      }
      html += '<ul class="bubble_tools">';
      html += '<li><a title="'+L_ADD_TO_PLANNER+'" href="#" class="addToRoute" onclick="return dopravniSpojeniPridejWaypointSelect('+r.x+', '+r.y+', \''+r.title.replace(new RegExp("\\\'"), "\\\'")+'\', true);">'+L_ADD_TO_PLANNER+'</a></li>';
      if (r.stredisko > 0 && r.id > 0) {
        html += '<li><a title="'+L_ADD_TO_ITINERAR+'" href="#" class="itinerarAdd" onclick="return itinerarPridejStredisko('+r.stredisko+', \''+r.id+'\');">'+L_ADD_TO_ITINERAR+'</a></li>';
        html += '<li><a title="'+L_REPORT+'" href="#" class="reportMistake" onclick="return nahlasitChybneZaznaceni(this, '+r.stredisko+', \''+r.id+'\', '+r.id_firma+');">'+L_REPORT+'</a></li>';
      }
      html += '</ul>';
      html += '</div>';

      var marker = createLabel(point, (i+1+tourmapy.helper.search.offset), r.title, html);
      //var marker_3d = tourmapy.map.createMarker(point, tourmapy.icon.Default, r.title, html);
 
      if (tourmapy.map.engine == 'google') {
        tourmapy.helper.search.bounds.extend(point);
      }
      marker.resultID = i;
      var fncOver = new Function("var a = document.getElementById('result_content_"+i+"');if (a) {a.className = 'result hover';}");
      var fncOut = new Function("var a = document.getElementById('result_content_"+i+"');if (a) {a.className = 'result';}");
      if (tourmapy.map.engine == 'google') {        
        google.maps.Event.addListener(marker, 'mouseover', fncOver);        
        google.maps.Event.addListener(marker, 'mouseout', fncOut);
      } else {
        marker.addEvent("onMouseover", fncOver);
        marker.addEvent("onMouseout", fncOut);
      }
      tourmapy.helper.search.results2.push({marker: marker, pois: r.pois});

      tourmapy.map.addOverlay(marker);
    }
    if (tourmapy.helper.search.points.length > 0 && tourmapy.helper.search.autoZoom) {
      if (tourmapy.map.engine == 'atlas') {
        tourmapy.map.get().setBestZoomAndCenter(tourmapy.helper.search.points);
        if (tourmapy.map.getZoom() > 16) {
          tourmapy.map.setZoom(16);
        }
      } else {
        var mapa = tourmapy.map.get();
        var zoom = mapa.getBoundsZoomLevel(tourmapy.helper.search.bounds); 
        if (zoom>16) zoom=16; 
        mapa.setCenter(tourmapy.helper.search.bounds.getCenter());
        tourmapy.map.setZoom(zoom);      
      }
    }
    if (--tourmapy.helper.search.pending <= 0) {
      var loader = document.getElementById('search_loader_2');
      if (loader) loader.style.display = 'none';  
    }
    updateSearchResults(tourmapy.helper.search.results2, true, 'content');    
  }, 'search');
  
  tourmapy.ajax.task('/resource/fulltext_akce.php?id_lng='+tourmapy.params.get('lang', 'cs')+'&format=javascript&q=' + encodeURI(a), function(response) {
    var searchResult = new Function(response)();    
    tourmapy.helper.search.total += searchResult.results.length;
    //tourmapy.helper.search.offset = searchResult.offset;
    //tourmapy.helper.search.limit = searchResult.limit;
    if (tourmapy.map.engine == 'google') {
      if (!tourmapy.helper.search.bounds) tourmapy.helper.search.bounds = new google.maps.LatLngBounds();
    } 
    for (var i = 0; i < searchResult.results.length; i++) {
      var r = searchResult.results[i];
      var point = tourmapy.map.createPoint(r.x, r.y);
      tourmapy.helper.search.points.push(point);
      var id_lng = tourmapy.params.get('lang', 'cs');
      if (id_lng == 'cs') id_lng = 'cz';
      
      var html = '<div class="bubble ' + (tourmapy.map.engine == 'atlas' ? 'abubble' : 'gbubble') + '">';
      for (var j = 0; j < r.pois.length; j++) {
        html += r.pois[j].html;
      }
      html += '</div>';

      var marker = createLabel(point, (i+1), r.title, html, 'green');
      
      if (tourmapy.map.engine == 'google') {
        tourmapy.helper.search.bounds.extend(point);
      }
      marker.resultID = i;
      var fncOver = new Function("var a = document.getElementById('result_akce_"+i+"');if (a) {a.className = 'result hover';}");
      var fncOut = new Function("var a = document.getElementById('result_akce_"+i+"');if (a) {a.className = 'result';}");
      if (tourmapy.map.engine == 'google') {        
        google.maps.Event.addListener(marker, 'mouseover', fncOver);        
        google.maps.Event.addListener(marker, 'mouseout', fncOut);
      } else {
        marker.addEvent("onMouseover", fncOver);
        marker.addEvent("onMouseout", fncOut);
      }
      tourmapy.helper.search.results3.push({marker: marker, pois: r.pois});

      tourmapy.map.addOverlay(marker);
    }  
    if (tourmapy.helper.search.points.length > 0 && tourmapy.helper.search.autoZoom) {
      if (tourmapy.map.engine == 'atlas') {
        tourmapy.map.get().setBestZoomAndCenter(tourmapy.helper.search.points);
        if (tourmapy.map.getZoom() > 16) {
          tourmapy.map.setZoom(16);
        }
      } else {
        var mapa = tourmapy.map.get();
        var zoom = mapa.getBoundsZoomLevel(tourmapy.helper.search.bounds); 
        if (zoom>16) zoom=16; 
        mapa.setCenter(tourmapy.helper.search.bounds.getCenter());
        tourmapy.map.setZoom(zoom);      
      }
    } 
    if (--tourmapy.helper.search.pending <= 0) {
      var loader = document.getElementById('search_loader_2');
      if (loader) loader.style.display = 'none';  
    }
    updateSearchResults(tourmapy.helper.search.results3, true, 'akce');    
  }, 'searchEvents');
  
  return false;
}

function updateSearchResults(results, force, what, disableEvents) {  

  var panel = document.getElementById('rpanel_vyhledavani_top');
  if (panel.style.display == 'none') {
    panel.style.display = '';
  }
  var link = document.getElementById('rpanel_vyhledavani_anchor');
  setMenu('rpanel_vyhledavani', link, true);
  if (!what) what = 'content';
  var content = document.getElementById('rpanel_vyhledavani_' + what);
  content.innerHTML = '';
  
  var numPages = Math.ceil(results.length / tourmapy.helper.search.limit);
  var odd = 0;      
  for (var page = 0; page < numPages; page++) {
    var offset = page*tourmapy.helper.search.limit;
    var html = ''; 
    for (var i = offset; i < (offset + tourmapy.helper.search.limit) && i < results.length; i++) {  
      var result = results[i];
      if (!result.label) var label = i + 1;
      else var label = result.label;
      
      if (result.pois.length > 1) {
        html += '<div class="search_result"><'+(!disableEvents ? 'a href="#"' : 'div') +' class="' + (odd == 0 ? 'even' : 'odd')  + '" id="result_'+what+'_'+i+'"' + (!disableEvents ? ' onmouseover="bounceResult('+i+', \''+what+'\');" onclick="moveViewToResult('+i+', \''+what+'\');return false"' : ' onclick="return false;"') + ' class="result"><strong>[' + label + ']</strong><br />';
        var lastTitle = '';
        for (var j = 0; j < result.pois.length; j++) {
          var r = result.pois[j];
          var title = (lastTitle != r.title ? '<strong>' + r.title + '</strong><br />' : '');
          if (r.category.trim() != '') html += title + (r.type != 'infostredisko' ? '- <em>' + r.category + '</em><br />' : '');
          lastTitle = r.title;
        }
        html += (r.text != '' ? r.text : '');
        html += '</'+(!disableEvents ? 'a' : 'div') +'></div>';
        odd = 1 - odd;      
      } else {
        for (var j = 0; j < result.pois.length; j++) {
          var r = result.pois[j];
          html += '<div class="search_result"><'+(!disableEvents ? 'a href="#"' : 'div') +' class="' + (odd == 0 ? 'even' : 'odd')  + '" id="result_'+what+'_'+i+'"' + (!disableEvents ? ' onmouseover="bounceResult('+i+', \''+what+'\');" onclick="moveViewToResult('+i+', \''+what+'\');return false"' : ' onclick="return false;"') + ' class="result"><strong>[' + label + ']</strong> <strong>' + r.title + '</strong>'+ (r.type != 'infostredisko' && r.category.trim() != '' ? '<br />- <em>' + r.category + '</em>' : '') + (r.text != '' ? '<br />' + r.text : '') + '</'+(!disableEvents ? 'a' : 'div') +'></div>';
          odd = 1 - odd;
        }
      }      
    }
    var paging = getPagination(results.length, offset, tourmapy.helper.search.limit, what);
    var div = document.createElement('div');
    div.setAttribute('class', 'result_page result_page_' + what + ' hidden');
    div.className = 'result_page result_page_' + what + ' hidden'; 
    div.setAttribute('id', what + '_result_page_' + page);
    
    div.appendChild(paging);
    paging = paging.cloneNode(true);
    div.innerHTML += html;
    if (!tourmapy.utilities.isIE()) div.appendChild(paging);
    
    content.appendChild(div);    
  }
  var a = document.getElementById('rpanel_vyhledavani_' + what + '_wrapper');
  if (content.innerHTML == '') {
    content.innerHTML = L_NO_SEARCH_RESULTS;
    if (a) a.style.display = 'none';
    if (tourmapy.helper.search.pending <= 0 && tourmapy.helper.search.total == 0) {
      var nores = document.getElementById('no_results');
      if (nores) nores.style.display = '';
    }
  } else {
    gotoSearchResultsPage(what, tourmapy.params.get('pg', 0));
    if (a) a.style.display = '';    
  }
}

function gotoSearchResultsPage(what, page, previous) {
  /*if (!previous) var previous = 0;
  var a = jQuery("#" + what + "_result_page_" + previous);
  
  if (previous != page) a.addClass('hidden');*/
  jQuery('.result_page_' + what).addClass('hidden');  
  jQuery("#" + what + "_result_page_" + page).removeClass('hidden');
  tourmapy.params.set('pg', page);
  
  return false;
}

function getPagination(total, offset, limit, what) { 
  if (total <= limit) return document.createTextNode("");
  var numPages = Math.ceil(total / limit);
  var page = Math.ceil(offset / limit);  
  var lastOffset = total - (total % limit);
  
  var paging = document.createElement('div');
  paging.setAttribute('class', 'pagination');
  paging.className = 'pagination';
  
 
  var e = document.createElement('a');
  var prevPage = page-5;
  if (prevPage < 0) {
    prevPage = 0;
  }
  e.setAttribute('onclick', 'return gotoSearchResultsPage(\''+what+'\', '+(prevPage)+', '+page+');');
  e.setAttribute('href', '#');
  e.appendChild(document.createTextNode("<<"));
  paging.appendChild(e);
  
  paging.appendChild(document.createTextNode(" "));
  
  var i = page-2;
  if (i < 0) i=0;  
  for (var j = 0; j < 5; j++) {    
    if (i >= numPages) break;    
    var pageOffset = i*limit;
    var e = document.createElement('a');
    e.setAttribute('onclick', 'return gotoSearchResultsPage(\''+what+'\', '+i+', '+page+');');
    e.setAttribute('href', '#');
    var n = document.createTextNode(""+(i+1));
    if (i == page) {
      var strong = document.createElement("strong");
      strong.appendChild(n);
      e.appendChild(strong);
    } else {
      e.appendChild(n);
    }
    paging.appendChild(e);
    paging.appendChild(document.createTextNode(" "));
    
    i++; 
  }
  
  var e = document.createElement('a');
  var nextPage = page+5;
  if (nextPage > (numPages - 1)) {
    nextPage = numPages - 1;
  }
  e.setAttribute('onclick', 'return gotoSearchResultsPage(\''+what+'\', '+(nextPage)+');');
  e.setAttribute('href', '#');
  e.appendChild(document.createTextNode(">>"));
  paging.appendChild(e);
  

  return paging;
}

function moveViewToCustomMarker() {
  if (tourmapy.map.getZoom() < 15) tourmapy.map.setZoom(15);
  if (tourmapy.map.engine == 'atlas') {
    tourmapy.map.get().moveTo(tourmapy.helper.customMarker.getGeoPoint());
    
  } else {
    tourmapy.map.get().setCenter(tourmapy.helper.customMarker.getLatLng());
  }
}

function moveViewToResult(i, what) {
  switch (what) {
    case 'adresy':
      var result = tourmapy.helper.search.results1[i];
      break;
    case 'akce':
      var result = tourmapy.helper.search.results3[i];
      break;
    default:
    case 'content':
      var result = tourmapy.helper.search.results2[i];
      break;
  }
  
  if (tourmapy.map.getZoom() < 15) tourmapy.map.setZoom(15);
  if (tourmapy.map.engine == 'atlas') {
    tourmapy.map.get().moveTo(result.marker.getGeoPoint());
    result.marker.fireEvent('onClick');
  } else {
    tourmapy.map.get().setCenter(result.marker.getLatLng());
    google.maps.Event.trigger(result.marker, 'click');
  }
}

function moveViewToAddress(i) {
  if (tourmapy.map.getZoom() < 15) tourmapy.map.setZoom(15);
  if (tourmapy.map.engine == 'atlas') {
    tourmapy.map.get().moveTo(tourmapy.helper.search.results1[i].getGeoPoint());
    tourmapy.helper.search.results1[i].fireEvent('onClick');
  } else {
    tourmapy.map.get().setCenter(tourmapy.helper.search.results1[i].getLatLng());
    google.maps.Event.trigger(tourmapy.helper.search.results1[i], 'click');
  }
}

function bounceCustomMarker() {
  return;
   
}

function bounceResult(i) {
  return;
  
}

function akceDatumOnchange(id_objekt) {
  var a = document.getElementById('ac_datum');
  if (a) {
    tourmapy.ajax.params.set('ac_datum', a.options[a.selectedIndex].value);
    var c = document.getElementById('ac_datum_rozsah');
    if (c) {
      if (a.options[a.selectedIndex].value == 'rozsah') {
          c.style.display = '';
      } else {
          c.style.display = 'none';
      }
    }
  }
  toggleObjectType(id_objekt, false);  
  var b = document.getElementById('chk_objekt_' + id_objekt);
  if (b) {
    if (b.checked) toggleObjectType(id_objekt, true);      
  }
}



function akceDatumRozsahOnchange2(id_objekt) {

  var inputs = ['ac_cas_od', 'ac_cas_do'];
  
  for (var i=0; i < inputs.length; i++) {
    var a = document.getElementById(inputs[i]);
    if (a) {
      tourmapy.ajax.params.set(inputs[i], a.value);
    }
  }
  toggleObjectType(id_objekt, false);  
  var b = document.getElementById('chk_objekt_' + id_objekt);
  if (b) {
    if (b.checked) toggleObjectType(id_objekt, true);      
  }
}


function akceDruhOnchange2(id_objekt, chk, id_druh) {
  if (chk.checked) tourmapy.ajax.params.set('id_ac_druh_' + id_druh, id_druh);
  else tourmapy.ajax.params.set('id_ac_druh_' + id_druh, '');
  toggleObjectType(id_objekt, false);
   
  var b = document.getElementById('chk_objekt_' + id_objekt);
  if (b) {
    if (b.checked) toggleObjectType(id_objekt, true);      
  }
}

function suggestions(query) {
  var elemName = 'search_map';
  if (!query || query.length < 3) {
    document.getElementById('search_suggestions').style.display = 'none';
    return;
  }
  tourmapy.ajax.backgroundTask('/resource/suggestions.php?q=' + query + '&e=' + elemName, function(response) {
    if (response.length > 0) {
      document.getElementById('search_suggestions').innerHTML = response;
      document.getElementById('search_suggestions').style.display = 'block';
    }
  }, 'suggestions');
}

function showHelp(title, text) {
  document.getElementById('help_title').innerHTML = title;
  document.getElementById('help_content').innerHTML = text;
  showForm('help_window'); 
}

function showForm(id) {
  document.getElementById(id).style.display = '';
}

function closeForm(id) {
  switch (id) {
    case 'panorama':
      removeFovMarker();
      tourmapy.helper.panorama.obj.remove();
      tourmapy.helper.panorama.obj = null;
      tourmapy.params.set('pano', '');
      break;
    case 'geocoding_hint':
      setClickMode(ClickMode.Default);
      break;
  }
  document.getElementById(id).style.display = 'none';
}

function showRecommendForm() {
  document.getElementById("recommend").style.display = '';
}

function closeRecommendForm() {
  document.getElementById("recommend").style.display = 'none';
  
  document.getElementById("sender_name").value = '';
  document.getElementById("sender_email").value = '';
  document.getElementById("receiver_email").value = '';
  document.getElementById("sender_message").value = '';  
}

function moreExamples() {
  document.getElementById('moreExamples').style.display="";
  return false;
}

function closeExamples() {
  document.getElementById('moreExamples').style.display="none";
  return false;
}

function nahlasitChybneZaznaceni(a, stredisko, id_stredisko, id_firma) {
  if (!stredisko) var stredisko = 0;
  if (!id_stredisko) var id_stredisko = 0;
  if (!id_firma) var id_firma = 0;
  
  return hs.htmlExpand(a, {
    objectType: 'iframe', 
    width: 500,
    src: '/resource/reportIframe.php?typ=' + stredisko + '&id_stredisko=' + id_stredisko + '&id_firma=' + id_firma
  });
}

function recommend() {
  
  var sname = document.getElementById("sender_name").value;  
  var semail = document.getElementById("sender_email").value;  
  var remail = document.getElementById("receiver_email").value;  
  var message = document.getElementById("sender_message").value;
  message = escape(message);  
  link = escape(window.location.href);
  tourmapy.ajax.backgroundTask('/resource/recommend.php?link=' + link + '&semail=' + semail + '&sname=' + sname + '&remail=' + remail + '&msg=' + message, function(response) {
    alert(response);
  });
  closeRecommendForm();
}


tourmapy.loader.onLoadStart = function(callerId) {
  //document.getElementById('loading').className = 'loading-visible';
  document.getElementById('maploader').style.display = "";
}

tourmapy.loader.onLoadFinish = function(callerId) {
  //document.getElementById('loading').className = 'loading-invisible';
  document.getElementById('maploader').style.display = "none";
  if (callerId) {  
    if (callerId.indexOf('spojeni_') === 0) {
      if (tourmapy.helper.destNotFound) {
        alert(L_NO_SEARCH_RESULTS);    
      } else {
        // vse nalezeno    
        if (tourmapy.helper.dopravniSpojeniReady) {
          dopravniSpojeni(true);
        } else {
          alert(L_PLEASE_SPECIFY);
        }
      }
    }
  }
}

window.onload = initialize;

