function open_url(url)
{
  window.location.href = url;
}

var Lightbox = {
    init: function(options) {
        this.options = Object.extend({
            resizeDuration: 400,
            resizeTransition: Fx.Transitions.sineInOut,
            initialWidth: 250,
            initialHeight: 250,
            animateCaption: true,
            defaultIframeWidth: 500,
            defaultIframeHeight: 300
        },
        options || {});
        if (window.ie6 && document.compatMode == "BackCompat") {
            this.options.animateCaption = false
        }
        this.anchors = [];
        $each(document.links,
        function(el) {
            if (el.rel && el.rel.test(/^lightbox/i)) {
                el.onclick = this.click.pass(el, this);
                this.anchors.push(el)
            }
        },
        this);
        this.eventKeyDown = this.keyboardListener.bindAsEventListener(this);
        this.eventPosition = this.position.bind(this);
        this.overlay = new Element('div').setProperty('id', 'lbOverlay').injectInside(document.body);
        this.center = new Element('div').setProperty('id', 'lbCenter').setStyles({
            width: this.options.initialWidth + 'px',
            height: this.options.initialHeight + 'px',
            marginLeft: '-' + (this.options.initialWidth / 2) + 'px',
            display: 'none'
        }).injectInside(document.body);
        this.canvas = new Element('div').setProperty('id', 'lbCanvas').injectInside(this.center);
        this.prevLink = new Element('a').setProperties({
            id: 'lbPrevLink',
            href: '#'
        }).setStyle('display', 'none').injectInside(this.canvas);
        this.nextLink = this.prevLink.clone().setProperty('id', 'lbNextLink').injectInside(this.canvas);
        this.prevLink.onclick = this.previous.bind(this);
        this.nextLink.onclick = this.next.bind(this);
        this.bottomContainer = new Element('div').setProperty('id', 'lbBottomContainer').setStyle('display', 'none').injectInside(document.body);
        this.bottom = new Element('div').setProperty('id', 'lbBottom').injectInside(this.bottomContainer);
        new Element('a').setProperties({
            id: 'lbCloseLink',
            href: '#'
        }).injectInside(this.bottom).onclick = this.overlay.onclick = this.close.bind(this);
        this.caption = new Element('div').setProperty('id', 'lbCaption').injectInside(this.bottom);
        this.number = new Element('div').setProperty('id', 'lbNumber').injectInside(this.bottom);
        new Element('div').setStyle('clear', 'both').injectInside(this.bottom);
        var nextEffect = this.nextEffect.bind(this);
        this.fx = {
            overlay: this.overlay.effect('opacity', {
                duration: 500
            }).hide(),
            resizeCenter: this.center.effects({
                duration: this.options.resizeDuration,
                transition: this.options.resizeTransition,
                onComplete: nextEffect
            }),
            image: this.canvas.effect('opacity', {
                duration: 500,
                onComplete: nextEffect
            }),
            bottom: this.bottomContainer.effect('height', {
                duration: 400,
                onComplete: nextEffect
            })
        };
        this.preloadPrev = new Image();
        this.preloadNext = new Image()
    },
    click: function(link) {
        if (link.rel.length == 8) return this.show(link.href, link.title, link.rev);
        var j, itemNumber, items = [];
        this.anchors.each(function(el) {
            if (el.rel == link.rel) {
                for (j = 0; j < items.length; j++) if (items[j][0] == el.href && items[j][2] == el.rev) break;
                if (j == items.length) {
                    items.push([el.href, el.title, el.rev]);
                    if (el.href == link.href && el.rev == link.rev) itemNumber = j
                }
            }
        },
        this);
        return this.open(items, itemNumber)
    },
    show: function(url, title, rev) {
        return this.open([[url, title, rev]], 0)
    },
    open: function(items, itemNumber) {
        this.items = items;
        this.position();
        this.setup(true);
        var wh = (window.getHeight() == 0) ? window.getScrollHeight() : window.getHeight();
        var st = document.body.scrollTop || document.documentElement.scrollTop;
        this.top = st + (wh / 15);
        this.center.setStyles({
            top: this.top + 'px',
            display: ''
        });
        this.fx.overlay.start(0.8);
        return this.changeItem(itemNumber)
    },
    position: function() {
        var ww = (window.getWidth() == 0) ? window.getScrollWidth() - 22 : window.getWidth();
        var wh = (window.getHeight() == 0) ? window.getScrollHeight() : window.getHeight();
        var st = document.body.scrollTop || document.documentElement.scrollTop;
        this.overlay.setStyles({
            top: st + 'px',
            height: wh + 'px',
            width: ww + 'px'
        })
    },
    setup: function(open) {
        var elements = $A(document.getElementsByTagName('object'));
        if (window.ie) elements.extend(document.getElementsByTagName('select'));
        elements.each(function(el) {
            el.style.visibility = open ? 'hidden': ''
        });
        var fn = open ? 'addEvent': 'removeEvent';
        window[fn]('scroll', this.eventPosition)[fn]('resize', this.eventPosition);
        document[fn]('keydown', this.eventKeyDown);
        this.step = 0
    },
    keyboardListener: function(event) {
        switch (event.keyCode) {
        case 27:
        case 88:
        case 67:
            this.close();
            break;
        case 37:
        case 80:
            this.previous();
            break;
        case 39:
        case 78:
            this.next()
        }
    },
    previous: function() {
        return this.changeItem(this.activeItem - 1)
    },
    next: function() {
        return this.changeItem(this.activeItem + 1)
    },
    changeItem: function(itemNumber) {
        if (this.step || (itemNumber < 0) || (itemNumber >= this.items.length)) return false;
        this.step = 1;
        this.activeItem = itemNumber;
        this.bottomContainer.style.display = this.prevLink.style.display = this.nextLink.style.display = 'none';
        this.fx.image.hide();
        this.center.className = 'lbLoading';
        this.removeCurrentItem();
        var url = this.items[this.activeItem][0];
        var rev = this.items[this.activeItem][2];
        var re_imageURL = /\.(jpe?g|png|gif|bmp)/i;
        if (url.match(re_imageURL)) {
            this.preload = new Image();
            this.preload.datatype = 'image';
            this.preload.w = this.matchOrDefault(rev, new RegExp("width=(\\d+%?)", "i"), -1);
            this.preload.h = this.matchOrDefault(rev, new RegExp("height=(\\d+%?)", "i"), -1);
            this.preload.onload = this.nextEffect.bind(this);
            this.preload.src = url
        } else {
            this.preload = new Object();
            this.preload.datatype = 'iframe';
            this.preload.w = this.matchOrDefault(rev, new RegExp("width=(\\d+)", "i"), this.options.defaultIframeWidth);
            this.preload.h = this.matchOrDefault(rev, new RegExp("height=(\\d+)", "i"), this.options.defaultIframeHeight);
            this.preload.src = url;
            this.nextEffect()
        }
        return false
    },
    nextEffect: function() {
        switch (this.step++) {
        case 1:
            this.center.className = '';
            if (this.preload.datatype == 'image') {
                var ws = (this.preload.w == -1) ? this.preload.width.toString() : this.preload.w.toString(); var hs = (this.preload.h == -1) ? 
                this.preload.height.toString() : this.preload.h.toString(); this.p_width = (q = ws.match(/(\d+)%/)) ? q[1] * this.preload.width * 
                0.01 : ws; this.p_height = (q = hs.match(/(\d+)%/)) ? q[1] * this.preload.height * 0.01 : hs; 
                
                var url_onclick = ""; 
                if (typeof(page_ref) != "undefined"  && page_ref != 0) url_onclick = 'info.html?pg='+page_ref;
                
               if (typeof(alternative_text) != "undefined")
                {
                  if (page_ref != 0) alt_txt = alternative_text;
                     else alt_txt = "";
                } else alt_txt = "";

                var img = new Element('img').setProperties({
                    id: 'lbImage',
                    alt: alt_txt,
                    title: alt_txt,
                    src: this.preload.src,
                    width: this.p_width,
                    height: this.p_height
                }).injectInside(this.canvas);
//                img.setAttribute("onclick",str_onclick);
//                img.onclick = alert('ciao');                
                $('lbImage').addEvent('click',function(event)
                {
                  window.location.href = url_onclick;
                }
                );
                
                this.nextLink.style.right = ''
            } else {
                this.p_width = this.preload.w;
                this.p_height = this.preload.h;
                this.iframeId = "lbFrame_" + new Date().getTime();
                new Element('iframe').setProperties({
                    id: this.iframeId,
                    width: this.p_width,
                    height: this.p_height,
                    frameBorder: 0,
                    scrolling: 'yes',
                    src: this.preload.src
                }).injectInside(this.canvas);
                this.nextLink.style.right = '25px'
            }
            this.canvas.style.width = this.bottom.style.width = this.p_width + 'px';
            this.canvas.style.height = this.prevLink.style.height = this.nextLink.style.height = this.p_height + 'px';
            this.caption.setHTML(this.items[this.activeItem][1] || '');
            this.number.setHTML((this.items.length == 1) ? '': 'Image ' + (this.activeItem + 1) + ' of ' + this.items.length);
            if (this.activeItem) this.preloadPrev.src = this.items[this.activeItem - 1][0];
            if (this.activeItem != (this.items.length - 1)) this.preloadNext.src = this.items[this.activeItem + 1][0];
            if (this.center.clientHeight != this.canvas.offsetHeight) {
                var oh = (this.p_height == this.canvas.clientHeight) ? this.canvas.offsetHeight: eval(this.p_height) + 18;
                this.fx.resizeCenter.start({
                    height: oh
                });
                break
            }
            this.step++;
        case 2:
            if (this.center.clientWidth != this.canvas.offsetWidth) {
                var ow = (this.p_width == this.canvas.clientWidth) ? this.canvas.offsetWidth: eval(this.p_width) + 18;
                this.fx.resizeCenter.start({
                    width: ow,
                    marginLeft: -ow / 2
                });
                break
            }
            this.step++;
        case 3:
            this.bottomContainer.setStyles({
                top:
                (this.top + this.center.clientHeight) + 'px',
                height: '0px',
                marginLeft: this.center.style.marginLeft,
                width: this.center.style.width,
                display: ''
            });
            this.fx.image.start(1);
            break;
        case 4:
            if (this.options.animateCaption) {
                this.fx.bottom.start(0, this.bottom.offsetHeight + 10);
                break
            }
            this.bottomContainer.style.height = (this.bottom.offsetHeight + 10) + 'px';
        case 5:
            if (this.activeItem) {
                this.prevLink.style.display = ''
            }
            if (this.activeItem != (this.items.length - 1)) {
                this.nextLink.style.display = ''
            }
            this.step = 0
        }
    },
    close: function() {
        if (this.step < 0) return;
        this.step = -1;
        this.removeCurrentItem();
        for (var f in this.fx) this.fx[f].stop();
        this.center.style.display = this.bottomContainer.style.display = 'none';
        this.fx.overlay.chain(this.setup.pass(false, this)).start(0);
        return false
    },
    removeCurrentItem: function() {
        if (this.preload) {
            if (this.preload.datatype == 'image') {
                $('lbImage').remove();
                this.preload.onload = Class.empty
            } else {
                $(this.iframeId).remove()
            }
            this.preload = null
        }
    },
    matchOrDefault: function(str, re, val) {
        var hasQuery = str.match(re);
        return hasQuery ? hasQuery[1] : val
    }
};
window.addEvent('domready', Lightbox.init.bind(Lightbox));

