/*  Copyright Mihai Bazon, 2002, 2003  |  http://dynarch.com/mishoo/
 * ---------------------------------------------------------------------------
 *
 * The DHTML Calendar
 *
 * Details and latest version at:
 * http://dynarch.com/mishoo/calendar.epl
 *
 * This script is distributed under the GNU Lesser General Public License.
 * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
 *
 * This file defines helper functions for setting up the calendar.  They are
 * intended to help non-programmers get a working calendar on their site
 * quickly.  This script should not be seen as part of the calendar.  It just
 * shows you what one can do with the calendar, while in the same time
 * providing a quick and simple method for setting it up.  If you need
 * exhaustive customization of the calendar creation process feel free to
 * modify this code to suit your needs (this is recommended and much better
 * than modifying calendar.js itself).
 */
Type.registerNamespace('Ftn.Client');
/*Calendar.setup = function(params) { function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } }; param_default("inputField", null); param_default("displayArea", null); param_default("button", null); param_default("eventName", "click"); param_default("ifFormat", "%Y/%m/%d"); param_default("daFormat", "%Y/%m/%d"); param_default("singleClick", true); param_default("disableFunc", null); param_default("dateStatusFunc", params["disableFunc"]); param_default("dateTooltipFunc", null); param_default("dateText", null); param_default("firstDay", null); param_default("align", "Br"); param_default("range", [1900, 2999]); param_default("weekNumbers", true); param_default("flat", null); param_default("flatCallback", null); param_default("onSelect", null); param_default("onClose", null); param_default("onUpdate", null); param_default("date", null); param_default("showsTime", false); param_default("timeFormat", "24"); param_default("electric", true); param_default("step", 2); param_default("position", null); param_default("cache", false); param_default("showOthers", false); param_default("multiple", null); var tmp = ["inputField", "displayArea", "button"]; for (var i in tmp) { if (typeof params[tmp[i]] == "string") { params[tmp[i]] = document.getElementById(params[tmp[i]]); } } if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) { alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code"); return false; } function onSelect(cal) { var p = cal.params; var update = (cal.dateClicked || p.electric); if (update && p.inputField) { p.inputField.value = cal.date.print(p.ifFormat); if (typeof p.inputField.onchange == "function") p.inputField.onchange(); } if (update && p.displayArea) p.displayArea.innerHTML = cal.date.print(p.daFormat); if (update && typeof p.onUpdate == "function") p.onUpdate(cal); if (update && p.flat) { if (typeof p.flatCallback == "function") p.flatCallback(cal); } if (update && p.singleClick && cal.dateClicked) cal.callCloseHandler(); }; if (params.flat != null) { if (typeof params.flat == "string") params.flat = document.getElementById(params.flat); if (!params.flat) { alert("Calendar.setup:\n  Flat specified but can't find parent."); return false; } var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect); cal.setDateToolTipHandler(params.dateTooltipFunc); cal.showsOtherMonths = params.showOthers; cal.showsTime = params.showsTime; cal.time24 = (params.timeFormat == "24"); cal.params = params; cal.weekNumbers = params.weekNumbers; cal.setRange(params.range[0], params.range[1]); cal.setDateStatusHandler(params.dateStatusFunc); cal.getDateText = params.dateText; if (params.ifFormat) { cal.setDateFormat(params.ifFormat); } if (params.inputField && typeof params.inputField.value == "string") { cal.parseDate(params.inputField.value); } cal.create(params.flat); cal.show(); return false; } var triggerEl = params.button || params.displayArea || params.inputField; triggerEl["on" + params.eventName] = function() { var dateEl = params.inputField || params.displayArea; var dateFmt = params.inputField ? params.ifFormat : params.daFormat; var mustCreate = false; var cal = window.calendar; if (dateEl) params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt); if (!(cal && params.cache)) { window.calendar = cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect, params.onClose || function(cal) { cal.hide(); }); cal.setDateToolTipHandler(params.dateTooltipFunc); cal.showsTime = params.showsTime; cal.time24 = (params.timeFormat == "24"); cal.weekNumbers = params.weekNumbers; mustCreate = true; } else { if (params.date) cal.setDate(params.date); cal.hide(); } if (params.multiple) { cal.multiple = {}; for (var i = params.multiple.length; --i >= 0; ) { var d = params.multiple[i]; var ds = d.print("%Y%m%d"); cal.multiple[ds] = d; } } cal.showsOtherMonths = params.showOthers; cal.yearStep = params.step; cal.setRange(params.range[0], params.range[1]); cal.params = params; cal.setDateStatusHandler(params.dateStatusFunc); cal.getDateText = params.dateText; cal.setDateFormat(dateFmt); if (mustCreate) cal.create(); cal.refresh(); if (!params.position) cal.showAtElement(params.button || params.displayArea || params.inputField, params.align); else cal.showAt(params.position[0], params.position[1]); return false; }; return cal; };

*/



