/*
 ld_gourmet.js is lightweight framework by jquery (for ld_gourmet project)
 http://gourmet.livedoor.com/js/ld_gourmet.js
 version: 0.1 / 2008-03-04

 Copyright (C) 2008 livedoor Co.,Ltd.
 Code licensed under the BSD License
*/

ld_gourmet(function () {
    /* ==================
        ajax-setup
     ================== */
    // ld_gourmet.ajaxSetup({});
    /* ==================
        global-function
     ================== */
    var gid = function (id) {
        if ( !this.cache ) this.cache = {};
        return this.cache[id] ? this.cache[id] : ( this.cache[id] = document.getElementById(id) );
    }
    window["setStartPage"] = function () {
        var homepage = 'http://www.livedoor.com';
        if ( ld_gourmet.browser.msie && ld_gourmet.browser.version >= 5 && !!( navigator.userAgent.indexOf("Windows") != -1 ) ) {
            var b = document.body;
	        b.style.behavior = "url('#default#homepage')";
            var is_home  = !!( b.isHomePage( homepage ) || b.isHomePage( homepage + "/" ) );
            if ( is_home ) {

            } else {
                if ( pageTracker && pageTracker._trackPageview )
                    pageTracker._trackPageview('/set/ldtop');
                    b.setHomePage( homepage + "/" );
                }
                location.href = homepage + "/";
        } else {
            location.href = 'http://helpguide.livedoor.com/help/help/guide/grp189';
        }
    }
    // 
    window["attach_pickup_window"] = function (load_type) {
        window.LOAD_TYPE = load_type;
        ld_gourmet("<script>").attr({
            charset: 'utf-8',
            src: '/js/bookmarklet/pickup-bml.js?' + ( +new Date ),
            type: 'text/javascript'
        }).appendTo( document.getElementsByTagName('head')[0] )
    }
    // lazy_advertiser
    window["lazy_advertiser"] = function () {
        var d  = document,
	    $      = function(id){return d.getElementById(id)},
            head   = d.getElementsByTagName('head')[0],
            write  = d.write,
            script = function(src){var s = d.createElement("script"); s.src = src; return s;};
        return {
            tasks: [],
            regist: function (to,src,callback) {
	        if ( !$( to ) ) return false;
                this.tasks.push({
                    to : $( to ),
                    script: script(src),
		    callback: callback
                });
            },
            write: function () {
                var lock  = false
                    tasks = this.tasks,
                    tid = setInterval(function () {
                        if ( tasks.length && !lock ) {
                            lock = true;
                            var task = tasks.shift();
                            d.write = function () {
                                var res = Array.prototype.join.call(arguments, '');
                                if ( /^(?:<script.+src="([^"]+)")/.test( res ) && RegExp.$1 ) {
                                     tasks.unshift({
                                         to : task.to,
                                         script: script( RegExp.$1 ),
					 callback: task.callback
                                     });
				     lock = false;
                                } else {
				     task.to.innerHTML = res;
                                     setTimeout(function () {
				         d.write = write;
                                         lock = false;
                                     }, 1);
				}
                            };
			    setTimeout(function () {
			        head.appendChild( task.script );
				if ( /^(function)$/.test( typeof task.callback ) ) {
				    task.callback.call(null);
				    lock = false;
				}
			    }, 1);
                        }
                        else if ( lock ) {}
                        else if ( !tasks.length && !lock ) {
                            clearInterval( tid );
                            tid = null;
                        }
                    }, 20);
            }
        };
    };
    var Lightbox = function (content_id, close_id) {
         var content = gid( content_id ),
             w  = window,
             d  = document,
             b  = d.body,
             dd = document.documentElement || b,
             fronts = ld_gourmet("select,object", b);
         var l  = {
             initialize: function () {
                 if ( close_id ) {
                     ld_gourmet('#' + close_id).bind('click', function () {
                         l.hide();
                     });
                 }
                 return this;
             },
             show: function (callback) {
         	 fronts.css("visibility", "hidden");
         	 ld_gourmet("#lightbox_filter").css({
         	     width  : ld_gourmet( b ).width() + "px",
         	     height : ld_gourmet( b ).height() + "px"
         	 }).show();
         	 ld_gourmet( content ).css({
         	     left : ( ld_gourmet( w ).width() / 2 ) - ( ld_gourmet( content ).width() / 2 ) + "px",
         	     top : ( ( w.innerHeight || dd.clientHeight ) / 2 ) - ( ld_gourmet( content ).height() / 2 ) + ( dd.scrollTop || b.scrollTop || 0 )
         	 }).show();
         	 callback && callback();
             },
             hide: function () {
                 fronts.css("visibility", "visible");
                 ld_gourmet("#lightbox_filter, #" + content_id).hide();
             }
         };
         return l.initialize();
    };
    ld_gourmet.Lightbox = Lightbox;

    var byteCounter = function (min) {
         var tid = null,
             min = typeof min == 'number' ? min : 100;
         var b = {
             initialize: function () {
                 return this;
             },
             dispatch: function (target_id) {
                 var handler = function () {
                         var self  = this,
                             value = "",
                             z = 0, h = 0, len = 0,
                             disp  = document.getElementById( target_id + "_counter" );
                         return function () {
                             value = self.value.replace(/\x0D\x0A|\x0D|\x0A/g, ""),
                             z = value.length ? ( value.match(/[^\x20-\xFF]/g) || [] ).length : 0,
                             len = min - ( z + Math.ceil( ( value.length - z ) / 3 ) );
                             disp.innerHTML = len > 0 ? ( "あと" + len + "文字" ) : '投稿できます';
                         }
                     };
                 ld_gourmet("#" + target_id).bind("keydown", function () {
                     clearTimeout( tid );
                     tid = null;
                 }).bind("keyup", function () {
                     ( tid == null ) && ( tid = setTimeout(handler.call(this), 20) );
                 }).trigger("keyup");
             }
         };
         return b.initialize();
    }
    /* ==================
       assistant-function
     ================== */
    String.prototype.format = function(){
        var values = arguments;
        return this.replace(/\{(\d)\}/g,function(){
               return values[arguments[1]];
        });
    };
    ![].indexOf && (Array.prototype.indexOf = function(searchElement,fromIndex){
        var i = (fromIndex < 0) ? this.length+fromIndex : fromIndex || 0;
        for(;i<this.length;i++)
            if(searchElement === this[i]) return i;
        return -1
    });
    /* ==================
        global-handler
    =================== */
    // 検索フォームのメニュータブのサジェストアイテムをクリックしたときの動作
    ld_gourmet("#search-form-menu-box ul li").each(function (i,o) {
        ld_gourmet( o ).bind("mousedown", function () {
            ld_gourmet("#search-form-input-menu").focus().val( ld_gourmet( this ).text() );
        })
    }).hover(
        function(){ld_gourmet( this ).css("backgroundColor", "#f7e58f")},
        function(){ld_gourmet( this ).css("backgroundColor", "white")}
    );
    // お勧めメニューボックスの表示
    ld_gourmet("#search-form-input-menu").focus(function () {
        var offset = ld_gourmet( this ).offset(),
        height = ld_gourmet( this ).height() + 10;
        ld_gourmet("#search-form-menu-box").css({
             top  : offset.top + height + "px",
             left : offset.left + "px"
        }).show();
    }).blur(function () {
        ld_gourmet("#search-form-menu-box").hide();
    });
    // 二重送信防止のための施策
    ld_gourmet("form", document.body).bind("submit", function () {
         if ( this.className.indexOf('ignore-double-submit') != -1 ) return false;
         var buttons = ld_gourmet( this ).find(":image, :submit");
         setTimeout(function () {
             buttons.attr("disabled", true);
             setTimeout(function () {
                 buttons.attr("disabled", false);
             }, 10000);
         }, 1);
    }).find(":image, :submit").attr("disabled", false);
    // ログインエラー時に見せるlightbox
    function showAuthorizeErrorBox (res) {
         var lightbox = new Lightbox('lightbox_contents', 'lightbox-close-button');
         lightbox.show(function () {
             ld_gourmet("#lightbox-error-msg").html( "<p>投票するにはログインしている必要があります</p>livedoorIDをお持ちの方 > <a href='/login?.next={0}'>ログインする</a><br /><br />livedoorIDをお持ちでない方 > <a href='http://member.livedoor.com/register/email?.next={0}&.sv=gourmet'>新規登録</a>".format( encodeURIComponent( location.href ) ) );
         });
    }
    /* ==============================================
        サーチフォームのタブ実装(ステージング)
    ============================================== */
    // 1 --
    ld_gourmet.fastTabs({
        tabs : [{
            selector : "#search-tab-1",
            target   : "#search-tab-contents-1"
        },{
            selector : "#search-tab-2",
            target   : "#search-tab-contents-2"
        },{
            selector : "#search-tab-3",
            target   : "#search-tab-contents-3"
        }],
        callback : function (c,t,i) {
            // c and t is jquery object, and i is increment number.
            if ( c.attr("id") != "search-tab-2" )
    	        ld_gourmet("#search-form-menu-box").hide();
            ld_gourmet.cookie("active-search-tab-index", typeof i == "number" ? String(i) : String(0), {
		    expires : 365,
		    path    : '/'
	    });
        },
        initialize_index : ld_gourmet.cookie("active-search-tab-index") || 0,
        tab_on_class_name : "on"
    });
    // submitした際に他のvalueを空にする
    ld_gourmet("#gourmet-search-form").bind("submit", function () {
        ld_gourmet("#search-form-menu-box").remove();
	ld_gourmet(".searchWord div:hidden :input", this).each(function (i,o) {
	    o.selectedIndex != undefined ? ( o.selectedIndex = 0 ) : ( o.value = "" ) ;
	});
    });
    // 2 フィルインメッセージ
    ld_gourmet("#search-form-input-menu").fillinMsg("例:オムライスなど", "#AAAAAA", "black");
    ld_gourmet("#search-form-input-local").fillinMsg("例:赤坂など", "#AAAAAA", "black");
    // 3 ---
    var toggles = [],
    	sub     = gid('sub');
    ld_gourmet('.toggle-img-right-box', sub).each(function () {
         var target_id = this.id.replace("right-box", "right-box-target");
	 var target = gid( target_id ) ? ld_gourmet( '#' + target_id ) : ld_gourmet( '.' + target_id, sub);
	 ld_gourmet( this ).bind('click', function () {
	     var state = /open/.test( this.src );
	     this.src  = state ? "/img/cmn/side/b_close.gif" : "/img/cmn/side/b_open.gif";
	     target[ state ? 'slideUp' : 'slideDown' ]('normal');
	     state ? ld_gourmet.cookie( target_id, "close", {
                   expires : 365,
		   path    : '/'
	     }) : ld_gourmet.cookie( target_id, null, {
	     	   path : '/'
	     });
	 });
	 if ( ld_gourmet.cookie( target_id ) == 'close' ) {
	     this.src = "/img/cmn/side/b_close.gif";
	     target.slideUp('normal');
	 }
    });

    /* ==================
        page-handler
    ================== */
    var page = ld_gourmet.grep([
        {
            regex : /^(\/)$/,
            handler : function () {
	    	  var whole_country = ld_gourmet("#prefectureDl").parent(),
		      toggle_image  = ld_gourmet("#toggle-search-image");
	          ld_gourmet("#toggle-search span").bind("click", function () {
                       if ( whole_country.css("display") == "none" ) {
		           whole_country.slideDown('normal');
                           this.innerHTML = '非表示';
			   toggle_image.attr('src', '/img/cmn/side/b_open.gif');
		       } else {
		           whole_country.slideUp('normal');
			   this.innerHTML = 'すべて表示';
			   toggle_image.attr('src', '/img/cmn/side/b_close.gif');
		       }
		  });
                  toggle_image.bind('click', function () {
                      ld_gourmet("#toggle-search span").trigger('click');
                  });
            }
        },
        {
            regex : /^(\/member\/evaluation\/search)$/,
            handler : function () {
                  var word = ld_gourmet("#name").val();
                  var reg  = new RegExp( "({0})".format( word ), "img");
                  ld_gourmet("a.gourmet-search-result-store-name").each(function (i,name) {
                      name.innerHTML =  name.innerHTML.replace(reg, "<b style='color:blue;'>$1</b>");
                  });
            }
        },
        {
            regex : /^(\/member\/restaurant\/add_step1)$/,
            handler : function () {
                    /*
                       phone-number-check
                    */
                    var telephone_check = function () {
                        var telephone_number = this.value,
                            error_box        = ld_gourmet("#tel-error");
                        return function () {
                            if ( telephone_number.length ) {
                                ld_gourmet.post('/internal_api/restaurant/phone_check', {tel:telephone_number}, function (json) {
                                    eval('var res = ' + json);
                                    if ( res.is_success ) return error_box.removeClass("caution").html("");
                                    var message = res.messages[0];
                                    if ( res.entries ) {
                                        var entry = res.entries[0];
                                        message = message + '<ul><li><a href="' + entry.permalink + '" target="_blank">' + entry.name + '</a></li></ul>';
                                    }
                                    error_box.addClass("caution").html( message );
                                });
                            } else {
                                error_box.removeClass("caution").html( "電話番号を入力してください" );
                            }
                        }
                    }, tid = null;
                    if ( ld_gourmet("#tel").bind("keydown", function () {
                        clearTimeout( tid );
                        tid = null;
                    }).bind("keyup", function () {
                        ( tid == null ) && ( tid = setTimeout(telephone_check.call(this), 500) );
                    }).val() ) {
		                telephone_check.call( gid('tel') )();
		            }
            }
        },  
    	{
	    regex : /^(\/member\/restaurant\/(add_step2|edit|user_edit))$/,
	    handler : function () {
            /*
             fixed-latlng-by-hand.
            */          
            ld_gourmet("#fixed_latlng_link").bind("click", function () {
                var latlng = "", address = "";
                if ( ld_gourmet('#east_longitude').val() && ld_gourmet('#north_latitude').val() ) {
                   latlng = ld_gourmet('#east_longitude').val() + "," + ld_gourmet('#north_latitude').val();
                }
                var t = ld_gourmet("#member_restaurant_form select[name='pref_id'] option:selected");
                if ( t.val() && ( address = t.html() ) ) {
                    if ( ld_gourmet('#address1').val() ) address += ld_gourmet('#address1').val();
                    // if ( ld_gourmet('#address2').val() ) address += ld_gourmet('#address2').val();
                }
                var src = '/map/fixed_map_latlng?latlng={0}&address={1}&uniq={2}'.format( latlng, encodeURIComponent( address || "" ), Math.random().toString(36).slice(2)),
                    is_ie  = ld_gourmet.browser.msie,
                    is_ie6 = ( is_ie && ld_gourmet.browser.version == 6.0 ),
                    is_ie7 = ( is_ie && ld_gourmet.browser.version == 7.0 ),
                    is_fx  = ( ld_gourmet.browser.mozilla ),
                    is_mac = ( navigator.userAgent.indexOf("Mac") != -1 ),
                    width  = is_ie6 ? 618 : is_ie7 ? 604 : is_fx && is_mac ? 615 : 617,
                    height = is_ie6 ? 722 : is_ie7 ? 722 : ld_gourmet.browser.safari ? 681 : is_fx && is_mac ? 710 : 723,
                    top    = ( document.documentElement.scrollTop || document.body.scrollTop ) + ( ( window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight ) / 2 ) - ( height / 2 ) + "px",
                    left   = ( ( window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth ) / 2 ) - ( width / 2 ) + "px";
                    ld_gourmet('<div id="map_point_window">').append(
                        ld_gourmet('<iframe class="latlng_main_map">').attr({
                            width: width,
                            height: height,
                            id: "map_point_window_frame",
                            border: 0,
                            frameborder: 0,
                            src: src
                        }).css({
                            position: "absolute",
                            top: top,
                            left: left
                        })
                    ).appendTo( document.body );
                is_ie && setTimeout(function () {
                    ld_gourmet("#map_point_window_frame").attr("src", src);
                }, 1);
            });
            // clear latlng select change.
            ld_gourmet("#whole-country").bind("change", function () {
                ld_gourmet("#east_longitude, #north_latitude, #remap").val("");
                ld_gourmet("#fixed_latlng_message").html("");
            });
            ld_gourmet("#address1").bind("blur", function () {
                var original = this.getAttribute("rel");
                if ( this.value != original ) {
                    ld_gourmet("#whole-country").trigger("change");
                    this.setAttribute("rel", original);
                }
            });
            //
            if ( gid("remap").value ) {
               gid("fixed_latlng_message").innerHTML = '&nbsp;(位置が変更されています)';
            }
	    	/*
		    lightbox
	        */
                var lightbox = new Lightbox('lightbox_contents', 'lightbox-close-button');
                ld_gourmet("#zip_to_address_button").bind("click", function () {
                    lightbox.show();
                    // search
                    var postal = '{0}-{1}'.format( ld_gourmet("#zip").val(), ld_gourmet("#zip2").val() );
                    ld_gourmet.post("/internal_api/map/zip", {
                        postal : postal.replace(/\-/g, "")
                    }, function ( json ) {
                        eval("var res = " + json);
                        if ( res.is_success ) {
                            var content = ld_gourmet.map( res.address, function (o) {
                                var rand = Math.random().toString(36).slice( -9 );
                                return '<li><label for="{1}"><input type="radio" name="address" id="{1}" value="{0}">{0}</label></li>'.format( o, rand );
                            } ).join("");
                            ld_gourmet("#lightbox_content").html( '<p>{0}件の候補が見つかりました</p><ul>{1}</ul>'.format( res.count, content ) );
                            ld_gourmet("#lightbox-fix-button").attr("disabled", false);
                        } else {
                            var res = !postal.replace(/\-/g, "") ? "郵便番号を入力してください" : "{0}に該当する住所はみつかりませんでした".format( postal );
                            ld_gourmet("#lightbox_content").html( "<p>{0}</p>".format(res) );
                            ld_gourmet("#lightbox-fix-button").attr("disabled", true);
                        }
                     });
                });
                ld_gourmet("#lightbox-fix-button").bind("click", function () {
                     var checked = ld_gourmet("#lightbox_content input:checked");
                     if ( !checked.size() ) {
                         ld_gourmet("#lightbox-error-msg").html("住所を選択してください").show();
                     } else {
                       	 ld_gourmet("#lightbox-error-msg").hide();
                       	 var area_reg = /^(北海道|青森県|岩手県|宮城県|秋田県|山形県|福島県|茨城県|栃木県|群馬県|埼玉県|千葉県|東京都|神奈川県|新潟県|富山県|石川県|福井県|山梨県|長野県|岐阜県|静岡県|愛知県|三重県|滋賀県|京都府|大阪府|兵庫県|奈良県|和歌山県|鳥取県|島根県|岡山県|広島県|山口県|徳島県|香川県|愛媛県|高知県|福岡県|佐賀県|長崎県|熊本県|大分県|宮崎県|鹿児島県|沖縄県)(.+)$/;
                       	 var addr = checked.val().match( area_reg );

                       	 ld_gourmet("#whole-country option:contains('" + addr[1] + "')").attr("selected", true);
                       	 ld_gourmet("#address1").val( addr[2] );
                       	 ld_gourmet("#lightbox-close-button").click();
                     }
                });
                /*
                    toggle
                */
                var jobTimeItems = ld_gourmet("ul.jobTimeItemList", gid("member_restaurant_form"));
                var flag_size   = ld_gourmet(".gourmet-jobtime-flag", gid("member_restaurant_form")).each(function (i,o) {
                    ld_gourmet( this ).click(function () {
                        var l = ld_gourmet( jobTimeItems.get(i) ).toggle();
                        ld_gourmet.cookie( 'gourmet-jobtime-flag-{0}'.format(i), l.css("display"));
                    });
                }).size();
                /*
                    recover-toggle-state
                */
                for ( var i = 0; i < flag_size; i++ ) {
                    var state = ld_gourmet.cookie( 'gourmet-jobtime-flag-{0}'.format(i) ) || "none";
                    ld_gourmet( jobTimeItems.get(i) ).css("display", state);
                }
                /*
                    copy-to-action
                */
                ld_gourmet("#weekday-to-saturday, #saturday-to-sunday").bind("click" ,function(){
                    var info = ld_gourmet( this ).attr("id").split("-to-");
                    var original = ld_gourmet("#" + info[0] + "-time-form").find("select");
                    ld_gourmet("#" + info[1] + "-time-form").find(".jobTimeItemList").show().end().find("select").each(function (i,o) {
                        setTimeout(function () {
                           o.selectedIndex = original[i].selectedIndex;
                        }, 0);
                    });
                });
                /*
                    clear-action
                */
                ld_gourmet("[class^=gourmet-jobtime-clear-flag]").click(function () {
                    var target = '#{0}-time-form'.format( this.className.replace(/^gourmet-jobtime-clear-flag-/, "") );
                        ld_gourmet( target ).find("select").each(function (i,o) {
			    setTimeout(function () {
				o.selectedIndex = 0;
			    }, 0);
			});
		    });
	        }
        },
        {
             regex : /^(\/member\/restaurant\/(add|edit)_confirm)$/,
             handler : function () {
                  if ( gid("address_value") ) {
                     var addr = gid("address_value").value;
                     ld_gourmet.getJSON('/internal_api/map/search_by_address', { addr: addr }, function (res) {
                         if ( res.is_success && res.addrs && res.addrs.length ) {
                             var p = res.addrs[0];
                             gid("latlng_image").src += '&el=' + p.lng_dms + "&nl=" + p.lat_dms + "&mp=" + [p.lat_dms, p.lng_dms].join("%2C");
                         } else {
                             gid("map_notice").innerHTML = "地図が見つかりません。住所を確認してください。<br /><br />";
                             gid("zm_controller").disabled = "true";
                         }
                     });           
                  };
                  var zm_controll = function () {
                      var img = ld_gourmet("#latlng_image");
                      img.attr("src", img.attr("src").replace(/level=(\d+)/, "level=" + this.value));
                      //img.attr("src", img.attr("src").replace(/scl=(\d+)/, "scl=" + this.value));
                  }
                  ld_gourmet("#zm_controller").bind("change", zm_controll).bind("keyup", zm_controll);
             }
        },      
        {
            regex : /^(\/member\/evaluation\/step1|\/member\/my_page\/drafts\/edit)$/,
            // regex : /^(\/member\/evaluation\/step1)$/,
            handler : function () {
                /*
                  スターレーティング
                */
                ld_gourmet.each({
                    "star_total"            : "total",
                    "star_food"             : "food",
                    "star_service"          : "service",
                    "star_atmosphere"       : "atmosphere",
                    "star_cost_performance" : "cost_performance"
                }, function (i,o) {
                    ld_gourmet("#" + i).rating(o, {
                        maxvalue : 5,
                        curvalue : ( gid( i ).className.match(/\d+/) || [0] )[0],
                        hidden   : 1
                    });
                });
                /*
                  文字数チェック
                */
                var counter = new byteCounter(60);
                counter.dispatch('comment');
                /*
                  メニュー追加
                */
                var lightbox = new Lightbox('lightbox_contents', 'add-menu-close-button');
                ld_gourmet("#add-menu-button").bind("click", function () {
                    lightbox.show();
                });
                ld_gourmet("#add-menu-form").submit(function () {
                    var param = {
                        name    : ld_gourmet("#add-menu-name").val(),
                        price   : ld_gourmet("#add-menu-price").val(),
                        item_id : ld_gourmet("#item_id").val()
                    };

                    if ( !param.name ) {
                        ld_gourmet("#add-menu-error-box").html("メニュー名を追加してください");
                        return ld_gourmet("#add-menu-name").focus() && false;
                    } else if ( param.price && !/^(\d+)$/.test( param.price ) ) {
                        ld_gourmet("#add-menu-error-box").html("金額は半角のみで入力してください");
                        return ld_gourmet("#add-menu-price").focus() && false;
                    }

                    if ( confirm( 'メニュー"{0}"を{1}追加します'.format( param.name, param.price?param.price+"円で":"") ) ) {
                        ld_gourmet.post("/internal_api/menu/register", param, function ( json ) {
                            eval("var res = " + json);
                            if ( res.is_success ) {
                                param.price && ( param.price += "円" );
                                var menu = ld_gourmet( '<li class="clearfix"><input id="menu{0}" type="checkbox" value="{0}" name="menu" checked /><label for="menu{0}">{1}</label><span>{2}</span></li>'.format(res.menu_id, param.name, param.price ) );
                                menu.prependTo( ld_gourmet("#add-menu-list") );
                                if ( ld_gourmet("#add-menu-list-outer").hasClass('menuBoxHide') ) ld_gourmet("#add-menu-list-outer").removeClass('menuBoxHide');
                                ld_gourmet("#add-menu-list-outer").get(0).scrollTop = 0;
                                ld_gourmet("#add-menu-name, #add-menu-price").val("");
                                ld_gourmet("#add-menu-close-button").click();
                             } else {
                                 var message = {
                                     "error.unauthentication" : "ログイン状態でないとメニューを追加することはできません"
                                 }[ res.code ] || "メニュー追加ができませんでした。項目の内容をご確認ください。";
                                 ld_gourmet("#add-menu-error-box").html( message );
                             }
                        });
                    }
                    return false;
                });
                /*
                    タグサジェスト
                */
                ld_gourmet.getScript("/js/library/tagsuggest.js", function () {
                    var tid = setInterval(function () {
                        if ( suggest_init ) {
                           clearInterval( tid );
                           suggest_init();
                        }
                    }, 10);
                });
            }
        },
        {
            regex : /^(\/restaurant\/\d+\/.*)/,
            handler : function () {
                /*
                    star-rating-top
                */
                ld_gourmet("#vote-rating").rating("vote-rating-status", {
                    maxvalue : 5,
                    curvalue : ld_gourmet("#vote-rating-status").val() || 0,
                    hidden   : 1
                });
                var active_value   = ld_gourmet("#vote-rating-status").val();
                var active_checker = function () {
                    var val = ld_gourmet("#vote-rating-status").val();
                    ld_gourmet("#vote-rating-button").attr("disabled", val && val != active_value ? false : true );
                }
                var tid = setInterval(active_checker, 100);
                ld_gourmet("#vote-rating-button").bind("click", function () {
                    var val = ld_gourmet("#vote-rating-status").val();
                    if ( val ) {
                       ld_gourmet.post("/internal_api/evaluation/eval", {
                           item_id : ld_gourmet("#vote-rating-item-id").val(),
                           stars   : val
                       }, function (json) {
                           eval("var res = " + json);
                           if ( res.is_success ) {
                              active_value = val;
                           } else {
                              showAuthorizeErrorBox(res);
                           }
                       });
                    }
                });
                /*
                    vote-kuchikomi
                */
                ld_gourmet(".gourmet-vote-kuchikomi-button").one("click", function () {
                    var eval_id = ( this.className.match(/vote-kuchikomi-id-(\d+)/) || [0,0] )[1],
                        self    = ld_gourmet( this ).find("img");
                    ld_gourmet.post("/internal_api/evaluation/vote", {
                        eval_id : eval_id
                    }, function (json) {
                        eval("var res = " + json);
                        if ( res.is_success ) {
                            self.attr("src", "/img/cmn/btn_entry_kuchikomi_disable.gif");
                            ld_gourmet("#vote-kuchikomi-id-" + res.evalation_id + "-target")
                                .text(res.vote_count + "点");
                        } else {
                            if ( res.status == "interrupted" ) {
                                lightbox.show(function () {
                                    ld_gourmet("#lightbox-error-msg").html( "<p>ただ今投票できません。</p><br />しばらくしてから再投票してください。" );
                                });
                            } else {
			        showAuthorizeErrorBox(res);
                            }
			}
                    });
                });
                /*
                    vote-image
                */
                ld_gourmet(".gourmet-vote-image-button").one("click", function () {
                    var file_id = ( this.className.match(/vote-image-id-(\d+)/) || [0,0] )[1],
                        self    = ld_gourmet( this );
                    ld_gourmet.post("/internal_api/photos/vote", {
                        file_id : file_id
                    }, function (json) {
                       eval("var res = " + json);
                       if ( res.is_success ) {
                          self.attr("src", /\/detail\//.test( location.pathname ) ? "/img/cmn/btn_entry_photo_disable.gif" : "/img/cmn/btn_entry_disable.gif");
                          ld_gourmet("#vote-image-id-" + res.file_id + "-target")
                              .text(res.vote_count + "点");
                       } else {
                           if ( res.status == "interrupted" ) {
                               lightbox.show(function () {
                                   ld_gourmet("#lightbox-error-msg").html( "<p>ただ今投票できません。</p><br />しばらくしてから再投票してください。" );
                               });
                           } else {
			       showAuthorizeErrorBox(res);
                           }
                       }
                    });
                });
                /*
                    lightbox
                */
                var lightbox = new Lightbox('lightbox_contents');
                ld_gourmet(".gourmet-add-menu-button").bind("click", function () {
                    lightbox.show(function () {
                        gid("lightbox-error-msg") && ld_gourmet("#lightbox-error-msg").html( "<p>投票するにはログインしている必要があります</p>livedoorIDをお持ちの方 > <a href='/login?.next={0}'>ログインする</a><br /><br />livedoorIDをお持ちでない方 > <a href='http://member.livedoor.com/register/email?.next={0}&.sv=gourmet'>新規登録</a>".format( encodeURIComponent( location.href ) ) );
                    });
                });
                ld_gourmet("#add-menu-close-button, #lightbox-close-button").bind("click", function () {
                    lightbox.hide();
                });
                ld_gourmet("#add-menu-form").submit(function () {
                    var param = {
                        name    : ld_gourmet("#add-menu-name").val(),
                        price   : ld_gourmet("#add-menu-price").val(),
                        item_id : ld_gourmet("#item_id").val()
                    };

                    if ( !param.name ) {
                        ld_gourmet("#add-menu-error-box").html("メニュー名を追加してください");
                        return ld_gourmet("#add-menu-name").focus() && false;
                    } else if ( param.price && !/^(\d+)$/.test( param.price ) ) {
                        ld_gourmet("#add-menu-error-box").html("金額は半角のみで入力してください");
                        return ld_gourmet("#add-menu-price").focus() && false;
                    }

            if ( confirm( 'メニュー"{0}"を{1}追加します'.format( param.name, param.price?param.price+"円で":"") ) ) {
                        ld_gourmet.post("/internal_api/menu/register", param, function ( json ) {
                            eval("var res = " + json);
                            if ( res.is_success ) {
                                if ( !( ld_gourmet("#add-menu-list").size() ) )
                                    return location.reload();
                                param.price && ( param.price += "円" );
                                ld_gourmet("#add-menu-list").prepend( '<dl class="shop-menu line"><dt><a class="shop-menu-title" title="" href="/restaurant/{0}/menu/detail/{1}/">{2}</a></dt><dd><p>{3}</p><ul class="photo"></ul></dd></dl>'.format(ld_gourmet('#item_id').val(), res.menu_id, param.name, param.price) );
                                ld_gourmet("#add-menu-name, #add-menu-price").val("");
                                ld_gourmet("#add-menu-close-button").click();
                            } else {
                                var message = {
                                    "error.unauthentication" : "ログイン状態でないとメニューを追加することはできません"
                                }[ res.code ] || "メニュー追加ができませんでした。項目の内容をご確認ください。";
                                ld_gourmet("#add-menu-error-box").html( message );
                            }
                        });  
            }
                    return false;
                });

                // blog
                ld_gourmet("#restaurant-toggle-blog-parts-button").click(function () {
                    if (/非表示/.test( ld_gourmet( this ).html() )) {
                        ld_gourmet("#restaurant-toggle-blog-parts").slideUp("normal");
                        ld_gourmet("#restaurant-toggle-blog-parts-button").text("表示");
                    } else {
                        ld_gourmet("#restaurant-toggle-blog-parts").slideDown("normal");
                        ld_gourmet("#restaurant-toggle-blog-parts-button").text("非表示");
                    }
                });

                // image hover
                ld_gourmet("#restaurant-hover-img-thumb img").bind("mouseover", function () {
                    var this_img = ld_gourmet(this);
                    var img_src = this_img.attr('src');
                    img_src = img_src.replace(/xs\./, "l.");
                    var a = ld_gourmet("#restaurant-hover-img-main img").attr("src", img_src).attr("alt", this_img.attr('alt')).parent();
                    a.attr("href", this_img.parent().attr("href")).attr("title", this_img.parent().attr("title"));
                });

                //
                var loading = false;
                ld_gourmet("form.gourmet-favorite-add-form").bind("submit", function () {
                    var src      = ld_gourmet( this ).find("img").attr("src"),
                        is_entry = src.indexOf('_entry_') != -1,
                        is_fix   = src.indexOf("_fix_shop") != -1,
                        api      = is_entry ? "/internal_api/favorite/add" : "/internal_api/favorite/delete",
                        data     = {},
                        self     = ld_gourmet( this );

                    if ( is_fix || loading ) return false;
                    loading = true;

                    ld_gourmet( this ).find(":input[name]").each(function (i,o) {
                        data[ o.name ] = o.value;
                    });
                    ld_gourmet.post(api, data, function (json) {
                        eval("var res = " + json);
                        if ( res.is_success ) {
                            ld_gourmet("form.gourmet-favorite-add-form").find("img").each(function (i, img) {
                                img.src = img.src.replace("_shop", "_fix_shop");
                            });
                            self.unbind("submit").bind("submit", function () { return false; });
                        } else {
                            showAuthorizeErrorBox(res);
                        }
                        loading = false;
                    });
                    return false;
                });

                // 
                ld_gourmet("form.gourmet_favorite_add_form").each(function () {
                    ld_gourmet( this ).bind("submit", function () {
                        var data = {},
                        img  = ld_gourmet(':image', this),
                        self = this;
                        ld_gourmet( this ).find(":input[name]").each(function (i,o) {
                            data[ o.name ] = o.value;
                        });
                        ld_gourmet.post("/internal_api/favorite/add", data, function (json) {
                            eval('var res = ' + json);
                            if ( res.is_success ) {
                               img.attr("src", "/img/cmn/btn_entry_user_disable.gif");
                               j$( self ).unbind('submit');
                            } else {
                               showAuthorizeErrorBox(res);
                            }
                        });
                        return false;
                    });
                });             

                // 
                ld_gourmet('.comment-title', gid('main')).hover(
                    function(){ld_gourmet( this ).addClass('highlight');},
                    function(){ld_gourmet( this ).removeClass('highlight');}
                );
            }
        },
        {   
            regex : /^(\/member\/blog_entry\/pre_entry)$/,
            handler : function () {
                ld_gourmet.each({
                    "star_total"            : "total",
                    "star_food"             : "food",
                    "star_service"          : "service",
                    "star_atmosphere"       : "atmosphere",
                    "star_cost_performance" : "cost_performance"
                }, function (i,o) {
                    ld_gourmet("#" + i).rating(o, {
                        maxvalue : 5,
                        curvalue : ( gid( i ).className.match(/\d+/) || [0] )[0],
                        hidden   : 1
                    });
                });
            }
        },
        {
            regex : /^(\/member\/evaluation\/edit_step1)$/,
            // regex : /^(\/member\/evaluation\/edit_step1|\/member\/my_page\/drafts\/edit)$/,
            // regex : /^(\/member\/evaluation\/edit_step1|\/member\/my_page\/drafts\/edit|\/member\/my_page\/drafts_new\/edit)$/,
            handler : function () {
                /*
                    step1
                */
                ld_gourmet.each({
                    "star_total"            : "total",
                    "star_food"             : "food",
                    "star_service"          : "service",
                    "star_atmosphere"       : "atmosphere",
                    "star_cost_performance" : "cost_performance"
                }, function (i,o) {
                    ld_gourmet("#" + i).rating(o, {
                        maxvalue : 5,
                        curvalue : ( gid( i ).className.match(/\d+/) || [0] )[0],
                        hidden   : 1
                    });
                });
                /*
                    step2
                */
                var jobTimeItems = ld_gourmet(".jobTimeItemList");
                ld_gourmet(".gourmet-jobtime-flag").each(function (i,o) {
                    ld_gourmet( this ).click(function () {
                        ld_gourmet( jobTimeItems.get(i) ).toggle();
                    });
                });
                /*
                    step3
                */
                var max = ld_gourmet("#photos-kuchitomi dl").size() - 1;
                ld_gourmet("#add-photo-button").bind("click", function () {
                      var size = ld_gourmet("#photos-kuchitomi dl:visible").size();
                      ld_gourmet("#photos-kuchitomi dl:eq(" + size + ")").show();
                      if ( size == max )
                         ld_gourmet("#add-photo-button").parent().remove();
                });
                ld_gourmet(".gourmet-photo-kuchikomi-selects").each(function (i,o) {
                      var div = ld_gourmet( this ).nextAll();
                      var sel = ld_gourmet( this ).find("select");
                      sel.bind("change", function () {
		          ( ld_gourmet( this ).val() == 1 ) ? div.show() : div.hide();
                      }).bind("keyup", function () {
		          ( ld_gourmet( this ).val() == 1 ) ? div.show() : div.hide();
		      });
                      if ( sel.val() == 1 )
                          div.show();
	              else
			  div.hide();
                });
                /*
                    tagsuggest
                */
                ld_gourmet.getScript("/js/library/tagsuggest.js", function () {
                    var tid = setInterval(function () {
                        if ( suggest_init ) {
                           clearInterval( tid );
                           suggest_init();
                        }
                    }, 10);
                });
                /*
                    tagdelete
                */
                ld_gourmet("a[class^=gourmet-kuchikomi-tag-delete-]", gid("main")).each(function () {
                    var n    = +( this.className.match(/\d+/) ),
                        self = ld_gourmet( this );
                    ld_gourmet( this ).bind("click", function () {
                        if ( confirm("本当に削除しますか？") ) {
                            ld_gourmet.post("/internal_api/tag/delete", {
                                type : "comment",
                                tag_id : n
                            }, function (json) {
                                eval("var res = " + json);
                                if ( res.is_success ) {
                                    self.remove();
                                }
                            });
                        }
                    });
                });

                /*
                    lightbox
                */
                var lightbox = new Lightbox('lightbox_contents', 'add-menu-close-button');
                ld_gourmet("#add-menu-button").bind("click", function () {
                    lightbox.show();
                });
                ld_gourmet("#add-menu-form").submit(function () {
                    var param = {
                        name    : ld_gourmet("#add-menu-name").val(),
                        price   : ld_gourmet("#add-menu-price").val(),
                        item_id : ld_gourmet("#item_id").val()
                    };

                    if ( !param.name ) {
                        ld_gourmet("#add-menu-error-box").html("メニュー名を追加してください");
                        return ld_gourmet("#add-menu-name").focus() && false;
                    } else if ( param.price && !/^(\d+)$/.test( param.price ) ) {
                        ld_gourmet("#add-menu-error-box").html("金額は半角のみで入力してください");
                        return ld_gourmet("#add-menu-price").focus() && false;
                    }

                    if ( confirm( 'メニュー"{0}"を{1}追加します'.format( param.name, param.price?param.price+"円で":"") ) ) {
                    	ld_gourmet.post("/internal_api/menu/register", param, function ( json ) {
                    	    eval("var res = " + json);
                    	    if ( res.is_success ) {
                    	        param.price && ( param.price += "円" );

                    	        var menu = ld_gourmet( '<li class="clearfix"><input id="menu{0}" type="checkbox" value="{0}" name="menu" checked /><label for="menu{0}">{1}</label><span>{2}</span></li>'.format(res.menu_id, param.name, param.price) );
                    	        ld_gourmet("#add-menu-list").append( menu );
		    		    if ( ld_gourmet("#add-menu-list-outer").hasClass('menuBoxHide') )
		    		       ld_gourmet("#add-menu-list-outer").removeClass('menuBoxHide');
                    	        ld_gourmet("#add-menu-name, #add-menu-price").val("");
                    	        ld_gourmet("#add-menu-close-button").click();
                    	    } else {
                    	        var message = {
                    	            "error.unauthentication" : "ログイン状態でないとメニューを追加することはできません"
                    	        }[ res.code ] || "メニュー追加ができませんでした。項目の内容をご確認ください。";
                    	        ld_gourmet("#add-menu-error-box").html( message );
                    	    }
                    	});  
                    }
                    return false;
                });
                /*
                  文字数チェック
                */
                var counter = new byteCounter(60);
                counter.dispatch('comment');
            }
        },
        {
            regex : /^(\/member\/my_page\/config\/(index)?)$/,
            handler : function () {
                 // lightbox
                 var lightbox = new Lightbox('lightbox_contents');
                 ld_gourmet("a.gourmet-add-menu-button", gid("main")).bind("click", function () {
                     lightbox.show(function () {
                         ld_gourmet('select#whole-country', gid('lightbox_contents')).css('visibility', 'visible');
                     });
                 });
                 ld_gourmet("#add-menu-close-button, #lightbox-close-button").bind("click", function () {
                     lightbox.hide();
                 });
                 // set activity area.
                 ld_gourmet.post('/internal_api/area/list_all', function (json) {
                     eval('var data = ' + json);
                     var areas = data.areas, current = [], current_area = [], checked = "", disabled = "";
                     ld_gourmet("#activity_area_box :hidden").each(function (i,o) {
                          current.push( o.value );
                          current_area.push( o.title );
                     });
                     ld_gourmet('#whole-country').bind('change', function () {
                         var is_max = current.length == 5;
                         var output = this.value ? ld_gourmet.map( areas[ 'pref_' + this.value ], function (o,i) {
                                 checked  = ld_gourmet.inArray(o.id, current) != -1 ? "checked" : "";
                                 disabled = is_max && !checked ? 'disabled' : '' ;
                                 return '<li><input type="checkbox" value="{0}" id="area-id-{0}" title="{1}" {2} {3} /><label for="area-id-{0}">{1}</label></li>'.format(o.id, o.label, checked, disabled);
                             }).join("") : "";
                         ld_gourmet("#area_id").html( "<ul class='areaList' id='areaList'>" + output + "</ul>" );
                     }).bind('keyup', function () {
                         ld_gourmet( this ).trigger('change');
                     })
                     ld_gourmet("div#area_id input:checkbox").live("click", function () {
                         var idx = current.indexOf(this.value);
                         this.checked ? current.push( this.value ) : current.splice(idx,1);
                         this.checked ? current_area.push( this.title ) : current_area.splice(idx,1);
                         ld_gourmet("#activity_area_box").html( "<ul class='areaList'>" + ld_gourmet.map(current, function (o,i) {
                             return '<li><input type="hidden" value="{0}" name="activity_area" title="{1}">{1}</li>'.format(o, current_area[i]);
                         }).join("") + "</ul>" );

                         ld_gourmet("#areaList input:checkbox").filter(":not(:checked)").attr('disabled', current.length == 5 );
                         // ld_gourmet("#add-menu-close-button").attr("disabled", current_area.length == 5 );
                         ld_gourmet("#activity-area-error-box").html( current.length == 5 ? "活動エリアは5個以上選択できません" : "" );
                     });
                     // ld_gourmet("#add-menu-close-button").attr("disabled", current_area.length == 5 );
                     ld_gourmet("#activity-area-error-box").html( current_area.length == 5 ? "活動エリアは5個以上選択できません" : "" );
                 });
            }
        },
        {
            regex : /^(\/user\/.*)$/,
            handler : function () {
                var lightbox = new Lightbox('lightbox_contents');
                ld_gourmet("#add-menu-close-button, #lightbox-close-button").bind("click", function () {
                    lightbox.hide();
                });
                ld_gourmet("#favorite_add_form").bind("click", function () {
                    var data = {},
                        img  = ld_gourmet( this ).find(":image"),
                        self = ld_gourmet( this );
                    ld_gourmet(":input[name]", this).each(function (i,o) {
                        data[ o.name ] = o.value;
                    });
                    ld_gourmet.post("/internal_api/favorite/add", data, function ( json ) {
                        eval("var res = " + json);
                        if ( res.is_success ) {
                           img.attr("src", "/img/userguide/btn_favorite_off.gif");
                           self.unbind("click").bind("submit", function () {
                               return false;
                           });
                        } else {
                           if ( res.code == 'error.unauthentication' )
                               showAuthorizeErrorBox(res);
                        }
                    });     
                    return false;
                });
                ld_gourmet("#address_add_form").bind("submit", function () {
                    var ldid = ld_gourmet("[name='livedoor_id']", this).val(),
                    self = this;
                    ld_gourmet.post("/internal_api/address/add", {
                        livedoor_id : ldid
                    }, function (json) {
                        eval("var res = " + json);
                        if ( res.is_success ) {
                            ld_gourmet(":image", self).attr("src", "/img/userguide/btn_address_off.gif");
                        } else {
                            if ( res.code == 'error.unauthentication' )
                                showAuthorizeErrorBox(res);
                        }
                    });
                    return false;
                });
                if ( location.pathname.match(/\/evaluation\//) || location.pathname.match(/\/restaurant\//) ) {
                    // seach
                    var search_body = ld_gourmet("#searchBody"),
                    toggle_image  = ld_gourmet("#toggle-search-image");
                    ld_gourmet("#toggle-search span").bind("click", function () {
                        if ( search_body.css("display") == "none" ) {
                            // search_body.slideDown('normal');
                            search_body.show();
                            // this.innerHTML = '非表示';
                            toggle_image.attr('src', '/img/cmn/side/b_open.gif');
                        } else {
                            // search_body.slideUp('normal');
                            search_body.hide();
                            // this.innerHTML = '表示';
                            toggle_image.attr('src', '/img/cmn/side/b_close.gif');
                        }
                    });
                    toggle_image.bind('click', function () {
                        ld_gourmet("#toggle-search span").trigger('click');
                    });
                }
                if ( location.pathname.match(/\/photo\//) ) {
                      /*
                          vote-image
                      */
                      ld_gourmet(".gourmet-vote-image-button", gid("main")).one("click", function () {
                          var file_id = ( this.className.match(/vote-image-id-(\d+)/) || [0,0] )[1],
                              self    = ld_gourmet( this );
                          ld_gourmet.post("/internal_api/photos/vote", {
                              file_id : file_id
                          }, function (json) {
                             eval("var res = " + json);
                             if ( res.is_success ) {
                                self.attr("src", /\/detail\//.test( location.pathname )
                                    ? "/img/cmn/btn_entry_photo_disable.gif"
                                    : "/img/cmn/btn_entry_disable.gif");
                                var target = ld_gourmet("#vote-image-id-" + res.file_id + "-target");
                                target.text(res.vote_count + "点");
                                target[ (res.vote_count==0?'add':'remove') + 'Class' ]('nopoint');
                             } else {
                                 if ( res.status == "interrupted" ) {
                                     lightbox.show(function () {
                                         ld_gourmet("#lightbox-error-msg").html( "<p>ただ今投票できません。</p><br />しばらくしてから再投票してください。" );
                                     });
                                 } else {
                                   showAuthorizeErrorBox(res);
                               }
                           }
                        });
                    });
                }
                else if ( location.pathname.match(/\/evaluation\//) ) {
                    ld_gourmet(".gourmet-vote-kuchikomi-button", gid("main")).one("click", function () {
                        var eval_id = ( this.className.match(/vote-kuchikomi-id-(\d+)/) || [0,0] )[1],
                            self    = ld_gourmet( this ).find("img");
                        ld_gourmet.post("/internal_api/evaluation/vote", {
                            eval_id : eval_id
                        }, function (json) {
                            eval("var res = " + json);
                            if ( res.is_success ) {
                                self.attr("src", "/img/cmn/btn_entry_kuchikomi_disable.gif");
                                ld_gourmet("#vote-kuchikomi-id-" + res.evalation_id + "-target")
                                    .text(res.vote_count + "点");
                            } else {
                                if ( res.status == "interrupted" ) {
                                    lightbox.show(function () {
                                        ld_gourmet("#lightbox-error-msg").html( "<p>ただ今投票できません。</p><br />しばらくしてから再投票してください。" );
                                    });
                                } else {
                                    showAuthorizeErrorBox(res);
                                }
                            }
                        });
                    });

                    // comment
                    ld_gourmet("[id^=toggle-comment-]").bind("click", function () {
                        var order = this.id.match(/toggle-comment-(\d+)/)
                                    || this.id.match(/toggle-comment-date-(\d+)/)
                                    || this.id.match(/toggle-comment-under-(\d+)/);
                        var num = order ? order[1] : 0;
                        var comment_body = ld_gourmet(".comment-body-" + num),
                        toggle_comment_image = ld_gourmet("#toggle-comment-image-" + num),
                        toggle_comment_date = ld_gourmet("#toggle-comment-date-" + num);

                        var switch_text = toggle_comment_date.attr('switchTo'),
                            current_text = toggle_comment_date.text();
                        toggle_comment_date.attr('switchTo', current_text);
                        toggle_comment_date.text(switch_text);

                        if ( comment_body.css("display") == "none" ) {
                            // comment_body.slideDown('normal');
                            comment_body.show();
                            toggle_comment_image.attr('src', '/img/cmn/side/b_open.gif');
                        } else {
                            // comment_body.slideUp('normal');
                            comment_body.hide();
                            toggle_comment_image.attr('src', '/img/cmn/side/b_close.gif');
                        }
                    });
                }
            }
        },
        {
            regex : /^(\/special\/\d+\/.*)$/,
            handler : function () {
                  var lightbox = new Lightbox('lightbox_contents', 'lightbox-close-button');
                  ld_gourmet("[id^=special-button-]", gid("specialHeader")).one("click", function () {
                      var info = this.id.match(/special-button-(.*?)-(\d+)/);
                      var self = this;
                      ld_gourmet.post("/internal_api/special/{0}".format(info[1]), {
                          special_id : info[2]
                      }, function (json) {
                          eval("var res = " + json);
                          if ( res.is_success ) {
                              self.src = self.src.replace(/(\.gif)/, "_disable$1");
                          } else {
                              if ( res.code == "error.unauthentication" )
                                  lightbox.show(function () {
                                      ld_gourmet('#lightbox-error-msg').html( '<p>{0}にはログインしている必要があります</p><a href="/login?.next={1}">ログインする</a><br /><br />livedoorIDをお持ちでない方 > <a href="http://member.livedoor.com/register/email?.next={1}&.sv=gourmet">新規登録</a>'.format( info[1] == 'vote' ? "投票する" : "読者になる", encodeURIComponent( location.href ) ) );
                                  });
                          }
                      });
                  });
            }
        },
    	{
	    regex : /^(\/member\/)(photo|evaluation)\/((step2|edit_step2))$/,
	    handler : function () {
                 var lightbox = new Lightbox('lightbox_contents', 'lightbox-close-button-2');
                 var menu_id;
                 ld_gourmet("#upload_form a[id^='menu-button-']").bind("click", function () {
                     lightbox.show(function () {
                         ld_gourmet("#error-box").empty();
                     });
                 });
                 ld_gourmet("#upload_form select[name^='file_category_']").bind('change keyup', function () {
                     menu_id = this.name.replace("file_category_", "");
                     if ( this.value == 1 ) return ld_gourmet('#menu-button-' + menu_id).show();
                     ld_gourmet('#menus-box-' + menu_id).empty();
                     ld_gourmet('#menu-button-' + menu_id).hide();
                     ld_gourmet('input[name="menu_id_{0}"], input[name="menu_id_label_{0}"]'.format(menu_id), gid("main")).val("");
		 });
                 ld_gourmet("#lightbox-close-button").bind("click", function () {
                      var menu = ld_gourmet(':radio[checked]', gid('menu-list'))[0];
                      if ( !menu ) return false;
                      ld_gourmet('input[name="menu_id_' + menu_id + '"]', gid('main')).val( menu.value );
                      ld_gourmet('input[name="menu_id_label_' + menu_id + '"]', gid('main')).val( menu.title );
                      ld_gourmet('#menus-box-'+menu_id).html( menu.title + "&nbsp;[<a href='javascript:void(0)' onclick='ld_gourmet(\"#menu-button-"+menu_id+"\").click()'>変更</a>]" );
                      lightbox.hide();
                 });
                 ld_gourmet("#add-menu-button").bind("click", function () {
                      var data = {
                          name:    ld_gourmet("#name").val(),
                          price:   ld_gourmet("#price").val(),
                          item_id: ld_gourmet("#item_id").val()
                      };
                      if ( !data.name ) {
                          ld_gourmet("#error-box").text("メニュー名を入力してください");
                          return ld_gourmet("#name").focus();
                      } else if ( !/^([0-9]+)$/.test( data.price ) ) {
                          ld_gourmet("#error-box").text("金額は数値で入力してください");
                          return ld_gourmet("#price").focus();
                      } else {
                          ld_gourmet.post('/internal_api/menu/register', data, function (json) {
                              eval('var res =' + json);
                              if ( res.menu_id ) {
                              	  ld_gourmet("#name, #price").val("");
                              	  ld_gourmet("#error-box").text("追加しました");
                              	  ld_gourmet('<li><input name="menu-detail" type="radio" value="{0}" title="{1} {2}" id="menu-{0}"><label for="menu-{0}">{1} {2}</label></li>'.format(res.menu_id, data.name, data.price ? data.price+"円" : "")).prependTo( ld_gourmet('#menu-list') );
                              } else {
                                  ld_gourmet("#error-box").text("メニューの追加に失敗しました");
                              }
                          });
                      }
                 });
	    }
    	},
    	{
	    regex : /^(\/member\/my_page\/photos\/.*)$/,
	    handler : function () {
                var phototable = gid("phototable"),
                    lightbox   = new Lightbox('lightbox_contents', 'lightbox-close-button-2');
                ld_gourmet(".modify-user-photos", phototable).each(function () {
                    var self = this;
                    ld_gourmet(':button', this).bind("click", function () {
		        var button = ld_gourmet( this ).attr({
		            value    : '  変更しています...  ',
		            disabled : true
		        }), file_id = this.name, data = {
                            file_id: file_id,
                            caption: ld_gourmet("[name='caption']", self).val(),
                            file_category: ld_gourmet("[name='file_category_" + file_id + "']", self).val(),
                            menu_id: ld_gourmet("[name='menu_id']", self).val(),
                            item_id: ld_gourmet("[name='item_id']", self).val()
                        };
                        ld_gourmet.post('/internal_api/photos/modify', data, function (json) {
                            eval('var res = ' + json);
                            if ( !res.is_success ){ ld_gourmet("#modify-user-photos-status-" + file_id).text("更新に失敗しました"); }
                            setTimeout(function () {
                                button.attr({
                                    value    : '  変更  ',
                                    disabled : false
                                });
                            }, 1000);
                        });
                    });
                    ld_gourmet("a[id^='menu-button-']", this).bind('click', function () {
                        this.blur();
                        lightbox.show(function () {
                            ld_gourmet("#error-box").empty();
                            ld_gourmet("#menu-list").html(ld_gourmet( "#menu-list-{0}".format( gid('active-menu-id').value ) ).html());
                        });
                    });
                    ld_gourmet("select", this).bind("change keyup", function () {
			var id = this.name.replace("file_category_", "");
			ld_gourmet("#active-menu-id").val( id );
		        if ( this.value != 1 ) {
			    ld_gourmet("#menus-box-{0}".format( id )).empty();
			    ld_gourmet("#menu-button-{0}".format(id)).hide();
			    ld_gourmet("input[name='menu_id_{0}'], input[name='menu_id_label_{0}']".format(id), self);
			} else {
			    ld_gourmet("#menu-button-{0}".format(id)).show();
			}
                    });
                });
                ld_gourmet("#lightbox-close-button").bind("click", function () {
                    var menu_id = ld_gourmet("#active-menu-id").val();
                    var menu = ld_gourmet("#menu-list :radio[checked]")[0];
                    if ( !menu ) return false;
                    ld_gourmet("#menu_id_"+menu_id).val( menu.value );
                    ld_gourmet("#menu_id_label_"+menu_id).val( menu.title );
                    ld_gourmet("#menus-box-"+menu_id).html( menu.title + "&nbsp;[ <a href='javascript:void(0)' onclick='ld_gourmet(\"#menu-button-{0}\").click()'>変更</a> ]".format( menu_id ) );
                    lightbox.hide();
                });
		ld_gourmet("#add-menu-button").bind("click", function () {
		    var name    = ld_gourmet("#name").val(),
		        price   = ld_gourmet("#price").val(),
		        item_id = ld_gourmet("#item_id_{0}".format( ld_gourmet("#active-menu-id").val() )).val();
		    if ( !name ) {
		        ld_gourmet("#error-box").text("メニュー名を入力してください");
		        ld_gourmet("#name", this).focus();
		        return false;
		    } else if ( /[^0-9]/.test(price) ) {
		        ld_gourmet("#error-box").text("金額は数値で入力してください");
		        ld_gourmet("#price", this).focus();
		        return false;
		    }
		    ld_gourmet.post('/internal_api/menu/register', {
		        name : name,
		        price : price,
		        item_id : item_id
		    }, function (json) {
		        eval('var res = ' + json);
		        if ( res.menu_id != null ) {
                            ld_gourmet("#name, #price").val("");
		            ld_gourmet("#error-box").text("追加しました");
                            ld_gourmet('<li><input name="menu-detail" type="radio" value="{0}" title="{1} {2}" id="menu-{0}"><label for="menu-{0}">{1} {2}</label></li>'.format(res.menu_id, name, price ? price+"円" : "")).prependTo( ld_gourmet('#menu-list') );
		        } else {
		            ld_gourmet("#error-box").text("メニューの追加に失敗しました");
		        }
		    });
		});
		ld_gourmet("#phototable img").bind("click", function () {
		    ld_gourmet("#delete_file_checkbox_" + this.id.match(/\d+/)[0]).click();
		});
		ld_gourmet("#phototable :checkbox").bind('click', function () {
		      ld_gourmet("#"+this.value).toggleClass("modify-user-photos-delete");
		});
		ld_gourmet("#all-select, #all-noselect").bind('click', function () {
		      var state = this.id.indexOf('-select') != -1;
		      ld_gourmet("#phototable :checkbox").attr('checked', state);
		      var photos = ld_gourmet("table#phototable td.modify-user-photos");
		      state ? photos.addClass("modify-user-photos-delete") : photos.removeClass("modify-user-photos-delete");
		});
            }
        }  
    ], function (page) {
         return page.regex.test( location.pathname );
    }).shift() || {
         handler : function () {},
         summary : ""
    };
    page.handler.apply(this);

    var adver = new lazy_advertiser;

    // google analytics
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    adver.regist('google_analytics', gaJsHost + 'google-analytics.com/ga.js', function () {
         var tid = setInterval(function () {
	     if ( typeof _gat != 'undefined' ) {
	         clearInterval( tid );
		 tid = null;
       	 	 var pageTracker = _gat._getTracker("UA-1661457-30");
       	 	 pageTracker._initData();
       	 	 pageTracker._trackPageview();
	     }
	 }, 20);
    });

    // ad4u analyzer
    // adver.regist('ad4u_analizer', 'http://ad4u.drecom.jp/delivery/script/94.js?1219137026');

    // ad4u
    // adver.regist('headerBanner', 'http://image.click.livedoor.com/ad4u/delivery/script/109.js');
    // adver.regist('headerBanner', 'http://image.adv.livedoor.com/ad4u/delivery/script/109.js');

    // yahoo
    // adver.regist('sidepr', '/js/yahoo_ppc.js');

    // flash advertise
    adver.write();
});

/* =====================
  load startup plugins
===================== */

jQuery.cookie=function(b,j,m){if(typeof j!="undefined"){m=m||{};if(j===null){j="";m.expires=-1}var e="";if(m.expires&&(typeof m.expires=="number"||m.expires.toUTCString)){var f;if(typeof m.expires=="number"){f=new Date();f.setTime(f.getTime()+(m.expires*24*60*60*1000))}else{f=m.expires}e="; expires="+f.toUTCString()}var l=m.path?"; path="+m.path:"";var g=m.domain?"; domain="+m.domain:"";var a=m.secure?"; secure":"";document.cookie=[b,"=",encodeURIComponent(j),e,l,g,a].join("")}else{var d=null;if(document.cookie&&document.cookie!=""){var k=document.cookie.split(";");for(var h=0;h<k.length;h++){var c=jQuery.trim(k[h]);if(c.substring(0,b.length+1)==(b+"=")){d=decodeURIComponent(c.substring(b.length+1));break}}}return d}};jQuery.fastTabs=function(b){var b=jQuery.extend({tabs:[],callback:undefined,initialize_index:0,tab_on_class_name:"on",effect:null},b),d=undefined,c=undefined,a=this;if(b.initialize_index!=0){jQuery(b.tabs[0].target).css("display","none")}return b.tabs.length&&jQuery.each(b.tabs,function(f,g){var h=jQuery(g.selector),e=jQuery(g.target);h.size()&&e.size()&&h.bind("click",function(){d&&d.hide(b.effect);c&&c.removeClass(b.tab_on_class_name);d=e.show(b.effect);c=h.addClass(b.tab_on_class_name);if(typeof b.callback=="function"){b.callback.call(a,h,e,f)}})})&&jQuery(b.tabs[b.tabs[b.initialize_index]?b.initialize_index:0].selector).click()};function colorToHex(a){if(!Array.prototype.map){Array.prototype.map=function(c){for(var e=0,b=this.length,d=[];e<b;e++){d[e]=c.call(null,this[e],e)}return d}}return/^rgb/.test(a)?"#"+a.match(/\d+/g).map(function(b){b=parseInt(b);return((b>>4?"":0)+b.toString(16)).toUpperCase()}).join(""):a.toUpperCase()}jQuery.fn.fillinMsg=function(c,a,b){var a=a||"#AAAAAA",b=b||"black";return jQuery(this).each(function(){jQuery(this).focus(function(){if(jQuery(this).attr("value")==c){jQuery(this).val("").css("color",b.toUpperCase())}}).blur(function(){if(jQuery(this).val()==""){jQuery(this).val(c).css("color",a.toUpperCase())}});if(jQuery(this).val()==""){jQuery(this).val(c).css("color",a.toUpperCase())}jQuery.clearSubmitAction.apply(this)})};jQuery.clearSubmitAction=function(){var a=jQuery(this),b=jQuery(this).parent();while(b){b.each(function(d,c){if(c.tagName=="FORM"){b.submit(function(){a.focus()});b=null}else{if(c.tagName=="HTML"||c.tagName=="BODY"||!c.tagName){b=null}else{b=b.parent()}}})}};jQuery.fn.rating=function(c,l){if(c==null){return}var f={url:c,increment:1,maxvalue:5,curvalue:0,hidden:0};if(l){jQuery.extend(f,l)}jQuery.extend(f,{cancel:(f.maxvalue>1)?true:false});var d=jQuery(this);jQuery.extend(d,{averageRating:f.curvalue,url:f.url});f.increment=(f.increment<0.75)?0.5:1;var k=0;for(var g=0;g<=f.maxvalue;g++){if(g==0){if(f.cancel==true){var b='<div class="cancel"><a href="#0" title="Cancel Rating">Cancel Rating</a></div>';d.append(b)}}else{var h=jQuery('<div class="star"></div>').append('<a href="#'+g+'" title="Give it '+g+"/"+f.maxvalue+'">'+g+"</a>").appendTo(d);if(f.increment==0.5){if(k%2){h.addClass("star-left")}else{h.addClass("star-right")}}}g=g-1+f.increment;k++}var e=jQuery(d).children(".star");var j=jQuery(d).children(".cancel");e.mouseover(function(){a.drain();a.fill(this)}).mouseout(function(){a.drain();a.reset()}).focus(function(){a.drain();a.fill(this)}).blur(function(){a.drain();a.reset()});e.click(function(){if(f.cancel==true){f.curvalue=(e.index(this)*f.increment)+f.increment;if(f.hidden){jQuery("#"+f.url).val(jQuery(this).children("a")[0].href.split("#")[1])}else{jQuery.post(d.url,{rating:jQuery(this).children("a")[0].href.split("#")[1]})}return false}else{if(f.maxvalue==1){f.curvalue=(f.curvalue==0)?1:0;jQuery(this).toggleClass("on");if(f.hidden){jQuery("#"+f.url).val(jQuery(this).children("a")[0].href.split("#")[1])}else{jQuery.post(d.url,{rating:jQuery(this).children("a")[0].href.split("#")[1]})}return false}}return true});if(j){j.mouseover(function(){jQuery(this).addClass("on")}).mouseout(function(){jQuery(this).removeClass("on")}).focus(function(){jQuery(this).addClass("on")}).blur(function(){jQuery(this).removeClass("on")});j.click(function(){a.drain("cancel");d.averageRating=0;if(f.hidden){jQuery("#"+f.url).val(d.averageRating)}else{jQuery.post(d.url,{rating:jQuery(this).children("a")[0].href.split("#")[1]})}return false})}var a={fill:function(m){var i=e.index(m)+1;e.children("a").css("width","100%").end().slice(0,i).addClass("hover").end()},drain:function(i){if(i=="cancel"){e.filter(".on").removeClass("on").end().filter(".hover").removeClass("hover").end()}else{e.filter(".on").removeClass("on").end().filter(".hover").removeClass("hover").end()}},reset:function(){e.slice(0,f.curvalue/f.increment).addClass("on").end()}};a.reset();return(this)};
