var icon;
var ikony = new Array();
var legenda;
var legendaDiv;
var legendaCudl;
var pohledyCudl;
var grafCudl;
var map;
var pohledy;
var pohledyData = new Array();
var styl = "border:2px black solid;";
var pom;
var infobox;
var data;
var datai;
var dataGraf = new Array();
var grafDiv;
var indexZacZasazenych;
var Filtr_pocet;
//------------------------------------------------------------------------------
function cre(x) {return document.createElement(x)}
function creText(x) {return document.createTextNode(x)}
function append(x,y) {var z = cre(y); x.appendChild(z);return z; }
function appendText(x,y) {var z = creText(y); x.appendChild(z);return z; }
//------------------------------------------------------------------------------
function tlacitko(owner,text,id,sirka)
{
    var newDiv = append(owner,'div');
    newDiv.style.fontSize = 'small';
    newDiv.style.fontFamily = "Arial"; 
    newDiv.style.top = '7px';
    newDiv.style.height = "19px"; 
    newDiv.className = "gmnoprint";
    
    var newDiv1 = append(newDiv,'div');
    newDiv1.style.width = sirka; 
    newDiv1.style.textAlign = "center"; 
    newDiv1.style.backgroundColor = "white";
    newDiv1.style.borderWidth = "1px";
    newDiv1.style.borderStyle = "solid";
    newDiv1.style.borderColor = "black";
    newDiv1.style.cursor = "pointer";

    var newDiv2 = append(newDiv1,'div')
    newDiv2.setAttribute("id",id);
    newDiv2.style.borderWidth = "1px";
    newDiv2.style.borderStyle = "solid";
    newDiv2.style.borderColor = "white";
    newDiv2.style.borderRightColor = "rgb(176,176,176)";
    newDiv2.style.borderBottomColor = "rgb(176,176,176)";
    newDiv.style.fontSize = '12px';
    newDiv2.innerHTML = text;
  return newDiv2;
}
//------------------------------------------------------------------------------
function tlacitko2(pos,text,id,sirka)
{
    var newDiv = append(map.getContainer(),'div');
    pos.apply(newDiv);
    newDiv.style.fontSize = 'small';
    newDiv.style.fontFamily = "Arial"; 
    newDiv.style.top = '7px';
    newDiv.style.height = "19px"; 
    newDiv.className = "gmnoprint";
    
    var newDiv1 = append(newDiv,'div');
    newDiv1.style.width = sirka; 
    newDiv1.style.textAlign = "center"; 
    newDiv1.style.backgroundColor = "white";
    newDiv1.style.borderWidth = "1px";
    newDiv1.style.borderStyle = "solid";
    newDiv1.style.borderColor = "black";
    newDiv1.style.cursor = "pointer";
    

    var newDiv2 = append(newDiv1,'div')
    newDiv2.setAttribute("id",id);
    newDiv2.style.borderWidth = "1px";
    newDiv2.style.borderStyle = "solid";
    newDiv2.style.borderColor = "white";
    newDiv2.style.borderRightColor = "rgb(176,176,176)";
    newDiv2.style.borderBottomColor = "rgb(176,176,176)";
    newDiv.style.fontSize = '12px';
    newDiv2.innerHTML = text;
  return newDiv2;
}
//------------------------------------------------------------------------------
function caraVodorovna(vlastnik,x,y,delka,barva)
{
  x = Math.round(x);
  y = Math.round(y);
  delka = Math.round(delka-0.5)+1;
  var cara = append(vlastnik,'div');
  cara.style.position = "absolute";
  cara.style.left = x+"px";
  cara.style.top = y+"px";
  cara.style.borderTopWidth = "1px";
  cara.style.borderTopColor = barva;
  cara.style.borderTopStyle = "solid";
  
  cara.style.padding = "0px";
  cara.style.width = delka+"px";
  cara.style.height = "1px";
}
//------------------------------------------------------------------------------
function caraSvisla(vlastnik,x,y,delka,barva)
{
  x = Math.round(x);
  y = Math.round(y);
  delka = Math.round(delka-0.5)+1;
  var cara = append(vlastnik,'div');
  cara.style.position = "absolute";
  cara.style.left = x+"px";
  cara.style.top = y+"px";
  cara.style.height = delka+"px";
  cara.style.width = "0px";
  cara.style.borderLeftColor = barva;
  cara.style.borderLeftWidth = "1px";
  cara.style.borderLeftStyle = "solid";
  cara.style.fontSize = '0px';
  
}
//------------------------------------------------------------------------------
function zobrazText(vlastnik,x,y,velikost,barva,text)
{
  x = Math.round(x);
  y = Math.round(y);
  var newDiv2 = append(vlastnik,'div')
  newDiv2.style.position = "absolute";
  newDiv2.style.left = x+"px";
  newDiv2.style.top = y+"px";
  newDiv2.style.fontSize = velikost;
  newDiv2.style.fontFamily = "Arial"; 
  
  newDiv2.innerHTML = text;
  return newDiv2;
}
function zobrazTextVlevo(vlastnik,x,y,velikost,barva,text)
{
  x = Math.round(x);
  y = Math.round(y);
  var newDiv2 = append(vlastnik,'div')
  newDiv2.style.position = "absolute";
  newDiv2.style.textAlign = "left";
  newDiv2.style.right = x+"px";
  newDiv2.style.top = y+"px";
  newDiv2.style.fontSize = velikost;
  newDiv2.style.fontFamily = "Arial"; 
  
  newDiv2.innerHTML = text;
  return newDiv2;
}


