/* Thanks to Simon Willison */
addEvent(window, 'load', prh_g_init);
var alleknoppen = new Array();
var lijsten = new Array();
var navigatielijsten = new Array();

function prh_g_init() {
    zoek_navigatielijst(navigatielijsten);
    for (var i=0; i<navigatielijsten.length; i++) {
        zoek_childnodes_element_class(navigatielijsten[i], 'DIV', 'knoplijst', lijsten);
        prh_lijst_init(navigatielijsten[i], 0);
        zoek_childnodes_element_class(navigatielijsten[i], 'A', 'knop', alleknoppen);
        zoek_childnodes_element_class(navigatielijsten[i], 'A', 'knoplijst', alleknoppen);
    }
}

function zoek_navigatielijst(lstn){
    var tags = document.getElementsByTagName('div');
    for (var j=0;j<tags.length;j++) {
        if ( tags[j].className ) if ( 'knop' == tags[j].className ) lstn.push(tags[j]);
    }
}

function zoek_childnodes_element_class(obj, elem, cl, resarr){
    for( var j = 0; j < obj.childNodes.length; j++ ) {
        if ( is_element_class(obj.childNodes[j], elem, cl) ) resarr.push(obj.childNodes[j]);
        zoek_childnodes_element_class(obj.childNodes[j], elem, cl, resarr)
    }
}

function is_element_class(obj, elem, cl) {
    if ( obj ) if ( obj.nodeName )  if ( obj.className ) return ( elem == obj.nodeName ) && ( cl == obj.className);
    return false;
}

function prh_lijst_init(drdownlijst, niveau){
    var drdknoppen = new Array();
    zoek_childnodes_element_class(drdownlijst, 'A', 0 == niveau ? 'knop' : 'knoplijst', drdknoppen);
    for (var i = 0; i < drdknoppen.length; i++) {
        var deKnop = drdknoppen[i];
        addEvent(deKnop, 'mouseover', toonActie);
        addEvent(deKnop, 'mouseout', toonActie);
        addEvent(deKnop, 'mousedown', toonActie);
        addEvent(deKnop, 'mouseup', toonActie);
        var lijst = zoek_lijst_voor_knop(deKnop);
        if ( lijst ) {
            deKnop = zoek_image_in_knop(deKnop);
            lijst.style.left = '' + ( geefAbsoluteXY(deKnop,'X') + ( 0 == niveau ? 5 : deKnop.offsetWidth - 5 ) ) + 'px';
            lijst.style.top = '' + ( geefAbsoluteXY(deKnop,'Y') + ( 0 == niveau ? deKnop.offsetHeight - 5 : 5 ) ) + 'px';
            addEvent(lijst, 'mouseover', toonActie);
            addEvent(lijst, 'mouseout', toonActie);
            addEvent(lijst, 'mousedown', toonActie);
            addEvent(lijst, 'mouseup', toonActie);
            prh_lijst_init(lijst,1);
        }
    }
}

function geefAbsoluteXY(obj,richting){
    if (!obj) return 0;
    for (var i=0; i<navigatielijsten.length; i++) {
        if (navigatielijsten[i] == obj) return 0;
    }
    var parnode = obj.parentNode;
    if ( ! parnode ) return 0;
    if (('IMG' == obj.nodeName) || ('DIV' == obj.nodeName)) {
        return ( 'X' == richting ? obj.offsetLeft : obj.offsetTop ) + geefAbsoluteXY (parnode,richting);
    }
    return geefAbsoluteXY (parnode,richting);
}

function uitgepos(obj){
    var hoogte = geefuitgeposrec (obj);
    var verschil = document.getElementById('refuitgebreid').offsetTop;
    return hoogte - verschil;
}

function geefuitgeposrec(obj){
    if (!obj) return 0;
    var parnode = obj.parentNode;
    if ( ! parnode ) return 0;
    if (('A' == obj.nodeName) || ('DIV' == obj.nodeName)) {
        return obj.offsetTop + geefuitgeposrec (parnode);
    }
    return geefuitgeposrec (parnode);
}

function zoek_image_in_knop(obj){
    var img_ch = zoek_img_child(obj);
    if ( img_ch ) return img_ch;
    return obj;
}

function zoek_img_child(obj){
    if ( 'IMG' == obj.nodeName ) return obj;
    for( var j = 0; j < obj.childNodes.length; j++ ) {
        var poging = zoek_image_in_knop ( obj.childNodes[j] );
        if ( poging ) return poging;
    }
    return null;
}

