
(function (a, d) {
    function k(o, q) {
        a.extend(o, q);
        for (var v in q) if (q[v] == null || q[v] == d) o[v] = q[v];
        return o
    }
    a.fn.datepicker = function (o) {
        if (!this.length) return this;
        if (!a.datepicker.initialized) {
            a(document).mousedown(a.datepicker._checkExternalClick).find("#hc_bodyElements").append(a.datepicker.dpDiv);
            a.datepicker.initialized = true
        }
        var q = Array.prototype.slice.call(arguments, 1);
        if (typeof o == "string" && (o == "isDisabled" || o == "getDate" || o == "widget")) return a.datepicker["_" + o + "Datepicker"].apply(a.datepicker, [this[0]].concat(q));
        if (o == "option" && arguments.length == 2 && typeof arguments[1] == "string") return a.datepicker["_" + o + "Datepicker"].apply(a.datepicker, [this[0]].concat(q));
        return this.each(function () {
            typeof o == "string" ? a.datepicker["_" + o + "Datepicker"].apply(a.datepicker, [this].concat(q)) : a.datepicker._attachDatepicker(this, o)
        })
    };
    a.datepicker._hideDatepicker = function (o) {
        var q = this._curInst;
        if (!(!q || o && q != a.data(o, PROP_NAME))) if (this._datepickerShowing) {
            o = this._get(q, "showAnim");
            var v = this._get(q, "duration"),
                y = function () {
                    a.datepicker._tidyDialog(q);
                    this._curInst = null
                };
            if (a.effects && a.effects[o]) q.dpDiv.hide(o, a.datepicker._get(q, "showOptions"), v, y);
            else q.dpDiv[o == "slideDown" ? "slideUp" : o == "fadeIn" ? "fadeOut" : "hide"](o ? v : null, y);
            o || y();
            a.datepicker._triggerOnClose(q);
            this._datepickerShowing = false;
            this._lastInput = null;
            if (this._inDialog) {
                this._dialogInput.css({
                    position: "absolute",
                    left: "0",
                    top: "-100px"
                });
                if (a.blockUI) {
                    a.unblockUI();
                    a("#hc_bodyElements").append(this.dpDiv)
                }
            }
            this._inDialog = false
        }
    };
    a.datepicker._showDatepicker = function (o) {
        o = o.target || o;
        if (o.nodeName.toLowerCase() != "input") o = a("input", o.parentNode)[0];
        if (!(a.datepicker._isDisabledDatepicker(o) || a.datepicker._lastInput == o)) {
            var q = a.datepicker._getInst(o);
            if (a.datepicker._curInst && a.datepicker._curInst != q) {
                a.datepicker._datepickerShowing && a.datepicker._triggerOnClose(a.datepicker._curInst);
                a.datepicker._curInst.dpDiv.stop(true, true)
            }
            var v = a.datepicker._get(q, "beforeShow");
            k(q.settings, v ? v.apply(o, [o, q]) : {});
            q.lastVal = null;
            a.datepicker._lastInput = o;
            a.datepicker._setDateFromField(q);
            if (a.datepicker._inDialog) o.value = "";
            if (!a.datepicker._pos) {
                a.datepicker._pos = a.datepicker._findPos(o);
                a.datepicker._pos[1] += o.offsetHeight
            }
            var y = false;
            a(o).parents().each(function () {
                y |= a(this).css("position") == "fixed";
                return !y
            });
            if (y) {
                a.datepicker._pos[0] -= document.documentElement.scrollLeft;
                a.datepicker._pos[1] -= a.browser.webkit ? document.body.scrollTop : document.documentElement.scrollTop
            }
            v = {
                left: a.datepicker._pos[0],
                top: a.datepicker._pos[1]
            };
            a.datepicker._pos = null;
            q.dpDiv.empty();
            q.dpDiv.css({
                position: "absolute",
                display: "block",
                top: "-1000px"
            });
            a.datepicker._updateDatepicker(q);
            v = a.datepicker._checkOffset(q, v, y);
            q.dpDiv.css({
                position: a.datepicker._inDialog && a.blockUI ? "static" : y ? "fixed" : "absolute",
                display: "none",
                left: v.left + "px",
                top: v.top + "px"
            });
            if (!q.inline) {
                v = a.datepicker._get(q, "showAnim");
                var g = a.datepicker._get(q, "duration"),
                    m = function () {
                        var r = q.dpDiv.find("iframe.ui-datepicker-cover");
                        if (r.length) {
                            var w = a.datepicker._getBorders(q.dpDiv);
                            r.css({
                                left: -w[0],
                                top: -w[1],
                                width: q.dpDiv.outerWidth(),
                                height: q.dpDiv.outerHeight()
                            })
                        }
                    };
                q.dpDiv.zIndex(a(o).zIndex() + 1);
                a.datepicker._datepickerShowing = true;
                if (a.effects && a.effects[v]) q.dpDiv.show(v, a.datepicker._get(q, "showOptions"), g, m);
                else q.dpDiv[v || "show"](v ? g : null, m);
                if (!v || !g) m();
                q.input.is(":visible") && !q.input.is(":disabled") && q.input.focus();
                a.datepicker._curInst = q
            }
        }
    }
})(jQuery);

