/*zobrazeni google mapy se značkami*/
//google.load("maps", "2.118",{"language" : "cs"});
//xx//google.load("maps", "2.118",{"locale" : "cs"});
var mapa = null;//objekt google maps map
//defaultní hodnoty
var mapa_sirka=650;//sirka v px zobrazovane mapy 
var mapa_vyska=390;//vyska v px zobrazovane mapy
// vychozi nastaveni mapy aby zobrazilo celoy CR
var mapa_stred_sirka=50.007739;//y vychozi pozice stredu mapy lat() -90 and +90. latitude coordinate in degrees
var mapa_stred_vyska=15.732422;//x vychozi pozice stredu mapy lng -180 and +180 longitude coordinate in degrees
var mapa_zoom=7;//vychozi priblizeni mapy
var mapa_id='gmaps';// id bloku div v html do ktereho se mapa vklada
var cara_color = '#ff0000';//barva cary
var cara_width = 4;//tloustka cary
//objekt pro praci s carami
 var cary= 
 {  
    points:[],//pole bodu pro jednotlive cary
    pocitadlo:0,// counter vytvorenych car
    vlozit_povoleno:true,//true je mozne vlozit caru do mapy,,ochrana pred vlozenim vice car najednou
    vytvor_z_xml:function(hodnota,barva,tloustka) //vytvori caru nactenim dat z xml viz fce nacti_znacky()
    {
      //@hodnota(string) např 50.12,17.8,50.14,18.09 - hodnoty lat lng cary oddelene carkou
      var pole_hodnot=hodnota.split(',');
      var c=0;
      var y;//souranice lat
      var x;//souradnice lng
      var pole=[];//pole jednotlivych bodu car,,bod se sklada ze souradnice lat a lng  (y a x)
      cary.points=[];
      for(i=0;i<pole_hodnot.length;i++)
      {
        c=i+3;
        if(c%2==0)//suda polozka pole
        {
           x=pole_hodnot[i];//hodnota lgn uzlu cary
           //vlozeni bodu do pole vsech bodu cary
           //pole.push(new GLatLng(y,x));
           //alert(y+''+x+'3');
           cary.createPoint(y,x,3);
        }else
        {
          y=pole_hodnot[i];//hodnota lat uzlu cary
        }
      } 
      var zakodovane=cary.createEncodings();
      //vytvoreni objektu cary do mapy
     var line=GPolyline.fromEncoded({color: barva,
                                              weight: tloustka,
                                              points: zakodovane.body,
                                              zoomFactor: 321,
                                              levels: zakodovane.level,
                                              numLevels: 4
                                             });
       //poradi vytvorene cary
      var cislo=cary.pocitadlo;
      //funkce ktera nakresli caru na mapa pomoci dat z xml
      cary.kresli_z_xml(line,cislo,barva,tloustka);
    },// vytvor:function() 
    kresli_z_xml:function(poly,cislo,barva,tloustka) 
    {
      //@poly - objekt cary(GPolyline),@cislo - poradi cary,dle vytvoreni,@cara_color barva cary
      //vlozi objekt caru do mapy
      mapa.addOverlay(poly);
    },// kresli_z_xml:function()
    createPoint:function(lat, lng, pLevel) 
    {
        var newPoint = {
        Latitude: lat,
        Longitude: lng,
        Level: pLevel
      };
      this.points.push(newPoint);
    },//createPoint
    createEncodings:function()
    {
      var i = 0;
      var plat = 0;
      var plng = 0;
      var encoded_points = "";
      var encoded_levels = "";
      for(i = 0; i < cary.points.length; ++i) 
      {
        var point = cary.points[i];
        var lat = point.Latitude;
        var lng = point.Longitude;
        var level = point.Level;
        var late5 = Math.floor(lat * 1e5);
        var lnge5 = Math.floor(lng * 1e5);
        dlat = late5 - plat;
        dlng = lnge5 - plng;
        plat = late5;
        plng = lnge5;
        encoded_points += cary.encodeSignedNumber(dlat) + cary.encodeSignedNumber(dlng);
        encoded_levels += cary.encodeNumber(level);
      }  
      var zakodovane = {
        body: encoded_points,
        level: encoded_levels
      };                            
      return zakodovane;
    },// createEncodings:function()
    encodeNumber:function(num)
    {
       var encodeString = "";
        while (num >= 0x20) {
          encodeString += (String.fromCharCode((0x20 | (num & 0x1f)) + 63));
          num >>= 5;
        }
        encodeString += (String.fromCharCode(num + 63));
        return encodeString;
    },//encodeNumber:function(num)
    encodeSignedNumber:function(num)
    {
      // Encode a signed number in the encode format.
      var sgn_num = num << 1;
      if (num < 0) {
        sgn_num = ~(sgn_num);
      }
      return(cary.encodeNumber(sgn_num));
    }//encodeSignedNumber:function(num)
 }; //var cary objekt pro praci s carami
 //objekt pro praci se znackami , vyrvoreni znacek, jejich seznam
