/*
  Hlavní Javascriptový modul


//   var box = JAK.gel("box");
//   box.innerHTML = " xp:" + xp + " yp:" + yp + " px:" + px + " py:" + py + " / "+ sdat +" \n";

*/

var xr_p = 291;		// přehledka
var yr_p = 166;
var xr_m = 18.8591047222 - 12.0906208333; 	// šířka GPS
var yr_m = 51.0557169444 - 48.5521222222; 	// výška GPS
var x0 = 12.0906208333;
var y0 = 51.0557169444;

var znacky  = new Array(); 	// hlavní pole značek,seřazené podle x
var ar_ico  = new Array(); 	// pole objektů existujících značek

var vykresluji = 1;		// příznak, jestli jsi dokončil vykreslování

var editmode = 0;  	// režim vkládání objektů
var znac_cnt = 0;  	// čítač ?


function inhtml(element, obsah)  // ladící funkce
 { document.getElementById(element).innerHTML = obsah; }




function sort2(a, b) 		// Sort by the 2nd value in each array 
{
 if ( a[1] == b[1] ) return 0;
 return a[1] < b[1] ? -1 : 1; 	// return a[1].localeCompare(b[1]);  ??? jde ???
};


function getCookieValue(cookieName)  // --------------  načti cookie údaj  --------------
{
 var cookieValue = document.cookie;
 var cookieStartsAt = cookieValue.indexOf(" " + cookieName + "=");
 if(cookieStartsAt == -1)
    cookieStartsAt = cookieValue.indexOf(cookieName + "=");
 if(cookieStartsAt == -1)
    cookieValue = null;
 else
  {
   cookieStartsAt = cookieValue.indexOf("=", cookieStartsAt) + 1;
   var cookieEndsAt = cookieValue.indexOf(";", cookieStartsAt);
   if(cookieEndsAt == -1)
      cookieEndsAt = cookieValue.length;

   cookieValue = unescape(cookieValue.substring(cookieStartsAt, cookieEndsAt));
  }
 return cookieValue;
}


function call_ajax(url, callback)	// ----------  AJAX funkce  ------------------
{
 var rq = new JAK.Request(JAK.Request.TEXT);
 rq.setCallback(window, callback);
 rq.send(url);
}


// -------------------------------  natáhni značky do polí  --------------------------------------
function load_obj()
{
 call_ajax('/ajax_objlist.php', 'load_resp');
}
function load_resp(txt, status)	// ----- odpověd ze serveru  -----------
{
  //           0   1     2        3        4        5    |   6
  // znacky:  id | x |   y   | nazev  | skupiny | ikona  | min zoom
  if(status != 200)  window.alert('Nepodařilo se načíst data ze serveru.');
  else
    { 
     var znacdat = txt.split("*");      // rozbij do pole
     for(i=0; i<znacdat.length; i++) 
      {
       var datz = znacdat[i].split("|");
       var ztmp = new Array();
       ztmp[0] = parseInt(datz[0]);	// id
       ztmp[1] = parseFloat(datz[1]); 	// x
       ztmp[2] = parseFloat(datz[2]); 	// y
       ztmp[3] = datz[3];		// nazev
       ztmp[4] = datz[4];		// skupiny
       ztmp[5] = parseInt(datz[5]);	// ikona
       ztmp[6] = datz[6];		// min zoom
       ztmp[7] = 0;			// vykreslena ?
       znacky[i] = ztmp;
      }
     znacky.sort(sort2); 			// serad pole podle 2.indexu X-soradnice

     // move_okno.precti();   // po načtení zavole událost pohybu v mapě
    }
 vykresluji = 0;		// po natažení zapni možnost dalšího překreslení

 move_okno.precti();		// vykresli ikony
}


