﻿
Date.prototype.format = function(mask) {
    var d = this;
    var zeroize = function(value, length) {
        if (!length) length = 2;
        value = String(value);
        for (var i = 0, zeros = ''; i < (length - value.length); i++) {
            zeros += '0';
        }
        return zeros + value;
    };

    return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|M{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function($0) {
        switch ($0) {
            case 'd': return d.getDate();
            case 'dd': return zeroize(d.getDate());
            case 'ddd': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][d.getDay()];
            case 'dddd': return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getDay()];
            case 'M': return d.getMonth() + 1;
            case 'MM': return zeroize(d.getMonth() + 1);
            case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getMonth()];
            case 'MMMM': return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()];
            case 'yy': return String(d.getFullYear()).substr(2);
            case 'yyyy': return d.getFullYear();
            case 'h': return d.getHours() % 12 || 12;
            case 'hh': return zeroize(d.getHours() % 12 || 12);
            case 'H': return d.getHours();
            case 'HH': return zeroize(d.getHours());
            case 'm': return d.getMinutes();
            case 'mm': return zeroize(d.getMinutes());
            case 's': return d.getSeconds();
            case 'ss': return zeroize(d.getSeconds());
            case 'l': return zeroize(d.getMilliseconds(), 3);
            case 'L': var m = d.getMilliseconds();
                if (m > 99) m = Math.round(m / 10);
                return zeroize(m);
            case 'tt':
                return d.getHours() < 12 ? 'am' : 'pm';
            case 'TT': return d.getHours() < 12 ? 'AM' : 'PM';
            case 'Z': return d.toUTCString().match(/[A-Z]+$/);
                // Return quoted strings with the surrounding quotes removed 
            default: return $0.substr(1, $0.length - 2);
        }
    });
};

var chipDate = Date.prototype = function() {
    var datePickerData = {
        numberOfMonths: 2,
        stepMonths: 2,
        changeMonth: false,
        changeYear: false,
        minDate: new Date(), // $('#currentServerDate').val(),
        //maxDate: '2010-11-01',
        //maxDate: '+90d',
        maxDate: resvMaxDate,
        dateFormat: "yy-mm-dd",
        // slideDown: 'fadeIn',
        // yearRange: 'c:c+50',
        // defaultDate: "+1d",
        firstDay: 1,
        monthNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
        monthNamesShort: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], //['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
        dayNames: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
        dayNamesShort: ['日', '一', '二', '三', '四', '五', '六'],
        dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'],
        closeText: '关闭',
        currentText: '今天',
        weekHeader: '周',
        hideIfNoPrevNext: true,
        //        navigationAsDateFormat: true,
        //        selectOtherMonths:true,
        prevText: '<<',
        nextText: '>>',
        showMonthAfterYear: true,
        showWeek: false,
        // gotoCurrent:true,
        // autoSize: false,
        // appendText:'',
        // showCurrentAtPos: 0,
        showButtonPanel: false,
        changeYear: false
        //        onSelect: function(selectedDate) {
        //            alert(selectedDate);
        //            return;
        //            var option = (this.id == "datepickerin") ? "minDate" : "maxDate";
        //            var instance = $(this).data("datepicker");
        //            var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
        //            var nextDate = chipDate.addDays(date, 1);
        //            // dates.not(this).datepicker("option", option, nextDate);

        //            if (this.id == "datepickerin") {
        //                dates.not(this).datepicker("option", "maxDate", chipDate.addDays(date, 30));
        //                dates.not(this).datepicker("option", "minDate", chipDate.addDays(date, 1));
        //                setTimeout("$('#datepickerout').focus();", 200);
        //            }
        //        }
    };

    return {
        getDate: function(date) {
            $.datepicker.parseDate(datePickerData.dateFormat || $.datepicker._defaults.dateFormat, date, instance.settings);
        },
        
        addDays: function(date, addDays) {
            var year = date.getFullYear();
            var month = date.getMonth();
            var date = date.getDate();
            var newdate = new Date(year, month, date);
            var newtimems = newdate.getTime() + (addDays * 24 * 60 * 60 * 1000);
            newdate.setTime(newtimems);

            return newdate;
        },

        getData: function() {
            return datePickerData;
        },

        getDateString: function(date) {
            return date.format('yyyy-MM-dd');
        },

        showDatePicker: function(controlId) {
        $(controlId).attr('readonly', 'readonly');
        $(controlId).datepicker(this.getData());
        },

        setSelectEvent: function(inTimeControlId, outTimeControlId, autoShowOutTimeControl) {
            $(inTimeControlId).data("datepicker").settings.onSelect = function(selectedDate) {
                var instance = $(inTimeControlId).data("datepicker");
                var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
                $(outTimeControlId).data("datepicker").settings.minDate = chipDate.addDays(date, 1);
                // 判断预订间隔时间是否超出了允许预订的最大日期
                // todo...
                $(outTimeControlId).data("datepicker").settings.maxDate = chipDate.addDays(date, resvDateSpan);
                if (autoShowOutTimeControl) {
                    setTimeout("$('" + outTimeControlId + "').focus();", 200);
                }
            }
        }
        
    }
} ();

