// Generated from /dynamic/event/proxy.phtml?showstub=true&objectname=CalendarController, DO NOT EDIT!
if(typeof(CalendarController) == 'undefined')
    CalendarController = new Object();

Object.extend(CalendarController,
{
    _callback497874e9e40ca: "/dynamic/event/proxy.phtml",

    _getJSON: function(r, j)
    {
        j = (j || r.headerJSON || r.responseJSON);
        if(j == null)
            return null;
        if(j.errors || j.failed)
        {
            var f = function(a, c)
            {
                var e = $(c);
                if(a.length > 0)
                {
                    var s = '<ul>';
                    $(a).each(function(e){ s += '<li>'+e+'</li>'; });
                    s += '</ul>';
                    if(e){ e.update(s); e.show(); }
                }
                else
                {
                    if(e){ e.hide(); }
                }
            }
            if(!j.errors)
            {
                j.errors = {error: [], warning: [], info: []}
                if(j.failed)
                    j.errors.error[0] = j.message;
            }

            f(j.errors.error, 'globuleError');
            f(j.errors.warning, 'globuleWarning');
            f(j.errors.info, 'globuleInfo');
        }
        return j;
    },

    _proxy: function(callbackurl, methodName, args, sync)
    {
        var targs = $H();
        for(var i = 0; i < args.length-1; i++){ targs.set('args[' + i + ']', args[i]); }
        callback = args[args.length-1];
        var ar = new Ajax.Request(callbackurl + '?method=' + methodName,
        {
            method: 'post',
            asynchronous: (!sync),
            parameters: targs,
            onComplete: (sync)?null:callback,
            onException: function(request, e){console.debug(request, e);}
        });
        if(sync)
            return new Ajax.Response(ar);
        return null;
    },

    _getSmallCalendar: function(){ this._proxy(this._callback497874e9e40ca, '_getSmallCalendar', arguments, false); },
    _getSmallCalendar_sync: function(){ return this._proxy(this._callback497874e9e40ca, '_getSmallCalendar', arguments, true); },

    _getMonthEvent: function(){ this._proxy(this._callback497874e9e40ca, '_getMonthEvent', arguments, false); },
    _getMonthEvent_sync: function(){ return this._proxy(this._callback497874e9e40ca, '_getMonthEvent', arguments, true); },

    _getDayEvent: function(){ this._proxy(this._callback497874e9e40ca, '_getDayEvent', arguments, false); },
    _getDayEvent_sync: function(){ return this._proxy(this._callback497874e9e40ca, '_getDayEvent', arguments, true); },

    _getModalEvents: function(){ this._proxy(this._callback497874e9e40ca, '_getModalEvents', arguments, false); },
    _getModalEvents_sync: function(){ return this._proxy(this._callback497874e9e40ca, '_getModalEvents', arguments, true); },

    _getSmallDate: function(){ this._proxy(this._callback497874e9e40ca, '_getSmallDate', arguments, false); },
    _getSmallDate_sync: function(){ return this._proxy(this._callback497874e9e40ca, '_getSmallDate', arguments, true); },

    _t: ''
});
// End of generated code

if(typeof(CalendarController) == 'undefined')
    CalendarController = new Object();

Object.extend(CalendarController,
{
    _calendars: $H(),
    
	initSmallCalendar: function(id, path, scalvar)
	{
        var c = 
        {
            tooltips: $A(),
            path: path,
            scalvar: scalvar,
            listeners: $A()
        };
        $A($(id).getElementsByClassName('tooltip')).each(function(t){
           t = $(t);
           c.tooltips.push(new Effect.Tooltip(t.previous('a'), t.down('ul'))); 
        });
        
        var pl = $(id).getElementsByClassName('calendar-previous-month');
        if(pl[0].tagName.toUpperCase() == 'A')
            c.listeners.push($(pl[0]).observe('click', this.gotoDate.bindAsEventListener(this, id)));
        var nl = $(id).getElementsByClassName('calendar-next-month');
        if(nl[0].tagName.toUpperCase() == 'A')
            c.listeners.push($(nl[0]).observe('click', this.gotoDate.bindAsEventListener(this, id)));

        this._calendars.set(id, c);
	},
	
	gotoDate: function(e, id)
	{
	    e.stop();
	    var h = $H(e.element().href.toQueryParams());
	    var c = this._calendars.get(id);
	    c.tooltips.invoke('teardown');
	    c.listeners.invoke('stopObserving', 'click');
	    var d = h.get(c.scalvar);
	    this._getSmallCalendar(d, c.path, c.scalvar, function(id, c, r){
	        $(id).update(r.responseText);
	        this.initSmallCalendar(id, c.path, c.scalvar);
	    }.bind(this, id, c));
	}
});