function is_lijst_voor_knop(deKnop,deLijst){
    var theID = deLijst.getAttribute('id');
    if ( theID ) {
        theID = theID.replace(/^[^/]*\//,'/').replace(/\/[^/]*$/,'/');
        var hrefatt = deKnop.getAttribute('href');
        if ( hrefatt ) {
            hrefatt = hrefatt.replace(/^[^/]*\//,'/').replace(/\/[^/]*$/,'/');
            if ( theID.length <= hrefatt.length){
                hrefatt = hrefatt.substring (hrefatt.length - theID.length);
            } else {
                theID = theID.substring (theID.length - hrefatt.length);
            }
            return theID == hrefatt;
        }
    }
    return false;
}

function zoek_lijst_rond_knop(obj){
    var retval = obj;
    while ( !is_element_class(retval, 'DIV', 'knoplijst' ) && retval.nodeName != 'BODY') retval = retval.parentNode;
    if ( is_element_class(retval, 'DIV', 'knoplijst' ) ) return retval;
    return obj;
}

function zoek_lijst_voor_knop(deKnop){
    for (var i=0; i<lijsten.length; i++) {
        if ( is_lijst_voor_knop(deKnop,lijsten[i]) ) return lijsten[i];
    }
    return null;
}

function zoek_knop_voor_lijst(deLijst){
    for (var i=0; i<alleknoppen.length; i++) {
        if ( is_lijst_voor_knop(alleknoppen[i],deLijst) ) return alleknoppen[i];
    }
    return null;
}

function is_parent_lijst(deLijst, misschienLijst){
    if ( deLijst == misschienLijst ) return true;
    var ouder = zoek_knop_voor_lijst(deLijst);
    if ( ouder ) {
        while ( !is_element_class(ouder, 'DIV', 'knoplijst' ) && ouder.nodeName != 'BODY') ouder = ouder.parentNode;
        if ( is_element_class(ouder, 'DIV', 'knoplijst' ) ) return is_parent_lijst(ouder,misschienLijst);
    }
    return false;
}

function toonLijstenVoorObject(obj){
    while (null == obj ? false : (
        !is_element_class(obj, 'A', 'knop') &&
        !is_element_class(obj, 'A', 'knoplijst') &&
        !is_element_class(obj, 'DIV', 'knoplijst' ) &&
        obj.nodeName != 'BODY') ) obj = obj.parentNode;
    if ( null == obj) return false;
    if (is_element_class(obj, 'A', 'knop') || is_element_class(obj, 'A', 'knoplijst') ) {
        if ( toonLijstenVoorLijst ( zoek_lijst_voor_knop ( obj ) ) ) return true;
    }
    while ( !is_element_class(obj, 'DIV', 'knoplijst' ) && obj.nodeName != 'BODY') obj = obj.parentNode;
    if ( toonLijstenVoorLijst(obj) ) return true;
    return false;    
}

function toonLijstenVoorLijst(obj){
    if ( obj ) {
        if ( is_element_class(obj, 'DIV', 'knoplijst' ) ) {
            for ( var i = 0; i < lijsten.length; i++) {
                if ( is_parent_lijst( obj, lijsten[i] ) ) {
                    lijsten[i].style.visibility = 'visible';
                } else {
                    lijsten[i].style.visibility = 'hidden';
                }
            }
            return true;
        }
    }
    return false;
}

function toonActie(e){
    /* Met dank aan Peter-Paul Koch */
    if (!e) var e = window.event
    if ( 'mouseover' == e.type ) {
        var obj = e.target || e.srcElement;
        if (obj.nodeType == 3) obj = obj.parentNode; // defeat Safari bug
        toonLijstenVoorObject(obj);
    }
    if ( 'mouseout' == e.type ) {
        if ( toonLijstenVoorObject(e.relatedTarget || e.toElement) ) return true;
        for ( var i = 0; i < lijsten.length; i++) {
            lijsten[i].style.visibility = 'hidden';
        }
    }
    return true;
}

function laadPrentje(pad) {
    var uit = null;
    if (document.images) {
        (uit = new Image()).src = pad;
    }
    return uit;
}
var AlleFiguurNummerNamen = new Array();
var HetFiguurNummer = 0;
var hetImgObject = null;

function volgendPrentje(){
    if ( ! hetImgObject ) {
        hetImgObject = zoekPrentje();
    }
    HetFiguurNummer = HetFiguurNummer + 1;
    if  ( AlleFiguurNummerNamen.length <= HetFiguurNummer ) {
        HetFiguurNummer = 0;
    }
    if ( null != hetImgObject ) {
        hetImgObject.src = AlleFiguurNummerNamen[HetFiguurNummer];
    }
}

function zoekPrentje() {
    var tags = document.getElementsByTagName('IMG');
    for (var j=0;j<tags.length;j++) {
        if ( tags[j].getAttribute('src').match(/.*diavertoning.*/) ) {
            return tags[j];
        }
    }
    return null;
}

function toonUitgebreider(knop,deID){
    var tags = document.getElementsByTagName('div');
    for (var j=0;j<tags.length;j++) {
        if ( tags[j].className ) {
            if ( 'uitgebreider' == tags[j].className ) {
                if ( deID == tags[j].id) {
                    tags[j].style.visibility='visible';
                } else {
                    tags[j].style.visibility='hidden';
                }
            }
        }
    }
}

/* Thanks to Scott Andrew */
function addEvent(obj, evType, fn){
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, true);
        return true;
    } else if (obj.attachEvent) {
        var r = obj.attachEvent("on"+evType, fn);
        return r;
    } else {
        return false;
    }
}


