MJL.event.add(window, "load", function() {
    MJL.enable.rollover("roll", {disable:"unroll"});
    MJL.enable.tab("tabs");
    MJL.enable.heightEqualizer("equalize");
    MJL.enable.heightEqualizer("mail-regist-steps");
    MJL.enable.heightEqualizer("selection-content",{
        groupBy:2,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "selection");
        }
    });
    MJL.enable.heightEqualizer("roomtype-list",{
        groupBy:3,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col-inner");
        }
    });
    MJL.enable.heightEqualizer("lay-pict-col2-01",{
        groupBy:2,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col");
        }
    });
    MJL.enable.heightEqualizer("lay-pict-col2-02",{
        groupBy:2,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col");
        }
    });
    MJL.enable.heightEqualizer("lay-pict-col2-04",{
        groupBy:2,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col");
        }
    });
    MJL.enable.heightEqualizer("lay-pict-col3-01",{
        groupBy:3,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col");
        }
    });
    MJL.enable.heightEqualizer("lay-pict-col3-02",{
        groupBy:3,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col");
        }
    });
    MJL.enable.heightEqualizer("lay-pict-col4-01",{
        groupBy:4,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col");
        }
    });
    MJL.enable.heightEqualizer("estate-list-01",{
        groupBy:2,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "inner");
        }
    });
    MJL.enable.heightEqualizer("campaign-estate-list",{
        groupBy:2,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col");
        }
    });
    MJL.enable.heightEqualizer("digest-estate-02",{
        groupBy:2,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col-inner");
        }
    });
    MJL.enable.heightEqualizer("digest-estate-03",{
        groupBy:2,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col-inner");
        }
    });
    MJL.enable.heightEqualizer("digest-estate-04",{
        groupBy:2,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col-inner");
        }
    });
    MJL.enable.heightEqualizer("digest-place-01",{
        groupBy:2,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col");
        }
    });
    MJL.enable.heightEqualizer("owner-digest-01",{
        groupBy:3,
        collect:function(parent) {
            return MJL.getElementsByClassName(parent, "col-inner");
        }
    });
}, false);


