/*  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).
 */
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("mondayFirst", true);
    param_default("align", "BS");
    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");
    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.inputField || params.displayArea || params.button)) {
        alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code"); return false;
    }

    function onSelect(cal) {
        if (cal.params.flat) {
            if (typeof cal.params.flatCallback == "function") {
                cal.params.flatCallback(cal);
            }
            else {
                alert("No flatCallback given -- doing nothing.");
            }
            return false;
        }
        if (cal.params.inputField) {
            cal.params.inputField.value = cal.date.print(cal.params.ifFormat);
            if (cal.params.inputField.onchange) {
                cal.params.inputField.onchange();
            }
        }
        if (cal.params.displayArea) {
            cal.params.displayArea.innerHTML = cal.date.print(cal.params.daFormat);
        }
        if (cal.params.singleClick && cal.dateClicked) {
            cal.callCloseHandler();
        }
        if (typeof cal.params.onUpdate == "function") {
            cal.params.onUpdate(cal);
        }
    };
    if (params.flat != null) {
        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.mondayFirst, params.date, params.onSelect || onSelect);
        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.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 (!window.calendar) { window.calendar = cal = new Calendar(params.mondayFirst, params.date, params.onSelect || onSelect, params.onClose || function(cal) { cal.hide(); }); cal.showsTime = params.showsTime; cal.time24 = (params.timeFormat == "24"); cal.weekNumbers = params.weekNumbers; mustCreate = true; } else { cal.hide(); } cal.setRange(params.range[0], params.range[1]); cal.params = params; cal.setDateStatusHandler(params.dateStatusFunc); cal.setDateFormat(dateFmt); if (mustCreate) cal.create(); cal.parseDate(dateEl.value || dateEl.innerHTML); cal.refresh(); cal.showAtElement(params.displayArea || params.inputField, params.align); return false;
    };
};