var Gallery = function(selector){
    $$(selector).each(function( image ){

        var big_image = image;
        big_image.set('tween', {
            'duration': 300
        });
        
        var back = big_image.getParent('p');
        var image_list = back.getParent('div').getNext('div.image-list');
        
        image_list.getElements('a > img')[0].addClass('current');
        image_list.getChildren('a').addEvents({
            'click':function(){
                if(this.getChildren('img')[0].hasClass("current")) return false;
                
                back.setStyle('backgroundImage', 'url(' + big_image.get('src') + ')');
                
                image_list.getElements('a > img').removeClass('current');
                big_image.setStyles({
                    'opacity': 0
                }).set('src', this.get('href')).tween('opacity', 1);
                this.getChildren('img').addClass('current');
                
                return false;
            }
        })
        
        window.addEvent('load', function(){
            image_list.getChildren('a').each(function(item){
                (new Image()).setAttribute('src', item.get('href'));
            });
        });
        
    });
};

var FlatSelect = new Class({
   'initialize': function(obj){
        var that = this;
        this.select = obj;
        obj.getElements('option').each(function(opt){
            if(!opt.get('value')) return;
            var el = new Element('a', {
                'href': '#',
                'class': obj.get('value')==opt.get('value')? 'active': '',
                'html': opt.get('html'),
                'rel': opt.get('value'),
                'events': {
                    'click': function(){
                        obj.set('value', $(this).get('rel'));
                        
                        var form = obj.getParent('form');
                        new Request({
                            url: form.get('action'),
                            onSuccess: function(data){
                                $('ajax-content').set('html', data);
                                setElements();
                                
                                if(obj.getParent('span').getPrevious('.active'))
                                obj.getParent('span').getPrevious('.active').removeClass('active');
                                if(obj.getParent('span').getPrevious('.clear'))
                                obj.getParent('span').getPrevious('.clear').setStyle('display', '');
                                
                                el.addClass('active');
                            }
                        }).get(form.toQueryString());
                        
                        return false;
                    }
                }
            }).inject(obj, 'before');
        });
        
        new Element('a', {
            'href': '#',
            'class': 'clear',
            'styles': {
                'display': obj.get('value')? '': 'none'
            },
            'events': {
                'click': function(){
                    obj.set('value', '');
                    
                    var form = obj.getParent('form');
                    new Request({
                        url: form.get('action'),
                        onSuccess: function(data){
                            $('ajax-content').set('html', data);
                            setElements();
                            
                            obj.getParent('span').getPrevious('.active').removeClass('active');
                            obj.getParent('span').getPrevious('.clear').setStyle('display', 'none');
                            
                        }
                    }).get(form.toQueryString());
                    
                    return false;
                }
            }
        }).inject(obj, 'before');
        
        new Element('span', {
            'styles': {
                'display': 'none'
            }
        }).inject(obj, 'before').grab(obj);
    }
});