// ----------------------------------------------------------------------------
// jQuery
// ----------------------------------------------------------------------------
$(function(){
    // ------------------------------------------------------------------------
    // 画像とテキスト
    // ------------------------------------------------------------------------
    // 画像とテキストの並列処理を行う関数を返す高階関数
    function getImgParallelStyler(side) {
        return function() {
            var obj = $(this);
            var imgBlock = $('div.pict:first-child', obj);
            var imgWidth = $('img', imgBlock).width(); // 画像幅
            imgBlock.css('width', imgWidth+'px'); // 画像幅を強制
            // 別カラムの margin を調整
            $('div.text', obj).css('margin-'+side, imgBlock[0].offsetWidth+'px');
        };
    }
    // 実行
    $('.lay-pict-l-01').each(getImgParallelStyler('left'));
    $('.lay-pict-r-01').each(getImgParallelStyler('right'));


    // ------------------------------------------------------------------------
    // 検索内マップ 強調表示
    // ------------------------------------------------------------------------
    $.each([
        // {
        //     root    : '基点要素 CSS セレクタ',
        //     targets : [ // 対象要素
        //         {
        //             selector : 'イベントキャプチャ要素 CSS セレクタ',
        //             img      : '対応させる img 要素 src 属性値',
        //         }, ...
        //     ]
        // }, ...
        // 人気エリアで探す
        {
            root    : '#search-select-area',
            targets : [
                {selector:'#area-ck1-1',  img:'/images/search/area/map_area_akasaka_roppongi.png'},
                {selector:'#area-ck1-2',  img:'/images/search/area/map_area_azabu_hiroo.png'},
                {selector:'#area-ck1-3',  img:'/images/search/area/map_area_harajyuku_omotesando.png'},
                {selector:'#area-ck1-4',  img:'/images/search/area/map_area_shirokane_takanawa.png'},
                {selector:'#area-ck1-5',  img:'/images/search/area/map_area_ebisu_daikanyama.png'},
                {selector:'#area-ck1-6',  img:'/images/search/area/map_area_shibaura_bay.png'},
                {selector:'#area-ck1-7',  img:'/images/search/area/map_area_yotsuya_bancyo.png'},
                {selector:'#area-ck1-8',  img:'/images/search/area/map_area_syoto_uehara.png'},
                {selector:'#area-ck1-9',  img:'/images/search/area/map_area_komazawa_jiyugaoka.png'},
                {selector:'#area-ck1-10', img:'/images/search/area/map_area_gakugeidai_nakameguro.png'}
            ]
        },
        // 区で探す
        {
            root    : '#search-select-district',
            targets : [
                {selector:'#district-ck1-1',  img:'/images/search/district/map_district_minato.png'},
                {selector:'#district-ck1-2',  img:'/images/search/district/map_district_shibuya.png'},
                {selector:'#district-ck1-3',  img:'/images/search/district/map_district_meguro.png'},
                {selector:'#district-ck1-4',  img:'/images/search/district/map_district_setagaya.png'},
                {selector:'#district-ck1-5',  img:'/images/search/district/map_district_chiyoda.png'},
                {selector:'#district-ck1-6',  img:'/images/search/district/map_district_shinagawa.png'},
                {selector:'#district-ck1-7',  img:'/images/search/district/map_district_shinjuku.png'},
                {selector:'#district-ck1-8',  img:'/images/search/district/map_district_chuo.png'},
                {selector:'#district-ck1-9',  img:'/images/search/district/map_district_ota.png'},
                {selector:'#district-ck1-10', img:'/images/search/district/map_district_bunkyo.png'}
            ]
        }
    ], function() {
        var root = $(this.root);    // 基点
        if (root.length < 1) { return; }
        var map  = $('.map', root); // マップエリア

        // 画像追加時に順次レンダリングさせない
        map.hide();
        // 強調用画像＆対象要素イベント追加
        $.each(this.targets, function() {
            var target = $(this.selector), // 対象要素
                img    = $(                // 強調用画像
                // 判別用 class 属性値 付与済
                '<img src="'+this.img+'" alt="" class="area" />'
            );
            // 強調用画像 表示変更
            target.change(function() {
                target.is(':checked') ? img.show() : img.hide();
            }).trigger('change');
            // IE 用 PNG Fix で親要素を参照している為、実行前に追加
            map.append(img);
            // BUG IE: 各種バグ回避
            if ($.browser.msie) {
                // IE 用 PNG Fix
                //   see also: http://www.dillerdesign.com/experiment/DD_belatedPNG/
                // BUG IE6: αチャンネル有 PNG 未サポート
                if ($.browser.version < 7 && 'DD_belatedPNG' in window) {
                    img.each(function() {
                        DD_belatedPNG.fixPng(this);
                    });
                }
                // BUG IE: 一度 blur しないと change イベント未発生
                target.click(function() {
                    this.blur();
                    this.focus();
                });
            }
        });
        // 画像レンダリング開始
        map.show();
    });
});


