Ext.namespace("MGNT.ext");
MGNT.ext.DateSingle = Ext.extend(Ext.BoxComponent, {
  alwaysShow: false,
  showSubmitButton: false,
  current_values:{},
  resetOnClose: true,
  showToday: false,
  minDate: new Date().addYears(-10),
  maxDate: new Date().addMinutes(new Date().getTimezoneOffset()),
  future: true,
  renderTo: "",
  presetsToShow: ["today", "yesterday"],
  values: null,
  defaultPreset: "today",
  submitPresetName: false,
  dateFormat: "Y-m-d",
  alignMode: "tl-bl?",
	initComponent: function () {
        MGNT.ext.DateRange.superclass.initComponent.apply(this, arguments);
        this.el = Ext.get(this.renderTo);
        this.enableLink();
        if (this.future) {
            this.defaultPreset = "next_7";
            this.minDate = new Date().addYears(-10);
            this.maxDate = new Date().addYears(10)
        }
        this.minDate.clearTime();
        this.maxDate.clearTime();
		    this.range_data = this.createRanges();
        this.addEvents({
            presetClick: true
        });
        this.current_values = {
            start_date: this.minDate,
            end_date: this.maxDate
        };
        this.previous_values = Ext.apply({}, this.current_values)
    }, onRender: function (a) {
        this.display_block = Ext.get(Ext.DomHelper.insertAfter(a, {
            tag: "div",
            cls: "dr-main-block single"
        }));
        this.realign();
        if (this.alwaysShow) {
            this.display_block.addClass("dr-main-block-inline")
        } else {
            this.display_block.setDisplayed(false)
        }
        if (!this.presetsToShow) {
            this.display_block.addClass("dr-main-block-no-preset")
        }
        this.render_presets();
        this.render_custom_ranges();
        if (this.showSubmitButton) {
            this.render_submit_btn()
        }
        this.render_status();
        this.fieldset = Ext.get(Ext.DomHelper.insertAfter(a, {
            tag: "fieldset",
            cls: "dr-values"
        }));
        this.set_default_value()
    }, render_custom_ranges: function () {
        if (!this.alwayShow) {
            Ext.DomHelper.append(this.display_block, {
                tag: "h3",
                cls: "dr-custom-heading",
                html: _("Date Range")
            })
        }
        this.custom_block = Ext.get(Ext.DomHelper.append(this.display_block, {
            tag: "div",
            cls: "dr-custom-block"
        }));
        this.pickerBlock = Ext.get(Ext.DomHelper.append(this.custom_block, {
            tag: "div",
            cls: "dr-picker-block"
        }));
        var a = this.render_picker(this.pickerBlock);
        this.start_picker = a[0];
    },
	render_picker: function (a) {
        var e = new MGNT.ext.HighlightDatePicker({
            showToday: this.showToday,
            alwaysShow: this.alwaysShow
        });
		    e.on( "calendarUpdate", this.onCalendarUpdate, this ); // MARK: Register calendar update listener
        e.render(Ext.DomHelper.append(a, {
            tag: "div",
            cls: "dr-picker1"
        }));
        e.setMinDate(this.minDate);
        e.on("select", this.calendar_click, this);
        var d = Ext.get(Ext.DomHelper.append(a, {
            tag: "input",
            type: "text",
            cls: "dr-textpick1",
            tabindex: 100
        }));
		    this.startField = d;
        d.on("keyup", this.date_text_keyup.createDelegate(this, [d, e, "start_date"]));
        d.on("blur", this.date_text_reformat.createDelegate(this, [d, "start_date"]));
        new MGNT.TextInputLabeler(_("Start Date"), d.id);
        return [e]
    }, render_submit_btn: function () {
        Ext.DomHelper.append(this.display_block, {
            tag: "div",
            cls: "dr-button-bar",
            children: [{
                tag: "input",
                type: "submit",
                cls: "dr-submit-btn",
                value: _("OK"),
                tabindex: 101
            }, {
                tag: "a",
                href: "#",
                html: _("Cancel"),
                cls: "dr-cancel-btn",
                tabindex: 102
            }]
        });
        this.display_block.select(".dr-cancel-btn").on("click", this.popup_close, this);
		    this.display_block.select(".dr-submit-btn").on("click", this.commit_date, this);
        /*if (this.onSubmit) {
            this.display_block.select(".dr-submit-btn").on("click", this.onSubmit, this)
        }*/
    }, render_presets: function () {
        if (this.presetsToShow) {
            Ext.DomHelper.append(this.display_block, {
                tag: "h3",
                cls: "dr-preset-heading",
                html: _("Preset Range")
            });
            var a = {
                tag: "ul",
                cls: "dr-preset-block",
                children: []
            };
            Ext.each(this.presetsToShow, function (b) {
                a.children.push({
                    tag: "li",
                    children: [{
                        tag: "a",
                        href: "#",
                        rel: b,
                        cls: "quickDate" + (this.range_data[b].cls ? " " + this.range_data[b].cls : ""),
                        html: this.range_data[b].name
                    }]
                })
            }, this);
            this.preset_block = Ext.DomHelper.append(this.display_block, a);
            this.preset_block = Ext.get(this.preset_block);
            this.display_block.on("click", this.display_block_click, this)
        }
    }, render_status: function () {
        this.status_block = Ext.DomHelper.append(this.display_block, {
            tag: "div",
            cls: "dr-status"
        });
        this.status_block = Ext.get(this.status_block);
        if (!this.alwaysShow) {
            this.status_block.setDisplayed(false)
        }
    }, realign: function () {
        if (!this.alwaysShow) {
            this.display_block.alignTo(this.el, this.alignMode)
        }
    }, set_default_value: function () {
        if (this.values) {
            var c = {};
            for (var b in this.values) {
                if (typeof this.values[b] == "string") {
                    c[b] = Date.parseDate(this.values[b], "m-d-Y")
                } else {
                    c[b] = this.values[b]
                }
            }
            if (this.compareMode && c.start_date2) {
                this.comparePickers.query("input")[0].checked = true
            }
            this.set_date_values(c);
            this.search_preset_match(c);
            if (this.compareMode && !c.start_date2) {
                var a = Math.round((c.end_date - c.start_date) / (24 * 60 * 60 * 1000)) + 1;
                c.start_date2 = c.start_date.clone().addDays(-a);
                c.end_date2 = c.start_date.clone().addDays(-1)
            }
            this.set_calendar_values(c)
        } else {
            this.set_preset(this.defaultPreset)
        }
    }, date_text_keyup: function (d, b, a) {
        var c = {};
        c[a] = Date.parse(d.getValue());
        if (c[a] !== null && this.check_typed_date(c, a)) {
            d.setStyle("color", "#000000");
            d.dom.title = "";
            b.setValue(c[a]);
            this.calendar_click(false)
        }
    }, date_text_reformat: function (c, a, b) {
        if (!b || !(b[a] instanceof Date)) {
            b = {};
            if (c.getValue() !== "") {
                var d = Date.parse(c.getValue());
                if (d === null) {
                    c.setStyle("color", "#ff0000");
                    c.dom.title = _("Couldn't understand this date");
                    return false
                } else {
                    b[a] = d
                }
            } else {
                return false
            }
        }
        if (!this.check_typed_date(b, a)) {
            c.setStyle("color", "#ff0000");
            c.dom.title = _("This date is not within the valid range");
            return false
        } else {
            if (c.hasClass("labelInput")) {
                c.removeClass("labelInput");
                c.addClass("userInput")
            }
            c.dom.value = b[a].format(this.dateFormat)
        }
    }, check_typed_date: function (b, a) {
        if (b[a]) {
            var f = b[a].clone()
        }
        if (!f || f < this.minDate || f > this.maxDate) {
            return false
        }
        if (!b.start_date || !b.end_date) {
            var e = this.current_values
        } else {
            var e = b
        }
        var c = false;
        switch (a) {
        case "start_date":
            if (f <= this.maxDate) {
                c = true
            }
            break;
        }
        return c
    }, range_display_click_blank: function (b, a) {
        if (b) {
            b.stopEvent()
        }
    }, range_display_click: function (b, a) {
        if (b) {
            b.stopEvent()
        }
        if (this.display_block.isDisplayed()) {
            this.popup_close()
        } else {
            if (!this.alwaysShow) {
                if (Ext.isIE6) {
                    this.display_block.setDisplayed(true)
                } else {
                    this.display_block.fadeIn({
                        useDisplay: true,
                        duration: 0.25
                    })
                }
                this.realign();
                Ext.getBody().on("click", this.popup_close, this)
            }
            this.previous_values = Ext.apply({}, this.current_values)
        }
    }, calendar_click: function (c, b) {
       
	   a = {
			start_date: this.start_picker.getValue()
		};
	   
		this.set_date_values(a);
		if (c) {
			this.set_textfield_values(a)
		}
		this.search_preset_match(a)
	   
    }, display_block_click: function (b, a) {
        a = Ext.get(a);
        b.stopPropagation();
        if (a.hasClass("quickDate")) {
            b.preventDefault();
            this.set_preset(a.dom.getAttribute("rel"));
            this.mark_preset_selected(a.dom.getAttribute("rel"));
            this.fireEvent("presetClick", a.dom.getAttribute("rel"))
        }
    },
	commit_date: function (b, a) {
        if (a && b) {
            if (Ext.get(a).is(".dr-submit-btn"))
			{
				b.stopEvent()
			}
        }
        if (!this.alwaysShow) {
            if (Ext.isIE6) {
                this.display_block.setDisplayed(false)
            } else {
                this.display_block.fadeOut({
                    useDisplay: true,
                    duration: 0.2
                })
            }
            Ext.getBody().un("click", this.popup_close, this);
			this.set_calendar_values(this.current_values);
			this.set_textfield_values(this.current_values);
			this.set_date_values(this.current_values);
			this.fireEvent( "dateRangeChange", this, this.current_values );
        }
    },
	popup_close: function (b, a) {
        if (a && b) {
            if (Ext.get(a).is(".dr-cancel-btn"))
			{
				b.stopEvent()
			} else if (Ext.get(a).is(".dr-submit-btn"))
			{
				b.stopEvent()
			}
        }
        if (!this.alwaysShow) {
            if (Ext.isIE6) {
                this.display_block.setDisplayed(false)
            } else {
                this.display_block.fadeOut({
                    useDisplay: true,
                    duration: 0.2
                })
            }
            Ext.getBody().un("click", this.popup_close, this);
            if (this.resetOnClose) {
                this.set_calendar_values(this.previous_values);
                this.set_textfield_values(this.previous_values);
                this.set_date_values(this.previous_values)
            }
        }
    }, set_preset: function (b) {
        var a = {
            start_date: this.range_data[b].s,
            end_date: this.range_data[b].e,
            dateSelection: b
        };
        if (this.compareMode && this.range_data[b].s2) {
            this.comparePickers.query("input")[0].checked = true;
            a.start_date2 = this.range_data[b].s2;
            a.end_date2 = this.range_data[b].e2
        }
        this.set_calendar_values(a);
        this.set_textfield_values(a);
        this.set_date_values(a)
    }, set_date_values: function (a) {
        if (!this.validate_ranges(a)) {
            return false
        }
        this.fieldset.update("");
        for (var b in a) {
            if (b == "dateSelection" || !a[b]) {
                continue
            }
            Ext.DomHelper.append(this.fieldset, {
                tag: "input",
                type: "hidden",
                name: b,
                value: a[b].format("Y-m-d")
            })
        }
        if (this.submitPresetName) {
            this.preset_name_field = Ext.DomHelper.append(this.fieldset, {
                tag: "input",
                type: "hidden",
                name: "date_preset",
                value: ""
            })
        }
        //this.start_picker.highlightEnd = a.start_date;
        //this.start_picker.setMaxDate(a.start_date);
        this.current_values = a;
        this.display_summary_text(a)
    }, search_preset_match: function (a) {
        if (!this.presetsToShow) {
            return false
        }
        Ext.each(this.presetsToShow, function (b) {
            if (this.compareMode && a.start_date2) {
                if (!this.range_data[b].s2) {
                    return true
                }
                if (this.range_data[b].s.getTime() == a.start_date.getTime() && this.range_data[b].e.getTime() == a.end_date.getTime() && this.range_data[b].s2.getTime() == a.start_date2.getTime() && this.range_data[b].e2.getTime() == a.end_date2.getTime()) {
                    this.mark_preset_selected(b);
                    return false
                }
            } else {
                if (this.range_data[b].s && this.range_data[b].s.getTime() == a.start_date.getTime()) {
                    this.mark_preset_selected(b);
                    return false
                }
            }
        }, this)
    }, mark_preset_selected: function (b, a) {
        if (this.presetsToShow) {
            this.preset_block.select("a.quickDate").removeClass("selected")
        }
        if (a) {
            Ext.get(a).addClass("selected");
            b = Ext.get(a).dom.getAttribute("rel")
        } else {
            Ext.select(".quickDate[rel=" + b + "]").addClass("selected")
        }
        if (this.preset_name_field) {
            this.preset_name_field.value = b
        }
    }, set_calendar_values: function (a) {
        this.start_picker.setValue(a.start_date);
    }, set_textfield_values: function (a) {
        this.date_text_reformat(Ext.get(this.display_block.query("input.dr-textpick1")[0]), "start_date", a);
    }, display_summary_text: function (a) {
    	var dateTextEl = Ext.get('quick_date_link');
        var b = '<span id="dateText">' + a.start_date.format(this.dateFormat) + "</span>";
        if (this.alwaysShow) {
            this.status_block.update(b)
        } else {
        	dateTextEl.update(b);
            if (this.compareMode) {
                this.realign()
            }
        }
    }, validate_ranges: function (b) {
        var e = true;
        var a = "";
        if (this.compareMode && b.start_date2) {
            var d = Math.round((b.end_date - b.start_date) / (24 * 60 * 60 * 1000)) + 1;
            var c = Math.round((b.end_date2 - b.start_date2) / (24 * 60 * 60 * 1000)) + 1;
            if (b.start_date2 > b.start_date || b.end_date2 > b.end_date) {
                e = false;
                a = _("Comparison date range must be before main date range")
            } else {
                if (d != c) {
                    e = false;
                    a = _("Main range ({$r1} days) and comparison range ({$r2} days) are different length", "", 1, {
                        r1: d,
                        r2: c
                    })
                }
            }
            if (!e) {
                this.status_block.update(a);
                this.status_block.addClass("dr-error-msg");
                this.status_block.setDisplayed(true);
                return false
            }
        }
        this.status_block.removeClass("dr-error-msg");
        if (!this.alwaysShow) {
            this.status_block.setDisplayed(false)
        }
        return true
    }, getPastDateWithMinDate: function (a, b) {
        return (a.clone().addDays(b) > this.minDate) ? a.clone().addDays(b) : this.minDate
    }, getFirstDateOfQuarter: function (c) {
        var a = c.clone().moveToFirstDayOfMonth();
        var b = a.getMonth() % 3;
        return a.addMonths(-b)
    }, createRanges: function () {
        // var v = this.maxDate;
        var v = new Date().addMinutes(new Date().getTimezoneOffset());
        var l = this.getPastDateWithMinDate(v, -1);
        var n = this.getPastDateWithMinDate(v, -6);
        var e = this.getPastDateWithMinDate(v, -29);
        var f = this.getPastDateWithMinDate(v, -89);
        var j = v.clone().moveToFirstDayOfMonth();
        var i = j.clone().addDays(-1);
        var s = i.clone().moveToFirstDayOfMonth();
        var h = this.getFirstDateOfQuarter(v);
        var x = v.clone().setWeek(1).moveToFirstDayOfMonth();
        var A = h.clone().addDays(-1);
        var o = this.getFirstDateOfQuarter(A);
        var p = {};
        p.today = {
            name: _("Today"),
            s: v,
            e: v
        };
        p.yesterday = {
            name: _("Yesterday"),
            s: l,
            e: l
        };
        p.previous_7 = {
            name: _("Last 7 Days"),
            s: n,
            e: v
        };
        p.previous_30 = {
            name: _("Last 30 Days"),
            s: e,
            e: v
        };
        p.previous_90 = {
            name: _("Last 90 Days"),
            s: f,
            e: v
        };
        p.last_month = {
            name: _("Previous Month"),
            s: s,
            e: i
        };
        p.last_quarter = {
            name: _("Previous Quarter"),
            s: o,
            e: A
        };
        p.month_to_date = {
            name: _("Month to Date"),
            s: j,
            e: v
        };
        p.quarter_to_date = {
            name: _("Quarter to Date"),
            s: h,
            e: v
        };
        p.year_to_date = {
            name: _("Year to Date"),
            s: x,
            e: v
        };
        return p
    }, disableLink: function () {
        this.el.removeListener("click", this.range_display_click, this);
        this.el.removeListener("click", this.range_display_click_blank, this);
        this.el.on("click", this.range_display_click_blank, this)
    }, enableLink: function () {
        this.el.removeListener("click", this.range_display_click_blank, this);
        this.el.removeListener("click", this.range_display_click, this);
        this.el.on("click", this.range_display_click, this)
    }, onCalendarUpdate: function ( c, e )
	{
		
	}
								 
});
Ext.reg("datesingle", MGNT.ext.DateSingle);
MGNT.ext.DateRange = Ext.extend(Ext.BoxComponent, {
    compareMode: false,
    alwaysShow: false,
    current_values:{},
    showSubmitButton: false,
    resetOnClose: true,
    showToday: false,
    minDate: new Date().addYears(-10),
	maxDate: new Date().addMinutes(new Date().getTimezoneOffset()),
    future: true,
    renderTo: "",
    presetsToShow: ["today", "yesterday", "previous_7", "previous_30", "previous_90", "last_month", "last_quarter", "month_to_date", "quarter_to_date"],
    values: null,
    defaultPreset: "previous_7",
    submitPresetName: false,
    dateFormat: "Y-m-d",
    rangePrefix: _("Date range: "),
    rangeSeparator: _(" to "),
    alignMode: "tl-bl?",
    initComponent: function () {
        MGNT.ext.DateRange.superclass.initComponent.apply(this, arguments);
        this.el = Ext.get(this.renderTo);
        this.enableLink();
        if (!this.compareMode) {
            if (this.defaultPreset == "compare_7_7") {
                this.defaultPreset = "previous_7"
            } else {
                if (this.defaultPreset == "compare_30_30") {
                    this.defaultPreset = "previous_30"
                } else {
                    if (this.defaultPreset == "compare_90_90") {
                        this.defaultPreset = "previous_90"
                    }
                }
            }
        }
        if (this.future) {
            this.defaultPreset = "next_7";
            this.minDate = new Date().addYears(-10);
            this.maxDate = new Date().addYears(10)
        }
        this.minDate.clearTime();
        this.maxDate.clearTime();
        this.range_data = this.createRanges();
        this.addEvents({
            presetClick: true
        });
        this.current_values = {
            start_date: this.minDate,
            end_date: this.maxDate
        };
        this.previous_values = Ext.apply({}, this.current_values)
    }, onRender: function (a) {
        this.display_block = Ext.get(Ext.DomHelper.insertAfter(a, {
            tag: "div",
            cls: "dr-main-block"
        }));
        this.realign();
        if (this.alwaysShow) {
            this.display_block.addClass("dr-main-block-inline")
        } else {
            this.display_block.setDisplayed(false)
        }
        if (!this.presetsToShow) {
            this.display_block.addClass("dr-main-block-no-preset")
        }
        this.render_presets();
        this.render_custom_ranges();
        if (this.showSubmitButton) {
            this.render_submit_btn()
        }
        this.render_status();
        this.fieldset = Ext.get(Ext.DomHelper.insertAfter(a, {
            tag: "fieldset",
            cls: "dr-values"
        }));
        this.set_default_value()
    }, render_custom_ranges: function () {
        if (!this.alwayShow) {
            Ext.DomHelper.append(this.display_block, {
                tag: "h3",
                cls: "dr-custom-heading",
                html: _("Date Range")
            })
        }
        this.custom_block = Ext.get(Ext.DomHelper.append(this.display_block, {
            tag: "div",
            cls: "dr-custom-block"
        }));
        this.pickerBlock = Ext.get(Ext.DomHelper.append(this.custom_block, {
            tag: "div",
            cls: "dr-picker-block"
        }));
        var a = this.render_picker_pair(this.pickerBlock);
        this.start_picker = a[0];
        this.end_picker = a[1];
        if (this.compareMode) {
            this.render_compare_block()
        }
    }, render_compare_block: function () {
        this.comparePickers = Ext.get(Ext.DomHelper.append(this.custom_block, {
            tag: "div",
            cls: "dr-picker-block",
            children: [{
                tag: "label",
                cls: "dr-compare",
                children: [{
                    tag: "input",
                    type: "checkbox",
                    name: "date_compare"
                }, {
                    tag: "span",
                    html: _("Show comparison values from these dates")
                }]
            }]
        }));
        this.comparePickers.select("input").on("click", this.calendar_click, this);
        pickers = this.render_picker_pair(this.comparePickers);
        this.start_picker2 = pickers[0];
        this.end_picker2 = pickers[1];
        this.comparePickers.setDisplayed(false);
        this.compareTabs = Ext.DomHelper.insertFirst(this.custom_block, {
            tag: "div",
            cls: "dr-tab-bar",
            children: [{
                tag: "a",
                href: "#",
                cls: "dr-tab-main dr-tab-selected",
                html: _("Main Range")
            }, {
                tag: "a",
                href: "#",
                cls: "dr-tab-compare",
                html: _("Compare To")
            }]
        });
        Ext.select("a", true, this.compareTabs).on("click", this.compare_tab_click, this)
    }, render_picker_pair: function (a) {
        var e = new MGNT.ext.HighlightDatePicker({
            showToday: this.showToday,
            alwaysShow: this.alwaysShow
        });
        e.render(Ext.DomHelper.append(a, {
            tag: "div",
            cls: "dr-picker1"
        }));
        e.setMinDate(this.minDate);
        e.on("select", this.calendar_click, this);
        var d = Ext.get(Ext.DomHelper.append(a, {
            tag: "input",
            type: "text",
            cls: "dr-textpick1",
            tabindex: 100
        }));
        d.on("keyup", this.date_text_keyup.createDelegate(this, [d, e, "start_date"]));
        d.on("blur", this.date_text_reformat.createDelegate(this, [d, "start_date"]));
        new MGNT.TextInputLabeler(_("Start Date"), d.id);
        var b = new MGNT.ext.HighlightDatePicker({
            showToday: this.showToday,
            alwaysShow: this.alwaysShow
        });
        b.render(Ext.DomHelper.append(a, {
            tag: "div",
            cls: "dr-picker2"
        }));
        b.setMaxDate(this.maxDate);
        b.on("select", this.calendar_click, this);
        var c = Ext.get(Ext.DomHelper.append(a, {
            tag: "input",
            type: "text",
            cls: "dr-textpick2",
            tabindex: 200
        }));
        c.on("keyup", this.date_text_keyup.createDelegate(this, [c, b, "end_date"]));
        c.on("blur", this.date_text_reformat.createDelegate(this, [c, "end_date"]));
        new MGNT.TextInputLabeler(_("End Date"), c.id);
        return [e, b]
    }, render_submit_btn: function () {
        Ext.DomHelper.append(this.display_block, {
            tag: "div",
            cls: "dr-button-bar",
            children: [{
                tag: "input",
                type: "submit",
                cls: "dr-submit-btn",
                value: _("OK"),
                tabindex: 201
            }, {
                tag: "a",
                href: "#",
                html: _("Cancel"),
                cls: "dr-cancel-btn",
                tabindex: 202
            }]
        });
        this.display_block.select(".dr-cancel-btn").on("click", this.popup_close, this);
		this.display_block.select(".dr-submit-btn").on("click", this.commit_date, this);
        /*if (this.onSubmit) {
            this.display_block.select(".dr-submit-btn").on("click", this.onSubmit, this)
        }*/
    }, render_presets: function () {
        if (this.presetsToShow) {
            Ext.DomHelper.append(this.display_block, {
                tag: "h3",
                cls: "dr-preset-heading",
                html: _("Preset Range")
            });
            var a = {
                tag: "ul",
                cls: "dr-preset-block",
                children: []
            };
            Ext.each(this.presetsToShow, function (b) {
                a.children.push({
                    tag: "li",
                    children: [{
                        tag: "a",
                        href: "#",
                        rel: b,
                        cls: "quickDate" + (this.range_data[b].cls ? " " + this.range_data[b].cls : ""),
                        html: this.range_data[b].name
                    }]
                })
            }, this);
            this.preset_block = Ext.DomHelper.append(this.display_block, a);
            this.preset_block = Ext.get(this.preset_block);
            this.display_block.on("click", this.display_block_click, this)
        }
    }, render_status: function () {
        this.status_block = Ext.DomHelper.append(this.display_block, {
            tag: "div",
            cls: "dr-status"
        });
        this.status_block = Ext.get(this.status_block);
        if (!this.alwaysShow) {
            this.status_block.setDisplayed(false)
        }
    }, realign: function () {
        if (!this.alwaysShow) {
            this.display_block.alignTo(this.el, this.alignMode)
        }
    }, set_default_value: function () {
        if (this.values) {
            var c = {};
            for (var b in this.values) {
                if (typeof this.values[b] == "string") {
                    c[b] = Date.parseDate(this.values[b], "m-d-Y")
                } else {
                    c[b] = this.values[b]
                }
            }
            if (this.compareMode && c.start_date2) {
                this.comparePickers.query("input")[0].checked = true
            }
            this.set_date_values(c);
            this.search_preset_match(c);
            if (this.compareMode && !c.start_date2) {
                var a = Math.round((c.end_date - c.start_date) / (24 * 60 * 60 * 1000)) + 1;
                c.start_date2 = c.start_date.clone().addDays(-a);
                c.end_date2 = c.start_date.clone().addDays(-1)
            }
            this.set_calendar_values(c)
        } else {
            this.set_preset(this.defaultPreset)
        }
    }, date_text_keyup: function (d, b, a) {
        var c = {};
        c[a] = Date.parse(d.getValue());
        if (c[a] !== null && this.check_typed_date(c, a)) {
            d.setStyle("color", "#000000");
            d.dom.title = "";
            b.setValue(c[a]);
            this.calendar_click(false)
        }
    }, date_text_reformat: function (c, a, b) {
        if (!b || !(b[a] instanceof Date)) {
            b = {};
            if (c.getValue() !== "") {
                var d = Date.parse(c.getValue());
                if (d === null) {
                    c.setStyle("color", "#ff0000");
                    c.dom.title = _("Couldn't understand this date");
                    return false
                } else {
                    b[a] = d
                }
            } else {
                return false
            }
        }
        if (!this.check_typed_date(b, a)) {
            c.setStyle("color", "#ff0000");
            c.dom.title = _("This date is not within the valid range");
            return false
        } else {
            if (c.hasClass("labelInput")) {
                c.removeClass("labelInput");
                c.addClass("userInput");
            }
            c.setStyle("color", "#000000");
            c.dom.title = "";
            c.dom.value = b[a].format(this.dateFormat)
        }
    }, check_typed_date: function (b, a) {
        if (b[a]) {
            var f = b[a].clone()
        }
        if (!f || f < this.minDate || f > this.maxDate) {
            return false
        }
        if (!b.start_date || !b.end_date) {
            var e = this.current_values
        } else {
            var e = b
        }
        var c = false;
        switch (a) {
        case "start_date":
            if (f <= e.end_date) {
                c = true
            }
            break;
        case "end_date":
            if (f >= e.start_date) {
                c = true
            }
            break;
        case "start_date2":
            if (f <= e.end_date2) {
                c = true
            }
            break;
        case "end_date2":
            if (f >= e.start_date2) {
                c = true
            }
            break
        }
        return c
    }, range_display_click_blank: function (b, a) {
        if (b) {
            b.stopEvent()
        }
    }, range_display_click: function (b, a) {
        if (b) {
            b.stopEvent()
        }
        if (this.display_block.isDisplayed()) {
            this.popup_close()
        } else {
            if (!this.alwaysShow) {
                if (Ext.isIE6) {
                    this.display_block.setDisplayed(true)
                } else {
                    this.display_block.fadeIn({
                        useDisplay: true,
                        duration: 0.25
                    })
                }
                this.realign();
                Ext.getBody().on("click", this.popup_close, this)
            }
            this.previous_values = Ext.apply({}, this.current_values)
        }
    }, calendar_click: function (c, b) {
        var a = {
            start_date: this.start_picker.getValue(),
            end_date: this.end_picker.getValue()
        };
        if (this.compareMode && this.comparePickers.query("input")[0].checked) {
            a.start_date2 = this.start_picker2.getValue();
            a.end_date2 = this.end_picker2.getValue()
        }
        this.set_date_values(a);
        if (c) {
            this.set_textfield_values(a)
        }
        this.search_preset_match(a)
    }, display_block_click: function (b, a) {
        a = Ext.get(a);
        b.stopPropagation();
        if (a.hasClass("quickDate")) {
            b.preventDefault();
            this.set_preset(a.dom.getAttribute("rel"));
            this.mark_preset_selected(a.dom.getAttribute("rel"));
            this.fireEvent("presetClick", a.dom.getAttribute("rel"))
        }
    },
	commit_date: function (b, a) {
        if (a && b) {
            if (Ext.get(a).is(".dr-submit-btn"))
			{
				b.stopEvent()
			}
        }
        if (!this.alwaysShow) {
            if (Ext.isIE6) {
                this.display_block.setDisplayed(false)
            } else {
                this.display_block.fadeOut({
                    useDisplay: true,
                    duration: 0.2
                })
            }
            var test_range = {
            		start_date: this.start_picker.activeDate,
            		end_date: this.end_picker.activeDate
            };
            var current_picker_values = {
            		start_date: this.start_picker.getValue(),
            		end_date: this.end_picker.getValue()
            }
            if (this.validate_ranges(test_range)){
            	this.current_values = test_range;
            } else {
            	this.current_values = current_picker_values;
            }
            Ext.getBody().un("click", this.popup_close, this);
            this.set_textfield_values(this.current_values);
            this.set_date_values(this.current_values);
            this.set_calendar_values(this.current_values);
			
			this.fireEvent( "dateRangeChange", this, this.current_values );
        }
    },
	popup_close: function (b, a) {
        if (a && b) {
            if (Ext.get(a).is(".dr-cancel-btn"))
			{
				b.stopEvent()
			} else if (Ext.get(a).is(".dr-submit-btn"))
			{
				b.stopEvent()
			}
        }
        if (!this.alwaysShow) {
            if (Ext.isIE6) {
                this.display_block.setDisplayed(false)
            } else {
                this.display_block.fadeOut({
                    useDisplay: true,
                    duration: 0.2
                })
            }
            Ext.getBody().un("click", this.popup_close, this);
            if (this.resetOnClose) {
                this.set_calendar_values(this.previous_values);
                this.set_textfield_values(this.previous_values);
                this.set_date_values(this.previous_values)
            }
        }
    }, compare_tab_click: function (b, a) {
        if (b) {
            b.stopEvent()
        }
        a = Ext.get(a);
        Ext.select("a", true, this.compareTabs).removeClass("dr-tab-selected");
        a.addClass("dr-tab-selected");
        if (a.hasClass("dr-tab-main")) {
            this.pickerBlock.setDisplayed(true);
            this.comparePickers.setDisplayed(false)
        } else {
            this.pickerBlock.setDisplayed(false);
            this.comparePickers.setDisplayed(true)
        }
    }, set_preset: function (b) {
        var a = {
            start_date: this.range_data[b].s,
            end_date: this.range_data[b].e,
            dateSelection: b
        };
        if (this.compareMode && this.range_data[b].s2) {
            this.comparePickers.query("input")[0].checked = true;
            a.start_date2 = this.range_data[b].s2;
            a.end_date2 = this.range_data[b].e2
        }
        this.set_calendar_values(a);
        this.set_textfield_values(a);
        this.set_date_values(a)
    }, set_date_values: function (a) {
        if (!this.validate_ranges(a)) {
            return false
        }
        this.fieldset.update("");
        for (var b in a) {
            if (b == "dateSelection" || !a[b]) {
                continue
            }
            Ext.DomHelper.append(this.fieldset, {
                tag: "input",
                type: "hidden",
                name: b,
                value: a[b].format("Y-m-d")
            })
        }
        if (this.submitPresetName) {
            this.preset_name_field = Ext.DomHelper.append(this.fieldset, {
                tag: "input",
                type: "hidden",
                name: "date_preset",
                value: ""
            })
        }
        this.start_picker.highlightEnd = a.end_date;
        this.start_picker.setMaxDate(a.end_date);
        this.end_picker.highlightStart = a.start_date;
        this.end_picker.setMinDate(a.start_date);
        this.current_values = a;
        this.display_summary_text(a)
    }, search_preset_match: function (a) {
        if (!this.presetsToShow) {
            return false
        }
        Ext.each(this.presetsToShow, function (b) {
            if (this.compareMode && a.start_date2) {
                if (!this.range_data[b].s2) {
                    return true
                }
                if (this.range_data[b].s.getTime() == a.start_date.getTime() && this.range_data[b].e.getTime() == a.end_date.getTime() && this.range_data[b].s2.getTime() == a.start_date2.getTime() && this.range_data[b].e2.getTime() == a.end_date2.getTime()) {
                    this.mark_preset_selected(b);
                    return false
                }
            } else {
                if (this.range_data[b].s && this.range_data[b].s.getTime() == a.start_date.getTime() && this.range_data[b].e.getTime() == a.end_date.getTime()) {
                    this.mark_preset_selected(b);
                    return false
                }
            }
        }, this)
    }, mark_preset_selected: function (b, a) {
        if (this.presetsToShow) {
            this.preset_block.select("a.quickDate").removeClass("selected")
        }
        if (a) {
            Ext.get(a).addClass("selected");
            b = Ext.get(a).dom.getAttribute("rel")
        } else {
            Ext.select(".quickDate[rel=" + b + "]").addClass("selected")
        }
        if (this.preset_name_field) {
            this.preset_name_field.value = b
        }
    }, set_calendar_values: function (a) {
        this.start_picker.setValue(a.start_date);
        this.end_picker.setValue(a.end_date);
        if (a.start_date2) {
            this.start_picker2.setValue(a.start_date2);
            this.end_picker2.setValue(a.end_date2)
        }
    }, set_textfield_values: function (a) {
        this.date_text_reformat(Ext.get(this.display_block.query("input.dr-textpick1")[0]), "start_date", a);
        this.date_text_reformat(Ext.get(this.display_block.query("input.dr-textpick2")[0]), "end_date", a);
        if (a.start_date2) {
            this.date_text_reformat(Ext.get(this.display_block.query("input.dr-textpick1")[1]), "start_date2", a);
            this.date_text_reformat(Ext.get(this.display_block.query("input.dr-textpick2")[1]), "end_date2", a)
        }
    }, display_summary_text: function (a) {
    	var dateTextEl = Ext.get('quick_date_link');
        var b = this.rangePrefix + '<span id="dateText">' + a.start_date.format(this.dateFormat) + this.rangeSeparator + a.end_date.format(this.dateFormat) + "</span>";
        if (this.compareMode && a.start_date2 && a.end_date2) {
            b += '<br>versus <span class="dateRangeCompare">' + a.start_date2.format(this.dateFormat) + this.rangeSeparator + a.end_date2.format(this.dateFormat) + "</span>"
        }
        if (this.alwaysShow) {
            this.status_block.update(b)
        } else {
        	dateTextEl.update(b);
            if (this.compareMode) {
                this.realign()
            }
        }
    }, validate_ranges: function (b) {
        var e = true;
        var a = "";
        if (this.compareMode && b.start_date2) {
            var d = Math.round((b.end_date - b.start_date) / (24 * 60 * 60 * 1000)) + 1;
            var c = Math.round((b.end_date2 - b.start_date2) / (24 * 60 * 60 * 1000)) + 1;
            if (b.start_date2 > b.start_date || b.end_date2 > b.end_date) {
                e = false;
                a = _("Comparison date range must be before main date range")
            } else {
                if (d != c) {
                    e = false;
                    a = _("Main range ({$r1} days) and comparison range ({$r2} days) are different length", "", 1, {
                        r1: d,
                        r2: c
                    })
                }
            }
            if (!e) {
                this.status_block.update(a);
                this.status_block.addClass("dr-error-msg");
                this.status_block.setDisplayed(true);
                return false
            }
        } else {
        	if (b.end_date < b.start_date){
        		return false;
        	}
        }
        this.status_block.removeClass("dr-error-msg");
        if (!this.alwaysShow) {
            this.status_block.setDisplayed(false)
        }
        return true
    }, getPastDateWithMinDate: function (a, b) {
        return (a.clone().addDays(b) > this.minDate) ? a.clone().addDays(b) : this.minDate
    }, getFirstDateOfQuarter: function (c) {
        var a = c.clone().moveToFirstDayOfMonth();
        var b = a.getMonth() % 3;
        return a.addMonths(-b)
    }, createRanges: function () {
//      var v = this.maxDate;
        var v = new Date().addMinutes(new Date().getTimezoneOffset());
        var l = this.getPastDateWithMinDate(v, -1);
        var n = this.getPastDateWithMinDate(v, -6);
        var e = this.getPastDateWithMinDate(v, -29);
        var f = this.getPastDateWithMinDate(v, -89);
        var j = v.clone().moveToFirstDayOfMonth();
        var i = j.clone().addDays(-1);
        var s = i.clone().moveToFirstDayOfMonth();
        var h = this.getFirstDateOfQuarter(v);
        var x = v.clone().setWeek(1).moveToFirstDayOfMonth();
        var A = h.clone().addDays(-1);
        var o = this.getFirstDateOfQuarter(A);
        var p = {};
        p.today = {
            name: _("Today"),
            s: v,
            e: v
        };
        p.yesterday = {
            name: _("Yesterday"),
            s: l,
            e: l
        };
        p.previous_7 = {
            name: _("Last 7 Days"),
            s: n,
            e: v
        };
        p.previous_30 = {
            name: _("Last 30 Days"),
            s: e,
            e: v
        };
        p.previous_90 = {
            name: _("Last 90 Days"),
            s: f,
            e: v
        };
        p.last_month = {
            name: _("Previous Month"),
            s: s,
            e: i
        };
        p.last_quarter = {
            name: _("Previous Quarter"),
            s: o,
            e: A
        };
        p.month_to_date = {
            name: _("Month to Date"),
            s: j,
            e: v
        };
        p.quarter_to_date = {
            name: _("Quarter to Date"),
            s: h,
            e: v
        };
        p.year_to_date = {
            name: _("Year to Date"),
            s: x,
            e: v
        };
        if (this.compareMode) {
            var w = this.getPastDateWithMinDate(v, -13);
            var g = this.getPastDateWithMinDate(v, -7);
            var k = this.getPastDateWithMinDate(v, -59);
            var u = this.getPastDateWithMinDate(v, -30);
            var z = this.getPastDateWithMinDate(v, -179);
            var q = this.getPastDateWithMinDate(v, -90);
            p.compare_7_7 = {
                name: _("Previous 7d Over 7d"),
                s: n,
                e: v,
                s2: w,
                e2: g
            };
            p.compare_30_30 = {
                name: _("Previous 30d Over 30d"),
                s: e,
                e: v,
                s2: k,
                e2: u
            };
            p.compare_90_90 = {
                name: _("Previous 90d Over 90d"),
                s: f,
                e: v,
                s2: z,
                e2: q
            }
        }
        if (this.future) {
            var v = this.minDate;
            var c = v.clone().addDays(7);
            var y = v.clone().addDays(30);
            var b = v.clone().addDays(90);
            var a = v.clone().addMonths(1);
            var t = a.clone().moveToLastDayOfMonth();
            var m = a.clone().moveToFirstDayOfMonth();
            p.next_7 = {
                name: _("Next 7 Days"),
                s: n,
                e: v
            };
            p.next_30 = {
                name: _("Next 30 Days"),
                s: e,
                e: v
            };
            p.next_90 = {
                name: _("Next 90 Days"),
                s: f,
                e: v
            };
            p.next_month = {
                name: _("Following Month"),
                s: m,
                e: t
            }
        }
        return p
    }, disableLink: function () {
        this.el.removeListener("click", this.range_display_click, this);
        this.el.removeListener("click", this.range_display_click_blank, this);
        this.el.on("click", this.range_display_click_blank, this)
    }, enableLink: function () {  	
        this.el.removeListener("click", this.range_display_click_blank, this);
        this.el.removeListener("click", this.range_display_click, this);
        this.el.on("click", this.range_display_click, this)
    }
});
Ext.reg("daterange", MGNT.ext.DateRange);
MGNT.ext.HighlightDatePicker = Ext.extend(Ext.DatePicker, {
    disabledDaysText: _("Disabled"),
    disabledDatesText: _("Disabled"),
    okText: _(" OK "),
    cancelText: _("Cancel"),
    todayText: _("Today"),
    minText: _("This date is before the minimum date"),
    maxText: _("This date is after the maximum date"),
    nextText: _("Next Month (Control+Right)"),
    prevText: _("Previous Month (Control+Left)"),
    monthYearText: _("Choose a month (Control+Up/Down to move years)"),
    dayNames: [_("Sunday"), _("Monday"), _("Tuesday"), _("Wednesday"), _("Thursday"), _("Friday"), _("Saturday")],
    monthNames: [_("January"), _("February"), _("March"), _("April"), _("May"), _("June"), _("July"), _("August"), _("September"), _("October"), _("November"), _("December")],
    format: "M/d/yy",
    alwaysShow: false,
    highlightStart: null,
    highlightEnd: null,
    setValue: function (b) {
        var a = this.value;
        this.value = b.clone().clearTime();
        if (this.el) {
            this.update(this.value)
        }
    }, onRender: function (a, h) {
        var c = ['<table cellspacing="0">', '<tr><td class="x-date-left"><a href="#" title="', this.prevText, '">&#160;</a></td><td class="x-date-middle" align="center"></td><td class="x-date-right"><a href="#" title="', this.nextText, '">&#160;</a></td></tr>', '<tr><td colspan="3"><table class="x-date-inner" cellspacing="0"><thead><tr>'];
        var g = this.dayNames;
        for (var f = 0; f < 7; f++) {
            var j = this.startDay + f;
            if (j > 6) {
                j = j - 7
            }
            var e;
            switch (j) {
            case 0:
                e = _("ABBREVIATION_FOR_SUNDAY");
                break;
            case 1:
                e = _("ABBREVIATION_FOR_MONDAY");
                break;
            case 2:
                e = _("ABBREVIATION_FOR_TUESDAY");
                break;
            case 3:
                e = _("ABBREVIATION_FOR_WEDNESDAY");
                break;
            case 4:
                e = _("ABBREVIATION_FOR_THURSDAY");
                break;
            case 5:
                e = _("ABBREVIATION_FOR_FRIDAY");
                break;
            case 6:
                e = _("ABBREVIATION_FOR_SATURDAY");
                break
            }
            c.push("<th><span>", e, "</span></th>")
        }
        c[c.length] = "</tr></thead><tbody><tr>";
        for (var f = 0; f < 42; f++) {
            if (f % 7 == 0 && f != 0) {
                c[c.length] = "</tr><tr>"
            }
            c[c.length] = '<td><a href="#" hidefocus="on" class="x-date-date" tabIndex="1"><em><span></span></em></a></td>'
        }
        c.push("</tr></tbody></table></td></tr>", this.showToday ? '<tr><td colspan="3" class="x-date-bottom" align="center"></td></tr>' : "", '</table><div class="x-date-mp"></div>');
        var b = document.createElement("div");
        b.className = "x-date-picker";
        b.innerHTML = c.join("");
        a.dom.insertBefore(b, h);
        this.el = Ext.get(b);
        this.eventEl = Ext.get(b.firstChild);
        this.leftClickRpt = new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"), {
            handler: this.showPrevMonth,
            scope: this,
            preventDefault: true,
            stopDefault: true
        });
        this.rightClickRpt = new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"), {
            handler: this.showNextMonth,
            scope: this,
            preventDefault: true,
            stopDefault: true
        });
        this.eventEl.on("mousewheel", this.handleMouseWheel, this);
        this.monthPicker = this.el.down("div.x-date-mp");
        this.monthPicker.enableDisplayMode("block");
        var n = new Ext.KeyNav(this.eventEl, {
            left: function (d) {
                d.ctrlKey ? this.showPrevMonth() : this.update(this.activeDate.clone().addDays(-1))
            }, right: function (d) {
                d.ctrlKey ? this.showNextMonth() : this.update(this.activeDate.clone().addDays(1))
            }, up: function (d) {
                d.ctrlKey ? this.showNextYear() : this.update(this.activeDate.clone().addDays(-7))
            }, down: function (d) {
                d.ctrlKey ? this.showPrevYear() : this.update(this.activeDate.clone().addDays(7))
            }, pageUp: function (d) {
                this.showNextMonth()
            }, pageDown: function (d) {
                this.showPrevMonth()
            }, enter: function (d) {
                d.stopPropagation();
                return true
            }, scope: this
        });
        this.eventEl.on("click", this.handleDateClick, this, {
            delegate: "a.x-date-date"
        });
        this.el.unselectable();
        this.cells = this.el.select("table.x-date-inner tbody td");
        this.textNodes = this.el.query("table.x-date-inner tbody span");
        this.mbtn = new Ext.Button({
            text: "&#160;",
            tooltip: this.monthYearText,
            renderTo: this.el.child("td.x-date-middle", true)
        });
        this.mbtn.on("click", this.showMonthPicker, this);
        this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu");
        if (this.showToday) {
            this.todayKeyListener = this.eventEl.addKeyListener(Ext.EventObject.SPACE, this.selectToday, this);
            var k = new Date.addMinutes(new Date().getTimezoneOffset()).toString(this.format);
            this.todayBtn = new Ext.Button({
                renderTo: this.el.child("td.x-date-bottom", true),
                text: String.format(this.todayText, k),
                tooltip: String.format(this.todayTip, k),
                handler: this.selectToday,
                scope: this
            })
        }
        if (Ext.isIE) {
            this.el.repaint()
        }
        this.update(this.value)
    }, showPrevMonth: function (a) {
        this.update(this.activeDate.clone().addMonths(-1), null, false)
    }, showNextMonth: function (a) {
        this.update(this.activeDate.clone().addMonths(1), null, false)
    }, showPrevYear: function () {
        this.update(this.activeDate.clone().addYears(-1), null, false)
    }, showNextYear: function () {
        this.update(this.activeDate.clone().addYears(1), null, false)
    }, selectToday: function () {
        this.setValue(new Date().addMinutes(new Date().getTimezoneOffset()));
        this.fireEvent("select", this, this.value)
    }, update: function (H, B, highlightDays) {
        if (highlightDays == null)
        {
          highlightDays = true;
        }
        var a = this.activeDate;
        this.activeDate = H.clone();
        if (!B && a && this.el) {
            var o = H.getTime();
            if (a.getMonth() == H.getMonth() && a.getFullYear() == H.getFullYear()) {
                this.cells.removeClass("x-date-selected");
                this.cells.each(function (d) {
                    if (d.dom.firstChild.dateValue == o) {
                        if (highlightDays)
                        {
                          d.addClass("x-date-selected");
                        }
                    }
                });
                return
            }
        }
        var j = H.getDaysInMonth();
        var p = H.clone().moveToFirstDayOfMonth();
        var f = p.getDay() - this.startDay;
        if (f <= this.startDay) {
            f += 7
        }
        var C = H.clone().addMonths(-1);
        var g = C.getDaysInMonth() - f;
        var e = this.cells.elements;
        var q = this.textNodes;
        j += f;
        var y = 86400000;
        var E = (new Date(C.getFullYear(), C.getMonth(), g)).clearTime();
        var D = new Date().addMinutes(new Date().getTimezoneOffset()).getTime();
        var u = H.clearTime().getTime();
        var s = this.minDate ? this.minDate.clearTime() : Number.NEGATIVE_INFINITY;
        var z = this.maxDate ? this.maxDate.clearTime() : Number.POSITIVE_INFINITY;
        var G = this.disabledDatesRE;
        var r = this.disabledDatesText;
        var J = this.disabledDays ? this.disabledDays.join("") : false;
        var F = this.disabledDaysText;
        var n = this.highlightStart;
        var v = this.highlightEnd;
        var A = this.format;
        if (this.showToday) {
            var l = new Date().clearTime();
            var c = (l < s || l > z || (G && A && G.test(l.toString(A))) || (J && J.indexOf(l.getDay()) != -1));
            this.todayBtn.setDisabled(c);
            this.todayKeyListener[c ? "disable" : "enable"]()
        }
        var k = function (K, d) {
            d.title = "";
            var i = E.getTime();
            d.firstChild.dateValue = i;
            if ((n && i >= n && i < u) || (v && i <= v && i > u)) {
                if (d.className == "x-date-prevday" || d.className == "x-date-nextday") {
                    d.className += " dr-selected-beyond"
                } else {
                    if (highlightDays) {
                      d.className = "dr-selected-range";
                    }
                }
            }
            if (i == D) {
                d.className += " x-date-today";
                d.title = K.todayText
            }
            if (i == u) {
              if (highlightDays) {
                d.className += " x-date-selected"
              }
            }
            if (i < s) {
                d.className = " x-date-disabled";
                d.title = K.minText;
                return
            }
            if (i > z) {
                d.className = " x-date-disabled";
                d.title = K.maxText;
                return
            }
            if (J) {
                if (J.indexOf(E.getDay()) != -1) {
                    d.title = F;
                    d.className = " x-date-disabled"
                }
            }
            if (G && A) {
                var w = E.toString(A);
                if (G.test(w)) {
                    d.title = r.replace("%0", w);
                    d.className = " x-date-disabled"
                }
            }
        };
        var x = 0;
        for (; x < f; x++) {
            q[x].innerHTML = (++g);
            E.setDate(E.getDate() + 1);
            e[x].className = "x-date-prevday";
            k(this, e[x])
        }
        for (; x < j; x++) {
            var b = x - f + 1;
            q[x].innerHTML = (b);
            E.setDate(E.getDate() + 1);
            e[x].className = "x-date-active";
            k(this, e[x])
        }
        var I = 0;
        for (; x < 42; x++) {
            q[x].innerHTML = (++I);
            E.setDate(E.getDate() + 1);
            e[x].className = "x-date-nextday";
            k(this, e[x])
        }
        this.mbtn.setText(this.monthNames[H.getMonth()] + " " + H.getFullYear());
        if (this.alwaysShow && (Ext.isIE6 || Ext.isIE7) && !this.internalRender) {
            var h = this.el.dom.firstChild;
            var m = h.offsetWidth;
            this.el.setWidth(m + this.el.getBorderWidth("lr"));
            Ext.fly(h).setWidth(m);
            this.internalRender = true
        }
    }
});
