function fixTop(contents) {
    if (!contents) {
        contents = $$('.tabs .tab .content').extend($$('.longtab .longtabbody .content'));
    }

    contents.each(function(i){
        var t = i;
        while (t) {

            var tag = t.get('tag');
            if (tag == 'h1' || tag == 'h2' || tag == 'h3' || tag == 'h4' || tag == 'h5' || tag == 'img') {
                break;
            }

            t=t.getFirst();
        }

        // no headline found
        if (!t) {
            i.setStyle('padding-top', '7px');
        }
    });
}

function fixBottom(items) {

    if (!items) {
        items = $$('.longtab .align_bottom li.item');
    }

    var maxHeight = 0;
    for (var i=0; i<items.length; i++) {
        var l = items[i].getElement('div').getLast();
        if (l) {
            l.setStyle('margin-bottom', 0);
        }

        var h = items[i].getStyle('height').toInt();

        items[i].h = h;
        if (h > maxHeight) {
            maxHeight = h;
        }
    }

    items.each((function(i){

        i.setStyles({
            'position': 'relative',
            'top': maxHeight-i.h+'px'
        });

    }).bind({maxHeight: maxHeight}));
}

function assignBouncing() {

    var info = $$('.info');
    if (info.length < 1) {
        return;
    }
    info = info[0];

    var color = new Color('#fff');
    var classes = info.get('class').split(' ');
    for (var i=0; i<classes.length; i++) {
        var c = classes[i];

        var m = '';
        if (m = c.match('^color_([a-zA-Z0-9]{6})$')) {
            color = new Color(m[1]);
        }
    }

    var t = info.getElement('ul');
    if (t) {
        t.setStyle('border-top-color', color);
    }



    var images = info.getElements('ul li');

    images.each(
        function(i, index){
            i.up = false;
            i.ismoving = false;
            i.mousein = false;
            i.opened = false;
            i.toogleopened = false;

            i.images = this.images;



            // fix videos
            /*var videos = i.getElements('object');
            videos.extend(i.getElements('embed'));
            
            videos.each((function(v, index){

                var src = null;
                var vars = null;
                try {
                    src = v.get('src') || v.get('data') || v.getElement('param[name=src]').get('value');
                    vars = v.get('flashvars') || v.getElement('param[name=flashvars]').get('value');
                } catch (e) {

                    var c = infocontents[this.imgindex];
                    var m = '';
                    if (false && (m = c.match("<(object|embed)[^>]+(src|data)=\"(.+?)\""))) {
                        src = m[3];
                    } else if (m = c.match("<param[^>]+name=\"src\"[^>]+value=\"(.+?)\"")) {
                        src = m[1];
                    } else if (m = c.match("<param[^>]+value=\"(.+?)\"[^>]+name=\"src\"")) {
                        src = m[1];
                    }

                    if (false && (m = c.match("<(object|embed)[^>]+flashvars=\"(.+?)\""))) {
                        vars = m[2];
                    } else if (m = c.match("<param[^>]+name=\"flashvars\"[^>]+value=\"(.+?)\"")) {
                        vars = m[1];
                    } else if (m = c.match("<param[^>]+value=\"(.+?)\"[^>]+name=\"flashvars\"")) {
                        vars = m[1];
                    }
                }



                if (src && vars) {
                    vars = new Hash(vars.parseQueryString());

                    vars.autostart = 'true';

                    var newvideo = new Swiff(src, {
                        'id': 'video_'+this.imgindex+'_'+index,
                        'properties': {
                            name: 'video_'+this.imgindex+'_'+index
                        },
                        'width': 290,
                        'height': 238,
                        'vars': vars,
                        'params': {
                            allowfullscreen: 'true'
                        }
                    });

                    var c = new Element('div', {
                        'class': 'video_container'
                    }).replaces(v).adopt(
                        newvideo
                    );

                    
                    this.videos[index] = newvideo;
                }

            }).bind({videos: videos, imgindex: index}));


            i.videos = videos;*/



            i.complete = (function() {
                this.upfx.cancel();
                this.downfx.cancel();
                this.openfx.cancel();

                var to = this.toogleopened;
                this.toogleopened = false;

                this.ismoving = false;
                if (!this.mousein && this.up && !this.opened) {
                    this.fireEvent('mouseout');
                }
                if (this.mousein && !this.up && !this.opened) {
                    this.fireEvent('mouseover');
                }
                if (to) {
                    this.fireEvent('click');
                }

            }).bind(i);

            var tonormal = (function(){
                    this.basis();
                    /*i.getElements('.img')[0].setStyles({
                            'background': 'url('+imgDir+'infoborder.png) left top no-repeat'
                    });*/
                    i.getElements('.icon').setStyles({
                            'display': 'block'
                    });
            }).bind({i: i, basis: i.complete});

            i.upfx = new Fx.Morph(i.getElements('.img')[0], {duration: 'normal', transition: Fx.Transitions.Sine.easeOut});
            i.upfx.complete = tonormal;
            i.upstart = {
                'margin': '-35px 0 0 -65px',
                'width': '52px',
                'height': '52px',
                'padding': '0'
            };//'.info .texts ul.up .img';

            i.downfx = new Fx.Morph(i.getElements('.img')[0], {duration: 'normal', transition: Fx.Transitions.Sine.easeIn});
            i.downfx.complete = tonormal;
            i.downstart = {
                'margin': '-25px 0 0 -65px',
                'width': '52px',
                'height': '52px',
                'padding': '0'
            };//'.info .texts ul .img';

            i.getElements('.img')[0].setStyles({
                'border-width': '1px',
                'border-style': 'solid',
                'border-color': this.color
            });
            i.getElements('.infolink')[0].setStyle('color', this.color);

            i.openfx = new Fx.Morph(i.getElements('.img')[0], {duration: 'normal', transition: Fx.Transitions.Sine.easeIn});
            i.openfx.complete = (function(){
                    this.basis();
                    i.getElements('.img')[0].setStyles({
                            'background': '#ccc'
                    });
                    i.getElements('.icon').setStyles({
                            'display': 'none'
                    });
                    i.getElements('.infocontent').setStyles({
                            'display': 'block'
                    });

                    var infoc = i.getElements('.infocontent');
                    infoc.adopt(
                        new Element('img', {
                            'class': 'closebutton',
                            'src': imgDir+'close.png'
                        }).addEvent('click', (function(){
                            return i.infofunction.call();
                        }).bind(this.i))
                    );


                    var src = null;
                    var vars = null;

                    var c = infocontents[this.index];
                    var m = '';
                    if (false && (m = c.match("<(object|embed)[^>]+(src|data)=\"(.+?)\""))) {
                        src = m[3];
                    } else if (m = c.match("<param[^>]+name=\"src\"[^>]+value=\"(.+?)\"")) {
                        src = m[1];
                    } else if (m = c.match("<param[^>]+value=\"(.+?)\"[^>]+name=\"src\"")) {
                        src = m[1];
                    }

                    if (false && (m = c.match("<(object|embed)[^>]+flashvars=\"(.+?)\""))) {
                        vars = m[2];
                    } else if (m = c.match("<param[^>]+name=\"flashvars\"[^>]+value=\"(.+?)\"")) {
                        vars = m[1];
                    } else if (m = c.match("<param[^>]+value=\"(.+?)\"[^>]+name=\"flashvars\"")) {
                        vars = m[1];
                    }

                    if (src && vars) {
                        vars = new Hash(vars.parseQueryString());
                        vars.autostart = 'true';

                        infoc.adopt(
                            new Swiff(src, {
                                'id': 'video_'+this.index,
                                'properties': {
                                    name: 'video_'+this.index
                                },
                                'width': 290,
                                'height': 238,
                                'vars': vars,
                                'params': {
                                    allowfullscreen: 'true'
                                }
                            })
                        );
                    } else {
                        infoc.set('html', c);
                    }




            }).bind({i: i, basis: i.complete, index: index});
            i.openstart = {
                'margin-top': '-280px',
                'height': '238px',
                'width': '290px'
            };


            var triggers = [ i ];

            triggers.each((function(trigger) {
                    trigger.addEvent('mouseover', (function(){
                        this.mousein = true;
                        if (!this.ismoving && !this.opened) {
                            this.ismoving = true;
                            this.up = true;

                            this.getElements('.infocontent').setStyles({
                                    'display': 'none'
                            });

                            this.upfx.start(this.upstart);
                        }
                    }).bind(this.element));

                    trigger.addEvent('mouseout', (function(){
                        this.mousein = false;
                        if (!this.ismoving && !this.opened) {
                            this.ismoving = true;
                            this.up = false;

                            this.getElements('.infocontent').setStyles({
                                    'display': 'none'
                            });

                            this.downfx.start(this.downstart);
                        }
                    }).bind(this.element));

                    if (this.element.getElement('a').get('href') == '#' && !this.element.getElements('.img')[0].hasClass('nocontent')) {
                            var infofunction = (function(e){

                                if (e && e.target && !e.target.hasClass('closebutton')) {
                                        var c = this.getElements('div.infocontent')[0];
                                        var t = e.target;

                                        while (t && t != this && t.getParent()) {
                                                t = t.getParent();

                                                if (t == c) {
                                                        return false;
                                                }

                                        }

                                }

                                this.images.each((function(i){
                                   if (i.opened && i != this) {
                                       i.fireEvent('click');
                                   }
                                }).bind(i));

                                if (this.ismoving) {
                                    this.toogleopened = !this.toogleopened;

                                    return false;
                                }

                                this.ismoving = true;
                                var wasopened = this.opened;
                                this.opened = !this.opened;

                                if (wasopened) {

                                    /**
                                     * box shall be closed.
                                     * if there is a video, stop it
                                     */
                                    /*var videos = this.getElements('object');
                                    videos.extend(this.getElements('embed'));
                                    videos.each(function(i){
                                        if (i.sendEvent) {
                                            i.sendEvent("PLAY", "false");
                                        }
                                    });*/
                                    this.getElements('div.infocontent')[0].set('html', '');

                                    this.up = !i.mousein;

                                    this.complete.run([], this);

                                    return false;
                                }

                                var coords = this.getCoordinates($$('.info .infobg')[0]);

                                var leftmargin = -coords.left + 270;

                                var val = this.openstart;
                                val['margin-left'] = leftmargin+'px';

                                this.opened = true;
                                this.openfx.start(val);

                                return false;

                            }).bind(this.element);

                            this.element.infofunction = infofunction;

                            trigger.addEvent('click', infofunction);
                            //this.element.getElements('img.closebutton')[0].addEvent('click', infofunction);
                            
                    }

            }).bind({element: i}));
        }
    , {images: images, color: color});
 }

window.addEvent('domready', function() {
                fixTop();
                assignBouncing();
        });
window.addEvent('load', function() {
                fixBottom();
        });
window.addEvent('ajaxready', function() {
                fixTop();
                fixBottom();
                assignBouncing();
        });