EP.Translations = {
    strings: {},
    set: function (a, d) {
        if ($.isArray(a)) this.setMultiple(a);
        else this.strings[a] = d
    },
    setMultiple: function (a) {
        for (var d = a.length, k = 0; k < d; k++) {
            var o = a[k];
            this.set(o[0], o[1])
        }
    },
    get: function (a, d) {
        var k = this.strings[a];
        if (k != "") {
            typeof d != "undefined" && $.each(d, function (o, q) {
                k = k.replace(o, q)
            });
            return k
        } else return ""
    }
};

if (typeof EP == "undefined") var EP = {};

window.EP || (EP = {});
(function () {
    EP.SearchBox = {
        _defaultCheckinSelector: "",
        _defaultCheckoutSelector: "",
        _defaultCheckin: null,
        _defaultCheckout: null,
        setDefaults: function (a) {
        		if (a.defaultCheckinSelector) this._defaultCheckinSelector = a.defaultCheckinSelector;
        		if (a.defaultCheckoutSelector) this._defaultCheckoutSelector = a.defaultCheckoutSelector;
        			
            var d = EP.DateSelection;
            if (a.defaultCheckin) this._defaultCheckin = d.convertToDateObject(a.defaultCheckin);
            if (a.defaultCheckout) this._defaultCheckout = d.convertToDateObject(a.defaultCheckout);
        },
        SearchBoxInstance: function (a) {
            var d = EP.SearchBox,
                k = EP.DateSelection,
                o = a.find(d._defaultCheckinSelector);
            		a = a.find(d._defaultCheckoutSelector);
            var q = k.retrieveDateSelectInstance(o),
                v = k.retrieveDateSelectInstance(a);
            (function () {
                var y = d._defaultCheckin,
                    g = d._defaultCheckout;
                    
                if (y && g) if (!(y < k._minDate)) if (!(g > k._maxDate)) {
                    q.setSelectedDate(y);
                    q.setToDate(g);
                    v.setSelectedDate(g);
                    v.setFromDate(y)
                }
            })();
            q.setChangeCallback(function (y) {
                v.setFromDate(y);
                var g = v.getSelectedDate();
                
                if (!(g && g > y)) {
                    y = new Date(y.getTime());
                    g = y.getDate();
                    y.setDate(g + 1);                    
                    y > k._maxDate || v.setSelectedDate(y);
                    
                    var checkoutValue = formatDate(y, DefaultShortDatePatternVariable);
                    document.getElementById("searchBoxContainer_CheckoutValue").value = checkoutValue;
                }
            });
            v.setChangeCallback(function (y) {
                q.setToDate(y)
            })
        }
    }
})();

