Type.registerNamespace("AjaxControlToolkit"); AjaxControlToolkit.CalendarBehavior = function(element) { AjaxControlToolkit.CalendarBehavior.initializeBase(this, [element]); this._format = "d"; this._cssClass = "ajax__calendar"; this._enabled = true; this._animated = true; this._buttonID = null; this._layoutRequested = 0; this._layoutSuspended = false; this._selectedDate = null; this._visibleDate = null; this._todaysDate = null; this._firstDayOfWeek = AjaxControlToolkit.FirstDayOfWeek.Default; this._popupDiv = null; this._prevArrow = null; this._prevArrowImage = null; this._nextArrow = null; this._nextArrowImage = null; this._title = null; this._today = null; this._daysRow = null; this._monthsRow = null; this._yearsRow = null; this._daysBody = null; this._monthsBody = null; this._yearsBody = null; this._button = null; this._popupBehavior = null; this._modeChangeAnimation = null; this._modeChangeMoveTopOrLeftAnimation = null; this._modeChangeMoveBottomOrRightAnimation = null; this._mode = "days"; this._selectedDateChanging = false; this._isOpen = false; this._isAnimating = false; this._width = 170; this._height = 139; this._modes = {"days" : null, "months" : null, "years" : null}; this._modeOrder = {"days" : 0, "months" : 1, "years" : 2 }; this._blur = new AjaxControlToolkit.DeferredOperation(((Sys.Browser.agent === Sys.Browser.Safari) ? 1000 : 1), this, this._onblur); this._focus = new AjaxControlToolkit.DeferredOperation(((Sys.Browser.agent === Sys.Browser.Safari) ? 1000 : 1), this, this._onfocus); this._button$delegates = {click : Function.createDelegate(this, this._button_onclick)} this._element$delegates = { focus : Function.createDelegate(this, this._element_onfocus), focusout : Function.createDelegate(this, this._element_onblur), blur : Function.createDelegate(this, this._element_onblur), change : Function.createDelegate(this, this._element_onchange)} this._popup$delegates = { activate : Function.createDelegate(this, this._popup_onfocus), focus : Function.createDelegate(this, this._popup_onfocus), dragstart: Function.createDelegate(this, this._popup_ondragstart), select: Function.createDelegate(this, this._popup_onselect)} this._cell$delegates = { mouseover : Function.createDelegate(this, this._cell_onmouseover), mouseout : Function.createDelegate(this, this._cell_onmouseout), click : Function.createDelegate(this, this._cell_onclick)}} AjaxControlToolkit.CalendarBehavior.prototype = { get_animated : function() {return this._animated;}, set_animated : function(value) { if (this._animated != value) {this._animated = value; this.raisePropertyChanged("animated");}}, get_enabled : function() {return this._enabled;}, set_enabled : function(value) { if (this._enabled != value) {this._enabled = value; this.raisePropertyChanged("enabled");}}, get_button : function() {return this._button;}, set_button : function(value) { if (this._button != value) { if (this._button && this.get_isInitialized()) {$common.removeHandlers(this._button, this._button$delegates);} this._button = value; if (this._button && this.get_isInitialized()) {$addHandlers(this._button, this._button$delegates);} this.raisePropertyChanged("button");}}, get_format : function() { return this._format; }, set_format : function(value) { if (this._format != value) { this._format = value; this.raisePropertyChanged("format");}}, get_selectedDate : function() { if (this._selectedDate == null) { var elt = this.get_element(); if (elt.value) { this._selectedDate = this._parseTextValue(elt.value); } } return this._selectedDate; }, set_selectedDate : function(value) { var elt = this.get_element(); if (this._selectedDate != value) { this._selectedDate = value; this._selectedDateChanging = true; var text = ""; if (value) { text = value.localeFormat(this._format); } if (text != elt.value) { elt.value = text; this._fireChanged(); } this._selectedDateChanging = false; this.invalidate(); this.raisePropertyChanged("selectedDate"); } }, get_visibleDate : function() { return this._visibleDate; }, set_visibleDate : function(value) { if (value) value = value.getDateOnly(); if (this._visibleDate != value) { this._switchMonth(value, !this._isOpen); this.raisePropertyChanged("visibleDate"); } }, get_todaysDate : function() { if (this._todaysDate != null) { return this._todaysDate; } return new Date().getDateOnly(); }, set_todaysDate : function(value) { if (value) value = value.getDateOnly(); if (this._todaysDate != value) { this._todaysDate = value; this.invalidate(); this.raisePropertyChanged("todaysDate"); } }, get_firstDayOfWeek : function() { return this._firstDayOfWeek; }, set_firstDayOfWeek : function(value) { if (this._firstDayOfWeek != value) { this._firstDayOfWeek = value; this.invalidate(); this.raisePropertyChanged("firstDayOfWeek"); } }, get_cssClass : function() { return this._cssClass; }, set_cssClass : function(value) { if (this._cssClass != value) { if (this._cssClass && this.get_isInitialized()) { Sys.UI.DomElement.removeCssClass(this._container, this._cssClass); } this._cssClass = value; if (this._cssClass && this.get_isInitialized()) { Sys.UI.DomElement.addCssClass(this._container, this._cssClass); } this.raisePropertyChanged("cssClass"); } }, add_showing : function(handler) { this.get_events().addHandler("showing", handler); }, remove_showing : function(handler) { this.get_events().removeHandler("showing", handler); }, raiseShowing : function() { var handlers = this.get_events().getHandler("showing"); if (handlers) { handlers(this, Sys.EventArgs.Empty); } }, add_shown : function(handler) { this.get_events().addHandler("shown", handler); }, remove_shown : function(handler) { this.get_events().removeHandler("shown", handler); }, raiseShown : function() { var handlers = this.get_events().getHandler("shown"); if (handlers) { handlers(this, Sys.EventArgs.Empty); } }, add_hiding : function(handler) { this.get_events().addHandler("hiding", handler); }, remove_hiding : function(handler) { this.get_events().removeHandler("hiding", handler); }, raiseHiding : function() { var handlers = this.get_events().getHandler("hiding"); if (handlers) { handlers(this, Sys.EventArgs.Empty); } }, add_hidden : function(handler) { this.get_events().addHandler("hidden", handler); }, remove_hidden : function(handler) { this.get_events().removeHandler("hidden", handler); }, raiseHidden : function() { var handlers = this.get_events().getHandler("hidden"); if (handlers) { handlers(this, Sys.EventArgs.Empty); } }, add_dateSelectionChanged : function(handler) { this.get_events().addHandler("dateSelectionChanged", handler); }, remove_dateSelectionChanged : function(handler) { this.get_events().removeHandler("dateSelectionChanged", handler); }, raiseDateSelectionChanged : function() { var handlers = this.get_events().getHandler("dateSelectionChanged"); if (handlers) { handlers(this, Sys.EventArgs.Empty); } }, initialize : function() { AjaxControlToolkit.CalendarBehavior.callBaseMethod(this, "initialize"); var elt = this.get_element(); $addHandlers(elt, this._element$delegates); if (this._button) $addHandlers(this._button, this._button$delegates); this._modeChangeMoveTopOrLeftAnimation = new AjaxControlToolkit.Animation.LengthAnimation(null, null, null, "style", null, 0, 0, "px"); this._modeChangeMoveBottomOrRightAnimation = new AjaxControlToolkit.Animation.LengthAnimation(null, null, null, "style", null, 0, 0, "px"); this._modeChangeAnimation = new AjaxControlToolkit.Animation.ParallelAnimation(null, .25, null, [ this._modeChangeMoveTopOrLeftAnimation, this._modeChangeMoveBottomOrRightAnimation ]); var value = this.get_selectedDate(); if (value) { this.set_selectedDate(value); } }, dispose : function() { if (this._popupBehavior) { this._popupBehavior.dispose(); this._popupBehavior = null; } this._modes = null; this._modeOrder = null; if (this._modeChangeMoveTopOrLeftAnimation) { this._modeChangeMoveTopOrLeftAnimation.dispose(); this._modeChangeMoveTopOrLeftAnimation = null; } if (this._modeChangeMoveBottomOrRightAnimation) { this._modeChangeMoveBottomOrRightAnimation.dispose(); this._modeChangeMoveBottomOrRightAnimation = null; } if (this._modeChangeAnimation) { this._modeChangeAnimation.dispose(); this._modeChangeAnimation = null; } if (this._container) { this._container.parentNode.removeChild(this._container); this._container = null; } if (this._popupDiv) { $common.removeHandlers(this._popupDiv, this._popup$delegates); this._popupDiv = null; } if (this._prevArrow) { $common.removeHandlers(this._prevArrow, this._cell$delegates); this._prevArrow = null; } if (this._prevArrowImage) { $common.removeHandlers(this._prevArrowImage, this._cell$delegates); this._prevArrowImage = null; } if (this._nextArrow) { $common.removeHandlers(this._nextArrow, this._cell$delegates); this._nextArrow = null; } if (this._nextArrowImage) { $common.removeHandlers(this._nextArrowImage, this._cell$delegates); this._nextArrowImage = null; } if (this._title) { $common.removeHandlers(this._title, this._cell$delegates); this._title = null; } if (this._today) { $common.removeHandlers(this._today, this._cell$delegates); this._today = null; } if (this._daysRow) { for (var i = 0; i < this._daysBody.rows.length; i++) { var row = this._daysBody.rows[i]; for (var j = 0; j < row.cells.length; j++) { $common.removeHandlers(row.cells[j].firstChild, this._cell$delegates); } } this._daysRow = null; } if (this._monthsRow) { for (var i = 0; i < this._monthsBody.rows.length; i++) { var row = this._monthsBody.rows[i]; for (var j = 0; j < row.cells.length; j++) { $common.removeHandlers(row.cells[j].firstChild, this._cell$delegates); } } this._monthsRow = null; } if (this._yearsRow) { for (var i = 0; i < this._yearsBody.rows.length; i++) { var row = this._yearsBody.rows[i]; for (var j = 0; j < row.cells.length; j++) { $common.removeHandlers(row.cells[j].firstChild, this._cell$delegates); } } this._yearsRow = null; } if (this._button) { $common.removeHandlers(this._button, this._button$delegates); this._button = null; } var elt = this.get_element(); $common.removeHandlers(elt, this._element$delegates); AjaxControlToolkit.CalendarBehavior.callBaseMethod(this, "dispose"); }, show : function() { this._ensureCalendar(); if (!this._isOpen) { this.raiseShowing(); this._isOpen = true; this._switchMonth(null, true); this._popupBehavior.show(); this.raiseShown(); } }, hide : function() { this.raiseHiding(); if (this._container) { this._popupBehavior.hide(); this._switchMode("days", true); } this._isOpen = false; this.raiseHidden(); }, suspendLayout : function() { this._layoutSuspended++; }, resumeLayout : function() { this._layoutSuspended--; if (this._layoutSuspended <= 0) { this._layoutSuspended = 0; if (this._layoutRequested) { this._performLayout(); } } }, invalidate : function() { if (this._layoutSuspended > 0) { this._layoutRequested = true; } else { this._performLayout(); } }, _buildCalendar : function() { var elt = this.get_element(); this._container = $common.createElementFromTemplate({ nodeName : "div", cssClasses : [this._cssClass] }, elt.parentNode); this._popupDiv = $common.createElementFromTemplate({ nodeName : "div", events : this._popup$delegates, properties : { tabIndex : 0}, cssClasses : ["ajax__calendar_container"], visible : false }, this._container); }, _buildHeader : function() { this._header = $common.createElementFromTemplate({ nodeName : "div", cssClasses : [ "ajax__calendar_header" ] }, this._popupDiv); var prevArrowWrapper = $common.createElementFromTemplate({ nodeName : "div" }, this._header); this._prevArrow = $common.createElementFromTemplate({ nodeName : "div", properties : { mode : "prev" }, events : this._cell$delegates, cssClasses : [ "ajax__calendar_prev" ] }, prevArrowWrapper); var nextArrowWrapper = $common.createElementFromTemplate({ nodeName : "div" }, this._header); this._nextArrow = $common.createElementFromTemplate({ nodeName : "div", properties : { mode : "next" }, events : this._cell$delegates, cssClasses : [ "ajax__calendar_next" ] }, nextArrowWrapper); var titleWrapper = $common.createElementFromTemplate({ nodeName : "div" }, this._header); this._title = $common.createElementFromTemplate({ nodeName : "div", properties : { mode : "title" }, events : this._cell$delegates, cssClasses : [ "ajax__calendar_title" ] }, titleWrapper); }, _buildBody : function() { this._body = $common.createElementFromTemplate({ nodeName : "div", cssClasses : [ "ajax__calendar_body" ] }, this._popupDiv); this._buildDays(); this._buildMonths(); this._buildYears(); }, _buildFooter : function() { var todayWrapper = $common.createElementFromTemplate({ nodeName : "div" }, this._popupDiv); this._today = $common.createElementFromTemplate({ nodeName : "div", properties : { mode : "today" }, events : this._cell$delegates, cssClasses : [ "ajax__calendar_footer", "ajax__calendar_today" ] }, todayWrapper); }, _buildDays : function() { var dtf = Sys.CultureInfo.CurrentCulture.dateTimeFormat; this._days = $common.createElementFromTemplate({ nodeName : "div", cssClasses : [ "ajax__calendar_days" ] }, this._body); this._modes["days"] = this._days; this._daysTable = $common.createElementFromTemplate({ nodeName : "table", properties : { cellPadding : 0, cellSpacing : 0, border : 0, style : { margin : "auto" } } }, this._days); this._daysTableHeader = $common.createElementFromTemplate({ nodeName : "thead" }, this._daysTable); this._daysTableHeaderRow = $common.createElementFromTemplate({ nodeName : "tr" }, this._daysTableHeader); this._daysBody = $common.createElementFromTemplate({ nodeName: "tbody" }, this._daysTable); for (var i = 0; i < 7; i++) { var dayCell = $common.createElementFromTemplate({ nodeName : "td" }, this._daysTableHeaderRow); var dayDiv = $common.createElementFromTemplate({ nodeName : "div", cssClasses : [ "ajax__calendar_dayname" ] }, dayCell); } for (var i = 0; i < 6; i++) { var daysRow = $common.createElementFromTemplate({ nodeName : "tr" }, this._daysBody); for(var j = 0; j < 7; j++) { var dayCell = $common.createElementFromTemplate({ nodeName : "td" }, daysRow); var dayDiv = $common.createElementFromTemplate({ nodeName : "div", properties : { mode : "day", innerHTML : " " }, events : this._cell$delegates, cssClasses : [ "ajax__calendar_day" ] }, dayCell); } } }, _buildMonths : function() { var dtf = Sys.CultureInfo.CurrentCulture.dateTimeFormat; this._months = $common.createElementFromTemplate({ nodeName : "div", cssClasses : [ "ajax__calendar_months" ], visible : false }, this._body); this._modes["months"] = this._months; this._monthsTable = $common.createElementFromTemplate({ nodeName : "table", properties : { cellPadding : 0, cellSpacing : 0, border : 0, style : { margin : "auto" } } }, this._months); this._monthsBody = $common.createElementFromTemplate({ nodeName : "tbody" }, this._monthsTable); for (var i = 0; i < 3; i++) { var monthsRow = $common.createElementFromTemplate({ nodeName : "tr" }, this._monthsBody); for (var j = 0; j < 4; j++) { var monthCell = $common.createElementFromTemplate({ nodeName : "td" }, monthsRow); var monthDiv = $common.createElementFromTemplate({ nodeName : "div", properties : { mode : "month", month : (i * 4) + j, innerHTML : "
" + dtf.AbbreviatedMonthNames[(i * 4) + j] }, events : this._cell$delegates, cssClasses : [ "ajax__calendar_month" ] }, monthCell); } } }, _buildYears : function() { this._years = $common.createElementFromTemplate({ nodeName : "div", cssClasses : [ "ajax__calendar_years" ], visible : false }, this._body); this._modes["years"] = this._years; this._yearsTable = $common.createElementFromTemplate({ nodeName : "table", properties : { cellPadding : 0, cellSpacing : 0, border : 0, style : { margin : "auto" } } }, this._years); this._yearsBody = $common.createElementFromTemplate({ nodeName : "tbody" }, this._yearsTable); for (var i = 0; i < 3; i++) { var yearsRow = $common.createElementFromTemplate({ nodeName : "tr" }, this._yearsBody); for (var j = 0; j < 4; j++) { var yearCell = $common.createElementFromTemplate({ nodeName : "td" }, yearsRow); var yearDiv = $common.createElementFromTemplate({ nodeName : "div", properties : { mode : "year", year : ((i * 4) + j) - 1 }, events : this._cell$delegates, cssClasses : [ "ajax__calendar_year" ] }, yearCell); } } }, _performLayout : function() { var elt = this.get_element(); if (!elt) return; if (!this.get_isInitialized()) return; if (!this._isOpen) return; var dtf = Sys.CultureInfo.CurrentCulture.dateTimeFormat; var selectedDate = this.get_selectedDate(); var visibleDate = this._getEffectiveVisibleDate(); var todaysDate = this.get_todaysDate(); switch (this._mode) { case "days": var firstDayOfWeek = this._getFirstDayOfWeek(); var daysToBacktrack = visibleDate.getDay() - firstDayOfWeek; if (daysToBacktrack <= 0) daysToBacktrack += 7; var startDate = new Date(visibleDate.getFullYear(), visibleDate.getMonth(), visibleDate.getDate() - daysToBacktrack); var currentDate = startDate; for (var i = 0; i < 7; i++) { var dayCell = this._daysTableHeaderRow.cells[i].firstChild; if (dayCell.firstChild) { dayCell.removeChild(dayCell.firstChild); } dayCell.appendChild(document.createTextNode(dtf.ShortestDayNames[(i + firstDayOfWeek) % 7])); } for (var week = 0; week < 6; week ++) { var weekRow = this._daysBody.rows[week]; for (var dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) { var dayCell = weekRow.cells[dayOfWeek].firstChild; if (dayCell.firstChild) { dayCell.removeChild(dayCell.firstChild); } dayCell.appendChild(document.createTextNode(currentDate.getDate())); dayCell.title = currentDate.localeFormat("D"); dayCell.date = currentDate; $common.removeCssClasses(dayCell.parentNode, [ "ajax__calendar_other", "ajax__calendar_active" ]); Sys.UI.DomElement.addCssClass(dayCell.parentNode, this._getCssClass(dayCell.date, 'd')); currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate() + 1); } } this._prevArrow.date = new Date(visibleDate.getFullYear(), visibleDate.getMonth() - 1, 1); this._nextArrow.date = new Date(visibleDate.getFullYear(), visibleDate.getMonth() + 1, 1); if (this._title.firstChild) { this._title.removeChild(this._title.firstChild); } this._title.appendChild(document.createTextNode(visibleDate.localeFormat("MMMM, yyyy"))); this._title.date = visibleDate; break; case "months": for (var i = 0; i < this._monthsBody.rows.length; i++) { var row = this._monthsBody.rows[i]; for (var j = 0; j < row.cells.length; j++) { var cell = row.cells[j].firstChild; cell.date = new Date(visibleDate.getFullYear(), cell.month, 1); $common.removeCssClasses(cell.parentNode, [ "ajax__calendar_other", "ajax__calendar_active" ]); Sys.UI.DomElement.addCssClass(cell.parentNode, this._getCssClass(cell.date, 'M')); } } if (this._title.firstChild) { this._title.removeChild(this._title.firstChild); } this._title.appendChild(document.createTextNode(visibleDate.localeFormat("yyyy"))); this._title.date = visibleDate; this._prevArrow.date = new Date(visibleDate.getFullYear() - 1, 0, 1); this._nextArrow.date = new Date(visibleDate.getFullYear() + 1, 0, 1); break; case "years": var minYear = (Math.floor(visibleDate.getFullYear() / 10) * 10); for (var i = 0; i < this._yearsBody.rows.length; i++) { var row = this._yearsBody.rows[i]; for (var j = 0; j < row.cells.length; j++) { var cell = row.cells[j].firstChild; cell.date = new Date(minYear + cell.year, 0, 1); if (cell.firstChild) { cell.removeChild(cell.lastChild); } else { cell.appendChild(document.createElement("br")); } cell.appendChild(document.createTextNode(minYear + cell.year)); $common.removeCssClasses(cell.parentNode, [ "ajax__calendar_other", "ajax__calendar_active" ]); Sys.UI.DomElement.addCssClass(cell.parentNode, this._getCssClass(cell.date, 'y')); } } if (this._title.firstChild) { this._title.removeChild(this._title.firstChild); } this._title.appendChild(document.createTextNode(minYear.toString() + "-" + (minYear + 9).toString())); this._title.date = visibleDate; this._prevArrow.date = new Date(minYear - 10, 0, 1); this._nextArrow.date = new Date(minYear + 10, 0, 1); break; } if (this._today.firstChild) { this._today.removeChild(this._today.firstChild); } this._today.appendChild(document.createTextNode(String.format(AjaxControlToolkit.Resources.Calendar_Today, todaysDate.localeFormat("MMMM d, yyyy")))); this._today.date = todaysDate; }, _ensureCalendar : function() { if (!this._container) { var elt = this.get_element(); this._buildCalendar(); this._buildHeader(); this._buildBody(); this._buildFooter(); this._popupBehavior = new $create(AjaxControlToolkit.PopupBehavior, { parentElement : elt, positioningMode : AjaxControlToolkit.PositioningMode.BottomLeft }, {}, {}, this._popupDiv); } }, _fireChanged : function() { var elt = this.get_element(); if (document.createEventObject) { elt.fireEvent("onchange"); } else if (document.createEvent) { var e = document.createEvent("HTMLEvents"); e.initEvent("change", true, true); elt.dispatchEvent(e); } }, _switchMonth : function(date, dontAnimate) { if (this._isAnimating) { return; } var visibleDate = this._getEffectiveVisibleDate(); if ((date && date.getFullYear() == visibleDate.getFullYear() && date.getMonth() == visibleDate.getMonth())) { dontAnimate = true; } if (this._animated && !dontAnimate) { this._isAnimating = true; var newElement = this._modes[this._mode]; var oldElement = newElement.cloneNode(true); this._body.appendChild(oldElement); if (visibleDate > date) { $common.setLocation(newElement, {x:-162,y:0}); Sys.UI.DomElement.setVisible(newElement, true); this._modeChangeMoveTopOrLeftAnimation.set_propertyKey("left"); this._modeChangeMoveTopOrLeftAnimation.set_target(newElement); this._modeChangeMoveTopOrLeftAnimation.set_startValue(-this._width); this._modeChangeMoveTopOrLeftAnimation.set_endValue(0); $common.setLocation(oldElement, {x:0,y:0}); Sys.UI.DomElement.setVisible(oldElement, true); this._modeChangeMoveBottomOrRightAnimation.set_propertyKey("left"); this._modeChangeMoveBottomOrRightAnimation.set_target(oldElement); this._modeChangeMoveBottomOrRightAnimation.set_startValue(0); this._modeChangeMoveBottomOrRightAnimation.set_endValue(this._width); } else { $common.setLocation(oldElement, {x:0,y:0}); Sys.UI.DomElement.setVisible(oldElement, true); this._modeChangeMoveTopOrLeftAnimation.set_propertyKey("left"); this._modeChangeMoveTopOrLeftAnimation.set_target(oldElement); this._modeChangeMoveTopOrLeftAnimation.set_endValue(-this._width); this._modeChangeMoveTopOrLeftAnimation.set_startValue(0); $common.setLocation(newElement, {x:162,y:0}); Sys.UI.DomElement.setVisible(newElement, true); this._modeChangeMoveBottomOrRightAnimation.set_propertyKey("left"); this._modeChangeMoveBottomOrRightAnimation.set_target(newElement); this._modeChangeMoveBottomOrRightAnimation.set_endValue(0); this._modeChangeMoveBottomOrRightAnimation.set_startValue(this._width); } this._visibleDate = date; this.invalidate(); var endHandler = Function.createDelegate(this, function() { this._body.removeChild(oldElement); oldElement = null; this._isAnimating = false; this._modeChangeAnimation.remove_ended(endHandler); }); this._modeChangeAnimation.add_ended(endHandler); this._modeChangeAnimation.play(); } else { this._visibleDate = date; this.invalidate(); } }, _switchMode : function(mode, dontAnimate) { if (this._isAnimating || (this._mode == mode)) { return; } var moveDown = this._modeOrder[this._mode] < this._modeOrder[mode]; var oldElement = this._modes[this._mode]; var newElement = this._modes[mode]; this._mode = mode; if (this._animated && !dontAnimate) { this._isAnimating = true; this.invalidate(); if (moveDown) { $common.setLocation(newElement, {x:0,y:-this._height}); Sys.UI.DomElement.setVisible(newElement, true); this._modeChangeMoveTopOrLeftAnimation.set_propertyKey("top"); this._modeChangeMoveTopOrLeftAnimation.set_target(newElement); this._modeChangeMoveTopOrLeftAnimation.set_startValue(-this._height); this._modeChangeMoveTopOrLeftAnimation.set_endValue(0); $common.setLocation(oldElement, {x:0,y:0}); Sys.UI.DomElement.setVisible(oldElement, true); this._modeChangeMoveBottomOrRightAnimation.set_propertyKey("top"); this._modeChangeMoveBottomOrRightAnimation.set_target(oldElement); this._modeChangeMoveBottomOrRightAnimation.set_startValue(0); this._modeChangeMoveBottomOrRightAnimation.set_endValue(this._height); } else { $common.setLocation(oldElement, {x:0,y:0}); Sys.UI.DomElement.setVisible(oldElement, true); this._modeChangeMoveTopOrLeftAnimation.set_propertyKey("top"); this._modeChangeMoveTopOrLeftAnimation.set_target(oldElement); this._modeChangeMoveTopOrLeftAnimation.set_endValue(-this._height); this._modeChangeMoveTopOrLeftAnimation.set_startValue(0); $common.setLocation(newElement, {x:0,y:139}); Sys.UI.DomElement.setVisible(newElement, true); this._modeChangeMoveBottomOrRightAnimation.set_propertyKey("top"); this._modeChangeMoveBottomOrRightAnimation.set_target(newElement); this._modeChangeMoveBottomOrRightAnimation.set_endValue(0); this._modeChangeMoveBottomOrRightAnimation.set_startValue(this._height); } var endHandler = Function.createDelegate(this, function() { this._isAnimating = false; this._modeChangeAnimation.remove_ended(endHandler); }); this._modeChangeAnimation.add_ended(endHandler); this._modeChangeAnimation.play(); } else { this._mode = mode; Sys.UI.DomElement.setVisible(oldElement, false); this.invalidate(); Sys.UI.DomElement.setVisible(newElement, true); $common.setLocation(newElement, {x:0,y:0}); } }, _isSelected : function(date, part) { var value = this.get_selectedDate(); if (!value) return false; switch (part) { case 'd': if (date.getDate() != value.getDate()) return false; case 'M': if (date.getMonth() != value.getMonth()) return false; case 'y': if (date.getFullYear() != value.getFullYear()) return false; break; } return true; }, _isOther : function(date, part) { var value = this._getEffectiveVisibleDate(); switch (part) { case 'd': return (date.getFullYear() != value.getFullYear() || date.getMonth() != value.getMonth()); case 'M': return false; case 'y': var minYear = (Math.floor(value.getFullYear() / 10) * 10); return date.getFullYear() < minYear || (minYear + 10) <= date.getFullYear(); } return false; }, _getCssClass : function(date, part) { if (this._isSelected(date, part)) { return "ajax__calendar_active"; } else if (this._isOther(date, part)) { return "ajax__calendar_other"; } else { return ""; } }, _getEffectiveVisibleDate : function() { var value = this.get_visibleDate(); if (value == null) value = this.get_selectedDate(); if (value == null) value = this.get_todaysDate(); return new Date(value.getFullYear(), value.getMonth(), 1); }, _getFirstDayOfWeek : function() { if (this.get_firstDayOfWeek() != AjaxControlToolkit.FirstDayOfWeek.Default) { return this.get_firstDayOfWeek(); } return Sys.CultureInfo.CurrentCulture.dateTimeFormat.FirstDayOfWeek; }, _parseTextValue : function(text) { var value = null; if(text) { value = Date.parseLocale(text, this.get_format()); } if(isNaN(value)) { value = null; } return value; }, _onblur : function() { this._focus.cancel(); this.hide(); }, _onfocus : function() { this._blur.cancel(); this.get_element().focus(); }, _element_onfocus : function(e) { if (this._enabled ) { this._focus.cancel(); this._blur.cancel(); this.show(); } }, _element_onblur : function(e) { if ((e.type == 'blur' && Sys.Browser.agent != Sys.Browser.InternetExplorer) || (e.type == 'focusout' && Sys.Browser.agent == Sys.Browser.InternetExplorer)) { this._focus.cancel(); this._blur.post(); } }, _element_onchange : function(e) { if (!this._selectedDateChanging) { var elt = this.get_element(); this._selectedDate = this._parseTextValue(elt.value); this._switchMonth(this._selectedDate, this._selectedDate == null); } }, _popup_onfocus : function(e) { if ((e.type == 'focus' && Sys.Browser.agent != Sys.Browser.InternetExplorer) || (e.type == 'activate' && Sys.Browser.agent == Sys.Browser.InternetExplorer) || (Sys.Browser.agent === Sys.Browser.Safari) || (Sys.Browser.agent === Sys.Browser.Opera)) { this._blur.cancel(); this._focus.post(); } }, _popup_ondragstart : function(e) { e.stopPropagation(); e.preventDefault(); }, _popup_onselect : function(e) { e.stopPropagation(); e.preventDefault(); }, _cell_onmouseover : function(e) { if (Sys.Browser.agent === Sys.Browser.Safari) { for (var i = 0; i < this._daysBody.rows.length; i++) { var row = this._daysBody.rows[i]; for (var j = 0; j < row.cells.length; j++) { Sys.UI.DomElement.removeCssClass(row.cells[j].firstChild.parentNode, "ajax__calendar_hover"); } } } var target = e.target; Sys.UI.DomElement.addCssClass(target.parentNode, "ajax__calendar_hover"); e.stopPropagation(); }, _cell_onmouseout : function(e) { var target = e.target; Sys.UI.DomElement.removeCssClass(target.parentNode, "ajax__calendar_hover"); e.stopPropagation(); }, _cell_onclick : function(e) { if ((Sys.Browser.agent === Sys.Browser.Safari) || (Sys.Browser.agent === Sys.Browser.Opera)) { this._popup_onfocus(e); } if (!this._enabled) return; var target = e.target; var visibleDate = this._getEffectiveVisibleDate(); Sys.UI.DomElement.removeCssClass(target.parentNode, "ajax__calendar_hover"); switch(target.mode) { case "prev": case "next": this._switchMonth(target.date); break; case "title": switch (this._mode) { case "days": this._switchMode("months"); break; case "months": this._switchMode("years"); break; } break; case "month": if (target.month == visibleDate.getMonth()) { this._switchMode("days"); } else { this._visibleDate = target.date; this._switchMode("days"); } break; case "year": if (target.date.getFullYear() == visibleDate.getFullYear()) { this._switchMode("months"); } else { this._visibleDate = target.date; this._switchMode("months"); } break; case "day": this.set_selectedDate(target.date); this._switchMonth(target.date); if (this._button != null) { this.hide(); } this.raiseDateSelectionChanged(); break; case "today": this.set_selectedDate(target.date); this._switchMonth(target.date); if (this._button != null) { this.hide(); } this.raiseDateSelectionChanged(); break; } e.stopPropagation(); e.preventDefault(); }, _button_onclick : function(e) { if (!this._isOpen) { e.preventDefault(); e.stopPropagation(); if (this._enabled) this.show(); } else { this.hide(); } } } AjaxControlToolkit.CalendarBehavior.registerClass("AjaxControlToolkit.CalendarBehavior", AjaxControlToolkit.BehaviorBase); if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();