//vytvoreni noveho elementu DOM
function vytvor( elem ) {
  return document.createElementNS ?
    document.createElementNS( 'http://www.w3.org/1999/xhtml', elem ) :
    document.createElement( elem );
}

//------------------------------------------------------------------------------

//ziskani a nastaveni hodnot parametru elementu
//dva argumenty - vrati hodnotu daneho parametru (treba href, alt...)
//tri argumenty - nastavi hodnotu danemu parametru a vrati tuto novou hodnotu 
function par(elem, nazev, hodnota) {
  // Ujistíme se, že byl předán správný název.
  if ( !nazev || nazev.constructor != String ) return '';

  // Zjistíme, jestli název odpovídá jednomu z podivných případů názvů.
  nazev = { 'for': 'htmlFor', 'class': 'className' }[nazev] || nazev;

  // Pokud uživatel nastavuje hodnotu
  if ( typeof hodnota != 'undefined' ) {
    // použijeme nejprve rychlý způsob.
    elem[nazev] = hodnota;

    // Pokud to lze, použijeme metodu setAttribute.
    if ( elem.setAttribute )
      elem.setAttribute(nazev,hodnota);
  }

  // Vrátíme hodnotu daného parametru.
  return elem[nazev] || elem.getAttribute(nazev) || '';
}

//------------------------------------------------------------------------------

//pripoji na konec element jako dcerinny element dalsiho elementu (parent)
//napr: pripoj(ukazatel_li, "Nejaky texticek");

function append( parent, elem ) {
    // Get the array of elements
    var elems = checkElem( elem );
    
    // Append them all to the element
    for ( var i = 0; i < elems.length; i++ ) {
        parent.appendChild( elems[i] );
    }
}

//------------------------------------------------------------------------------

//pomocna funkce pro fce before a append
function checkElem(a) {
    var r = [];
    // Force the argument into an array, if it isn’t already
    if ( a.constructor != Array ) a = [ a ];

    for ( var i = 0; i < a.length; i++ ) {
        // If there’s a String
        if ( a[i].constructor == String ) {
            // Create a temporary element to house the HTML
            var div = document.createElement("div");

            // Inject the HTML, to convert it into a DOM structure
            div.innerHTML = a[i];

             // Extract the DOM structure back out of the temp DIV
             for ( var j = 0; j < div.childNodes.length; j++ )
                 r[r.length] = div.childNodes[j];
        } else if ( a[i].length ) { // If it’s an array
            // Assume that it’s an array of DOM Nodes
            for ( var j = 0; j < a[i].length; j++ )
                r[r.length] = a[i][j];
        } else { // Otherwise, assume it’s a DOM Node
            r[r.length] = a[i];
        }
    }
    return r;
}

//------------------------------------------------------------------------------

//fce pro pripojeni elementu pred dalsi element, viz str. 113
function before( parent, before, elem ) {
    // Check to see if no parent node was provided
    if ( elem == null ) {
        elem = before;
        before = parent;
        parent  = before.parentNode;
    }

    // Get the new array of elements
    var elems = checkElem( elem );

    // Move through the array backwards,
    // because we’re prepending elements
    for ( var i = elems.length - 1; i >= 0; i-- ) {
        parent.insertBefore( elems[i], before );
    }
}

//------------------------------------------------------------------------------

//vrati ukazatel na id elementu
function id(nazev) {
  return document.getElementById(nazev);
}

//------------------------------------------------------------------------------

//fce pro vyhledani elementů HTML dle nazvu - vraci pole (seznam ukazatelů)
function tag(nazev, elem) {
  // Pokud nebyl předán element jako kontext, prohledáme celý dokument.
  return (elem || document).getElementsByTagName(nazev);
 }
 
//------------------------------------------------------------------------------ 

//fce hledajici nasledujici element daneho elementu
function next( elem ) {
    do {
        elem = elem.nextSibling;
    } while ( elem && elem.nodeType != 1 );
    return elem;
}

//------------------------------------------------------------------------------  


//fce hleda predchozi element daneho elementu
function prev( elem ) {
    do {
        elem = elem.previousSibling;
    } while ( elem && elem.nodeType != 1 );
    return elem;
}

//------------------------------------------------------------------------------

//fce hleda prvni dcerinny element daneho elementu
function first( elem ) {
  elem = elem.firstChild;
  return elem && elem.nodeType != 1 ?
    next ( elem ) : elem;
}

//------------------------------------------------------------------------------

//fce hleda posledni dcerinny element daneho elementu
function last( elem ) {
    elem = elem.lastChild;
    return elem && elem.nodeType != 1 ?
        prev( elem ) : elem;
}

//------------------------------------------------------------------------------

//fce hleda rodice daneho elementu, num je stupen zanoreni
function parent( elem, num ) {
    num = num || 1;
    for ( var i = 0; i < num; i++ )
        if ( elem != null ) elem = elem.parentNode;
    return elem;
}

//------------------------------------------------------------------------------

//fce pro obdrzeni textoveho obsahu elementu
function textik(e){
    var t = "";
  
    // Pokud byl předán element, získáme jeho potomky,
    // jinak předpokládáme, že jde o pole.
    e = e.childNodes || e;
  
    // Projdeme všechny dceřiné uzly.
    for ( var j = 0; j < e.length; j++ ) {
      // Pokud to není element, přidáme jeho textovou hodnotu.
      // Jinak postupujeme rekurzivně přes všechny potomky elementu.
      t += e[j].nodeType != 1 ?
        e[j].nodeValue : textik(e[j].childNodes);
    }
  
    // Vrátí příslušný text.
    return t;
  }
  
//------------------------------------------------------------------------------  

// odstrani uzel z DOM
function remove( elem ) {
    if ( elem ) elem.parentNode.removeChild( elem );
}

//------------------------------------------------------------------------------

// odstrani vsechny dcerine elementy z elem
function emptyElem( elem ) {
    while ( elem.firstChild )
        remove( elem.firstChild );
}

//------------------------------------------------------------------------------


