var PopupSelect = new Class({
    Implements: [Options],
    'options': {
        chain_clear: []
    },
    
    'clear': function(e){
        this.select.set('value', '');
        this.box.set('html', (this.select && this.select.get('value'))? this.select.get('value'): this.all_name? this.all_name: 'все');
        this.close.setStyle('display', 'none');
        this.popup.getElements('.active').removeClass('active');
        
        for(var i=0;i<this.options.chain_clear.length;i++){
            if(this.options.chain_clear[i] && this.options.chain_clear[i].clear)
                this.options.chain_clear[i].clear();
        }
        
        if(e){
            var form = this.select.getParent('form');
            new Request({
                url: form.get('action'),
                onSuccess: function(data){
                    $('ajax-content').set('html', data);
                    setElements();
                }
            }).get(form.toQueryString());                        
        }
        
        return false;
    },
    
   'initialize': function(obj, all_name, options){
        var that = this;
        this.select = obj;
        this.all_name = all_name;
        
        this.setOptions(options);
        
        this.box = new Element('a', {
            'href': '#',
            'class': 'popup-select-box',
            'html': (obj && obj.get('value'))? obj.get('value'): all_name? all_name: 'все',
            'events': {
                'click': function(){
                    $$('.popup-select-popup').setStyles({
                        'display': 'none'
                    });
                    
                    $$('.popup-select-box.active').removeClass('active');

                    $(this).addClass('active');
                    that.popup.setStyles({
                        'display': 'block',
                        'opacity': 0
                    }).tween('opacity', 1);
                    
                    $('body').addEvent('click', function(){
                        if($(this).getParent('.popup-select-box')) return;
                        that.box.removeClass('active');
                        
                        new Fx.Tween(that.popup, {
                            'property': 'opacity',
                            'complete': function(){
                                that.popup.setStyles({
                                    'display': 'none'
                                });
                            }
                        }).start(0);
                    });
                    return false;
                }
            }
        });
        
        this.box.inject(obj, 'before');
        
        this.popup = new Element('span', {
            'class': 'popup-select-popup only-css-column'
        });
        
        this.popup.inject(obj, 'before');
        
        this.close = new Element('a', {
            'href': '#',
            'class': 'clear',
            'styles': {
                'display': obj.get('value')? '': 'none'
            },
            'events': {
                'click': this.clear.bind(this)
            }
        }).inject(obj, 'before');
        
        obj.getElements('option').each(function(opt){
            if(!opt.get('value')) return;
            new Element('a', {
                'href': '#',
                'class': obj.get('value')==opt.get('value')? 'active': '',
                'html': opt.get('html'),
                'rel': opt.get('value'),
                'events': {
                    'click': function(){
                        obj.set('value', $(this).get('rel'));
                        
                        var form = obj.getParent('form');
                        that.box.set('html', $(this).get('html'));
                        that.close.setStyle('display', '');
                        
                        $(this).getParent('div').getElements('.active').removeClass('active');
                        $(this).addClass('active');
                        $('body').fireEvent('click', $('body'));
                        
                        new Request({
                            url: form.get('action'),
                            onSuccess: function(data){
                                $('ajax-content').set('html', data);
                                setElements();
                            }
                        }).get(form.toQueryString());
                        
                        return false;
                    }
                }
            }).inject(that.popup);
        });
        
        new Element('span', {
            'styles': {
                'display': 'none'
            }
        }).inject(obj, 'before').grab(obj);
    }
});




var canFont = function(){
    
    var ua = navigator.userAgent;
    
    if(Browser.Engine.trident)
        return true;

    if(Browser.Engine.webkit)
        return true;
    
    if(Browser.Engine.gecko)
        return Browser.Engine.gecko19 && !ua.test(/rv:1.9.0/);
        
    if(Browser.Engine.presto)
        return ua.test(/Version\/1[0-9]/);
    
    return false;
}



window.addEvent('domready', function(){
    if(!canFont()){
        $('body').addClass('cufon-fonted');
        Asset.javascript('/media/js/cufon-yui.js');
    }
    
    if($('japan') && $('japan').getStyle('display') != 'none')
        new Swiff(MEDIA_URL + 'swf/japan.swf', {
            container: "japan",
            width: "350",
            height: "480"
        });

    $$('a[rel^=local]').addEvent('click', function(){
        
        var position = parseInt(this.get('rel').replace(/(^local\[?)|(\]$)/g, ''));
        
        var hasposition = false;
        if(position){
            hasposition = true;
            position -= 1;
        }
        else position = 0;
        
        this.getAllNext().removeClass('opened');
        this.getAllPrevious().removeClass('opened');
        
        var nexts = this.getParent('.local-level').getAllNext('.local-open');
        var active = nexts[position];
        
        nexts.each(function(item, index){
            if(index == position) return;
            if(item.hasClass('opened')){
                item.removeClass('opened');
                item.set('tween', {'duration': 250}).tween('height', 0);
            }
        });
        
        if(active.hasClass('opened')){
            active.removeClass('opened');
            this.removeClass('opened');
            active.set('tween', {'duration': 250}).tween('height', 0);
        } else {
            active.addClass('opened');
            if(hasposition) this.addClass('opened');
            active.set('tween', {'duration': 250}).tween('height', active.getScrollSize().y);
        }
        
        return false;
    });
    
    
    $$('a.cite').addEvent('click', function(){
        $('id_message').set('value', '> ' + this.getParent('p').getPrevious('.cite').get('text').replace(/^\s+|\s+$/g, '') + '\n\n' + $('id_message').get('value'));
        $('id_message').focus();
        return false;
    });
    
    if($('wineexpert')){
        $('wineexpert').set('tween', {
                'duration': 400,
                'transition': 'back:out'
            }).addEvents({
            'mouseover': function(){
                $(this).tween('width', 200);
            },
            'mouseout': function(){
                $(this).tween('width', 80);
            }
        });
        
        window.addEvent('resize', function(){
            if(window.getSize().x < 1000){
                $('wineexpert').setStyle('right', window.getSize().x - 1000);
            } else {
                $('wineexpert').setStyle('right', 0);
            }
        }).fireEvent('resize');
    }
});
