/**
 * Make sure DOM tree is ready and init js functions.
 */
YAHOO.util.Event.onDOMReady(initCal);
var Dom = YAHOO.util.Dom;
var aType;

/**
 * Basic init(s) on page load.
 */
function initCal() {

    switchVis('list', 'calendar');
    ovl();
    ovl2();
}

/**
 * Switch visibility of view scope.
 * Scopes: list and calendar.
 * Note: 'search' is no channel, but helper for search layouts
 *
 * @param vType Visible part
 * @param iType Invisible part
 */
function switchVis(vType, iType) {

    if(vType != aType) {

    	Dom.setStyle(['film_'+iType, 'video_'+iType, 'games_'+iType, 'musik_'+iType, 'search_'+iType], 'display', 'none');
        Dom.setStyle(['film_'+iType, 'video_'+iType, 'games_'+iType, 'musik_'+iType, 'search_'+iType], 'visibility', 'hidden');
        Dom.setStyle(['film_'+vType, 'video_'+vType, 'games_'+vType, 'musik_'+vType, 'search_'+vType], 'display', 'block');
        Dom.setStyle(['film_'+vType, 'video_'+vType, 'games_'+vType, 'musik_'+vType, 'search_'+vType], 'visibility', 'visible');

    	Emv.Effects.addClassName(vType + '_view_bt', 'active');
    	Emv.Effects.removeClassName(iType + '_view_bt', 'active');

    	aType = vType;
    	Mediabiz.Statistics.setCountPixel();
    }
}

/**
 * Check cities input (main column).
 */
function ovl() {

    if( Dom.get('csChan') ) {

        var csChan1   = Dom.get('csChan').value;
        var csOrt1    = Dom.get('csOrt').value;
        var csInput1  = 'csOrt';
        var csOutput1 = 'csOrtContainer';

        autoComplete(csChan1, csOrt1, csInput1, csOutput1);
    }
}

/**
 * Check cities input (right column).
 */
function ovl2() {

    if( Dom.get('csChan2') ) {

        var csChan2   = Dom.get('csChan2').value;
        var csOrt2    = Dom.get('csOrt2').value;
        var csInput2  = 'csOrt2';
        var csOutput2 = 'csOrtContainer2';

        autoComplete(csChan2, csOrt2, csInput2, csOutput2);
    }
}

/**
 * Auto-complete overlay for cities.
 */
function autoComplete(csChan, csOrt, csInput, csOutput) {

    if( csChan == 'mediabiz' ) {

        csChan = '';
    } else {

        csChan = '/' + csChan;
    }

    var oDS = new YAHOO.util.XHRDataSource(csChan + "/termine/overlay/autocomplete?csOrt=" + csOrt);

    oDS.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
    oDS.responseSchema = {
        recordDelim: "\n",
        fieldDelim: "\t"
    };
    oDS.maxCacheEntries = 5;

    var oAC = new YAHOO.widget.AutoComplete(csInput, csOutput, oDS);
    return {
        oDS: oDS,
        oAC: oAC
    };
}

/**
 * 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"]);

        // Select/pageTo month/year of the textfield?
        if (actionField.value != '') {

            calendar.select(actionField.value);
            var selectedDates = calendar.getSelectedDates();
            if (selectedDates[0] == "Invalid Date") {

            	// clear the above selected (invalid) date.
            	calendar.clear();
            } else if (selectedDates.length > 0) {

        		calendar.cfg.setProperty("pagedate", (selectedDates[0].getMonth()+1) + "/" + selectedDates[0].getFullYear());
    		}
        }
        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();
}

/**
 * Show single event panel.
 * Also hide panel from last call, if still open.
 *
 * @param integer tnr
 * @param string chn
 * @param string typ
 */
var oldTnr;
function showPanel(tnr, chn, typ) {

    if( oldTnr != tnr) {

        hidePanel(oldTnr);
    }
    Dom.setStyle('panel_' + chn + '_' + tnr, 'display', 'block');
    Dom.setStyle('panel_' + chn + '_' + tnr, 'visibility', 'visible');
    Dom.setXY('panel_' + chn + '_' + tnr, YAHOO.util.Dom.getXY(typ + '_' + chn + '_' + tnr));
    oldTnr = tnr;

    Mediabiz.Statistics.setCountPixel();
}

/**
 * Hide single event panel.
 *
 * @param integer tnr
 * @param string chn
 */
function hidePanel(tnr, chn) {

    Dom.setStyle('panel_' + chn + '_' + tnr, 'display', 'none');
    Dom.setStyle('panel_' + chn + '_' + tnr, 'visibility', 'hidden');
}