window.addEvent(
    'domready', function(){
        /**
         * Because IE6 doesn't recognise li:hover
         */
        if(Browser.Engine.trident4){
            $$('#nav > ul > li')
                .each(
                    function(item, index, array){
                        var r = item.getChildren('div.rollOver');
                        var d = (r.length > 0) ? r[0] : false;
                        if (d) item.addEvents(
                            {
                                'mouseenter': function(e){
                                    d.setStyle('display', 'block');
                                },
                                'mouseleave': function(e){
                                    d.setStyle('display', 'none');
                                }
                            });
                    });

        }
        $$('a.print').addEvent(
            'click', function(event){
                event.preventDefault();
                window.print();
                return false;
            });
    });

// Enables or disables a validator.
function setValidatorEnabled(vld, enabled)
{
    vld.enabled = enabled;
    if (!enabled && typeof(Page_Validators) == 'object')
    {
        // only revalidate when disabling
        ValidatorEnable(vld, false);
    }
}


function setupGallery(element_, galleryImages) {
    // element_: an Element or an id
    // galleryImages: a list of urls

    var element = $(element_),
    large = $('large') || new Element('img', {src: galleryImages[0], 'id': 'large'}).inject(element),
    currentPos = 0,
    moveNext = updatePosition.pass(1),
    movePrev = updatePosition.pass(-1);
    
    
    if ($defined(galleryImages) && galleryImages.length > 0) {
        var thumbnails = new Element('div', {'id': 'thumbnails'});
        element.adopt(thumbnails);

        if(galleryImages.length > 1) {
            var next = new Element(
                'a', {
                    'class': 'next',
                    'html': 'Next',
                    'events': { 'click': moveNext }
                });

            var prev = new Element(
                'a', {
                    'class': 'prev',
                    'html': 'Previous',
                    'events': { 'click': movePrev }
                });

            thumbnails.adopt(makeThumbs(), makeCounter(), prev, next);
        } else {
            thumbnails.adopt(makeCounter());
        }
    }

    function makeThumbs(){
        var thumbs = new Asset.images(
            [ galleryImages.getLast(),
              galleryImages[0],
              galleryImages[1] 
            ]);

        thumbs[0].addEvent('click', movePrev);
        thumbs[1].addClass('selected');
        thumbs[2].addEvent('click', moveNext);

        return thumbs;
    }

    function makeCounter() {
        var counter = new Element(
            'p', {
                'id': 'counter',
                'html': "of " + galleryImages.length
            });

        var position = new Element(
            'span', {
                'id': 'position',
                'html': '1'
            });

        return counter.grab(position,'top');
    }


    function updatePosition(by) {
        var thumbs = $('thumbnails').getElements('img'),
        len = galleryImages.length;

        function index(n) {
            // returns a number between 0 and len
            return (n % len)  + (n >= 0 ? 0 : len);
        }

        function get(n) {
            return galleryImages[index(n)];
        }

        function update(n) {
            var newImage = get(n).replace('_thumb', '');

            $('large')
                .set('src', newImage)
                .getParent().set('href', newImage);

            $('position').set('html', (currentPos + 1));

            thumbs[0].src = get(n - 1);
            thumbs[1].src = get(n);
            thumbs[2].src = get(n + 1);
        }

        currentPos = index(currentPos + by);
        update(currentPos);

        return currentPos;
    }
}

var slideshow;
function setupSlideshow () {
    var withData = function (images) {
        if (images.length > 0) {
            setupGallery('slideshow', images);
        }
    };

    var myURI = new URI(window.location.href);

    myURI.setData({ "altTemplate": "ImagesJSON" }, true);

    return new Request
    ({
         'url': myURI.toString(),
         'onSuccess': function (text, xml) {
             return withData(JSON.decode(text));
         }
     }).get();
}

window.addEvent(
    'domready', function () {
        if ($('slideshow')) {
            setupSlideshow();
        }
    });