// -------------------------------  prekresli značky do mapy  --------------------------------------
function vykr_znacky(left, right, top, bottom, zoom)
{
 vykresluji = 1;				// začínám vykreslovat

 // --------------- odstran mimo -----------------

 var icc = ar_ico.length;			// čítač pole objektů ikon
 var key = 0;
 while(key <  icc) 				// procházej pole podle key
  {
   idz = ar_ico[key].getId();			// načti index značky
   if(znacky[idz][1] < left || znacky[idz][1] > right || znacky[idz][2] < bottom || znacky[idz][2] > top || zoom < znacky[idz][6])
     {						// leží mimo, nezobrazuje se
      zn_vrstva.removeMarker(ar_ico[key]);	// odeber z mapy
      ar_ico.splice(key,1);			// odeber z pole
      znacky[idz][7] = 0;			// ozn. jako nevykreslenou
      icc--; 					// sniž velikost pole, pozice key zůstává
     }
   else
     key++;					// jdi na další
  }

 // --------------- vykresli nové  ----------------
 var icc  = ar_ico.length;			// čítač pole objektů ikon
 pps = 0;					// začátek intervalu
 ppe = znacky.length;				// konec intervalu
 pul = 0;					// poslední půlka intervalu
 // najdi pomocí půlení intervalu první hodnotu rozsahu left
 do {
     lastp = pul;
     pul = pps + parseInt((ppe-pps)/2);		// půlka intervalu   Math.round
     if(left < znacky[pul][1]) ppe = pul;	// leží v spodní části intervalu
     else                      pps = pul;	// leží v horní
    } while(lastp != pul)			// máš v "pul" index kde zacina x

 while(znacky[pul][1] < right) 			// projdi značky v intervalu
   {
    if(znacky[pul][7] == 0 && znacky[pul][6] <= zoom && znacky[pul][2] > bottom && znacky[pul][2] < top)  // nevykreslená, leží ve vertilálním intervalu a zoom od
     {
      skupiny = znacky[pul][4].split(",");	// načti skupiny
      // viditelné skupiny
      if(ar_visible.length == 17)		// jedna z prvních skupin je zaplá ?   || ar_visible.indexOf(skupiny[0]) > 0 || ar_visible.indexOf(skupiny[1]) > 0
        {
         //  nyní je značka viditelná, přidáváš ji
         znacky[pul][7] = 1;				// ozn. jako vykreslenou
         
         var pp = SMap.Coords.fromWGS84(znacky[pul][1], znacky[pul][2]);
         nazev  = znacky[pul][3];
         typzn  = znacky[pul][5];				// číslo ikony
         ar_ico[icc] = new SMap.Marker(pp, pul, { url:'img/'+ znacdata[typzn][1] +'.png', title:nazev, anchor: {left:15, top:15} } );
         ar_ico[icc].decorate(SMap.Marker.Feature.Card, null); 	// dekoruj aby byla klikaci
         zn_vrstva.addMarker(ar_ico[icc]);			// pridam znacku do mapy  myIcon
         icc++;							// inkrem. čítač
        }
     }
    pul++;		// na další
   }
 vykresluji = 0;	// skončil jsem z vykreslováním
}




function markClick(e)	// --------------------------  událost kliknutí na objekt  ----------------------------
 {
  ddt = e.target;       	// tady je v pod obj.
  idz = ddt.getId();		// načti index  parseInt(ddt['_id'])
  if(idz < 100000)
   {				// kliknuto na objekt
    ido  = znacky[idz][0];	// načti id objektu
    obj_info(ido);		// informace o objektu
   }
  else if(idz < 500000)
   {				// kliknuto na pano, mají cis od 100tis. nahoru
    idz -= 100000;
    panorama(idz);		// otevři okno s pano
   }
  else
   {				// kliknuto na foto, mají cis od 500tis. nahoru
    idz -= 500000;
    obraz(idz);			// otevři okno s foto
   }
 }



function prepni()  // ---------------  přepínač levého panelu  -------------------
{
 if(l_mode == 1)   // když je, vypni ho
   {
    document.getElementById('levy').style.display='none';
    document.getElementById('rozbox').style.display='block';
    l_mode = 0;
    m.syncPort();	// nastav rozměry divu znova na rodiče
   }
 else
   {
    document.getElementById('levy').style.display='block';
    document.getElementById('rozbox').style.display='none';
    l_mode = 1;
    m.syncPort(); 	// nastav rozměry divu znova na rodiče
   }
}



// ----------------------------------------------  přehledka  ------------------------------------------------------