var znacky= 
{
   img_cesta:'/img/mapa/',//cesta do adresare s fotkama
   pocitadlo:0,// counter vytvorenych znacek
   width:42,
   height:40,
   vlozit_povoleno:true,//ochrana pred vkladanim vice znacek najednou
   typy_znacek:[
                  'akce',
                  'obce',
                  'oblasti',
                  'pohostinstvi',
                  'relaxace',
                  'sport',
                  'ubytovani',
                  'vylety',
                  'zabava',
                  'zajimavosti'
                ],
     typy_znacek_popis:[
                  'akce',
                  'obce',
                  'oblasti',
                  'pohostinství',
                  'relaxace',
                  'sport',
                  'ubytování',
                  'výlety',
                  'zábava',
                  'zajímavosti'
                ] 
 }; 
function number_format(a, b, c, d) 
{
//formatuje cislo jako number_format v php
// Made by Mathias Bynens <http://mathiasbynens.be/> 
//number_format(sekundy,3,'.',' ');
//number_format(desetine cislo,pocet cisel za carkou,format carky, oddelovac tisicu);
 a = Math.round(a * Math.pow(10, b)) / Math.pow(10, b);
 e = a + '';
 f = e.split('.');
 if (!f[0]) {
  f[0] = '0';
 }
 if (!f[1]) {
  f[1] = '';
 }
 if (f[1].length < b) {
  g = f[1];
  for (i=f[1].length + 1; i <= b; i++) {
   g += '0';
  }
  f[1] = g;
 }
 if(d != '' && f[0].length > 3) {
  h = f[0];
  f[0] = '';
  for(j = 3; j < h.length; j+=3) {
   i = h.slice(h.length - j, h.length - j + 3);
   f[0] = d + i +  f[0] + '';
  }
  j = h.substr(0, (h.length % 3 == 0) ? 3 : (h.length % 3));
  f[0] = j + f[0];
 }
 c = (b <= 0) ? '' : c;
 return f[0] + c + f[1];
} 
function gps_format(gps_float,positive,negative) 
{
    //funkce vrati gps ve tvaru stupne minuty sekundy
    var p = Math.abs(gps_float);
    var stupne = Math.floor(p);
    var rozdil_minut = (p - stupne) * 60;
    var minuty = Math.floor(rozdil_minut);
    var sekundy = (rozdil_minut - minuty ) * 60;
    sekundy=number_format(sekundy,3,'.','');
    //return  stupne+'&deg;'+minuty+'&#39;'+sekundy + '"' + (gps_float >= 0 ? positive : negative);
    return  stupne+'°'+minuty+"'"+sekundy + '"' + (gps_float >= 0 ? positive : negative);
    //49°48'33.488"N, 18°14'31.867"E
} 
function gps_na_stupne(lat,lng) 
{
      //prevede gps ve tvaru float na stupne a vytvori tvar ktery pouzivaji mapy.cz pro zadani bodu
      return gps_format(lat, "N", "S") + ", " + gps_format(lng, "E", "W");
}
 //objekt pro zobrazeni a uchovavani informaci o carach, znackach a jejich ulozeni do 
