// --- INIT --------------------------------------------------------------------
window.onload=function(){ init(); };

function init() {
  menuInit(); //inicializace rozbalovaciho menu
  menuAttachLinks('homepage,noLinks'); //zajisti rozbalene menu v ramci webu, nepriradi funkcnost rozbalovani k tride 'homepage'
	if (top.length != self.length) top.location.href = self.location.href; //je-li stranka nactena v ramu, nacte se do top ramu
}
// --- CONSTANTS ---------------------------------------------------------------
var menu_param = 'ukaz'; //nazev parametru v url, ve kterem se predava seznam rozbalenych menu


// --- FUNCTIONS ---------------------------------------------------------------

//fce pro zobrazeni fotky
function show(odkaz,width,height) {
  window.open(odkaz+"&width="+width+"&height="+height, "foto", "width="+(width)+",height="+(height)+", toolbar=no, status=no, location=no, menubar=no, resizable=no");
  return false; // pokud funguje javascript, zastavim provadeni akce, ktera je v HREF
}

//fce pro otevreni stranky
function show_page(odkaz,width,height) {
  window.open(odkaz, "page", "width="+width+",height="+height+", toolbar=no, status=yes, location=no, menubar=no, scrollbars=yes");
  return false;
}

// inicializace menu - skryti a zobrazeni potrebnych podmenu
function menuInit() {

  //nactu vsechny podmenu
  objs = getElementsByClass('submenu', getObj('menu'));

  //nactu z GET parametru 'ukaz', ktere podmenu mam rozbalit
  var tmp = getURLParam(menu_param);
  var submenu_show = tmp.split(",");
  for(x=0; x<submenu_show.length; x++) { submenu_show[x] = parseInt(submenu_show[x]); } //prevedu na cisla

  //prochazim vsechny podmenu a nastavuji zobrazeni/skryti
  for(s=0; s<objs.length; s++) {
    objs[s].style.display = "none";
    for(x=0; x<submenu_show.length; x++) {
      if(s==submenu_show[x]) { objs[s].style.display = "block"; break; }
    }
  }
}

//vlozi do odkazu, na ktery se kliklo seznam otevrenych podmenu
function menuTerminate(evt) {

	//objekt, na ktery se kliknulo (v objektu event je v standartně v 'target', IE jej ma v 'srcElement')
	object = evt["target"] ? evt["target"] : evt["srcElement"];

  //nactu vsechny podmenu
  objs = getElementsByClass('submenu', getObj('menu'));

  //zjistim, ktere podmenu jsou rozbalene
  var submenu_show = new Array();
  for(x=0; x<objs.length; x++) {
    if(objs[x].style.display=="block") { submenu_show[submenu_show.length] = x; } //vlozim do pole cisla viditelnych podmenu
  }

  link = object.href;
  if(submenu_show.length) { //pokud je rozbalene alespon nejake podmenu
    if(link.indexOf("?") == -1) { link += "?"; } else { link += "&"; }
    link += menu_param +"=";
    for(i=0; i<submenu_show.length; i++) {
      separator = (i==submenu_show.length-1) ? "" : ","; //vlozim oddelovac krome posledniho prvku
      link += submenu_show[i] + separator;
    }
    object.href = link; //prepiseme odkaz v prvku, nad kterym probehla udalost (kliknuti)
  }
}

//zobrazeni a skryti podmenu
function menuSwitch(id) {
  object = getObj(id);
  object.style.display = (object.style.display=='none') ? "block" : "none";
  return false; //zabrani prejiti na stranku, ktera je v href
}

//priradi vsem odkazum funkci menuTerminate na udalost kliknuti (lze omezit na vnitrek objektu doc, implicitne cely dokument)
//exceptClasses = jmena trid (oddelene carkou), ktere z prirazeni vynechavam
function menuAttachLinks(exceptClasses, doc) {
  if(!doc) { doc = document; } //implicitne prochazim v celem dokumentu

  var exeptions = exceptClasses.split(","); //pole s vyjímkami, u kterých ID nepřiřadit handler
  var patterns = new Array(); //pole s regularnimi vyrazy, hledajicimi dane tridy
  for(i=0; i<exeptions.length; i++) {
    if(!exeptions[i]) { continue; } //prazdne tridy preskocim
    patterns[i] = new RegExp("(^|\\s)" + exeptions[i] + "(\\s|$)");
  }

  //nactu vsechny kotvy
  as = doc.getElementsByTagName('a');
  for(i=0; i<as.length; i++) {
    if(as[i].href==NaN) { continue; } //neodkazy preskocim
    if(isExternalLink(as[i])) { continue; } //externi preskocim

    if(as[i].className) { //zpracovavam vyjimky
      is_exception = false;
      for(j=0; j<patterns.length; j++) {
        if(patterns[j].test(as[i].className)) { is_exception=true; break; }
      }
      if(is_exception) { continue; } //třídu patrici do vyjímek preskocim
    }

    addEventListener(as[i], 'click', menuTerminate, false); //priradim udalost
  }
}

// --- CORE --------------------------------------------------------------------

//vrati objekt s danym id
function getObj(id) {
  var obj = document.getElementById ? document.getElementById(id) : document.all[id];
  return obj;
};


//vyhleda elementy s danou tridou (class)
//searchClass - hledana trida
//node - kde prohledavat (nepovinne)
//tag - prohledavat jen tyto tagy
function getElementsByClass(searchClass, node, tag) {
  var classElements = new Array();
  if ( node == null )
          node = document;
  if ( tag == null )
          tag = '*';
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
  for (i = 0, j = 0; i < elsLen; i++) {
          if ( pattern.test(els[i].className) ) {
                  classElements[j] = els[i];
                  j++;
          }
  }
  return classElements;
}

//vrati hodnotu parametru strParamName predaneho metodou GET
function getURLParam(strParamName){
  var strReturn = "";
  var strHref = window.location.href;
  if(strHref.indexOf("?") > -1) {
    var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
    var aQueryString = strQueryString.split("&");
    for( var iParam = 0; iParam < aQueryString.length; iParam++ ) {
      if( aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 ) {
        var aParam = aQueryString[iParam].split("=");
        strReturn = aParam[1];
        break;
      }
    }
  }
  return unescape(strReturn);
}

//vygeneruje uvnitr elementu doc (implicitne cely dokument), unikatni id
function genUid(doc) {
  if(!doc) { doc = document; }
  var uid, collide = 0;

  do {
    uid = ((new Date()).getTime() + "" + Math.floor(Math.random() *  1000000)).substr(0, 18);
    if(doc.getElementById(uid)) { collide = 1; }
  } while(collide);
  return uid;
}

//zjisti, zda se jedna o externi odkaz
function isExternalLink(a) {
  var external=false;
  test_exp = new RegExp("^(http(s)?://"+self.location.host+"|mailto:)"); // regulární výraz, který zjistí, zda vede odkaz na jiný server
  if(!test_exp.test(a.href)) external=true; // vede odkaz na jiný server?
  //if(a.className.indexOf("external")>-1) nove_okno=true; // má přiřazenu třídu „external?“
  //if(a.rel=="external") nove_okno=true; // má nastaven atribut rel na „external?“?
  return external;
}

//kompatibilni prirazeni funkce k nejake udalosti elementu
function addEventListener(element, eventType, handler, capture) {
	if(element.addEventListener) {
		element.addEventListener(eventType, handler, capture); return true;
	} else if(element.attachEvent) {
		var r = element.attachEvent("on" + eventType, handler); return r;
  } else { return false; }
}