// ----------------------------------------------------------------------------
// フォトギャラリー
// ----------------------------------------------------------------------------
// BUG IE6: ready だとフォトフレームの初期位置がおかしくなる
$(window).load(function() {
    // ギャラリー種類
    var types = [
        // 不要な場合は空文字列 '' (nav 以外)
        // {
        //     root      : '基点要素 CSS セレクタ',
        //     frame     : 'フォトフレーム要素 マークアップ',
        //     img       : 'プレビュー画像 マークアップ',
        //     caption   : 'キャプション要素 マークアップ',
        //     nav       : { // 不要なら null
        //         root : '包含要素 マークアップ',
        //         next : '「次」選択要素 マークアップ',
        //         prev : '「前」選択要素 マークアップ'
        //     },
        //     loadGuird : 'プレビューロード時 ガード文言 マークアップ'
        // }, ...
        {
            root      : '.building-gallery-01 .thumbnail-list',
            frame     : '<p class="photo"></p>',
            img       : '<img alt="" />',
            caption   : '<span></span>',
            nav       : null,
            loadGuird : ''
        },
        {
            root      : '.selection-gallery-01 .thumbnail-list',
            frame     : '<p class="photo"></p>',
            img       : '<img alt="" />',
            caption   : '<span></span>',
            nav       : {
                root : '<p class="nav"></p>',
                next : '<input type="image" src="/images/selection/btn_next.gif" alt="次へ" class="next" />',
                prev : '<input type="image" src="/images/selection/btn_prev.gif" alt="前へ" class="prev" />'
            },
            loadGuird : ''
        }
    ];
    // class 属性値群
    var classes = {
        selected : 'selected'
    };
    // 読込済画像 URI キャッシュ
    var uriCache = {
        // uri : true
    };

    $.each(types, function(n, type) {
        $(type.root).each(function() {
            var items = $('a', this);  // サムネイル集合
            var frame = $(type.frame); // フォトフレーム
            var img   = $(type.img);   // プレビュー画像
            // キャプション
            var caption = type.caption ? $(type.caption) : null;
            // ガード文言
            var loadGuird = type.loadGuird ? $(type.loadGuird).hide() : null;

            // サムネイル情報
            var item = {
                prev : null, // 前のサムネイル
                now  : null, // アクティブ
                next : null  // 後のサムネイル
            };
            // アクティブなサムネイル画像
            var nowThumb = null;

            // ナビゲーション (定義時のみ表示)
            var navPrev = type.nav ? $(type.nav.prev).click(function() { // 前
                item.prev && item.prev.trigger('click');
                return false;
            }) : null;
            var navNext = type.nav ? $(type.nav.next).click(function() { // 後
                item.next && item.next.trigger('click');
                return false;
            }) : null;

            // プレビューロード時 ガード文言表示
            function showLoadGuird(uri) {
                if (loadGuird && !uriCache[uri]) {
                    uriCache[uri] = true; // ロードガード文言は1回だけ表示
                    loadGuird.show();
                    img.bind('load', hideLoadGuird);
                }
            }

            // プレビューロード時 ガード文言削除
            function hideLoadGuird() {
                if (loadGuird) {
                    loadGuird.hide();
                    img.unbind('load', showLoadGuird);
                }
            }

            // 各サムネイルのイベント処理
            items.each(function(n) {
                var i     = $(this);
                var uri   = i.attr('href');
                var thumb = $('img', i);
                var title = thumb.attr('title');
                i.click(function() {
                    // ガード文言設定 (定義時のみ)
                    showLoadGuird(uri);
                    // プレビュー設定
                    img.attr('src', uri);
                    // キャプション設定 (定義時のみ)
                    caption && caption.text(title || ' ');
                    // アクティブなサムネイルを変更
                    nowThumb && nowThumb.removeClass(classes.selected);
                    nowThumb = thumb;
                    nowThumb.addClass(classes.selected);
                    // サムネイル情報変更
                    item.prev = items.eq(n-1);
                    item.now  = i;
                    item.next = items.eq(n+1);
                    // ナビゲーション表示変更
                    if (type.nav) {
                        0 < item.prev.length ? navPrev.show() : navPrev.hide();
                        0 < item.next.length ? navNext.show() : navNext.hide();
                    }
                    return false;
                });
            });

            // 最初の画像をロード
            items.eq(0).trigger('click');

            // 要素追加
            $(this).parent().prepend(
                // 先にナビゲーションを追加
                type.nav ? $(type.nav.root).append(navPrev).append(navNext)
                         : null
            ).prepend(frame); // フレームのみ追加

            // BUG IE6: フレームの内容はこのタイミングで追加しないと
            //          スーパーリロード → 通常リロード後の画像がロード
            //          されないことがある
            frame.append(img).append(caption).append(loadGuird);
        });
    });
});

/**
 * 
 * jQuery setPlaceholder plugin
 * input[type:text]にプレースホルダー機能を設定します。
 * 
 */
(function ($) {
    var name_space = 'setPlaceholder';
    $.fn[name_space] = function (options) {
        var settings = $.extend({
        }, options);
        var elements = $(this);
        elements.each(function () {
            var $this = $(this);
            var text = $this.attr("title");
            var container = $this.wrap('<div></div>').parent().css({
                'display':'block',
                'position':'relative',
                'height':$this.height()
            });
            var label = $('<span class="placeholder">'+text+'</span>').css({
                'position':'absolute',
                'top':'2px',
                'left':'4px',
                'color':'#666',
                'fontSize':'11px'
            }).appendTo(container).click(function(){
                $(this).hide();
                $this.focus();
            });
            
            if( $this.attr("value").length > 0 ){
                label.hide();
            }
            
            $this.blur(function(){
                if ($(this).val()) return;
                label.show();
            }).focus(function(){
                label.hide();
            });
        });
        return this;
    };
    $(function(){
	$('input.placeholder').setPlaceholder();
    });
})(jQuery);