String.implement({
    toTopic: function() {
        return this.replace(/^.*\//, '');
    },
    toTags: function() {
        var splited = this.split(' ');
        if (splited.length == 1 && splited[0].length == 0) return [];

        var tags = [];
        var quote = false;

        splited.each(function(piece) {
            if (quote) tags[tags.length - 1] += ' ' + piece;
            else tags.push(piece);

            if (piece.match(/^"/)) quote = true;
            else if (piece.match(/"$/)) quote = false;
        });

        tags = tags.map(function(tag) {
            try {
                return tag.match(/^"(.+)"$/)[1];
            } catch (e) {
                return tag;
            }
        });

        return tags;
    }
});

Array.implement({
    toTagsString: function() {
        return this.map(function(tag) {
            if (tag.match(/\s/)) return '"' + tag + '"';
            else return tag;
        }).join(' ');
    }
});

Element.implement({
    getContext: function() {
        if (this.get('tag') != 'a') {
            throw new Error();
        }
        if (!vlaah.topic_base.match(/^\//)) {
            var topic_base = vlaah.topic_base.match(
                new RegExp(location.host + '(.*)$')
            )[1]; // 호스트 제거
        } else {
            var topic_base = vlaah.topic_base;
        }
        var pattern = new RegExp(
            '^' + topic_base.replace(/\/$/, '') + '\/([^/]+)'
        );
        var encoded = this.get('href').match(pattern)[1].replace(/\+/g, '%20');
        return window.decodeURIComponent(encoded);
    }
});

if (typeof document.ondomready === 'function') {
    document.ondomready.run(document);
}

vlaah.initCandybar = function(el) {
    var comment = new Topic(el.getElement('.topic').get('title'), {
        commented: !!el.getElement('.selected'),
        elements: {
            bar: el.getElement('.progress'),
            plus: el.getElement('.plus input[type=image]'),
            minus: el.getElement('.minus input[type=image]'),
            topic: el.getElement('.topic')
        },
        onExpress: function() {
        },
        onSuccess: function(json) {
            var count = el.getElement('.bar em');
            if (count) {
                count.set('text', json.count.total);
            }
        }
    });
};

{
    if(location.hash == '#comment' && $('comment')) {
        window.scrollTo(0, 0);
        window.addEvent('load', function(e) {
            window.scrollTo(0, 0);
            var scroll = new SmoothScroll();
            scroll.anchor = 'comment';
            scroll.toElement($('comment'));
            $('comment-body').focus();
        });
    }

    var theme = vlaah.themes;
    /*if($(document.body).hasClass('topic')) {
        var theme = {
            plus: '#6c0',
            //    $E('body.topic > .express .status .plus em').getStyle('color'),
            minus: '#f45'
            //    $E('body.topic > .express .status .minus em').getStyle('color')
        };
    }*/

    (function() { // Inner Label
        $$('.authentication label, .topic-finder label').each(function(el) {
            var target = $(el.get('for'));
            if(['text', 'password', 'search'].contains(target.get('type'))) {
                var text = el.get('text');

                el.set('tween', { duration: 100 });

                var checkvalue = function() {
                    if(target.get('value')) el.fade('hide');
                }
                checkvalue();
                checkvalue.delay(1000);

                el.setStyles({
                    position: 'absolute', display: 'block', width: 'auto',
                    padding: target.getStyle('padding'),
                    fontSize: target.getStyle('font-size'),
                    textAlign: 'left', cursor: 'text',
                    lineHeight: target.getSize().y
                });

                if(el.get('for') == 'topic-finding') {
                    el.setStyle('margin-left',
                        target.getPosition().x - el.getPosition().x
                    );
                }

                target.addEvents({
                    focus: el.fade.pass('out', el),
                    blur: function() {
                        if(!this.get('value'))
                            el.fade('in');
                    }
                });
            }
        });
    })();

    var keyEvents = $H({
        keyup: Browser.Engine.webkit || Browser.Engine.gecko  || Browser.Engine.presto,
        keydown: Browser.Engine.trident,
        keypress: false
    });

    { // Comment Preview
        var body = $('comment-body');
        var prv  = $E('.preview');
        recommended_tags = $E('.tags .recommended');

        if (recommended_tags) {
            vlaah.tags_recommend = (function () {
                var req = new Request.JSON({
                    url: this.getParent('form').get('action')
                         + '/comments/tags.js',
                    method: 'get',
                    onSuccess: (function(json) {
                        if (json.length) {
                            recommended_tags.removeClass('empty');
                        }
                        json.slice(0, 5).each((function(tag) {
                            // console.log(tag);
                            var cls = this.get('value').toTags()
                                          .contains(tag.name)
                                    ? 'selected' : '';
                            cls += ' popular';

                            var el = new Element('span', {
                                'class': cls,
                                'text': tag.name,
                                events: {
                                    'click': function() {
                                        return recommended_tags
                                              .toggleTag(this);
                                    }
                                }
                            });
                            recommended_tags.grab(el);
                            recommended_tags.removedTags.push(tag.name);
                        }).bind(this));
                        this.removeEvents('focus');
                        vlaah.tags_recommend = $empty;
                    }).bind(this)
                });
                req.send();
            }).bind(recommended_tags.getParent().getElement('[name=tags]'));
            var selector = 'span';
            recommended_tags.removedTags = [];
            recommended_tags.tagRemoved = function(tag) {
                return recommended_tags.removedTags.contains(tag);
            }
            recommended_tags.getSameTags = function(tag) {
                return recommended_tags.getElements(selector).filter(
                    function(el) { return el.get('text') == tag; }
                );
            }
            recommended_tags.toggleArea = function() {
                var el = recommended_tags;
                if (el.getElements(selector).length) {
                    el.removeClass('empty');
                } else {
                    el.addClass('empty');
                }
            }

            recommended_tags.selectTag = function(el) {
                var tag = el.get('text');
                recommended_tags.removedTags = recommended_tags.removedTags
                                                               .erase(tag);
                recommended_tags.getSameTags(tag).addClass('selected');
            }
            recommended_tags.removeTag = function(el) {
                var tag = el.get('text');
                if (!recommended_tags.tagRemoved(tag)) {
                    recommended_tags.removedTags.push(tag);
                }
                recommended_tags.getSameTags(tag).removeClass('selected');
            }
            recommended_tags.toggleTag = function(el) {
                return recommended_tags[
                    (recommended_tags.tagRemoved(el.get('text'))
                    ? 'select' : 'remove') + 'Tag'
                ](el);
            }

            $('comment').addEvent('submit', function(e) {
                var tags_string = this.tags.get('value');
                var tags = tags_string.toTags();
                var new_tags = tags.extend(
                    recommended_tags.getElements('.selected').map(function(el) {
                        return el.get('text');
                    }).filter(function(tag) {
                        return !tags.contains(tag);
                    })
                );
                var unique_tags = [];
                new_tags.each(function(tag) {
                    if (!unique_tags.contains(tag)) unique_tags.push(tag);
                });
                tags_string = unique_tags.toTagsString();

                this.tags.set('value', tags_string);
            });
        }

        if (body) {
            var delay = 250;

            function preview() {
                if (!prv) {
                    prv = new Element('p', { 'class': 'preview', 'html': '<p></p>' });
                    prv.inject(body, 'after');
                }

                var req = new Request.HTML({
                    url: vlaah.topic_base + '/'
                       + window.encodeURIComponent(vlaah.topic),
                    update: prv,
                    onSuccess: function() {
                        var references = prv.getElements('a.topic');
                        var tags = references.map(function(el) {
                            return el.getContext();
                        });
                        recommended_tags.getElements('.referenced').destroy();
                        tags.each(function(tag) {
                            var html = '<span'
                                     + ' class="referenced{selected}"'
                                     + ' onclick="{onclick}"'
                                     + '>{tag}</span> ';
                            html = html.substitute({
                                tag: tag,
                                selected: recommended_tags.tagRemoved(tag)
                                        ? '' : ' selected',
                                onclick: "recommended_tags.toggleTag(this);"
                            });

                            recommended_tags.set('html',
                                recommended_tags.get('html') + html
                            );
                        });
                        recommended_tags.toggleArea();

                        (function() {
                            if (tongue.prefer) {
                                var length = $E('.tongue').getSize().y;
                                $E('.tongue-mask').setStyle('height', length);
                                tongue.length = length;
                            }
                        })();
                    }
                });

                req.get({ body: body.get('value'), preview: true });
            }

            var timer = null;
            function watch() {
                if (!tongue.element.getParent('.main-candybar')
                           .hasClass('expressed')) return;
                $clear(timer);
                timer = preview.delay(delay);
            }
            
            $$(body, recommended_tags.getPrevious().getElement('[name=tags]')).addEvent(keyEvents.keyOf(true), watch);
        }
    }
    
    if($$('.me2day2vlaah').length) {
        $('center-to-plus').addEvent('click', function(e) {
            $$('#center-list option').each(function(e) {
                if(e.selected) e.inject($('plus-list'));
            });
            return false;
        });
        $('plus-to-center').addEvent('click', function(e) {
            $$('#plus-list option').each(function(e) {
                if(e.selected) e.inject($('center-list'));
            });
            return false;
        });
        $('center-to-minus').addEvent('click', function(e) {
            $$('#center-list option').each(function(e) {
                if(e.selected) e.inject($('minus-list'));
            });
            return false;
        });
        $('minus-to-center').addEvent('click', function(e) {
            $$('#minus-list option').each(function(e) {
                if(e.selected) e.inject($('center-list'));
            });
            return false;
        });
        $$('button.submit').addEvent('click', function(e) {
            $$('#plus-list option').each(function(e) {
               $('plus-list-text').value += ' ' + e.value;
            });

           $$('#minus-list option').each(function(e) {
               $('minus-list-text').value += ' ' + e.value;
            });

            return true;
        });
    }

    if($('topic-finding')) { // Topic Auto completer in finder
        var lastTopic = $('topic-finding').value;
        var selectedAutoTopic = -1;
        $('topic-finding').addEvent('blur', function(event) {
                (function() {
                    $('autocomplete').setStyle('display', 'none');
                }).delay(250);
        });

        $('topic-finding').addEvent(keyEvents.keyOf(true), function(event) {
            if(this.value.length < 2) {
                $('autocomplete').empty();
                $('autocomplete').setStyle('display', 'none');
            }

            if(event.code == 40 || event.code == 38) {
                if(selectedAutoTopic >= 0)
                    $$('#autocomplete li')[selectedAutoTopic].setStyle('background', '#fff');
                if(event.code == 40 && selectedAutoTopic < $$('#autocomplete li').length - 1)
                    selectedAutoTopic++;
                else if(event.code == 38 && selectedAutoTopic > 0)
                    selectedAutoTopic--;

                $$('#autocomplete li')[selectedAutoTopic].setStyle('background', '#eee');
                lastTopic = $$('#autocomplete li')[selectedAutoTopic].get('html');
                this.set('value', $$('#autocomplete li')[selectedAutoTopic].get('html'));
            }
            if(lastTopic == this.value || this.value.length < 2)
                return true;

            lastTopic = this.value;
            
            if($E('body.topic'))
                url = vlaah.topic_base + "/vlaah/_autocomplete";
            else if($E('body.lounge'))
                url = "autocomplete";
            else
                return true;
            
            var req = new Request.JSON({
            url: url,
            onSuccess: function(response) {
                $('autocomplete').empty();

                response[1].each(function(v, k) {
                    (new Element('li', {'html': v})).addEvent('click', function() {
                        $('topic-finding').value = this.get("html");
                        $E('.topic-finder').submit();
                    }).addEvent('mouseover', function() {
                        this.setStyle('cursor', 'pointer');
                        
                        if(selectedAutoTopic >= 0)
                            $$('#autocomplete li')[selectedAutoTopic].setStyle('background', '#fff');
                        
                        $$('#autocomplete li')[k].setStyle('background', '#eee');
                        selectedAutoTopic = k;
                    }).inject($('autocomplete'));
                });
                selectedAutoTopic = -1;
                if(response[1].length)
                    $('autocomplete').setStyle('display', 'block');
                else
                    $('autocomplete').setStyle('display', 'none');
            }});
            
            req.get({q: this.value});
        });

    }

    (function() { // Gradation Friends
        var friends = $$(
            'body.person.friends .friends a,' +
            'body.main .people a'
        );

        friends.each(function(el, i) {
            $$$$ = el;
            var picture = el.getElement('img');
            var nick = el.getElement('.nick');

            var color = new Color(theme.plus).mix(theme.minus, 
                i / (friends.length - 1) * 100
            );

            picture.setStyle('border-color', color);
            nick.setStyle('color', color);
        });
    })();

/*  (function() { // Context Candybar
        if(Browser.Engine.trident4 || !$(document.body).hasClass('topic'))
            return;

        candybar = new Element('div', {
            'class': 'overlap candybar',
            html: '<div class="medium">'
                    + '<ul class="express">'
                        + '<li class="plus">'
                            + '<a href="#plus" class="public">플러스하기</a>'
                        + '</li>'
                        + '<li class="minus">'
                            + '<a href="#minus" class="public">마이너스하기</a>'
                        + '</li>'
                    + '</ul>'
                    + '<div class="bar"><div></div></div>'
                    + '<div class="topic"><a>Heungsub</a></div>'
                + '</div>',
            styles: {
                position: 'absolute',
                opacity: 0,
                display: 'none'
            }
        }).inject(document.body);
/
        <div class="candybar">
            <ul class="express">
                <li class="plus">
                    <a href="#minus" class="public">플러스하기</a>
                </li>
                <li class="minus">
                    <a href="#minus" class="public">마이너스하기</a>
                </li>
            </ul>
            <div class="bar">
                <div></div>
            </div>
            <div class="topic">
                <a href="#Topic">Topic</a>
            </div>
        </div>
*
        if(Browser.Engine.trident) {
            candybar.getElements('*').each(function(el) {
                el.setStyle('background-image',
                    el.getStyle('background-image').replace(/\.png/, '.gif')
                );
            });
        }

        var topic = candybar.getElement('.topic a');
        var expression = candybar.getElements('li a').associate([
            'plus', 'minus'
        ]);

        var fx = new Fx.Tween(candybar, { duration: 250, link: 'cancel' });
        var barfx = new Fx.Tween(candybar.getElement('.bar div'), {
            duration: 500, unit: '%', link: 'cancel',
            transition: Fx.Transitions.Quint.easeOut
        });

        candybar.ajaxLoaded = function(json, text) {
            var title = this.get('text') + ' (';

            if(json.expressed) {
                expression[json.expressed]
                    .removeClass('public').addClass('selected');

                title += { plus: '플러스', minus: '마이너스' }[json.expressed]
                      +  '했음 ';
            }

            title += json.degree.total + '점 '
                  +  json.count.total + '명 '
                  +  json.percent.total.round(1) + '%)';

            this.set('title', title);
            topic.set('title', title);

            barfx.start('width', json.percent.total);
        }

        candybar.addEvent('mouseleave', function() {
            var _ = (function() {
                candybar.fireEvent('hide');
                fx.start('opacity', 0).chain((function() {
                    this.setStyle('opacity', 0);
                    this.setStyle('display', 'none');
                }).bind(this));
            }).delay(250, this);

            this.addEvent('mouseenter', function() {
                $clear(_);
            });
        });

        $$('a.topic').each(function(el) {
            el.addEvent('mouseenter', function() {
                $H(expression).each(function(el) {
                    el.removeClass('selected').addClass('public');
                });

                candybar.fireEvent('show', this);

                var size = this.getSize().y;

                if(size < 20)
                    candybar.getFirst().set('class', 'small');
                else if(size < 30)
                    candybar.getFirst().set('class', 'medium');
                else if(size < 40)
                    candybar.getFirst().set('class', 'large');

                topic.set({
                    text: this.get('text'),
                    href: this.get('href'),
                    title: this.get('title'),

                    styles: this.getStyles(
                        'font-family', 'font-size', 'font-weight', 'font-style'
                    )
                });

                if(Browser.Engine.trident) {
                    var size = this.getSize().y;

                    if(size > 16 && size <= 22) size = 0.75;
                    else if(size > 22 && size <= 25) size = 1;
//                  else alert(size);

                    topic.setStyle('font-size', size + 'em');
                }

                var margin = candybar.getElement('.express a')
                    .getStyle('width').toInt() * 1.5;

                candybar.setStyles({
                    top: el.getPosition().y - (
                        topic.getStyle('line-height').toInt() - this.getSize().y
                    ) / 2,

                    left: this.getPosition().x - margin,
                    
                    marginLeft: Browser.Engine.trident
                        ? (window.getSize().x <= 800
                            ? 800 : window.getSize().x) / 2 - 400
                        : 0
                    ,

                    width: this.getSize().x + margin * 2,

                    display: 'block'
                });

                var _ = (function() {
                    this.set('opacity', 0);
                    this.start('opacity', 1);
                }).delay(250, fx);

                this.addEvent('mouseleave', function() {
                    $clear(_); this.removeEvents('mouseleave');
                });
            });
        });

        $$('.preview a.topic').each(function(el) {
            el.removeEvents('mouseenter');
        });

    })();
*/
    (function() { // Change Status
        var express = $E('.main-candybar');

        if(express) {
            var stats = express.getElements('dd.total');
            stats.each(function(stat, i) {
                stat.setStyle('cursor', 'pointer');
                stat.addEvent('click', function() {
                    $$(
                        this.getParent().getParent(),
                        stats[(i + 1) % 3].getParent().getParent()

                    ).toggleClass('focused');
                });
            });
        }
    })();

    if($(document.body).hasClass('theme')) {
        if(['#plus', '#minus'].contains(location.hash)) {
            var prefer = {
                '#plus': 'minus',
                 '#minus': 'plus'
            }[location.hash];

            $(document.body).removeClass(prefer + '-' + $E('h1').get('text'));
            $(document.body).addClass(prefer + '-silver');

            $$('.apply .' + prefer).destroy();
        }
    }

    // API: Highlight Application
    $$('body.api ' + location.hash)
        .filter(function(app) { return app.hasClass('application') })
        .each(function(app) {
            app.set('morph', { duration: 5000 });
            app.setStyles({ color: '#a00', 'background-color': '#fcc' });
            app.morph({ color: '#000', 'background-color': '#fff' });
        });

    // API: Confirm to destroy
    $$('body.api div.applications div.application h3 a.destroy')
        .addEvent('click', function(e) {
            window.confirm('정말요?') || e.stop();
        });

    var picture = $E('body.person div.profile div.picture');
    if (picture && picture.getFirst().get('tag') == 'a') {
        var anc = picture.getFirst().setStyles({
            width: 128, height: 128, opacity: 0.75,
            marginLeft: -152, marginTop: 4,
            display: 'block', border: 'none', 'float': 'left'
        });
        anc.getFirst().inject(anc, 'before');
        anc.title = vlaah.lang['auth.preferences.4'];
    }

    // Modifiable Count Down
    {
        var countdown = $E('#comment .modifiable span');
        if (countdown) {
            var clock = (function() {
                var now = new Date(new Date().valueOf() + vlaah.time_gap);
                if (modifiable_time < now) {
                    $clear(clock);
                    countdown.getPrevious('img').removeClass('icon');
                    countdown.destroy();
                    $E('#comment .submit').set('text',
                        vlaah.lang['topic_panel.comment_form.4']
                    );
                } else {
                    var gap = new Date(modifiable_time - now);
                    var min = gap.getMinutes();
                    var sec = gap.getSeconds();
                    countdown.set('text',
                        (min < 10 ? '0' : '') + min +
                        ':' +
                        (sec < 10 ? '0' : '') + sec
                    );
                }
            }).periodical(1000);
        }
    }

    // Tags Control
    window.addEvent('load', function() {
        if (!$E('body.favorites .tags')) {
            return;
        }

        $$('.tags a.action.move').destroy();
        var tag = $E('.tags em').getParent();
        var tags = tag.getParent();

        if (tags.getChildren('.addition').length &&
            !tag.hasClass('total') &&
            !tag.hasClass('untagged')) {

            if (Browser.Engine.trident) {
                var shift = (document.body.getScrollSize().x - 800) / 2;
            } else {
                var shift = 0;
            }

            var clone = tag.clone().setStyles({
                position: 'absolute',
                left: shift + tag.getPosition().x,
                top: tag.getPosition().y,
                cursor: 'move'
            }).set('tween', {
                duration: 50
            }).inject(tags);
            if (shift) clone.setStyle('width', '100%');
            tag.setStyle('visibility', 'hidden');

            var n = tags.getChildren().length - 3;
            var first_sortable_tag = tags.getChildren('li:nth-child(2)')[0];
            var last_sortable_tag = tags.getChildren('li:nth-child('+n+')')[0];

            var lastpos, offset = 0, limit_x = shift + tag.getPosition().x;
            clone.makeDraggable({
                limit: {
                    x: [limit_x, limit_x],
                    y: [first_sortable_tag.getPosition().y,
                        last_sortable_tag.getPosition().y]
                },
                onBeforeStart: function(el) {
                    lastpos = el.getPosition().y;
                },
                onDrag: function(el) {
                    var pos = [
                        el.getPosition().y,
                        el.getPosition().y + el.getSize().y
                    ];
                    var d = pos[0] - lastpos;

                    var target = tag[d > 0 ? 'getNext' : 'getPrevious']();
                    var focus = [
                        target.getPosition().y,
                        target.getPosition().y + target.getSize().y
                    ];
                    var _ = (focus[0] + focus[1]) / 2;
                    if ((d > 0 && _ < pos[1]) || (d <= 0 && pos[0] <= _)) {
                        tag.inject(target, d > 0 ? 'after' : 'before');
                        offset += d > 0 ? 1 : -1;
                    }
                    this.fireEvent('beforeStart', el);
                },
                onComplete: function(el) {
                    var content = el.getFirst();
                    el.tween('top', tag.getPosition().y);

                    if (offset != 0) {
                        new Request({
                            url: vlaah.topic_base + '/' + vlaah.topic.context
                               + '/favorites/reorderTags',
                            onSuccess: function() {
                                offset = 0;
                                var color = content.getStyle('border-color');
                                content.tween('border-color',
                                              [vlaah.theme.plus, color]);
                            }
                        }).get({
                            object: content.get('text'),
                            offset: offset.toString()
                        });
                    }
                }
            });
        }
    });

    {
        var base = vlaah.topic_base;
        $$('a.topic').each(function(el) {
            var href = el.href;
            if (href.substr(0, base.length) == base) {
                var topic = window.decodeURIComponent(href.substr(base.length));
                el.store('topic', topic);

                var body = document.body;
                if (body.hasClass('refers') || body.hasClass('feedback')) {
                    if (topic == vlaah.topic) {
                        el.addClass('referenced-topic');
                    }
                }
            }
        });
    }

    if ($E('body.home')) {
        var acco = new Accordion(
            '.-issue > .context-candybar',
            '.-issue > .people', {
        });
        $$('.-issue').each(function(el, i) {
            var candybar = el.getElement('.context-candybar');
            acco.addSection(candybar, el.getElement('.people'));
            candybar.addEvent('mouseenter', function() {
                acco.display(i);
            });
        });
        var input = $E('.portal .context');
        var contexts = [];
        var shuffle_count = 1;
        vlaah.shuffle = new Request.JSON({
            url: vlaah.urls.www + '/random',
            method: 'get',
            data: {limit: 10, count: shuffle_count},
			onRequest: function() {
				this.options.data.count = ++ shuffle_count;
			},
            onSuccess: function(json) {
                //console && console.dir(json);
                contexts = json;
                input.set('value', contexts[0]);
                input.fireEvent('keyup');
            }
        });
        input.store('shuffle', null);
        $E('.portal .shuffle').addEvents({
            mousedown: function() {
                vlaah.shuffle.send();
                $clear(input.retrieve('shuffle'));
                var i = 0;
                input.store('shuffle', (function() {
                    input.set('value', contexts[i ++]).fireEvent('keyup');
                    if (i == contexts.length) i = 0;
                }).periodical(100));
            },
            mouseup: function() {
                $clear(input.retrieve('shuffle'));
            },
            click: function(e) {
                (new Event(e)).stop();
            }
        });
        //vlaah.shuffle.send();
        $$('.timeline .friend-request .request').addEvent('click', function(e) {
            var e = new Event(e);
            e.stop();
            var m = this.href.match(/\/(~.+)\/?$/);
            input.set('value', m[1]).fireEvent('keyup');
            var f = $E('.main-candybar form.plus.express');
            f.action = this.href;
            f.getElement('input[type=image]').click();
        });
    }
}

{
    var more = $E('.tabs .more h2');
    if (more) {
        var surplus_tabs = $E('.surplus-tabs');
		if (Browser.Engine.trident && Browser.Engine.version == 4) {
			surplus_tabs.setStyle('left', more.getPosition().x - 82);
		}
        $$(more, surplus_tabs).addEvents({
            mouseenter: function() {
                more.getParent().addClass('selected');
                surplus_tabs.setStyle('visibility', 'visible');
            },
            mouseleave: function() {
                more.getParent().removeClass('selected');
                surplus_tabs.setStyle('visibility', 'hidden');
            }
        });
    }
}

{
    if ($E('body.main')) {
        var balloon = $E('.balloon');
        var d = 5;
        var fx = new Fx.Morph(balloon, {transition: 'linear'});
        var fn = function() {
            fx.start({
                marginTop: $random(-d, d),
                marginLeft: $random(-d, d)
            }).chain(fn);
        }
        fn();

        var box = $E('.preferences-container');
        var gx = new Fx.Tween(box, {transition: 'quad:in:out', property: 'margin-top', duration: 1250});
        var x = 5;
        var gn = function() {
            gx.start(x = -x).chain(gn);
        }
        gn();
    }
}

{
    if ($E('body.home')) {
        var t;
        var checkDelay = 10000;
        vlaah.checkUpdates = function() {
            $clear(t);
            var url = location.href.match(/^.*\/home/)[0] + '_updates';
            new Request.JSON({
                onSuccess: function(json) {
                    $H(json).each(function(updates, tabName) {
                        var el = $E('.tabs [href$=' + tabName + ']').getNext();
                        if (updates) {
                            el.set('text', updates)
                              .setStyle('display', 'block');
                        } else {
                            el.setStyle('display', 'none');
                        }
                    });
                    t = vlaah.checkUpdates.delay(checkDelay);
                }
            }).get(url);
        }

        var tabs = $$('.tabs li');
        tabs.each(function(tab) {
            tab.getElement('a').addEvent('click', function(e) {
                (new Event(e)).stop();
                var tabName = this.get('href').replace(/.*#/, '');
                var tabContainer = $E('.left-side .' + tabName);

                tabs.removeClass('selected');
                this.getParent().addClass('selected');

                $$('.left-side .comments').setStyle('display', 'none');
                tabContainer.setStyle('display', 'block');
                /*
                $$('.left-side .comments').each(function(el) {
                    if (!el.getElement('.body').get('html').trim()) {
                        el.setStyle('display', 'none');
                    } else {
                        el.setStyle('display', 'block');
                    }
                });
                */
                this.getNext().set('text', '').setStyle('display', 'none');

                var url = location.href.match(/^.*\/home/)[0] + '_' + tabName;
                new Request({
                    evalScripts: false,
                    onSuccess: function() {
                        var html = this.response.text;
                        tabContainer.getElement('.body').set('html', html);
                        tabContainer.setStyle('display', 'block');
                        tabContainer.getElements('.body .tiny-candybar')
                                    .each(vlaah.initCandybar);
                        vlaah.checkUpdates();
                    }
                }).get(url);
            });
        });
        var defaultTab = tabs[0].getElement('a');
        defaultTab.fireEvent('click', defaultTab);
    }
}
