(function() {
    var yuiDom = YAHOO.util.Dom;

    var yuiEvent = YAHOO.util.Event;

    var DEFAULT_CONFIG = {
        arrivalDateInput: null,
        departureDateInput: null,
        calendarIcon: null,
        localeCode: "en_US",
        dateFormatString: "MM/DD/YYYY"
    };

    function CalendarLink (config) {

        if(!config.calendarId){
            throw("no calendarId supplied");
        }

        for(var prop in DEFAULT_CONFIG){
            if(!config.hasOwnProperty(prop)){
                config[prop] = DEFAULT_CONFIG[prop];
            }
        }

        var calendar = null;
        var tileView = config.view;
        var arrivalDateInput = config.arrivalDateInput;
        var departureDateInput = config.departureDateInput;
        var calendarIcon = config.calendarIcon;
        var localeCode = config.localeCode || localeCode;
        localeCode = localeCode.split("_")[0];
        var dateFormatString = config.dateFormatString || dateFormatString;
        var submitUrl = null;
        function setDates (arrivalDate, departureDate, fromContinue) {
           submitUrl = SW.tools.Url.setParameter(submitUrl,"arrivalDate",getFormatedDate(localeCode, arrivalDate));
           submitUrl = SW.tools.Url.setParameter(submitUrl,"departureDate",getFormatedDate(localeCode, departureDate));
            if (window.parent){
                window.parent.location.href = submitUrl;
                return;
            }
            location.href = submitUrl;

        }
        function getArrivalDate () {
           /* if (submitUrl!=null){
            return setDateFromString(localeCode, SW.tools.Url.getParameter(submitUrl,"arrivalDate"));
                }*/
        }
        function getDepartureDate () {
            /*if (submitUrl!=null){

            return setDateFromString(localeCode, SW.tools.Url.getParameter(submitUrl,"departureDate"));
            }*/
        }

        var self = {
            toggleCalendar: function (e, calendarPos) {
                yuiEvent.preventDefault(e);

                submitUrl = this.href;
                var coords = yuiDom.getXY(this);

                if(!calendarPos) {
                    calendarPos = (coords[0] + 20) + "," + (coords[1] - 10);
                }

                calendar.show(this, calendarPos);

                yuiEvent.stopPropagation(e);
            }
        };

        calendar = new multiDisplayCalendar('compareCalendar',
            getArrivalDate,
            getDepartureDate,
            setDates
        );
         yuiDom.getElementsByClassName("showCalendar","a").forEach(function(link){
            yuiEvent.addListener(link, "click", self.toggleCalendar, config.calendarPos);
        });

        return self;
    }

    SW.local.CalendarLink = function(config){
        return new CalendarLink(config);
    };

    YAHOO.namespace("SW.local.CalendarLink");
})();



