/**
 * @fileOverview
 * @version 0.1
 */
//console.log('%c AMBASSADOR HOTELS&SUITES ', 'background:#c19b76;color:#fff;font-size:15px');

(function(global, AMB) {
    "use strict";

    /**
     * @name gnb
     * @param {object} params -
     * description : gnb, slideWing open
     */
    var gnb = {
        ui: {
            body: 'html',
            btnOpenWing: '#header .btn-wing-open',
            btnCloseWing: '#sideMenu .btn-wing-close',
            depth1: "#gnb>ul>li"
        },
        config: {
            isSubmenuShow: 'open',
            isWingOpen: 'is-wing-open noscroll'
        },
        showSubmenu: function(depth1, depth2) {
            depth1.addClass(this.config.isSubmenuShow);
            depth2.stop().slideDown();
        },
        hideSubmenu: function(depth1, depth2) {
            depth1.removeClass(this.config.isSubmenuShow);
            depth2.stop().slideUp();
        },
        showSidewing: function() {
            $(this.ui.body).addClass(this.config.isWingOpen);
        },
        hideSidewing: function() {
            $(this.ui.body).removeClass(this.config.isWingOpen);
        },
        init: function() {
            var that = this;

            $(this.ui.depth1).each(function(idx) {
                var $depth1 = $(that.ui.depth1).eq(idx),
                    $depth2;
                if ($depth1.is('.has-sub')) {

                    $depth2 = $depth1.find('ul');

                    $depth1.find('>a').on('click', function(e) {
                        if (!$depth1.is('.open')) {
                            that.showSubmenu($depth1, $depth2);
                        } else {
                            that.hideSubmenu($depth1, $depth2);
                        }
                        e.preventDefault();
                    });
                }
            });

            $(this.ui.btnOpenWing).on('click', function(e) {
                var winHeight = window.innerHeight,
                    infoLoginHeight = $('.info-login').outerHeight(true),
                    siteUtilHeight = $('.siteUtil').outerHeight(true),
                    footer2Height = $('#sideMenu #footer2').outerHeight(true),
                    minHeight = winHeight - infoLoginHeight - siteUtilHeight - footer2Height;

                $("#gnb").css({ 'min-height': minHeight + 'px' });
                that.showSidewing();
                e.preventDefault();
            });

            $(this.ui.btnCloseWing).on('click', function(e) {
                that.hideSidewing();
                e.preventDefault();
            });

            $('#sideMenu .mask').on('click touchstart', function(e){
                that.hideSidewing();
            });

            $('.barcode a').on('click', function(e) {
                $('.barcode-viewer').addClass('active');

                $('.barcode-viewer .dim').one('click', function() {
                    $('.barcode-viewer').removeClass('active');
                });
                e.preventDefault();
            });
        }
    };

    /**
     * @name AMB.modal
     * @param {object} params -
     * description : 레이어 가이드
     */
    var modal = {
      ui: {
        pop: '[class*="ui-modal"]',
        btnOpen: '[data-ui-modal-open]',
        btnClose: '[data-ui-modal-close]',
        exception: {
          zipcode: '#find-zipcode',
          ambbook: '#ambReservation'
        }
      },
      config: {
        openClass: 'show',
        scrollTop: 0
      },
      show: function(layerSrc){
        var source,
            $targetLayer,
            setCenter = this.setCenter,
            innerScroll = this.innerScroll,
            zipcode = this.ui.exception.zipcode,
            ambbook = this.ui.exception.ambbook;

        if(layerSrc){
            source = layerSrc;
            $targetLayer = $(source);
            showModal($targetLayer);
        }

        $(this.ui.btnOpen).click(function(e){
            source = $(this).data('ui-modal-open');
            $targetLayer = $(source);
            showModal($targetLayer);
            e.preventDefault();
        });

        function showModal(layer){
            layer.addClass('show');
            if(source == zipcode){
                $('.ui-modal').css({'overflow':'scroll'});
            } else{
                modal.config.scrollTop = $("body").scrollTop();
                $('html').addClass('noscroll');
                innerScroll(layer);
            }
            setCenter(layer);
        }

      },
      hide: function(layerSrc){
        var $ambbook = $(this.ui.exception.ambbook),
            source,
            $targetLayer;

        if(layerSrc){
            source = layerSrc;
            $targetLayer = $(source);
            hideModal();
        }

        $(this.ui.btnClose).click(function(e){
          source = $(this).data('ui-modal-close');
          $targetLayer = $(source);
          hideModal();
          e.preventDefault();
        });

        $.each($(this.ui.pop), function(){
            var $thisModal = $(this);
            $thisModal.find('.btn-ly-close').on('click', function(e){
                $thisModal.removeClass('show');
                 $('html').removeClass('noscroll');
                 $("html, body").animate({ scrollTop: modal.config.scrollTop }, 0);
            });
        });

        $ambbook.find('.btn-ly-close').on('click', function(e){
            $ambbook.removeClass('show');
            $('html').removeClass('noscroll');
            $("html, body").animate({ scrollTop: modal.config.scrollTop }, 0);
        });

        function hideModal(){
            $targetLayer.removeClass('show');
            $('html').removeClass('noscroll');
            $("html, body").animate({ scrollTop: modal.config.scrollTop }, 0);
        }
      },
      setCenter: function(layer) {
        var $layerBox = layer.find('.lybox'),
            $layerBody = layer.find('.layer'),
            winH = $(window).height(),
            layerH = $layerBody.outerHeight(true),
            posY = (winH-layerH)/2;

        if (winH > layerH+120) {
            $layerBox.css({paddingTop:posY});
        } else {
            $layerBox.css({paddingTop:60, paddingBottom:60});
        }
      },
      innerScroll: function(layer){
        var contentLayerH = layer.find('.lybox').innerHeight(),
            winH = $(window).height(),
            headH = layer.find('.modal-header').innerHeight() + 180;

        if(contentLayerH > winH){
            layer.find('.minner').css({height: (winH - headH) });
        }

      },
      init: function(){
        this.show();
        this.hide();
      }
    };
    AMB.modal = modal;


    /**
     * @name AMB.pushPop
     * @param {object} params -
     */
    var pushPop = {
        ui: {
            btnClose: '[data-close-popup]'
        },
        show: function(layer){
            $(layer).show();
        },
        hide: function(layer, timeout){
            if(timeout){
                setTimeout(function($layer){
                    $(layer).hide();
                }, timeout);
            } else{
                $(layer).hide();
            }
        },
        init: function(){
            var that = this;

            $(this.ui.btnClose).on('click', function(){
                var $closeTarget = $(this).data('close-popup');
                that.hide($closeTarget);
            });
        }
    };
    AMB.pushPop = pushPop;

    /**
     * @name AMB.carousel
     * @param {object} params -
     * description : 슬라이드 가이드
     */
    var carousel = {
        ui: {
            slider: '[data-ui-slider]'
        },
        params: {
            "case1": {
                autoplay: true,
                dots: false,
                infinite: false,
                slidesToShow: 1,
                slidesToScroll: 1,
                prevArrow: false,
                nextArrow: false,
                events: {
                    afterChange: function(event, slick, currentSlide) {
                        //
                    }
                }
            },
            "case2": {
                dots: false,
                infinite: true,
                slidesToShow: 1,
                slidesToScroll: 1,
                lazyLoad: 'ondemand',
                prevArrow: '<button type="button" class="slick-arrow btn-prev"><span class="ir">이전보기</span></button>',
                nextArrow: '<button type="button" class="slick-arrow btn-next"><span class="ir">다음보기</span></button>',
                events: {
                    init: function(event, slick, currentSlide) {
                        var _ = slick;
                        var iii, str;
                        if (_.$prevArrow || _.$nextArrow) {
                            var $wrap = $('<div class="btn-slider"></div>');
                            _.$list.after($wrap);
                            $wrap.append(_.$prevArrow, '<span class="ico-bar"></span>', _.$nextArrow);
                        }
                        iii = (currentSlide ? currentSlide : 0) + 1;
                        str = iii + '/' + slick.slideCount;
                        $wrap.append('<span class="nav">' + str + '</span>');
                    },
                    afterChange: function(event, slick, currentSlide) {
                        var iii, str;
                        iii = (currentSlide ? currentSlide : 0) + 1;
                        str = iii + '/' + slick.slideCount;
                        $('.ui-slider .nav').html(str);
                    }
                }
            },
            "case3": {
                dots: true,
                infinite: false,
                slidesToShow: 1,
                slidesToScroll: 1,
                prevArrow: '<button type="button" class="slick-arrow btn-prev"><span class="ir">이전보기</span></button>',
                nextArrow: '<button type="button" class="slick-arrow btn-next"><span class="ir">다음보기</span></button>'
            },
            "case4": {
                dots: true,
                infinite: false,
                slidesToShow: 1,
                slidesToScroll: 1,
                prevArrow: false,
                nextArrow: false
            },
           "case5": {
                dots: false,
                infinite: true,
                variableWidth: true,
                prevArrow: '<button type="button" class="slick-arrow btn-prev"><span class="ir">이전보기</span></button>',
                nextArrow: '<button type="button" class="slick-arrow btn-next"><span class="ir">다음보기</span></button>'
            },
            "case6": {
                autoplay: true,
                dots: false,
                infinite: false,
                draggable: false,
                swipe: false,
                touchMove: false,
                slidesToShow: 1,
                slidesToScroll: 1,
                prevArrow: false,
                nextArrow: false
            },
            "case7": {
                dots: false,
                speed: 150,
                infinite: false,
                slidesToShow: 1.5,
                prevArrow: false,
                nextArrow: false
            }
        },
        init: function(){
            var that = this;

            $.each($(that.ui.slider), function() {
                var $thisSlider = $(this),
                    sliderType = $thisSlider.data("ui-slider"),
                    type,
                    events;

                type = (sliderType in that.params) ? sliderType : "case3";

                events = that.params[type].events;

                if(events) {
                    for (var ii in events) {
                        $thisSlider.on(ii, events[ii]);
                    }
                }
                $thisSlider.slick(that.params[type]);

            });
        }
    };
    AMB.carousel = carousel;

    /**
    * @name loading
    * @param {object} params -
    * description : page loading spinner
    */
    var loading = {
        $obj : null, objhtml : '<span class="pageloading"><span><i class="ani"></i></span></span>',
        visible : function(){
            if(!this.$obj){
                this.$obj = $(this.objhtml);
                $("body").prepend(this.$obj);
            }
            this.$obj.addClass("visible");
        },
        hidden : function(){
            this.$obj.removeClass("visible");
        }
    };
    AMB.loading = loading;

    /**
    * @name AMB.menuSlider
    * @param {object} params -
    * description : 3depth menu slider
    */
    var menuSlider = {
      ui: {
        sliderBox: '[data-ui-slidermenu]',
      },
      prepareSlider: function(){
        var $sliderBox = $(this.ui.sliderBox),
            winW = $(window).width();

        wrapSliderBox();

        function wrapSliderBox(){
          var wrapper = '<div class="menuslider-wrap"><div class="inner"><div class="inbox"></div></div></div>';
          $sliderBox.wrap(wrapper);
        }
      },
      activeSlide: function(){
        var $wrapper = $(this.ui.wrapper);

        $.each($(this.ui.sliderBox), function(){
            var $thisMenuSlider = $(this);

            setActive($thisMenuSlider);
        });

        function setActive($slider){
            var $item = $slider.find('.item');
            var configSlider = $slider.data('ui-slidermenu');
            var activeSlide = configSlider.initialSlide;
            var deviceWidth = $(window).width();
            var activePosX;
            var activeSlideWidth;
            var w = 0;

            $.each($item, function(i){
                w += $item.eq(i).outerWidth(true);
                $slider.css({'width':w + 16});
            });

            $item.eq(activeSlide).addClass('active');

            activePosX = $item.eq(activeSlide).offset().left;
            activeSlideWidth = $item.eq(activeSlide).outerWidth(true);

            if(activePosX+activeSlideWidth > deviceWidth){
                $slider.closest('.inbox').animate({ scrollLeft: parseFloat((activePosX+activeSlideWidth)/2)}, 0);
            }
        }
      },
      init: function(){
        try{
          if(!$('[data-ui-slidermenu]')) throw error;
          this.prepareSlider();
          this.activeSlide();
        } catch(message){
        }
      }
    };
    AMB.menuSlider = menuSlider;

    /**
    * @name AMB.tabs
    * @param {object} params -
    * description : 공통 탭
    */
    var tabs = {
        ui: {
            tab: '[data-ui="tab"]',
            tabItem: '[data-ui-tab="tab"] .item',
            tabContent: '[data-ui-tab="content"]'
        },
        active: function($tab) {
            var that = this;

            $tab.find(that.ui.tabItem).each(function(k) {
                var $thisTabItem = $(this),
                    activeIndex = $tab.find(that.ui.tabItem + ".active").index() || 0;

                $tab.find(that.ui.tabItem).eq(activeIndex).addClass('active');
                $tab.find(that.ui.tabContent).eq(activeIndex).addClass('active').show().css({'visibility':'visible'});

                $thisTabItem.find('a').on('click', function(e) {
                    var anchor = $(this).attr('href');

                    if ($thisTabItem.data('link') != 'yes') {
                        $tab.find(that.ui.tabItem).removeClass('active');
                        $thisTabItem.addClass('active');

                        $tab.find(that.ui.tabContent).removeClass('active').hide().css({'visibility':'hidden'});
                        $tab.find(that.ui.tabContent).eq(k).addClass('active').show().css({'visibility':'visible'});
                        e.preventDefault();
                    }
                });
            });
        },
        init: function(obj, opts) {
            var that = this;
            if (obj) {
                that.ui.tab = obj;
            }
            $(that.ui.tab).each(function() {
                var $thisTab = $(this);
                that.active($thisTab);
            });
        }
    };
    AMB.tabs = tabs;


    /**
     * @name AMB.pageScrollTo
     * @param {object} params -
     * description : 페이지 버튼 이동
     */
    var pageScrollTo = {
        ui: {
            scrollBy: '[class*="ui-pagemove-"]'
        },
        moveTo: function(coordinatesY) {
            $('html, body').stop().animate({ scrollTop: coordinatesY }, 500, 'easeInOutQuart');
        },
        init: function() {
            var $scrollBy = $(this.ui.scrollBy),
                $win = $(window),
                $btm = $(".bottom"),
                moveTo = this.moveTo,
                anchor,
                pageToY;

            $scrollBy.on('click', function(e) {
                anchor = $(this).attr('href');
                pageToY = $(anchor).offset().top;
                moveTo(pageToY);
                e.preventDefault();
            });

            $win.on("scroll", function(e) {
                var scrollY = $win.scrollTop();

                if( scrollY > 100 ) {
                    $btm.addClass("active");
                } else {
                    $btm.removeClass("active");
                }
                // var winH = $win.height(),
                //     totalH = $("body").outerHeight(),
                //     footerH = $("#footer").height() || 0,
                //     scrollY = $win.scrollTop(),
                //     scrollablePos = totalH - winH - footerH;

                // if( scrollY > scrollablePos ) {
                //     $btm.css({ "bottom": scrollY - scrollablePos });
                // } else {
                //     $btm.css({ "bottom": 0 });
                // }
            });
        }
    };

    /**
     * @name AMB.accordion
     * @param {object} params -
     * description : 공통 토글
     */
    var accordion = {
        ui: {
          wrapper: '[data-ui="accordion"]',
          accordionHead: '.h-accordion',
          accordionBody: '.details',
          accordionBy: '.btn-accordion'
        },
        config: {
          openClass: 'open',
          hideClass: 'hide'
        },
        collapse: function(headerBox, expandBox) {
          headerBox.removeClass(this.config.openClass);
          expandBox.removeClass(this.config.openClass).stop().slideUp().attr('area-hidden', true);
        },
        expand: function(headerBox, expandBox) {
          headerBox.addClass(this.config.openClass);
          expandBox.addClass(this.config.openClass).stop().slideDown().attr('area-hidden', false);
        },
        init: function() {
          var self = this;

          // $(self.ui.wrapper).find(self.ui.accordionHead).each(function() {
          //     var $thisHead = $(this),
          //         $thisBody = $thisHead.next(self.ui.accordionBody);

          //     $thisHead.find(self.ui.accordionBy).on('click', function(e) {
          //         if ($thisHead.is('.' + self.config.openClass)) {
          //             self.collapse($thisHead, $thisBody);
          //         } else {
          //             self.expand($thisHead, $thisBody);
          //         }
          //     });
          // });

          $(self.ui.wrapper).on('click', '.btn-accordion', function() {
                var $thisHead = $(this).parents(".h-accordion"),
                    $thisBody = $thisHead.next(self.ui.accordionBody);

                  if ($thisHead.is('.' + self.config.openClass)) {
                      self.collapse($thisHead, $thisBody);
                  } else {
                      self.expand($thisHead, $thisBody);
                  }
          });

            if($('.ui-info-hotels-ico').length !== 0 ){
                var $infoHotels = $('.ui-info-hotels-ico');
                var initOpneHeader = $infoHotels.find(self.ui.accordionHead);
                var initOpneBody = initOpneHeader.eq(0).next(self.ui.accordionBody);

                initOpneHeader.eq(0).addClass(self.config.openClass);
                initOpneBody.addClass(self.config.openClass).show().attr('area-hidden', false);
            }

            if($('.ui-list-rate').length !== 0) {
                var $listRate = $('.ui-list-rate');
                var initOpneHeader = $listRate.find(self.ui.accordionHead);
                var initOpneBody = initOpneHeader.eq(0).next(self.ui.accordionBody);

                initOpneHeader.eq(0).addClass(self.config.openClass);
                initOpneBody.addClass(self.config.openClass).show().attr('area-hidden', false);
            }
        }
    };
    AMB.accordion = accordion;

    /**
     * @name AMB.switchByRadio
     * @param {object} params -
     * description : 공통 토글
     */
    var switchByRadio = function() {
        var $btn = $('[data-ui-btn]');

        $btn.each(function(e) {
            var $thisBtn = $(this);
            var config = $(this).data('ui-btn');
            var targetSrc = config.targetSrc;

            if (config.tagType == "radio") {
                var radioName = $thisBtn.attr('name');

                $('[name="' + radioName + '"]').on('change', function(e) {
                    if (config.reverse == true && typeof config.reverse != undefined) {
                        if ($thisBtn.is(':checked')) {
                            hide();
                            $(".iamhelp").show();
                        } else {
                            show();
                            $(".iamhelp").hide();
                        }
                    } else {
                        if ($thisBtn.is(':checked')) {
                            show();
                        } else {
                            hide();
                        }
                    }
                });
            }

            function show() {
              $thisBtn.addClass('open');
              $(targetSrc).show();
            }

            function hide() {
              $thisBtn.removeClass('open');
              $(targetSrc).hide();
            }
        });
    };
    AMB.switchByRadio = switchByRadio;

    /**
     * @name AMB.dateRange plugin date format
     * @param {object} params -
     */
    var dateFormat = {
        format: 'YYYY.MM.DD',
        isInvalidDate: false,
        daysOfWeek: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
        monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
    }

     /**
     * @name AMB.searchBooking
     * @예약하기 레이어
     */
    var searchBooking = {
        rooms: function() {
            var $periodBox = $('#ambbook-room .ambsearch-period'),
                $searchBox = $('#ambbook-room .input-group');

            $searchBox.on('click', function() {
                // 검색 버튼이 보이게
                if( !$('.btn-info-close').hasClass('open') ) {
                    $('.btn-info-close').click();
                }
            });

            $periodBox.on('click', function() {
                $('#cIOLayrtPopup').prepend('<div class=\'scrollblocker\'></div>');
                $('#cIOLayrtPopup').find('.scrollblocker').css({ 'position': 'fixed', 'left': '0', 'right': '0', 'bottom': '0', 'top': '0' }).on('touchMove', function(e) {
                    e.preventDefault();
                });
                openPopup('cIOLayrtPopup');

                // 검색 버튼이 보이게
                if( !$('.btn-info-close').hasClass('open') ) {
                    $('.btn-info-close').click();
                }

                $('#cIOLayrtPopup .close').one('click', function() {
                	$('#cIOLayrtPopup').find('.scrollblocker').off('touchMove').remove();
                    closePopup('cIOLayrtPopup');
                });
            });
        },
        dining: function() {
            var $periodBox = $('#ambbook-dining .ambsearch-period'),
                $searchBox = $('#ambbook-room .input-group');

            $searchBox.on('click', function() {
                // 검색 버튼이 보이게
                if( !$('.btn-info-close').hasClass('open') ) {
                    $('.btn-info-close').click();
                }
            });

            $periodBox.on('click', function() {
                $('#cIOLayrtPopup2').prepend('<div class=\'scrollblocker\'></div>');
                $('#cIOLayrtPopup2').find('.scrollblocker').css({ 'position': 'fixed', 'left': '0', 'right': '0', 'bottom': '0', 'top': '0' }).on('touchMove', function(e) {
                    e.preventDefault();
                });
                openPopup('cIOLayrtPopup2');

                // 검색 버튼이 보이게
                if( !$('.btn-info-close').hasClass('open') ) {
                    $('.btn-info-close').click();
                }

                $('#cIOLayrtPopup2 .close').one('click', function() {
                    $('#cIOLayrtPopup2').find('.scrollblocker').off('touchMove').remove();
                    closePopup('cIOLayrtPopup2');
                });
            });

        },
        switchActivation: function() {
            var $wrapper = $('#ambReservation');
            var $searchPlace = $wrapper.find('.ambsearch-place');
            var $autoplace = $wrapper.find('.ly-autoplace');
            var $searchGuest = $wrapper.find('#rmGuestInfo');
            var $searchGuest2 = $wrapper.find('#dnGuestInfo');
            var $guestLayer = $wrapper.find('.ly-roomsguest');
            var $searchPeriod = $wrapper.find('.ambsearch-period');
            var $datepicker = $wrapper.find('.daterangepicker');
            var $promotionText = $('#code-promotion');
            var $promotionRadio = $('#etc-promotion');
            var $etcOpts = $('#ambReservation [name="search-etc"]');

            var self = this;

            $('.ambsearch-etc').on('click', function() {
                // 검색 버튼이 보이게
                if( !$('.btn-info-close').hasClass('open') ) {
                    $('.btn-info-close').click();
                }
            });

            $promotionText.on('focus', function(e){
               onPromotion();
            });

            $etcOpts.on('change', function(e) {
                if ($promotionRadio.is(':checked')) {
                    onPromotion();
                } else {
                    offPromotion();
                }
            });

            $searchGuest.on('click', function() {
                var layerID = "roominfo";

                openRevLayer(layerID);
                // 검색 버튼이 보이게
                if( !$('.btn-info-close').hasClass('open') ) {
                    $('.btn-info-close').click();
                }
            });

            $searchGuest2.on('click', function() {
                var layerID = "roominfo2";

                openRevLayer(layerID);
                // 검색 버튼이 보이게
                if( !$('.btn-info-close').hasClass('open') ) {
                    $('.btn-info-close').click();
                }
            });

            function onPromotion(){
                $promotionText.addClass('checked');
                $promotionRadio.prop("checked", true);
            }

            function offPromotion(){
                $promotionText.removeClass('checked');
                $promotionRadio.prop("checked", false);
            }

            function hideEtc(){
                return;
                $optionEtcBtn.removeClass('open');
                $optionEtcBox.hide();
            }

            function switchDatepicker(parentEl){
                if(parentEl == $('#ambbook-room')){
                    self.rooms();
                }  else if(parentEl == $('#ambbook-dining')){
                    self.dining();
                }
            }

            // $(document).on('click.ambBook', function(e){
            //     if(!$(event.target).closest($searchPlace).length){
            //         $autoplace.hide();
            //     }
            // });
        },
        init : function(){
            this.rooms();
            this.dining();
            this.switchActivation();
        }
    };
    AMB.searchBooking = searchBooking;

    /**
     * @name AMB.setDays
     * @param {object} params -
     * description : 기간 조회
     */
    var setDays = function() {
        if($('.ui-period').length == 0) return;

        var $wrapper = $('.ui-period');
        var $fieldDays = $wrapper.find('.field-daterangepicker');

        $fieldDays.daterangepicker({
            parentEl: $wrapper,
            minDate: new Date(),
            autoApply: true,
            locale: dateFormat,
            isTouchCloseble : true
        });

        $fieldDays.on('apply.daterangepicker', function(ev, picker) {
            var $periodData = $(this).find('.ipt1');
            var days = picker.startDate.format('YYYY.MM.DD')+ ' - ' +picker.endDate.format('YYYY.MM.DD');
            $periodData.val(days);
        });
    };
    AMB.setDays = setDays;

    /**
     * @name AMB.bookingStatus
     * @param {object} params -
     * description : 호텔/룸/다이닝 예약 스텝 정보
     */
    var bookingStatus = {
        ui: {
            wrapper: '.ui-summary',
            container: '.inner',
            btn: '.btn-summary-close'
        },
        collapse: function(wrapper, container, btn) {
            var btnOpenHtml = '<span class="ico"></span>';

            container.stop().animate({ 'height': 47}, 500, 'easeOutQuart', function(){
                btn.removeClass('btn-summary-close').addClass('btn-summary-open');//.html(btnOpenHtml);
                wrapper.addClass('isclose');
            }).attr('area-hidden', true);
        },
        expand: function(wrapper, container, btn, maxHeight) {
            var btnCloseHtml = '<span class="ir">예약정보 접기</span><span class="ico"></span>';

            wrapper.removeClass('isclose');
            container.stop().animate({ 'height': maxHeight }, 500, 'easeInQuart', function(){
                btn.removeClass('btn-summary-open').addClass('btn-summary-close');//.html(btnCloseHtml);
            }).attr('area-hidden', false);
        },
        init: function() {
            var self = this;
            var $wrapper = $(self.ui.wrapper),
                $container = $wrapper.find(self.ui.container),
                $btn = $wrapper.find(self.ui.btn),
                maxH = $container.outerHeight(true),
                status = "isOpen";

            $btn.on('click', function(e) {
                var $this = $(this);
                if (status == "isOpen") {
                    self.collapse($wrapper, $container, $this);
                    status = "isClose";
                } else if(status == "isClose") {
                    self.expand($wrapper, $container, $this, maxH);
                    status = "isOpen";
                }
            });
        }
    };
    AMB.bookingStatus = bookingStatus;

    /**
     * @name AMB.Summary
     * @param {object} params -
     * description : 호텔/룸 검색/예약 요약
     */
    var hotels = {
        ui: {
            box: $('.hotels-etc'),
            btnOpen: $('.ui-subvisual .btn-info')
        },
        init: function() {
            var self = this,
                H = $(self.ui.box).outerHeight(true),
                status = false;

            $(self.ui.btnOpen).on('click', function(e) {
                if (status == false) {
                    $(self.ui.btnOpen).addClass('open');
                    $(self.ui.box).stop().slideDown();
                    status = true;
                } else {
                    $(self.ui.btnOpen).removeClass('open');
                    $(self.ui.box).stop().slideUp();
                    status = false;
                }
            });
        }
    };

    /**
   * @name AMB.rateRomms
   * @param {object} params -
   * description : 호텔/룸 검색/예약 요약
   */
    var rateRomms = function() {
        $('.ui-list-goods li').each(function(idx) {
            var $self = $(this);
            var isExpand = true;

            $self.find('[class*="btn-rate-"]').on('click', function(e) {
                var className = $(this).attr("class").split(" ").join(""),
                    patt = new RegExp("close");

                if (patt.test(className) == true) {
                    $self.find('.expand').hide();
                    $self.find('.ui-list-rate').hide();
                    $(this).removeClass('btn-rate-close').addClass('btn-rate-open');
                    isExpand = false;
                } else {
                    $self.find('.expand').show();
                    $self.find('.ui-list-rate').show();
                    $(this).removeClass('btn-rate-open').addClass('btn-rate-close');
                    $self.find('.ui-list-rate > div').eq(0).addClass("open").next().addClass("open").show().attr('area-hidden', false);
                    isExpand = true;
                }

                e.preventDefault();
            });

            if( idx !== 0 ) {
                $self.find('.ui-list-rate').hide();
                $self.find('[class*="btn-rate-"]').removeClass('btn-rate-close').addClass('btn-rate-open');
            }
        });
    };

    /**
     * @name AMB.upLoadFile
     * @param {object} params -
     * description : 호텔/룸 검색/예약 요약
     */
    var upLoadFile = {
        ui: {
          fakeFile: '#filename'
        },
        init: function(){
          var $files = $('input[type=file]');
          $files.on('change', function() {
              var $this = $(this),
                  fileName = $this[0].value.substring($this[0].value.lastIndexOf('\\') + 1);
              //$this.parent().prev().val(fileName);
              $('#filename').val(filename);
          });
        }
    };
    AMB.upLoadFile = upLoadFile;


    /**
     * @name AMB.shareSNS
     * @param {object} params -
     * description : 호텔/룸 검색/예약 요약
     */
    var shareSNS = {
      ui: {
        shareBox: '#share',
        layer: '.layer',
        btn: '.btn-share'
      },
      config: {
        status: 'hide'
      },
      show: function(){
        $(this.ui.shareBox).find(this.ui.layer).show();
        this.config.status = 'show';
      },
      hide: function(){
        $(this.ui.shareBox).find(this.ui.layer).hide();
        this.config.status = 'hide';
      },
      init: function(){
        var that = this;

        $(this.ui.shareBox).find(this.ui.btn).on('click', function(e) {
            if(that.config.status == 'hide' || that.config.status == undefined){
                that.show();
                e.preventDefault();
            } else if(that.config.status == 'show'){
               that.hide();
               e.preventDefault();
            }
        });

        $(document).on('click.hideShare touchstart.hideShare', function(e){
        	if ($(event).hasOwnProperty('target')) {
	        	if(!$(event.target).closest('#share').length){
	                that.config.status = 'hide';
	                that.hide();
	            }
        	}
        });

       }
    };
    AMB.shareSNS = shareSNS;

    /**
     * @name AMB.ambclubLevel
     * @param {object} params -
     * description : 앰배서더 클럽 레벨 차트
     */
    var ambclubLevel = function(){
      /* Pie Chart */
      Raphael.fn.pieChart = function(cx, cy, r, values, labels, fillColors, stroke) {
          var paper = this,
              rad = Math.PI / 180,
              chart = this.set();

          function sector(cx, cy, r, startAngle, endAngle, params) {
              var x1 = cx + r * Math.cos(-startAngle * rad),
                  x2 = cx + r * Math.cos(-endAngle * rad),
                  y1 = cy + r * Math.sin(-startAngle * rad),
                  y2 = cy + r * Math.sin(-endAngle * rad);
              return paper.path(["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2, "z"]).attr(params);
          }

          var angle = 240,
              total = 0,
              start = 0; //angle : 시작각

          var process = function(j) {
              var value = values[j],
                  filColor = fillColors[j],
                  angleplus = 360 * value / total,
                  popangle = angle + (angleplus / 2),
                  ms = 500,
                  delta = 30,
                  p;

              p = sector(cx, cy, r, angle, angle + angleplus, { fill: filColor, stroke: filColor, "stroke-width": 0 });
              angle += angleplus;
              chart.push(p);
              start += 0.1;
          };
          for (var i = 0, ii = values.length; i < ii; i++) total += values[i];
          for (i = 0; i < ii; i++) process(i);
          return chart;
      };

      function setPie(v) {
          var gap = v.gap || 0;
          var small = (v.small) ? v.small / 2 : null;
          var big = (v.big) ? v.big / 2 : 135;
          if (!v.data || v.data.length == 0) return false;
          var values = [],
              labels = [],
              fillColors = v.fillColors || ["#b7b7b7", "#bdc3de", "#f5be00", "#0666dc"];
          var totalVal = 0,
              percent = 100;
          var r = Raphael(v.ele, big * 2, big * 2);
          $.each(v.data, function(iii) {
              totalVal += v.data[iii];
              values.push(v.data[iii]);
              labels.push(iii);
          });
          if (totalVal < percent) {
              values.push(percent - totalVal);
              labels.push("etc");
          }
          if (values.length > 1) {
              r.pieChart(big, big, big - gap, values, labels, fillColors, "#fff");
          } else {
              r.circle(big, big, big - gap).attr({ stroke: "#fff", fill: fillColors[0], "stroke-width": 0 });
          }
          if (small) r.circle(big, big, small).attr({ stroke: "#fff", fill: "#fff", "stroke-width": 0 });
      }

      var $chart = $('div[data-charttype]');
      $.each($chart, function(iii) {
          var data = this.getAttribute("data-chart");
          if (!data) return;
          if (!this.id) this.id = "chardHolder" + iii;
          var rate = this.getAttribute("data-rate");
          if (rate) rate = "['url(/static/en/img/common/chart-patt0" + (Math.min(parseInt(rate), 4) + 1) + ".png)', 'url(/static/en/img/common/chart-patt00.png)']";
          data = new Function('return {' + data + ', ele : "' + this.id + '", fillColors : ' + rate + '}')();
          setPie(data);
      });
    };
    AMB.ambclubLevel = ambclubLevel;

    var checkAllRoomsOptions = function(){
        var $box = $('#checkrooms-allopts');
        var $items = $box.find('.tab .item');
        var $chkAll = $('.check-allrooms-opt');

        $items.each(function(){
            var $this = $(this);
            $this.on('click', function(e){

                if(!$(e.target).closest($items.eq(0)).length){
                    $chkAll.hide();
                } else {
                   $chkAll.show();
                }
            });
        });
    };
    AMB.checkAllRoomsOptions = checkAllRoomsOptions;

    // 라디오 버튼 토글효과
    var inputRadioToggleAction = {
        init: function() {
            var $inpRadio = $(".ambsearch-etc input[type='radio']");

            $inpRadio.on("click", function() {
                var $this = $(this);

                if($this.hasClass("toggle-checked")) {
                    $this.prop("checked", false);
                    $this.removeClass("toggle-checked");
                } else {
                    $inpRadio.removeClass("toggle-checked");
                    $this.addClass("toggle-checked");
                }
            });
        }
    };

    // 메인 멤버십 카드 애니메이션
    var membershipCard = {
        init: function() {
            var $ambCard = $(".quick-ambcard"),
                $toggleBtn = $(".quick-ambsearch .quick-btn2");

            $toggleBtn.on("click", function(e) {
                var $this = $(this);

                //멤버십 카드를 갖지 않고 있는 회원일 경우
                if( $this.attr("data-url") !== undefined ) {
                    window.location = $this.attr("data-url");
                    return;
                }

                if($this.hasClass("active")) {
                    $this.removeClass("active");
                    $ambCard.stop().animate({ right: -200 }, 150, function() {
                        $ambCard.addClass("hide");
                    });
                } else {
                    $this.addClass("active");
                    $ambCard.removeClass("hide").css({"right": "-200px"});
                    $ambCard.stop().animate({ right: 24 }, 150);
                }

                e.preventDefault();
            });
        }
    };

    var infoBox = {
        init: function() {
            var $toggleBtn = $(".btn-info-close");

            $toggleBtn.siblings(".ui-ambbook").find(".tab").hide();
            $toggleBtn.siblings(".ui-ambbook").find(".btn-wrap").hide();
            $toggleBtn.siblings(".ui-ambbook").find(".opt-box").hide();

            $toggleBtn.on("click", function(e) {
                var $this = $(this),
                    $container = $this.siblings(".ui-ambbook"),
                    $tabHead = $container.find(".tab"),
                    $btnWrap = $container.find(".btn-wrap"),
                    $optBox = $container.find(".opt-box");

                // 스텝1
                if($tabHead.length) {
                    $tabHead.slideToggle();
                    $btnWrap.slideToggle();
                }

                // 옵션
                if($optBox.length) {
                    $optBox.slideToggle();
                }

                $this.toggleClass(function() {
                    var $self = $(this);
                    if( $self.hasClass("open") ) {
                        $self.text("OPEN");
                        return "open";
                    } else {
                        $self.text("CLOSE");
                        return "open";
                    }
                });

                e.preventDefault();
            });
        }
    };

    tabs.init();

    // run
    $(document).ready(function() {
        gnb.init();
        pushPop.init();
        modal.init();
        menuSlider.init();
        carousel.init();
        accordion.init();
        switchByRadio();
        setDays();
        searchBooking.init();
        bookingStatus.init();
        hotels.init();
        rateRomms();
        upLoadFile.init();
        shareSNS.init();
        pageScrollTo.init();
        inputRadioToggleAction.init();
        membershipCard.init();
        infoBox.init();

        $('.quick-ambsearch .quick-btn1').on('click', function(e){
            AMB.modal.show('#ambReservation');
        });
    });


})(this, this.AMB = this.AMB || {});

// 예약 옵션 팝업용 함수
function openRevLayer(layerID) {
    var targetID = layerID,
        $targetLayer = null,
        $closeBtn = null,
        $okBtn = null;

    $('.layerbox').each(function() {
        var $this = $(this);

        if($this.data('layerid') === targetID ) {
            $targetLayer = $this;
        }
    });

    $closeBtn = $targetLayer.find('.close');
    $targetLayer.show();
    $closeBtn.one('click', function() {
        closeRevLayer(targetID);
    });

    if($targetLayer.find('.ui-btn-sl1').length) {
        $okBtn = $targetLayer.find('.ui-btn-sl1');

        $okBtn.one('click', function() {
            closeRevLayer(targetID);
        });
    }
}

function closeRevLayer(layerID) {
    var targetID = layerID,
        $targetLayer = null;

    $('.layerbox').each(function() {
        var $this = $(this);

        if($this.data('layerid') === targetID ) {
            $targetLayer = $this;
        }
    });

    $targetLayer.hide();
}