/***********************************/
/*  dynamic banner system          */
/*  build 1.0 March 2011           */
/***********************************/
var uc_banner_block = {
    build: function(element) {
        //variabelen zijn locaal in de functie en globaal voor alles wat hiering aangeroepen of gedeclareerd word.
        var banner = element;
        var banners = new Array();
        var timerspeed = 10; //iteratie snelheid van de loop in milisecondes
        var percentage = 0; //hoe ver de banner opgeschoven is
        var delaytime = 6 * 1000; //wachttijd opnemen in milisecondes
        var delaystep = 0; //deze waarde telt af van delay time naar 0 tussen de momenten in waar een nieuwe banner inschuift
        var speed = 4; //deze waarde telt af van delay time naar 0 tussen de momenten in waar een nieuwe banner inschuift
        var dir = "rtl"; //righting
        var reg_dir = /ltr|rtl|btt|ttb/i; //richting ltr = left to right, rtl = right to left, btt = bottom to top. ttb = top to bottom  
        var reg_delay = /delay\-[0-9]{1,3}/i; //zoekt de delay waarde op
        var reg_speed = /speed\-[0-9]{1,3}/i; //schuif snelheid
        var reg_number = /[0-9]{1,3}/i; //om de getallen uit een string te krijgen
        //gegevens uit de class halen voor controle via gegenereerde html
        if (reg_delay.test(banner.className)) {// delay-## bv. delay-7
            delaytime = (banner.className.match(reg_delay) + "").match(reg_number) * 1000;
        }
        if (reg_speed.test(banner.className)) {
            speed = (banner.className.match(reg_speed) + "").match(reg_number);
        }
        if (reg_dir.test(banner.className)) {
            dir = banner.className.match(reg_dir)[0];
        }
        //koppelen van de juiste nodes in een array voor snelheid en duidelijkheid
        for (var a = 0; a < banner.childNodes.length; a++) {
            if (banner.childNodes[a].tagName == "A") {
                banners[banners.length] = banner.childNodes[a].style;
            }
        }
        //positie staat op maximum lengte + 2 zodat de scipt begint bij de juiste plaatje 
        var position = banners.length + 2;
        function step() {	//zitten we in de delay periode of niet
            if (delaystep == 0) {
                //percetage verlagen
                percentage -= speed;
                //als percentage nog boven de 0 is voer het opschuiven uit
                if (percentage > 0) {
                    //richting controleren en voortgangs posities maken
                    if (dir == "btt")
                        banners[(position + 1) % (banners.length)].top = percentage + "%";
                    else if (dir == "ttb")
                        banners[(position + 1) % (banners.length)].top = -1 * percentage + "%";
                    else if (dir == "ltr")
                        banners[(position + 1) % (banners.length)].left = -1 * percentage + "%";
                    else
                        banners[(position + 1) % (banners.length)].left = percentage + "%";
                } //als percentage onder de 1 is dan moet de volgende banner klaar staan om te schuiven. en gaan we de delay in 
                else {
                    //nieuwe positie in het array. met modulus word voorkomen dat er buiten de range van aantal banners komt.
                    position = (position + 1) % banners.length;
                    percentage = 100;
                    banners[position].zIndex = 1;
                    banners[position].left = "0%";
                    banners[position].top = "0%";
                    banners[(position + 1) % banners.length].zIndex = 2;
                    //dit bepaalt de richting van de shuivende banner over de actieve banner.
                    //hier komt nog een fijvde optie bij "rand" deze zal dan willekeurig kiezen voor elke volgende banner.
                    //en ook nog controle per individuele banner. dit zal zoeken naar de classes toegekend van de vier standaard richtingen op de <a> tag
                    if (dir == "btt")
                        banners[(position + 1) % (banners.length)].top = percentage + "%";
                    else if (dir == "ttb")
                        banners[(position + 1) % (banners.length)].top = -1 * percentage + "%";
                    else if (dir == "ltr")
                        banners[(position + 1) % (banners.length)].left = -1 * percentage + "%";
                    else
                        banners[(position + 1) % (banners.length)].left = percentage + "%";
                    for (var b = 0; b < banners.length; b++) {
                        if (b != position && b != (position + 1) % banners.length) banners[b].display = "none";
                        else banners[b].display = "block";
                    }
                    delaystep = delaytime;
                }
            } 	//we zitten in de delay dus itereren we eerst hierdoor totdat delaystep op 0 staat
            else {
                delaystep -= 1 * timerspeed;
            }
        }
        //controleer of er uberhaubt meer dan 1 banner aanwezig is. bij 1 of minder voert de script niks uit
        if (banners.length > 1)
            setInterval(step, timerspeed);
    },
    //deze functie word aangeroepen wanneer de pagina volledig is geladen en opgebouwd
    start: function() {
        //alle divs ophalen uit het document
        var alldivs = document.body.getElementsByTagName("div");
        var reg = /^[\s\S]*uc_banner_block[\s\S]*$/i;
        //filter alle divs die een slide banners uit en koppel de slider functionaliteit toe 
        for (var z = 0; z < alldivs.length; z++) {
            if (reg.test(alldivs[z].className)) {
                this.build(alldivs[z]);
            }
        }
    },
    //initalisatie van de object nadat het document is opgebouwd
    init: function() {
        //locaal definieren maakt dit globaal voor de functies die hardcoded gemaakt worden in de volgende regels.
        var This = this;
        //dit maakt het volgende korte oplossing mogelijk op deze manier kunnen er meerdere instanties aangemaakt worden zonde vrees voor het ontdoen van bestaande of aanvullende scripts scripts.
        if (typeof (window.addEventListener) != 'undefined') {
            window.addEventListener('load', function() { This.start(); }, false);
        } else if (typeof (window.attachEvent) != 'undefined') {
            window.attachEvent('onload', function() { This.start() });
        }
    }
}; uc_banner_block.init();