var chipLoader = function() {
    return {
        initReservation: function() {
            $("#resvControlsSubmit").click(function() {
                var cityCode = $("#hdcitycode").val();
                var cityName = $("#cityname").val();
                var areaCode = $("#hdSQXZ").val();
                var inDate = $("#datepickerin").val();
                var outDate = $("#datepickerout").val();
                var areaType = $("#hdSQXZType").val();
                var innName = $("#resv_innName_txt").val();
                if (innName == "<关键字查询>")
                    innName = "";

                if (cityCode == '' || cityName == '') {
                    chipMsg('请选择城市。');
                } else if (inDate == '') {
                    chipMsg('请选择入住日期。');
                } else if (outDate == '') {
                    chipMsg('请选择离店日期。');
                } else if (chipDate.addDays(new Date(Date.parse(inDate.replace(/-/g, "/"))), 30) <= new Date(Date.parse(outDate.replace(/-/g, "/")))) {
                    chipMsg('离店时间不能超过入住时间30天。');
                }
                else {
                    //alert(url);
                    chipWaitingMsg();
                    inDate = inDate.substring(0, 10);
                    outDate = outDate.substring(0, 10);
                    var url = chipVirtualDir + 'reservation/search.aspx' + '?in=' + inDate + '&out=' + outDate + '&city=' + cityCode + '&type=' + areaType + '&area=' + areaCode + '&inn=' + escape(innName);
                    location.href = url;
                    // 接收中文参数
                    //string name = Server.UrlDecode(Request.QueryString["Name"]); 
                }
            });

            chipDate.showDatePicker("#datepickerin,#datepickerout");
            chipDate.setSelectEvent("#datepickerin", "#datepickerout", true);
        }

    }
} ();

var chipDateNoMax = Date.prototype = function() {
    var datePickerData = {
        numberOfMonths: 2,
        stepMonths: 2,
        changeMonth: false,
        changeYear: false,
        minDate: new Date(), // $('#currentServerDate').val(),
        //maxDate: '2030-1-1',
        dateFormat: "yy-mm-dd",
        // slideDown: 'fadeIn',
        // yearRange: 'c:c+50',
        // defaultDate: "+1d",
        firstDay: 1,
        monthNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
        monthNamesShort: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], //['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
        dayNames: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
        dayNamesShort: ['日', '一', '二', '三', '四', '五', '六'],
        dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'],
        closeText: '关闭',
        currentText: '今天',
        weekHeader: '周',
        hideIfNoPrevNext: true,
        //        navigationAsDateFormat: true,
        //        selectOtherMonths:true,
        prevText: '<<',
        nextText: '>>',
        showMonthAfterYear: true,
        showWeek: false,
        // gotoCurrent:true,
        // autoSize: false,
        // appendText:'',
        // showCurrentAtPos: 0,
        showButtonPanel: false,
        changeYear: false
        //        onSelect: function(selectedDate) {
        //            alert(selectedDate);
        //            return;
        //            var option = (this.id == "datepickerin") ? "minDate" : "maxDate";
        //            var instance = $(this).data("datepicker");
        //            var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
        //            var nextDate = chipDate.addDays(date, 1);
        //            // dates.not(this).datepicker("option", option, nextDate);

        //            if (this.id == "datepickerin") {
        //                dates.not(this).datepicker("option", "maxDate", chipDate.addDays(date, 30));
        //                dates.not(this).datepicker("option", "minDate", chipDate.addDays(date, 1));
        //                setTimeout("$('#datepickerout').focus();", 200);
        //            }
        //        }
    };

    return {
        getDate: function(date) {
            $.datepicker.parseDate(datePickerData.dateFormat || $.datepicker._defaults.dateFormat, date, instance.settings);
        },

        addDays: function(date, addDays) {
            var year = date.getFullYear();
            var month = date.getMonth();
            var date = date.getDate();
            var newdate = new Date(year, month, date);
            var newtimems = newdate.getTime() + (addDays * 24 * 60 * 60 * 1000);
            newdate.setTime(newtimems);

            return newdate;
        },

        getData: function() {
            return datePickerData;
        },

        getDateString: function(date) {
            return date.format('yyyy-MM-dd');
        },

        showDatePicker: function(controlId) {
            $(controlId).attr('readonly', 'readonly');
            $(controlId).datepicker(this.getData());
        },

        destroyDatePicker: function(controlId) {
            $(controlId).attr('readonly', '');
            $(controlId).datepicker( "destroy" );
        },

        setSelectEvent: function(inTimeControlId, outTimeControlId, autoShowOutTimeControl) {
            $(inTimeControlId).data("datepicker").settings.onSelect = function(selectedDate) {
                var instance = $(inTimeControlId).data("datepicker");
                var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
                $(outTimeControlId).data("datepicker").settings.minDate = chipDate.addDays(date, 1);
                $(outTimeControlId).data("datepicker").settings.maxDate = chipDate.addDays(date, 30);
                if (autoShowOutTimeControl) {
                    setTimeout("$('" + outTimeControlId + "').focus();", 200);
                }
            }
        }
    }
} ();