/////////////////////////////////////////////////////////////////////////////
//Calendar init
Ftn.Client.ToolkitCalendar = function(element) {
    Ftn.Client.ToolkitCalendar.initializeBase(this, [element]);
    this.TargetID = null;
    this.ButtonID = null;
    this.FirstDay = null;
    this.Format = null;
    this.Calendar = null;
    this.StartDate = null;
}
Ftn.Client.ToolkitCalendar.prototype =
{
    initialize: function() {
        Ftn.Client.ToolkitCalendar.callBaseMethod(this, 'initialize');
        //   Calendar.setup({ inputField: this.TargetID});
        this._closeCalHandler = Function.createDelegate(this, this.closeCalHandler);
        this._selectedCalHandler = Function.createDelegate(this, this.selectedCalHandler);
        this.Calendar = new Calendar(this.FirstDay, this.StartDate, this._selectedCalHandler, this._closeCalHandler);
        this.Calendar.dateHolder = $get(this.TargetID);
        this.Calendar.setDateFormat(this.Format);
        this.Calendar.showsTime = false;
        this._innerCalendarShowHref = Function.createDelegate(this, this.innerCalendarShowHref);
        $addHandler($get(this.ButtonID), "click", this._innerCalendarShowHref);
    },
    dispose: function() {
        this.TargetID = null;
        this.ButtonID = null;
        this.FirstDay = null;
        this.Format = null;
        this.Calendar = null;
        this.StartDate = null;
        Ftn.Client.ToolkitCalendar.callBaseMethod(this, 'dispose');
    },
    innerCalendarShowHref: function(event) {
        var ctrl = $get(this.ButtonID);
        var ch = ctrl.previousSibling;
        for (; ch && ch.nodeType != 1; ch = ch.previousSibling)
            ;
        this.innerCalendarShow(ch ? ch : ctrl);
    },
    innerCalendarShow: function(ctrl) {
        //   var cal = __customFieldCalendar;//new Calendar(1, null, selectedCalHandler, closeCalHandler);
        this.Calendar.setRange(1900, 2070);        // min/max year allowed.
        this.Calendar.create();
        this.Calendar.sel = this.Calendar.dateHolder;
        this.Calendar.parseDate(this.Calendar.dateHolder.value);
        this.Calendar.showAtElement(this.Calendar.dateHolder, "Br");
    },
    // And this gets called when the end-user clicks on the _selected_ date,
    // or clicks on the "Close" button.  It just hides the calendar without
    // destroying it.
    closeCalHandler: function() {
        this.Calendar.hide();                        // hide the calendar
        //  cal.destroy();
        //  _dynarch_popupCalendar = null;
    },
    selectedCalHandler: function(calendar, date) {
        this.Calendar.sel.value = date; // just update the date in the input field.
        if (this.Calendar.dateClicked) {
            // if we add this call we close the calendar on single-click.
            this.Calendar.callCloseHandler();
        }
    }

}
Ftn.Client.ToolkitCalendar.descriptor =
{
    properties: [{ name: 'TargetID', type: String },
                 { name: 'ButtonID', type: String },
                 { name: 'FirstDay', type: String },
                 { name: 'Format', type: String },
                 { name: 'StartDate', type: String}]
}

Ftn.Client.ToolkitCalendar.inheritsFrom(Sys.UI.Control);

Ftn.Client.ToolkitCalendar.registerClass('Ftn.Client.ToolkitCalendar', Sys.UI.Control);

////////////////////////////////////////////////////////////////////////////////
