domReady(function() {

    var links = getElementsByClassName("link", "a");

    for(var l = 0; l < links.length; l++) {
        addEvent(links[l], "click", function(){
            return !window.open(this.href);
        });
    }
  
});

function domReady( f ) {
    // pokud je DOM nacten, zavolame hned danou funkci f()
    if( domReady.done ) return f();

    // jestlize jsme uz pridali funkci
    if( domReady.timer ) {
        //pridame ji do seznamu funkci k volani
        domReady.ready.push( f );
    } else {
        // pridame udalost pro dokonceni nacitani stranky,
        // jen pro pripad, ze by skoncilo drive
        addEvent( window, "load", isDOMReady );

        // vytvorime pole funkci k zavolani
        domReady.ready = [ f ];

        // overime, jestli je DOM pripraven, jak to bude nejrychleji mozne
        domReady.timer = setInterval( isDOMReady, 13 );
    }
}

// overi, zda je dom pripraven pro navigaci
function isDOMReady() {
    // pokud jsme jiz zjistili, ze stranka byla nactena ukoncime funkci
    if( domReady.done ) return false;

    // zkontrolujeme, zda jsou dostupne nektere elementy a funkce
    if( document && document.getElementsByTagName &&
        document.getElementById && document.body) {

        // pokud jsou dostupne ukoncime kontrolu
        clearInterval( domReady.timer );
        domReady.timer = null;

        //zavolame vsechny cekajici funkce
        for( var i = 0; i < domReady.ready.length; i++ )
            domReady.ready[i]();

        domReady.ready = null;
        domReady.done = true;
        }
}

function getElementsByClassName(name, type) {
    var returnElements = [];
    // vyhledame nazev tridy (umoznuje vice trid pro jeden element)
    var testClass = new RegExp("(^|\\s)" + name + "(\\s|$)");

    // prohledavani bud omezime na konkretni typy elementu, nebo prohledame
    // vsechny elementy
    var elements = document.getElementsByTagName(type || "*");
    for ( var j = 0; j < elements.length; j++ ) {
        // pokud ma element danou tridu, pridame ho k vyslednemu poli.
        if(testClass.test(elements[j].className)) {
            returnElements.push(elements[j]);
        }
    }
    // vratime pole vyhledanych elementu
    return returnElements;
}

// addEvent/removeEvent
// written by Dean Edwards, 2005
// http://dean.edwards.name/
function addEvent(element, type, handler) {
    //kazde funkci pro obsluhu udalosti pridame jedinecny identifikator
    if (!handler.$$guid) handler.$$guid = addEvent.guid++;

    // vytvorime hasovaci tabulku typu udalosti pro dany element
    if (!element.events) element.events = {};

    // vytvorime hasovaci tabulku funkci pro obsluhu udalosti pro kazdou
    // dvojici element/udalost
    var handlers = element.events[type];
    if (!handlers) {
        handlers = element.events[type] = {};

        //ulozime funkci pro obsluhu udalosti (pokud existuje)
         if (element["on" + type]) {
             handlers[0] = element["on" + type];
         }
    }
    // ulozime funkci pro obsluhu udalosti do hasovaci tabulky
    handlers[handler.$$guid] = handler;

    // pripojime globalni funkci pro obsluhu udalosti, ktera odvede vsechnu
    // praci
    element["on" + type] = handleEvent;
}

// pocitadlo pouzite pro vytvoreni jedinecneho identifikatoru
addEvent.guid = 1;

function removeEvent(element, type, handler) {
    // smaze funkci pro obsluhu udalosti z hasovaci tabulky
     if (element.events && element.events[type]) {
         delete element.events[type][handler.$$guid];
     }
}

function handleEvent(event) {
    var returnValue = true;

    //ziskame objekt udalosti (IE pouziva globalni objekt udalosti)
    event = event || fixEvent(window.event);

    //ziskame odkaz na hasovaci tabulku funkci pro obsluhu udalosti
    var handlers = this.events[event.type];

    //spustime vsechny funkce pro obsluhu udalosti
    for (var i in handlers) {
        this.$$handleEvent = handlers[i];
        if (this.$$handleEvent(event) === false) {
            returnValue = false;
        }
    }
    return returnValue;
}

// pridame nejake "chybejici" metody k objektu udalosti v IE
function fixEvent(event) {
    // pridame standartni metody objektu udalosti od W3C
    event.preventDefault = fixEvent.preventDefault;
    event.stopPropagation = fixEvent.stopPropagation;
    return event;
}

fixEvent.preventDefault = function() {
    this.returnValue = false;
}

fixEvent.stopPropagation = function() {
    this.cancelBubble = true;
}