(function() {
    var Dom = YAHOO.util.Dom,
        Event = YAHOO.util.Event,
        cal1,
        over_cal = false,
        cur_field = '';
    
    var TodayDate = new Date();
    var MinimumDate = (TodayDate.getMonth()+1) + "/" + TodayDate.getDate() + "/" + TodayDate.getFullYear(); 
    
    
    var init = function() {
        cal1 = new YAHOO.widget.Calendar("cal1","cal1Container",{ LOCALE_WEEKDAYS:"short",START_WEEKDAY: 1,MULTI_SELECT: false,close: true, title:"Datum ausw\u00E4hlen", mindate: MinimumDate} );
        // Correct formats for Germany: dd.mm.yyyy, dd.mm, mm.yyyy 
         
        cal1.cfg.setProperty("DATE_FIELD_DELIMITER", "."); 

        cal1.cfg.setProperty("MDY_DAY_POSITION", 1); 
        cal1.cfg.setProperty("MDY_MONTH_POSITION", 2); 
        cal1.cfg.setProperty("MDY_YEAR_POSITION", 3); 
         
        cal1.cfg.setProperty("MD_DAY_POSITION", 1); 
        cal1.cfg.setProperty("MD_MONTH_POSITION", 2); 
         
        // Date labels for German locale 
         
        cal1.cfg.setProperty("MONTHS_SHORT",   ["Jan", "Feb", "M\u00E4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]); 
        cal1.cfg.setProperty("MONTHS_LONG",    ["Januar", "Februar", "M\u00E4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]); 
        cal1.cfg.setProperty("WEEKDAYS_1CHAR", ["S", "M", "D", "M", "D", "F", "S"]); 
        cal1.cfg.setProperty("WEEKDAYS_SHORT", ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]); 
        cal1.cfg.setProperty("WEEKDAYS_MEDIUM",["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"]); 
        cal1.cfg.setProperty("WEEKDAYS_LONG",  ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]);
        
        cal1.selectEvent.subscribe(getDate, cal1, true);
        cal1.renderEvent.subscribe(setupListeners, cal1, true);
        Event.addListener(['cal1Date1', 'cal1Date2', 'cal1Date3'], 'focus', showCal);
        Event.addListener(['cal1Date1', 'cal1Date2', 'cal1Date3'], 'blur', hideCal);
        cal1.render();
        //dp.SyntaxHighlighter.HighlightAll('code'); 
    }

    var setupListeners = function() {
        Event.addListener('cal1Container', 'mouseover', function() {
            over_cal = true;
        });
        Event.addListener('cal1Container', 'mouseout', function() {
            over_cal = false;
        });
    }

    var getDate = function() {
            var calDate = this.getSelectedDates()[0];
            calDate = calDate.getDate() + '.' + (calDate.getMonth() + 1) + '.' + calDate.getFullYear();
            cur_field.value = calDate;            
            over_cal = false;
            hideCal();
    }

    var showCal = function(ev) {
        var tar = Event.getTarget(ev);
        cur_field = tar;
    
        var xy = Dom.getXY(tar),
            date = "";//Dom.get(tar).value;
        if (date) {
            cal1.cfg.setProperty('selected', date);
            cal1.cfg.setProperty('pagedate', new Date(date), true);
        } else {
            cal1.cfg.setProperty('selected', '');
            cal1.cfg.setProperty('pagedate', new Date(), true);
        }

        cal1.render();
        Dom.setStyle('cal1Container', 'display', 'block');
        xy[1] = xy[1] + 20;
        Dom.setXY('cal1Container', xy);
    }

    var hideCal = function() {
        if (!over_cal) {
            Dom.setStyle('cal1Container', 'display', 'none');
        }
    }

    Event.addListener(window, 'load', init);

})();
