jQuery.noConflict();

jQuery(function() {

        //メニューの折りたたみ
        jQuery("div.legend span").toggle(function() {
                jQuery(this.parentNode.parentNode.getElementsByTagName('div')[1]).slideUp();
                jQuery(this).html('&#x25B6;');
            }, function() {
                jQuery(this.parentNode.parentNode.getElementsByTagName('div')[1]).slideDown();
                jQuery(this).html('&#x25BC;');
            });

        //クエリーの作成
        var query = new Mogel.Query(jQuery("#q").get()[0]);

        //レートパネル
        var star_rate = new Mogel.StarRate();
        jQuery("ul#starrate li").each(function() {
                star_rate.add(this);
            });
        jQuery("ul#starrate li").click(function() {
                if (star_rate.isShine(this)) {
                    star_rate.off(this);
                } else {
                    star_rate.on(this);
                }
                entry_list.filter(query, star_rate, tag_list);
            });
        //レートフィルタを解除
        jQuery("#rateclear").click(function() {
                jQuery("ul#starrate li").each(function() {
                        star_rate.on(this);
                    });
                entry_list.filter(query, star_rate, tag_list);
            });

        //タグパネル
        var tag_list = new Mogel.TagList();
        jQuery("ul#tagcloud li span").each(function() {
                tag_list.add(this);
            });
        jQuery("ul#tagcloud li span").click(function() {
                if (tag_list.status(this.innerHTML)) {
                    tag_list.off(this);
                    tag_list._tag[this.innerHTML].flash(true);
                } else {
                    tag_list.on(this);
                }
                entry_list.filter(query, star_rate, tag_list);
            });
        jQuery("p.tags span.tag").click(function() {
                if (tag_list.status(this.innerHTML)) {
                    tag_list.off(this);
                    tag_list._tag[this.innerHTML].flash(true);
                } else {
                    tag_list.on(this);
                }
                entry_list.filter(query, star_rate, tag_list);
            });
        jQuery("p span#tagclear").click(function() {
                tag_list.clear();
                entry_list.filter(query, star_rate, tag_list);
            });

        //エントリーリスト
        var entry_list = new Mogel.EntryList();
        entry_list.counter_bind(jQuery('div#status strong').get()[0]);
        jQuery("div#deck div.box").each(function() {
                var entry = new Mogel.Entry(this);
                tag_list.mapping(entry.tags);
                entry_list.add(entry);
            });

        //タグの関連表示
        jQuery("ul#tagcloud li span").hover(function() {
                var len = 0;
                var target = {};
                for (var key in tag_list._tag) {
                    if (tag_list._tag[key].flg || this.innerHTML == key) {
                        len++;
                        var orl = tag_list._relation[key].length;
                        for (var i=0; i<orl; i++) {
                            if (typeof target[tag_list._relation[key][i]] == 'undefined') {
                                target[tag_list._relation[key][i]] = 0;
                            }
                            target[tag_list._relation[key][i]]++;
                        }
                    }
                }
                for (var prop in target) {
                    if (len == target[prop]) {
                        tag_list._tag[prop].flash(true);
                    }
                }
                if (!tag_list._tag[this.innerHTML].flg) {
                    tag_list._tag[this.innerHTML].flash(true);
                }
            }, function() {
                for (var key in tag_list._tag) {
                    tag_list._tag[key].flash(false);
                }
            });

        //並び替え
        jQuery("ul#order li span").click(function() {
                jQuery("ul#order li span").each(function() {
                        this.style.backgroundColor = 'transparent';
                        this.style.color = '#1874CD';
                    });
                this.style.backgroundColor = '#00B2EE';
                this.style.color = '#FFFFFF';
                entry_list.order(this);
            });

        //テキストフィルタ
        jQuery("#q").keyup(function() {
                entry_list.filter(query, star_rate, tag_list);
            });

        //フィルタの保存
        jQuery("div#mklink").click(function() {
                var loc = document.location;
                var url = loc.protocol;
                url += '//' + loc.hostname;
                if (loc.port != "" && loc.port != "80") {
                    url += ':' + loc.port;
                }
                url += loc.pathname + '?';
                url += 'q=' + encodeURIComponent(query.value());
                url += '&r=' + encodeURIComponent(star_rate.serialize());
                url += '&o=' + encodeURIComponent(entry_list.select);
                url += '&t=' + encodeURIComponent(tag_list.serialize().join(','));
                loc.replace(url);
            });

        //設定復帰
        var args = {
            q: '',
            r: '63',
            o: 'date_desc',
            t: ''
        };
        var pair = document.location.search.substr(1).split('&');
        var len = pair.length;
        for (var i=0; i<len; i++) {
            var tmp = pair[i].split('=');
            args[tmp[0]] = decodeURIComponent(tmp[1]);
        }
        //クエリ
        jQuery("#q").val(args['q']);

        //レート
        var star = star_rate.unserialize(args['r']);
        jQuery("ul#starrate li").each(function(n) {
                if (star[n] == "0") {
                    jQuery(this).trigger('click');
                }
            });
        //並び換え
        jQuery("#" + args['o']).trigger('click');

        //タグ
        jQuery("ul#tagcloud li span").each(function() {
                if (args['t'].indexOf(this.innerHTML) >= 0) {
                    jQuery(this).trigger('click');
                }
            });
        entry_list.filter(query, star_rate, tag_list);

        //読み終わり
        jQuery('#deck').show();
        jQuery('#q').show();
        jQuery('div.menu').each(function() {
                jQuery(this).show();
            });
    });