function showbox(xx,yy,xr,yr)	// zobraz overlay na přehledce v abs. pixelech
{
  if(xx < 0) { xr += xx; xx = 0; }
  if(yy < 0) { yr += yy; yy = 0; }

  if(xx > xr_p)  xx = xr_p;
  if(yy > yr_p)  yy = yr_p;
  
  if( (xx+xr) > xr_p ) xr -= xx+xr-xr_p;
  if( (yy+yr) > yr_p ) yr -= yy+yr-yr_p;

 if(document.getElementById('mapbox'))
 {
  xx += 68;
  var mbx = document.getElementById('mapbox');
  mbx.style.top = yy + "px";
  mbx.style.left = xx + "px";
  if(xr > 4 && yr > 4)
   {
    mbx.style.width  = xr + "px";
    mbx.style.height = yr + "px";
    mbx.style.backgroundColor = '#2040ff';
    mbx.style.opacity = 0.56;
    mbx.style.filter = 'alpha(opacity=56)';
   }
  else
   {
    mbx.style.width  = "4px";
    mbx.style.height = "4px";
    mbx.style.backgroundColor = '#ff2000';
    mbx.style.opacity = 1;
    mbx.style.filter = 'alpha(opacity=99)';
   }
 }
}

function getMouse(obj)	// ----------  kliknutí na přehledku, nastaví 
{
 var posx = 0;
 var posy = 0;
 var e = window.event;
 if(e.pageX || e.pageY)
   { posx = e.pageX; posy = e.pageY; }
 else if(e.clientX || e.clientY)		 	// posx and posy contain the mouse position relative to the document
   { posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;  }

 // --- gex x position of the element
 ccl = JAK.DOM.getBoxPosition(obj); 			//  či getPortBoxPosition     vrací  object - s vlastnostmi : left(px) - horizontální pozice prvku top(px) - vertikální pozice prvku
 posx -= ccl.left; posx -= 68; 				// --- uprav souradnice k přesnému rohu mapy
 posy -= ccl.top;  posy -= 1;

 if(posx>0 && posy>0)	// zavolej do mapy funkci přehledky
  {
   xm = (xr_m * posx) / xr_p ;
   ym = (yr_m * posy) / yr_p ;
   xm += x0;
   ym  = y0 - ym;
   m.setCenter(SMap.Coords.fromWGS84(xm,ym));    // nastaví střed mapy
  }
}



var move_okno = {       // ------------ objekt posluchače události pohybu okna  --------------------
 precti: function()
  {
   sdat = m.formatString('{lbx},{lby},{rtx},{rty},{zoom}');  // načti GPS souřadnice okrajů průhledu mapy , zoom, orientation {cx},{cy},
   sour = sdat.split(",");
   left   = parseFloat(sour[0]);
   bottom = parseFloat(sour[1]);
   right  = parseFloat(sour[2]);
   topc   = parseFloat(sour[3]);
   zoom   = parseInt(sour[4]);

   // spočti souřadnice výřezu v pixelech
   xm = right - left;			// šířka
   ym = topc - bottom;			// výška
   xp = Math.round( (xr_p * xm) / xr_m );
   yp = Math.round( (yr_p * ym) / yr_m );
   // roh
   mx = left - x0;
   my = y0 - topc;
   px = Math.round( (xr_p * mx) / xr_m );
   py = Math.round( (yr_p * my) / yr_m );
   
   showbox(px,py,xp,yp);  // zobraz overlay na přehledce podle souřadnic v pixelech  px,(yr_p-py)

   if(vykresluji == 0)  vykr_znacky(left, right, topc, bottom, zoom);  // je-li již naplněno pole, a dokončil jsi předchozí, překresli objekty

  }
}


