(function(){
        var calLocation=null;
        var locale = null;
        function DirectoryCalendarHelper(settings){
            calLocation=settings.calLocation;
            locale = settings.locale;
            var bookNowLinks = yuiDom.getElementsByClassName("bookNowLink",'a','directoryContainer');
            bookNowLinks.forEach(function(link){
                yuiEvent.addListener(link,"click",createCalendar)
            });
            function showBridge(e){
                this.calendar.show(this,calLocation);
            }
            function setDateToLink(checkIn,checkOut){
                var updatedUrl = SW.tools.Url.setParameter(this.propertyConfig.href,"arrivalDate",getFormatedDate(locale, checkIn));
                updatedUrl = SW.tools.Url.setParameter(updatedUrl,"departureDate",getFormatedDate(locale, checkOut));
                location.href=updatedUrl;
            }
            function createCalendar(e){
                yuiEvent.preventDefault(e);
                if(this.calendar == null) {
                    var propertyId = this.id;
                    var calendar = new multiDisplayCalendar("bookNowCalendar_"+propertyId,
                            function(){return setDateFromString(locale, yuiDom.get('arrivalDateInput_'+propertyId).value)},
                            function(){return setDateFromString(locale, yuiDom.get('departureDateInput_'+propertyId).value)},
                            setDateToLink
                            );
                    var config={
                        calendar:calendar,
                        propertyId:propertyId,
                        link:this,
                        href:this.href
                    }
                    calendar.propertyConfig=config;
                    this.calendar = calendar;
                }
                // this = link element
                showBridge.call(this);
            }
        }
        SW.local.DirectoryCalendarHelper = function(config){
            return new DirectoryCalendarHelper(config);
        }
        YAHOO.namespace("SW.local.DirectoryCalendarHelper");

    })();
    yuiEvent.onDOMReady(function() {
        SW.local.DirectoryCalendarHelper({
            locale:"${languageString}",
            calLocation:"bottomLeft"
        });

    });

var destinationDhtmlSelect = {
  setup:function(){
    var self = this;
    yuiDom.getElementsByClassName("customDhtmlSelect","div",yuiDom.get('filterPanel')).forEach(function(container){
        var config = {
          container:container,
          trigger:yuiDom.getElementsByClassName("dhtmlSelectTrigger",null,container)[0]
        };
        yuiEvent.addListener(config.trigger,"click",destinationDhtmlSelect.showBridge,config);
        customBodyClickHandler.add(destinationDhtmlSelect.hide,[config.container],config.container);
    });
  },
  show:function(config){
    yuiDom.addClass(config.container,"show");
  },
  hide:function(container){
    yuiDom.removeClass(container,"show");
  },
  showBridge:function(e,config){
    var self = destinationDhtmlSelect;
    self.show(config);
  }
};


var customBodyClickHandler={
  initialized:false,
  handlers:[],
  load:function(){
    yuiEvent.addListener(document.body,"click",customBodyClickHandler.clickBridge);
  },
  add:function(method,testElements,context){
    context = context || window;
    this.handlers.push({
      method:method,
      context:context,
      testElements:testElements
    });
  },
  click:function(e){
    var clickedElement = yuiEvent.getTarget(e);
    this.handlers.forEach(function(args){
      var isContained = false;
      for(var i=0;i<args.testElements.length;i++){
        if(args.testElements[i]==clickedElement || yuiDom.isAncestor(args.testElements[i],clickedElement)){
          isContained = true;
          break;
        }
      }
      if(!isContained){
        args.method(args.context,[e]);
      }
    });
  },

  clickBridge:function(e){
    var self = customBodyClickHandler;
    self.click(e);
  }
};
yuiEvent.onContentReady('filterPanel',customBodyClickHandler.load, true);
yuiEvent.onContentReady('filterPanel',destinationDhtmlSelect.setup, true);

SW.domWidget.toolTips.addClassSettings("toolTipTrigger",{
  triggerClassName:"toolTipTrigger",
  stopEventOnClick:false
});


