window.addEvent('domready', function() {
    $$('a.external').each(function(link) {
        link.target = '_blank';
    });
    $$('textarea[alt]', 'input[alt]').each(function(el) {
        var over                = new OverText(el, {
            'wrap': true
        });
    });
    if ($('search-site-keyword')) {
        $('search-site-keyword').addEvent('focus', function(e) {
            if (this.activated) {
                return false;
            }
            this.activated = true;
            this.value = '';
        });
    }
});

var Balloon = new Class({
});

var ProductGallery = new Class({

    initialize: function(el, ctrl) {
        if (!$(el) || !$(el).getElement('img')) {
            return false;
        }
        if (!$(ctrl)) {
            return false;
        }
        this.coords             = $(el).getCoordinates();
        this.ctrl               = $(ctrl).getElements('a');
        $(el).empty();
        this.ctr                = 0;
        this.tray               = new Element('div')
            .addClass('slideshow-tray');
        this.ctrl.each(function(link) {
            link.addEvent('click', this.select.bindWithEvent(this, [this.ctr]));
            panel               = new Element('div')
                .addClass('panel')
                .addClass('waiting')
                .setStyles({
                    height: this.coords.height,
                    width: this.coords.width
                })
                .inject(this.tray);
            img                 = new Element('img');
            img.addEvent('load', function(e, i, p) {
                p.removeClass('waiting');
                i.tween('opacity', 1);
            }.bindWithEvent(this, [img, panel]));
            img
                .set('src', link.href)
                .set('opacity', 0)
                .inject(panel);
            this.ctr++;
        }.bind(this));
        this.tray.inject($(el));
    },

    select: function(e, ctr) {
        e = new Event(e);
        e.stop();
        this.tray.tween('left', (-ctr * this.coords.width) + 'px');
    }

});

var SlideShow = new Class({

    ctr: 0,
    options: {
        slides: [],
        duration: 1500,
        delay: 4500
    },

    Extends: Options,

    initialize: function(el, options) {
        if (!$(el)) {
            return false;
        }
        var slideLink = $(el).getElement('a')
            .clone()
            .addClass('slide-link')
            .set('html', $(el).getElement('img').get('alt'))
            .set('opacity', 0.7);
        this.el = $(el).empty();
        this.setOptions(options);
        var slideCnt = 0;
        var slideNo = new Element('ul')
            .addClass('slide-no');
        this.options.slides.each(function(slide) {
            slide.btn = new Element('li')
                .set('html', (slideCnt + 1))
                .set('opacity', 0.7)
                .inject(slideNo);
            slide.btn
                .addEvent('mouseover', this.over.bindWithEvent(this, slide.btn))
                .addEvent('mouseout', this.out.bindWithEvent(this, slide.btn))
                .addEvent('click', this.click.bindWithEvent(this, [slide.btn, slideCnt]))
            slide.img = new Element('img')
                .addClass('slide-img')
                .set('src', slide.url)
                .set('alt', slide.name)
                .inject(this.el);
            slide.title = new Element('div')
                .addClass('slide-title')
                .set('html', slide.name)
                .set('opacity', 0.7)
                .inject(this.el);
            if (slideCnt > 0) {
                slide.img.set('opacity', 0);
                slide.title.set('opacity', 0);
            }
            slideCnt++;
        }.bind(this));
        slideNo.inject(this.el);
        slideLink.inject(this.el);
        this.timer = this.advance.delay(this.options.delay - this.options.duration, this);
    },

    over: function(e, el) {
        el.tween('opacity', 1);
    },

    out: function(e, el) {
        el.tween('opacity', 0.7);
    },

    click: function(e, el, ctr) {
        e = new Event(e);
        e.stop();
        if (ctr != this.ctr) {
            this.hide();
            this.ctr = ctr;
            this.show();
            if (this.timer) {
                $clear(this.timer);
            }
        }
    },

    advance: function() {
        this.hide();
        this.ctr++;
        if (this.ctr == this.options.slides.length) {
            this.ctr = 0;
        }
        this.show();
        this.timer = this.advance.delay(this.options.delay, this);
    },

    hide: function() {
        var slide = this.options.slides[this.ctr];
        slide.img.get('tween', {duration: this.options.duration}).start('opacity', 0);
        slide.title.get('tween', {duration: this.options.duration}).start('opacity', 0);
    },

    show: function() {
        var slide = this.options.slides[this.ctr];
        slide.img.get('tween', {duration: this.options.duration}).start('opacity', 1);
        slide.title.get('tween', {duration: this.options.duration}).start('opacity', 0.7);
    }
});