// ------------------  konstruktor objektu výpisu objektů v řádcích  -------------------
function objkt_list(vdat, div, nadp, objname)
{
  this.poc_list = 10;
  this.page    = 0;
  this.poleobj = vdat;
  this.nadpis  = nadp;
  this.divtxt  = div;
  
  this.xlist = function()
  {
   obsah  = '<div style="width:98%; padding:2px;">';
   obsah += '<div class="top_left"><a href="javascript:document.getElementById(\''+ this.divtxt +'\').style.display=\'none\'; void(0);"><img border="0" src="img/x.gif" align="right" hspace="6" vspace="2" width="10" height="9"></a><img border="0" src="img/sip.gif" hspace="5" width="7" height="9" />'+ this.nadpis +'</div>';

   nofound = '<div> Nebyl nalezen žádný objekt !  </div>';

   start = this.page*this.poc_list;
   konec = this.poc_list*(this.page + 1);

   sw = 0;						//  0      1        2         3        4
   for(p=start; p<konec && p<this.poleobj.length; p++)	// id * nazobj * skupiny * x_sour * y_sour
    { 
     radek = this.poleobj[p];
     ln    = radek.split("*");

     skupi  = ln[2];			// skupiny  např. 01,22,35
     icozn = '';			// obsah značek
     if(skupi != '')			// je zařazen v nějaké skupině ?
       {
        skpi = skupi.split(",");
        for(d=0; d<skpi.length; d++)     // projeď skupiny
           { ztyp = parseInt(skpi[d]);
             icozn += '<img style="border:0; float:right; padding-right:10px; margin-right:10px;" src="img/i_'+znacdata[ztyp][1]+'.gif" alt="'+znacdata[ztyp][3]+'" />';  }
       }
     if(sw == 1) { prokl = ' tbprokl'; sw = 0; }
     else        { prokl = ''; sw = 1; }
     obsah += '<div class="listdiv'+ prokl +'"> <a href="javascript:obj_info('+ ln[0] +', 1);">'+ ln[1] +'</a> '+icozn+'</div>';

     nofound = '';
    }

   if(this.page > 0) prev = '<a href="javascript:'+ objname +'.predch();">&lt;&lt; předchozí</a>';
   else              prev = '<font color="#808080">&lt;&lt; předchozí</font>';

   if(p < this.poleobj.length) next = '<a href="javascript:'+ objname +'.dalsi();">další &gt;&gt;</a>';
   else                        next = '<font color="#808080">další &gt;&gt;</font>';

   obsah += nofound;
   obsah += '<div style="text-align:right; padding-right:10px;">'+ prev +' &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; '+ next +'</div>';
   obsah += '</div>';

   document.getElementById(this.divtxt).innerHTML = obsah;		// vypis info o objektu
   document.getElementById(this.divtxt).style.display='block';
  } // end function

  this.predch = function()
  {
   this.page--;
   this.xlist();
  }

  this.dalsi = function()
  {
   this.page++;
   this.xlist();
  }
} // konec konstruktoru



// ------------------------------  nejnovější objekty   -------------------------------
function _nejnovejsi(txt, status)
{
 if(status == 200)  vrdat = txt.split("|");
  else
    { vrdat[0] = '0*Nepodařilo se načíst data ze serveru.*0'; }

  obj_nejn.poleobj = vrdat;	// ulož data
  obj_nejn.page    = 0;	// stránka 0
  obj_nejn.xlist();
}

// -------------------------------  vyhledávání objektu  --------------------------------------
function vyhledej()
{
 text = document.getElementById('hledej').value;
 call_ajax('/ajax_srch.php?nazev='+text, 'vyhl_resp');
}
function vyhl_resp(txt, status)	// ----- odpověd ze serveru  -----------
 {
  if(status == 200)  vrdat = txt.split("|");
  else
    { vrdat[0] = '0*Nepodařilo se načíst data ze serveru.'; }

  obj_vyhl.poleobj = vrdat;	// ulož data
  obj_vyhl.page    = 0;	// stránka 0
  obj_vyhl.xlist();
}





// --------------------------  funkce z mapy, zobr. fotky a panorama  -----------------------
function obraz(idf)
{
 window.open('/mapy/foto.php?idf='+idf, 'foto', 'toolbar=no,scrollbars=yes,resizable=yes,top=5,left=9,height=550,width=850' );
}

function panorama(idpano)
{
 window.open('/pano/pano.php?pan='+idpano, 'panorama', 'toolbar=no,menubar=no,location=no,directories=no,scrollbars=no,resizable=no,status=no,width=1020,height=550');
}

