/**
 * Make sure DOM tree is ready and init js functions.
 */
var Dom = YAHOO.util.Dom;

/**
 * YUI calendar handling.
 */
function calDialog(btnName, aField) {

    var Event = YAHOO.util.Event,
        dialog,
        calendar;

    var showBtn     = Dom.get(btnName);
    var actionField = Dom.get(aField);

    if (!dialog) {

        Event.on(document, "click", function(e) {
            var el = Event.getTarget(e);
            var dialogEl = dialog.element;
            if (el != dialogEl && !Dom.isAncestor(dialogEl, el) && el != showBtn && !Dom.isAncestor(showBtn, el)) {
                dialog.hide();
            }
        });

        function resetHandler() {
            var selDates = calendar.getSelectedDates();
            var resetDate;

            if (selDates.length > 0) {
                resetDate = selDates[0];
            } else {
                resetDate = calendar.today;
            }
            calendar.cfg.setProperty("pagedate", resetDate);
            calendar.render();
        }

        function closeHandler() {
            dialog.hide();
        }

        dialog = new YAHOO.widget.Dialog("calContainer", {
            visible:false,
            context:[showBtn, "tl", "bl"],
            draggable:false,
            close:false
        });
        dialog.setBody('<div id="cal"></div>');
        dialog.render(document.body);

        dialog.showEvent.subscribe(function() {
            if (YAHOO.env.ua.ie) {
                dialog.fireEvent("changeContent");
            }
        });
    }

    if (!calendar) {

        calendar = new YAHOO.widget.Calendar("cal", {
                        LOCALE_WEEKDAYS:"short",
					    START_WEEKDAY: 1,
					    MULTI_SELECT: false,
                        iframe:false,
                        hide_blank_weeks:true
        });

        calendar.cfg.setProperty("DATE_FIELD_DELIMITER", ".");

        calendar.cfg.setProperty("MDY_DAY_POSITION", 1);
        calendar.cfg.setProperty("MDY_MONTH_POSITION", 2);
        calendar.cfg.setProperty("MDY_YEAR_POSITION", 3);

        calendar.cfg.setProperty("MD_DAY_POSITION", 1);
        calendar.cfg.setProperty("MD_MONTH_POSITION", 2);

        calendar.cfg.setProperty("MONTHS_SHORT",   ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]);
        calendar.cfg.setProperty("MONTHS_LONG",    ["Januar", "Februar", "M\u00E4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]);

        calendar.cfg.setProperty("WEEKDAYS_1CHAR", ["S", "M", "D", "M", "D", "F", "S"]);
        calendar.cfg.setProperty("WEEKDAYS_SHORT", ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]);
        calendar.cfg.setProperty("WEEKDAYS_MEDIUM",["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"]);
        calendar.cfg.setProperty("WEEKDAYS_LONG",  ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]);
        calendar.render();

        calendar.selectEvent.subscribe(function() {

            if (calendar.getSelectedDates().length > 0) {

                var selDate = calendar.getSelectedDates()[0];

                var dStr = selDate.getDate();
                if(dStr<10) dStr = '0' + dStr;
                var mStr = calendar.cfg.getProperty("MONTHS_SHORT")[selDate.getMonth()];
                var yStr = selDate.getFullYear();

                Dom.get(actionField).value = dStr + "." + mStr + "." + yStr;
            } else {

                Dom.get(actionField).value = "";
            }
            dialog.hide();
        });

        calendar.renderEvent.subscribe(function() {

            dialog.fireEvent("changeContent");
        });
    }

    var seldate = calendar.getSelectedDates();
    if (seldate.length > 0) {
        calendar.cfg.setProperty("pagedate", seldate[0]);
        calendar.render();
    }
    dialog.show();
}