//skrytých poli pro moznost ulozeni do databaze   
var infobox={
   id:'dvinfobox',//id bloku div v html do ktereho se informace ukladaji
   width:'160',//sirka div bloku
   pridej_input:function (marker,znacka,popisek,poradi) 
   { //vlozi informace o znacce
     //@marker objekt typy GMarke,@znacka typ znacky, akce,sport ..
      //vlozi objekt marker do pole vsechn znacek
      //markers.push(marker);
      //ziskani souradnic lat a lng ze znacky
      var latlng = marker.getPoint();
      //informace o pozici znacky na mapě 
      var zn_pozice = "(" + Math.round(latlng.y * 100) / 100 + ", " +
      Math.round(latlng.x * 100) / 100 + ")";
      //poradi vytvorene znacky
      var pp=znacky.pocitadlo;
       //*************************************************/
        function vloz_popis(data)
        {
          //kontejner pro vlozeni obsahu ke znacce
           var obsah_formulare=document.createElement('div');
           //vlozeni nacteneho obsahu pres ajax do kontejneru
           obsah_formulare.innerHTML = data;
           obsah_formulare.style.width = "250px";
           GEvent.addListener(marker, "click", function() 
           {    
                //zjisteni souradnic lat a lng pro znacku 
                var latlng = marker.getPoint();
                //funkce vrati tvar souradnic ve stupnich ,minutach sekundach
                var gps_bodu=gps_na_stupne(latlng.y,latlng.x);
                var address= '<strong>GPS:</strong><p>'+gps_bodu+'</p>';
                //kontejner pro vlozeni informaci o gps
                 var gpsdiv=document.createElement('div');
                 gpsdiv.innerHTML = address;
                 //nastaveni jednotlivych zalozek okna infowindows
                 if(popisek.length>4)
                 {
                   var infoTabs = [new GInfoWindowTab("info",obsah_formulare),new GInfoWindowTab("GPS",gpsdiv)]; 
                 }else
                 {
                  var infoTabs = [new GInfoWindowTab("GPS",gpsdiv)]; 
                 }
                 //zobrazeni bubliny infowindow
                 mapa.openInfoWindowTabsHtml(marker.getLatLng(),infoTabs);
         });
       }// vloz_popis()
        vloz_popis(popisek);
        //otevreni okna s informacemi o znacce
        if(poradi==0)GEvent.trigger(marker,'click'); 
       //**********************************/
     znacky.pocitadlo++; 
   }    
 }; 