function userinfo(usr)
{
 window.open('uzivatel.php?usr='+usr, 'uzivatel', 'toolbar=no,menubar=no,location=no,directories=no,scrollbars=no,resizable=no,status=no,width=620,height=500');
}

function openwiki(link)
{
 // window.open('http://cs.wikipedia.org/wiki/'+escape(link), 'wikipedie', 'toolbar=no,menubar=no,location=no,directories=no,scrollbars=yes,resizable=yes,status=no,width=1000,height=660');
 openPopupWindow('http://cs.wikipedia.org/wiki/',link, 'wikipedie', 1000, 660);
}

function wikipix(link)
{
 // window.open('http://cs.wikipedia.org/wiki/Soubor:'+escape(link), 'wikimedia', 'toolbar=no,menubar=no,location=no,directories=no,scrollbars=yes,resizable=yes,status=no,width=1000,height=660');
 openPopupWindow('http://cs.wikipedia.org/wiki/Soubor:',link, 'wikimedia', 1000, 660);
}



var myPopupWindow = '';
function openPopupWindow(servadr,url, name, width, height)
{
 if(JAK.Browser.client == 'ie')  url = escape(url);		// internetexplorer
 else                            url = encodeUrl(url);		// firefox


    if (!myPopupWindow.closed && myPopupWindow.location)    //If it is already open
        myPopupWindow.location.href = servadr+url;
    else
    {
        myPopupWindow= window.open(servadr+url,name, "location=no, scrollbars=yes, resizable=yes, toolbar=no, menubar=no, width=" + width + ", height=" + height );
        if (!myPopupWindow.opener) myPopupWindow.opener = self;
    }

    if (window.focus) {myPopupWindow.focus()}     //If my main window has focus - set it to the popup
}

function encodeUrl(url)
{
 	if (url.indexOf("?")>0)
 	{
		encodedParams = "?";
 		parts = url.split("?");
 		params = parts[1].split("&");
 		for(i = 0; i < params.length; i++)
 		{
			if (i > 0)
	 		{
				encodedParams += "&";
			}
			if (params[i].indexOf("=")>0) //Avoid null values
			{
				p = params[i].split("=");
				encodedParams += (p[0] + "=" + escape(encodeURI(p[1])));
			}
			else
			{
				encodedParams += params[i];
			}
		}
		url = parts[0] + encodedParams;
	}
	return url;
}



// vytvoření objektů k listování
var obj_vyhl = new objkt_list(null, 'i_srch', 'Nalezené objekty', 'obj_vyhl');		// vyhledávání objektů
var obj_moje = new objkt_list(null, 'i_moje', 'Moje objekty', 'obj_moje');		// moje objekty
var obj_nejn = new objkt_list(null, 'i_box1', 'Nejnovější objekty', 'obj_nejn');	// nejnovější objekty




/*


        var txt1 = '';
        for(d=0; d<20; d++)     // projeď pole
           {
            txt1 += seraz_x[d][0]+','+seraz_x[d][1]+','+seraz_x[d][2]+','+seraz_x[d][3] +" \n ";
           }
        window.alert(txt1);

        window.alert(znacky[325][0]+','+znacky[325][1]+','+znacky[325][2]+','+znacky[325][3]+','+znacky[325][4] +" \n ");



// inhtml('i_box1', 'zoom:'+seraz_x[pul][3]+'/'+ zoom+' , vert:'+ bottom +'/'+seraz_x[pul][2] +'/'+ top );
 
 window.alert('ppe:'+ ppe);
 window.alert('pps:'+ pps+ 'ppe:'+ ppe+ 'pul:'+ pul + 'x:'+ seraz_x[pul][1]);

 // window.alert('left:'+ left +' , right:'+ right +'top:'+ top +' , bottom:'+ bottom + ' , zoom:'+ zoom); 




 // kreslim = '';
 // kreslim += 'DEL  id:'+idz + ' / '+znacky[idz][1] +'/'+ znacky[idz][2] +" \n";
 // kreslim += pul+' / '+znacky[pul][1] +'/'+ znacky[pul][2] +" \n";
 // inhtml('i_box1', kreslim);


*/