window.EP || (EP = {});
(function () {
    EP.DateSelection = {
        _currentServerTime: null,
        _currentCulture: "",
        _monthNames: [],
        _dayNames: [],
        _dayWrapperClass: "hc_f_cal_day",
        _monthWrapperClass: "hc_f_cal_month",
        _datepickerInputClass: "",
        _datepickerImage: "/i/ico_date.gif",
        _maxMonthsToShow: 12,
        _minDate: null,
        _maxDate: null,
        _selectionInstances: [],
        init: function (a) {
            this._currentServerTime = new Date(a.getTime());
            a = $.datepicker.regional[this._currentCulture];
            this._monthNames = a.monthNames;
            this._dayNames = a.dayNamesShort;
            this.initMinMaxDates()
        },
        setCulture: function (a) {
            this._currentCulture = a
        },
        setDatepickerInputClass: function (a) {
        		this._datepickerInputClass = a
        },
        initMinMaxDates: function () {
            var a = this.retrieveMinValidDateServerBased(),
                d = this.addMonths(a, this._maxMonthsToShow),
                k = this.getDaysInMonth(d.getFullYear(), d.getMonth());
            d.setDate(k);
            this._minDate = a;
            this._maxDate = d
        },
        addDateSelectInstance: function (a, d) {
            this._selectionInstances.push([a, d])
        },
        findDateSelectInstance: function (a) {
            for (var d = this._selectionInstances, k = d.length, o = 0; o < k; o++) {
                var q = d[o];
                if (q[1] == a) return q[0]
            }
            return null
        },
        retrieveDateSelectInstance: function (a) {
            a = a.find("." + this._datepickerInputClass);
            if (a.length > 0) return this.findDateSelectInstance(a[0]);
            return null
        },
        retrieveMinValidDateServerBased: function () {
            var a = new Date(this._currentServerTime.getTime());
            a.setMinutes(a.getMinutes() - 781);
            a.setMinutes(0);
            a.setHours(0);
            a.setSeconds(0);
            a.setMilliseconds(0);
            return a
        },
        retrieveMaxValidDateServerBased: function () {
            return this.addMonths(this.retrieveMinValidDateServerBased(), this._maxMonthsToShow)
        },
        addMonths: function (a, d) {
            a = new Date(a.getTime());
            var k = a.getDate();
            a.setMonth(a.getMonth() + d);
            if (k > a.getDate()) a = this.addDays(a, -a.getDate());
            return a
        },
        addDays: function (a, d) {
            a = new Date(a.getTime());
            a.setTime(a.getTime() + d * 864E5);
            return a
        },
        getDaysInMonth: function (a, d) {
            return 32 - this.daylightSavingAdjust(new Date(a, d, 32)).getDate()
        },
        daylightSavingAdjust: function (a) {
            if (!a) return null;
            a.setHours(a.getHours() > 12 ? a.getHours() + 2 : 0);
            return a
        },
        convertToDateObject: function (a) {
            return $.datepicker.parseDate("yy-mm-dd", a)
        },
        convertToDefaultStringFormat: function (a) {
            return $.datepicker.formatDate("yy-mm-dd", a)
        },
        isSameMonth: function (a, d) {
            if (a.getMonth() != d.getMonth()) return false;
            if (a.getFullYear() != d.getFullYear()) return false;
            return true
        },
        closeCurrentDatepickerInstance: function () {
            var a = $.datepicker._curInst;
            a && a.dpDiv[0].style.display == "block" && $(a.input[0]).next().click()
        },
        DateSelect: function (a, d) {
            function k(K) {
                if (K) W = true;
                X = K;
                da && da(K)
            }
            function o(K) {
                K = K || {};
                var D = X,
                    O = "",
                    I = H._dayNames,
                    ja = EP.Translations.get("DatedropdownDay"),
                    ka = D ? true : false,
                    f, fa, qa = new Date(H._minDate);
                if (ka) {
                    f = D.getDate();
                    fa = H.getDaysInMonth(D.getFullYear(), D.getMonth());
                    qa = new Date(D.getTime())
                } else {
                    f = null;
                    fa = 31
                }
                if (K.forceMonth) {
                    qa = new Date(K.forceMonth.getTime());
                    fa = H.getDaysInMonth(qa.getFullYear(), qa.getMonth());
                    ka = true
                }
                W || (O += '<option value="{2}" {1}>{0}</option>'.replace("{0}", ja).replace("{1}", f == null ? 'selected="selected"' : "").replace("{2}", "-1"));
                for (K = 1; K < fa + 1; K++) {
                    qa.setDate(K);
                    D = I[qa.getDay()];
                    O += '<option value="{2}" {1}>{0}</option>'.replace("{0}", ka ? D + " " + K : K).replace("{1}", K == f ? 'selected="selected"' : "").replace("{2}", K)
                }
                J.html(O)
            }
            function q() {
                var K =
                X,
                    D = H._minDate,
                    O = D.getMonth();
                D = D.getFullYear();
                var I = D.toString().substring(2),
                    ja = H._monthNames,
                    ka = H._maxMonthsToShow,
                    f = EP.Translations.get("DatedropdownMonthYearFormat"),
                    fa = EP.Translations.get("DatedropdownMonth"),
                    qa = K ? true : false,
                    va, za;
                if (qa) {
                    va = K.getMonth();
                    za = K.getFullYear()
                }
                K = "";
                var oa = 0;
                K = "";
                if (W) ba = true;
                else K += '<option value="{0}" {2}>{1}</option>'.replace("{0}", "-1").replace("{1}", fa).replace("{2}", qa ? "" : 'selected="selected"');
                for (; oa <= ka;) {
                    fa = f.replace("[InsertMonthName]", ja[O]).replace("[InsertShortYear]", I);
                    K += '<option value="{0}" {2}>{1}</option>'.replace("{1}", fa).replace("{0}", D + "-" + (O + 1)).replace("{2}", O == va && D == za ? 'selected="selected"' : "");
                    oa++;
                    O++;
                    if (O == 12) {
                        O = 0;
                        D++;
                        I = D.toString().substring(2)
                    }
                }
                U.html(K)
            }
            function v(K) {
                var D = U.val(),
                    O = J.val();
                if (K && ca && D == "-1") {
                    D = ca;
                    U.val(D)
                } else if (D == "-1") return;
                ca = D;
                K = D.split("-");
                K = new Date(K[0], K[1] - 1, 1);
                D = H.getDaysInMonth(K.getFullYear(), K.getMonth() - 1);
                if (O == "-1") o({
                    forceMonth: K
                });
                else {
                    O = parseInt(O, 10);
                    O > D && K.setDate(1);
                    K.setDate(O);
                    k(K);
                    o();
                    ba || q();
                    y()
                }
            }

            function y() {
                X && T.datepicker("setDate", X)
            }
            function g(D, I) {
            	
          		$('#'+ I.id +'Value').val(D);
          		
                var K = T.datepicker("getDate");
                k(K);
                q();
                o()
            }
            function m(K, D) {
                D = D.getTime();
                K = K.getTime();
                if (D === K) return [true, "hc_cal_date_upper"];
                var O = X;
                if (!O) return [true, ""];
                O = O.getTime();
                if (D > O && K > O && K < D) return [true, "hc_cal_date_range"];
                return [true, ""]
            }
            function r(K, D) {
                D = D.getTime();
                K = K.getTime();
                if (D === K) return [true, "hc_cal_date_lower"];
                var O = X;
                if (!O) return [true, ""];
                O = O.getTime();
                if (D < O && K < O && K > D) return [true, "hc_cal_date_range"];
                return [true, ""]
            }
            function w(K, D, O) {
                var I = $(O.dpDiv[0]);
                H.isSameMonth(new Date, new Date(K, D - 1, 1)) ? window.setTimeout(function () {
                    I.find(".ui-datepicker-current").hide()
                }, 0) : window.setTimeout(function () {
                    I.find(".ui-datepicker-current").show()
                }, 0)
            }
            function A(K, D) {
                var O = $(D.dpDiv[0]);
                O.css("margin-top", $(K).next().height() + "px");
                window.setTimeout(function () {
                    O.css("z-index", 950);
                    P() || O.find(".ui-datepicker-current").hide()
                }, 1)
            }
            function P() {
                if (X == null) return false;
                if (H.isSameMonth(new Date, X)) return false;
                return true
            }
            d = d || {};
            var H = EP.DateSelection,
                J = $("span." + H._dayWrapperClass + " select", a),
                U = $("span." + H._monthWrapperClass + " select", a),
                T = $("." + H._datepickerInputClass, a),
                X;
            X = d.selectedDate ? H.convertToDateObject(d.selectedDate) : null;
            var Y = null,
                V = null,
                W = false,
                ba = false,
                ca = null,
                da = null;
            H.addDateSelectInstance(this, T[0]);
            q();
            o();
            (function () {
                T.datepicker({
                    showOn: "button",
                    buttonImage: H._datepickerImage,
                    buttonImageOnly: true,
                    //changeMonth: true,
                    //changeYear: true,
                    duration: "fast",
                    onSelect: function (D, I) {
                  		g(D, I)
                    },
                    minDate: H._minDate,
                    maxDate: H._maxDate,
                    buttonText: "",
                    beforeShow: function (K, D) {
                        A(K, D)
                    },
                    onChangeMonthYear: function (K, D, O) {
                        w(K, D, O)
                    },
                    beforeShowDay: function (K) {
                        K = Y ? m(K, Y) : V ? r(K, V) : [true, ""];
                        return K
                    }
                })
            })();
            y();
            J.bind("change", function () {
                v(true)
            });
            U.bind("change", function () {
                v()
            });
            this.getSelectedDate = function () {
                return X
            };
            this.setSelectedDate = function (K) {
                k(K);
                q();
                o();
                y()
            };
            this.setToDate = function (K) {
                if (K) {
                    K = new Date(K.getTime());
                    K.setHours(0);
                    K.setMinutes(0);
                    K.setSeconds(0);
                    K.setMilliseconds(0);
                    Y = K
                } else Y = null
            };
            this.setFromDate = function (K) {
                if (K) {
                    K = new Date(K.getTime());
                    K.setHours(0);
                    K.setMinutes(0);
                    K.setSeconds(0);
                    K.setMilliseconds(0);
                    V = K
                } else V = null
            };
            this.setChangeCallback = function (K) {
                da = K
            }
        }
    }
})();