function select(buttonId) 
{/* 
//funkce oznaci tlacitko ktere je vybrane
  //@buttonId - id tlacitka,,v scriptu casto oznaovano jako typ
  $("#dvzn div").removeClass("zn_vybran");
  $("#dvznacky img").removeClass("zn_vybran");
  $("#"+buttonId).addClass("zn_vybran");
  //zjisti jesli je dane tlacitko v poli znacek
  var jevpoli=jQuery.inArray(buttonId,znacky.typy_znacek);
  if(jevpoli==-1)vybrana_znacka='';else vybrana_znacka=buttonId;
  if(buttonId=='cara')vybrana_cara_typ='cara';else vybrana_cara_typ='';
  */
}
function vrat_img(typ) 
{
  //@typ - akce,sport,cara atd
  //vytvorni novou ikonu 
  var icon = new GIcon();
  icon.image = znacky.img_cesta + typ + ".png";
  icon.iconSize = new GSize(znacky.width, znacky.height);
  icon.iconAnchor = new GPoint(11,40);
  return icon;
}  
function nacti_znacky(dbmapa_id) 
{
// nacte znacky z databaze, respektive z xml souboru
 $.get("/admin/ajax/xml.php",{mapa_id:dbmapa_id},function(xml)
 {
		// pro vsechny nody data
		$('data',xml).each(function(i) {
			var typ = $(this).find("typ").text();
      var zn_pozice_x = $(this).find("zn_pozice_x").text();
      var zn_pozice_y = $(this).find("zn_pozice_y").text();
      //var zn_popis = $(this).find("zn_popis").text();
      var zn_popis = $(this).find("zn_popis_format").text();
      zn_popis=zn_popis+'<br>';
      var zn_poradi= $(this).find("zn_poradi").text();
      var posn = new GLatLng(zn_pozice_y,zn_pozice_x);
      //vytvoreni noveho objektu znacky
      var marker = new GMarker(posn, {icon: vrat_img(typ), draggable: false});
      //vlozeni do mapy
      mapa.addOverlay(marker);
      infobox.pridej_input(marker,typ,zn_popis,zn_poradi);
		});
		$('cara',xml).each(function(i) 
    {
		var typ = 'cara';
    var hodnota = $(this).find("hodnota").text();
    var tloustka=$(this).find("tloustka").text();
    if(tloustka==0)tloustka=cara_width;
    var barva=$(this).find("barva").text();
    if(barva.length<1)barva=cara_color;
    if(hodnota.length>10)cary.vytvor_z_xml(hodnota,barva,tloustka);
	   });
	});
}
function head_js(db_mapa_id,sirka,delka,zoom,fulscreen) 
{
  /*funkce zobrazi mapu vcetne ruzných ovládacích prvku
  @in sirka,delka,zoom - pozice stredu mapy ziskana z databaze, jinak 
  */
  if(sirka==0 || delka==0)
  {
    sirka=mapa_stred_sirka;
    delka=mapa_stred_vyska;
    zoom=mapa_zoom;
  }
  if(fulscreen==1)
  {
    mapa_sirka=900;//sirka v px zobrazovane mapy 
    mapa_vyska=650;//vyska v px zobrazovane mapy
    /*sirka=mapa_sirka;
    delka=mapa_vyska;*/
  }
  // kontrola kompatibility
  if (google.maps.BrowserIsCompatible()) 
  {
    // vytvoreni mapy
    mapa = new GMap2(document.getElementById(mapa_id));
    //xx//mapa = new google.maps.Map2(document.getElementById(mapa_id),{ size: new GSize(mapa_sirka,mapa_vyska) } );
    // nastaveni mapy jejiho stredu
    mapa.setCenter(new google.maps.LatLng(sirka,delka),zoom);
    // nastaveni geocoderu pro zjistovani adresy
    geocoder = new GClientGeocoder();
    //posuvnik + - se zobrazenim zoomu
    mapa.addControl(new GLargeMapControl,new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(5,15)));
    // pridani terenni mapy
    //var mapTeren = new GHierarchicalMapTypeControl();
    mapa.addMapType(G_PHYSICAL_MAP);
    // tlacitko pro satelitni mapu je slouceno s hybridni
    var mapControl = new GHierarchicalMapTypeControl();
    /*mapControl.clearRelationships();
    mapControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Labels", false);
    mapControl.addRelationship(G_PHYSICAL_MAP, mtTerCross, "Crosshairs");*/
    //pridani tlacitek pro prepinani map
    mapa.addControl(mapControl); 
    //minimapa
    mapa.addControl(new GOverviewMapControl);
    //měřítko na mapě
    mapa.addControl(new GScaleControl);
    //nacte znacky z databaze 
  if(db_mapa_id>0)nacti_znacky(db_mapa_id);
  }else 
  {
    document.write("Mapu se nepodařilo zobrazit.Pro zobrazení mapy povolte spuštění aktivního obsahu a skriptů v okně vašeho prohlížeče.");
  }//google.maps.BrowserIsCompatible())
}//GoogleMAPA() 