//------------------------------------------------------------------------------
function tlacitkoStav(tlacitko,stisknuto)
{
  if (stisknuto){
    tlacitko.style.borderLeftColor = "rgb(176,176,176)";
    tlacitko.style.borderTopColor = "rgb(176,176,176)";
    tlacitko.style.borderRightColor = "white";
    tlacitko.style.borderBottomColor = "white";
    tlacitko.style.fontWeight = "bold";
    
  }else{
    tlacitko.style.borderLeftColor = "white";
    tlacitko.style.borderTopColor = "white";
    tlacitko.style.borderRightColor = "rgb(176,176,176)";
    tlacitko.style.borderBottomColor = "rgb(176,176,176)";
    tlacitko.style.fontWeight = "";
  }
}
//------------------------------------------------------------------------------
function NahodnyStr()
{
  return (""+new Date().getYear()+"_"+new Date().getMonth()+"_"+new Date().getDate()+"_"+new Date().getHours()+"_"+new Date().getMinutes());
}
//------------------------------------------------------------------------------
function LegendaZobraz()
{
  if (legendaDiv.style.display=='none'){
     legendaDiv.style.display='';
     tlacitkoStav(legendaCudl,true);
  } else {
     legendaDiv.style.display='none'
     tlacitkoStav(legendaCudl,false);
  }
}
//------------------------------------------------------------------------------
function PohledyZobraz()
{
  if (pohledy.style.display=='none'){
     pohledy.style.display='';
     tlacitkoStav(pohledyCudl,true);
  } else {
     pohledy.style.display='none'
     tlacitkoStav(pohledyCudl,false);
  }
}
//------------------------------------------------------------------------------
function GrafZobraz()
{
  if (grafDiv.style.display=='none'){
     grafDiv.style.display='';
     tlacitkoStav(grafCudl,true);
  } else {
     grafDiv.style.display='none'
     tlacitkoStav(grafCudl,false);
  }
}
//------------------------------------------------------------------------------
function AktivujPohled(i)
{
  PohledyZobraz();
  map.setCenter(new GLatLng(pohledyData[i]['lat'], pohledyData[i]['lon']), pohledyData[i]['zoom']);
}
//------------------------------------------------------------------------------
function ZobrazInfobox(marker,i)
{  
      parts = data[i].split("|");
      var lat = parseFloat(parts[0]);
      var lon = parseFloat(parts[1]);
      var wpt = parts[2];
      var typ = parts[3];
      var popis = parts[4];
      var autor = parts[5];
      var datum = parts[6];
    infobox.style.display = '';
    var TxtZobraz='<strong>'+popis + '</strong> by '+ autor+' (';
    if(datum!="nenalezena") {
      if(typ=="vlastni") TxtZobraz=TxtZobraz+"zasazeno ";
      else TxtZobraz=TxtZobraz+"nalezeno ";
    }
    infobox.innerHTML = TxtZobraz+datum+')';
}
//------------------------------------------------------------------------------
function ZobrazInfo(marker,i)
{  
      parts = data[i].split("|");
      var Lat = parseFloat(parts[0]);
      var Lon = parseFloat(parts[1]);
      var Wpt = parts[2];
      var Typ = parts[3];
      var Nazev = parts[4];
      var Autor = parts[5];
      var Datum = parts[6];
      var Velikost = parts[7];
      var Obtiznost = parts[8];
      var Teren = parts[9];
      var Poradi = i+1;
      var okno;
      var styl="<span style=\"font-family:arial;font-size:12px;\">"
    if(Obtiznost[2]=='0') Obtiznost=Obtiznost[0];
    if(Teren[2]=='0') Teren=Teren[0]; /*odstraneni nulove desetinne casti u hodnoceni*/
    if(Velikost=='Not chosen') Velikost='Neznama';
    okno = "<table border=0 cellspacing=0 cellpadding=2><tr><td>";
    okno = okno + "<img src=./ikony_typu/"+Typ+".gif width=20 height=20>"+styl;
    okno = okno + "<a href=\"http://www.geocaching.com/seek/cache_details.aspx?wp="+Wpt+"\" target=\"OknoGCcom\"><strong>"+Nazev+"</strong></a>";
    okno = okno + " (" +Wpt+")</span></td></tr><tr><td>"+styl+"Autor: "+Autor+"</span></td></tr><tr><td>"+styl; 
    okno = okno + "Velikost: "+Velikost+", obtiznost / teren: "+Obtiznost+" / "+Teren+"</span></td></tr><tr><td>"+styl;
    if(Datum == "nenalezena")
      okno = okno +"Dosud nenalezena cache.";
    else {
      if(Typ =='vlastni') okno = okno +"Zasazeno: " +Datum+ " jako <b>"+(Poradi-indexZacZasazenych)+"</b>.cache";
      else /* nalezena cache */
        okno = okno + "Nalezeno: " +Datum+ " jako <b>"+Poradi+"</b>.cache";
    }
    okno = okno + "</span></td></tr></table>";
    marker.openInfoWindowHtml(okno);
}
//------------------------------------------------------------------------------
function createMarker(index,Lat,Lon,Typ) {
  var point = new GLatLng(Lat,Lon);
  var marker = new GMarker(point,ikony[Typ]);

  GEvent.addListener(marker, "click", function() {
    ZobrazInfo(marker,index);
  });
  GEvent.addListener(marker,"mouseover", function() {
    ZobrazInfobox(marker,index);
  });        
  GEvent.addListener(marker,"mouseout", function() {
    infobox.style.display = 'none';
  });        
  
  return marker;
}
//------------------------------------------------------------------------------
function ZobrazCache()
{ 
 if (datai < data.length ){
   for(var i = 0; (i <20) &&(datai < data.length);i++ ){
     if (data[datai].length > 1) {
      // === split each line into parts separated by "|" and use the contents ===
      parts = data[datai].split("|");
      var lat = parseFloat(parts[0]);
      var lon = parseFloat(parts[1]);
      var typ = parts[3];
      var datum = parts[6];
      if (datum!='nenalezena') {
        Filtr_pocet++;
        var marker = createMarker(datai,lat,lon,typ);
        map.addOverlay(marker);
        if ((indexZacZasazenych==0)&&(typ=='vlastni')) indexZacZasazenych=datai; /* konec nalezenych zacinaji zasazene*/
        if (typ[0]!="_") 
         DataGrafZarad(datum);       /* do grafu nalezu zaradit jen nalezene */
       } else {
        if (indexZacZasazenych==0) indexZacZasazenych=datai; /* zadna zasazena, index nakonec (na 1.nenalezenou) */
       }
     } 
    datai++;
  }
    setTimeout("ZobrazCache()",5);
  }else{
    infobox.style.display = 'none';
    infobox.innerHTML = '';
    zobrazGraf(grafDiv,500,300);
    document.getElementById("pocetcachi").innerHTML="Celkem <font color=magenta><b>"+indexZacZasazenych+" nalezených a "+(Filtr_pocet-indexZacZasazenych)+" zasazených</b></font> cachí";
  }
}
//------------------------------------------------------------------------------
function LoadTXT(map)
{
  GDownloadUrl("data_cachi.txt?"+NahodnyStr(), function(doc) {
  lines = doc.split("\n");
  data = lines;
  datai = 0
    setTimeout("ZobrazCache()",50);
  });
} 
function NactiIkony()
{
  GDownloadUrl("ikony.txt?"+NahodnyStr(), function(doc) {
    lines = doc.split("\n");
    for (var i=0; i<lines.length; i++) {
      if (lines[i].length > 1) {
      // === split each line into parts separated by "|" and use the contents ===
      parts = lines[i].split("|");
      var Nazev=parts[0];
      var IkonaUrl=parts[1];
      var IkonaVelikost=parts[2];
      var Anchor=parts[3];
      var WindowAnchor=parts[4];
      var StinUrl=parts[5];
      var StinVelikost=parts[6];
      
      var radek = append(legenda,'tr');
      var newDiv = append(append(radek,'td'),'img');
      newDiv.setAttribute("src",IkonaUrl);
      newDiv.setAttribute("title",Nazev);
      newDiv.setAttribute("alt",Nazev);
      appendText(append(radek,'td'),Nazev);
      
      
      var icon = new GIcon();
      icon.image = IkonaUrl;
      icon.shadow = StinUrl;
      icon.iconSize = new GSize(parseFloat((IkonaVelikost.split(","))[0]),parseFloat((IkonaVelikost.split(","))[1]));
      icon.shadowSize = new GSize(parseFloat((StinVelikost.split(","))[0]),parseFloat((StinVelikost.split(","))[1]));
      icon.iconAnchor = new GPoint(parseFloat((Anchor.split(","))[0]),parseFloat((Anchor.split(","))[1]));
      icon.infoWindowAnchor = new GPoint(parseFloat((WindowAnchor.split(","))[0]),parseFloat((WindowAnchor.split(","))[1]));
      
      ikony[Nazev] = icon;
      }
    }
  });
}
//------------------------------------------------------------------------------
function NactiPohledy()
{
  GDownloadUrl("lokality.txt?"+NahodnyStr(), function(doc) {
    lines = doc.split("\n");
    for (var i=0; i<lines.length; i++) {
      if (lines[i].length > 1) {
        parts = lines[i].split("|");
        var Nazev=parts[0];
        var Lat=parts[1];
        var Lon=parts[2];
        var Zoom=parts[3];
        pohledyData[i] = new Array();
        pohledyData[i]['lat'] = parseFloat(Lat);
        pohledyData[i]['lon'] = parseFloat(Lon);
        pohledyData[i]['zoom'] = parseFloat(Zoom);
        var tl = tlacitko(pohledy,Nazev,'pohled_'+i,"7em");
        tl.onclick = new Function("AktivujPohled("+i+");");// PohledyZobraz;
      }
    }
    map.setCenter(new GLatLng(pohledyData[0]['lat'], pohledyData[0]['lon']), pohledyData[0]['zoom']);
    
  });
}
//------------------------------------------------------------------------------
function load()
{
  if (GBrowserIsCompatible()) {
  
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GOverviewMapControl(new GSize(120,120)));
   var pos = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(20,20));
    map.addControl(new GScaleControl(),pos);

    var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(155,6));
    pohledyCudl = tlacitko2(pos,'Lokalita','pohledy-cudl','7em');
    pohledyCudl.onclick = PohledyZobraz;
    var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(80,6));
    legendaCudl = tlacitko2(pos,'Legenda','legenda-cudl','5.5em');
    legendaCudl.onclick = LegendaZobraz;
    
    var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(247,6));
    grafCudl = tlacitko2(pos,'Graf nalezu','graf-cudl','7em');
    grafCudl.onclick = GrafZobraz;
    indexZacZasazenych=0;
    Filtr_pocet=0;
    dataGraf = new Array();

    var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(155,26));
    pohledy = append(map.getContainer(),'div');
    pohledy.style.display='none';
     
    pos.apply(pohledy);
    
    NactiPohledy();

    var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(80,26));
    legenda = append(map.getContainer(),'div');
    pos.apply(legenda);
    legendaDiv = legenda;
    legenda.style.display='none';
    legenda.style.fontFamily = "Arial"; 
    legenda.style.fontSize = "12px"; 
    legenda.style.backgroundColor = "white";
    legenda.style.borderWidth = "1px";
    legenda.style.borderStyle = "solid";
    legenda.style.borderColor = "black";
    
    
    legenda = append(legenda,'table');
    legenda.style.borderWidth = "1px";
    legenda.style.borderStyle = "solid";
    legenda.style.borderColor = "white";
    legenda.style.borderRightColor = "rgb(176,176,176)";
    legenda.style.borderBottomColor = "rgb(176,176,176)";
    
    legenda = append(legenda,'tbody');
    
    var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(80,5));
    infobox = append(map.getContainer(),'div');
    pos.apply(infobox);
    infobox.style.display='none';
    infobox.style.fontFamily = "Arial"; 
    infobox.style.fontSize = "12px"; 
    infobox.style.backgroundColor = "white";
    infobox.style.borderWidth = "1px";
    infobox.style.borderStyle = "solid";
    infobox.style.borderColor = "black";
    infobox.style.padding = "1px";

    var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(80,40));
    grafDiv = append(map.getContainer(),'div');
    pos.apply(grafDiv);
    grafDiv.style.display='none';
    grafDiv.style.fontFamily = "Arial"; 
    grafDiv.style.fontSize = "12px"; 
    grafDiv.style.backgroundColor = "white";
    grafDiv.style.borderWidth = "1px";
    grafDiv.style.borderStyle = "solid";
    grafDiv.style.borderColor = "black";
    grafDiv.style.padding = "1px";
    grafDiv.style.width = "500px";
    grafDiv.style.height = "300px";

    infobox.style.display = '';
    infobox.innerHTML = '<strong>Prosim strpeni, nacitam data...</strong>';
    

    var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(80,100));

    NactiIkony();
    LoadTXT(map);
  }
}
//------------------------------------------------------------------------------
function DataGrafZarad(Datum)
{
  for(var i = dataGraf.length - 1; i >=0 ; i--){
    if (dataGraf[i]["datum"] == Datum){
      dataGraf[i]["pocet"] = dataGraf[i]["pocet"] + 1;
      return; 
    } 
  }
  pom = new Array();
  pom["datum"] = Datum;
  pom["pocet"] = 1;
  dataGraf.push(pom);
}
//------------------------------------------------------------------------------
function str2Date(datum)
{
  var parts = datum.split('.');
  var den = parseFloat(parts[0]);
  var mesic = parseFloat(parts[1]);
  var rok = parseFloat(parts[2]);
  var dat = new Date(0);
  dat.setFullYear(rok);
  dat.setMonth(mesic-1);
  dat.setDate(den);
  return dat;
}
//------------------------------------------------------------------------------
function rozdil(datum1,datum2)
{
  var dat1 = str2Date(datum1);
  var dat2 = str2Date(datum2);
  var rozdil = (dat2.getTime() - dat1.getTime())/(24*60*60*1000);
  return rozdil; 
}
//------------------------------------------------------------------------------
function posunoMesic(datum)
{
  var den = datum.getDate();
  var mesic = datum.getMonth();
  var rok = datum.getFullYear();
  
  mesic++;
  if (mesic == 12){
    rok++;
    mesic = 0;
  } 
  datum.setMonth(mesic);
  datum.setFullYear(rok);
  return datum;
}
//------------------------------------------------------------------------------
function posunoMesicZpet(datum)
{
  var den = datum.getDate();
  var mesic = datum.getMonth();
  var rok = datum.getFullYear();
  
  mesic--;
  if (mesic == -1){
    rok--;
    mesic = 11;
  } 
  datum.setMonth(mesic);
  datum.setFullYear(rok);
  return datum;
}
//------------------------------------------------------------------------------
function zobrazGraf(root,sirka,vyska)
{
  var PosunX = 20;
  var PosunY = 20;
  var Vyska = vyska - 2*PosunY;
  var Sirka = sirka - 2*PosunX;
  var suma = 0;
  dniCelkem = rozdil(dataGraf[0]["datum"],dataGraf[dataGraf.length-1]["datum"]);
  dniCelkem = dniCelkem;
  var poslednix = 0;
  var posledniy = 0;
  var CelkemNalezu = 0;
  var hledamSto = 100;
  for(var i = 0 ; i < dataGraf.length; i++){
    CelkemNalezu = CelkemNalezu + dataGraf[i]["pocet"]
  } 
  
  for(var i = 0 ; i < dataGraf.length; i++){
    suma = suma + dataGraf[i]["pocet"]
    var x = rozdil(dataGraf[0]["datum"],dataGraf[i]["datum"])/dniCelkem * Sirka;
    var y = suma / CelkemNalezu * (Vyska-20);
    caraSvisla(root, x + PosunX , vyska - (y + PosunY) ,y - posledniy,"blue");
    caraVodorovna(root, poslednix+PosunX , vyska - (PosunY + posledniy),x-poslednix,"blue");
    poslednix = x;
    posledniy = y;    
    if (suma >= hledamSto){
      caraSvisla(root,x+PosunX,vyska - (y + PosunY) - 5,10,"red");
      hledamSto = hledamSto + 100;
      zobrazTextVlevo(root, sirka - x - PosunX + 3 , vyska - (y + PosunY) - 10,"9px","red", dataGraf[i]["datum"] );
    }
  }
  caraSvisla(root, x + PosunX+3 ,  PosunY ,Vyska,"black");
  caraVodorovna(root, PosunX , (PosunY + Vyska ),Sirka+3,"black");
  var pom = 100;
  while ( (y = pom / CelkemNalezu * (Vyska-20))< Vyska  ){
    caraVodorovna(root, PosunX , vyska - (PosunY + y),Sirka,"red");
    zobrazText(root,PosunX ,vyska - (PosunY + y)-12, "10px" ,"black",pom);
    pom = pom + 100;
  }
  var den = str2Date(dataGraf[0]["datum"]);
  den.setDate(1);
  den = posunoMesicZpet(den)
  while (  (x = (((((den = posunoMesic(den)).getTime()-str2Date(dataGraf[0]["datum"]).getTime())/(24*60*60*1000)))/dniCelkem * Sirka)) < Sirka ){
    caraSvisla(root, x + PosunX , Vyska + PosunY - 2 ,5,"black");
    zobrazText(root, x + PosunX - 10, Vyska + PosunY + 3,"9px","black", (den.getMonth()+1)+"/"+(den.getFullYear().toString()).substring(2,4));
  }
  
    
}
