cms_inittab.push(function() {
	var Dom=YAHOO.util.Dom;
	var Event=YAHOO.util.Event;
	var caltab={};
	var defcalobj={
		DATE_FIELD_DELIMITER:".",
		MD_DAY_POSITION:1,
		MD_MONTH_POSITION:2,
		MDY_DAY_POSITION:1,
		MDY_MONTH_POSITION:2,
		MONTHS_LONG:["Jänner","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],
		MONTHS_LONG:["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],
		START_WEEKDAY:1,
		WEEKDAYS_1CHAR:["S","M","D","M","D","F","S"],
		WEEKDAYS_SHORT:["So","Mo","Di","Mi","Do","Fr","Sa"],
		WEEKDAYS_MEDIUM:["Son","Mon","Die","Mit","Don","Fre","Sam"],
		WEEKDAYS_LONG:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],
		strings:{
			previousMonth:"voriges Monat",
			nextMonth:"nächstes Monat",
			close:"schließen"
		 },
		 navigator:{
			 strings:{
				 month:"Monat",
				 year:"Jahr",
				 submit:"Senden",
				 cancel:"Abbrechen",
				 invalidYear:"ungültige Jahreszahl"
			  },
			  monthFormat:YAHOO.widget.Calendar.LONG,
			  initialFocus:"year"
		  }
	 }
	
	cmslib.foreachplugin("bhv-special-calendar",function(el,calcfg) {
		if (!YAHOO.lang.isObject(calcfg))
		{
			calcfg={
				Anzahl:"1"
			 };
		}
		var anzahl=parseInt(calcfg.Anzahl);
		var calobj={id:el.id,config:calcfg};
		if (anzahl>1)
			calobj.cal=new YAHOO.widget.CalendarGroup(el.id+"_t",el.id,YAHOO.lang.merge(defcalobj,{pages:anzahl}));
		else
			calobj.cal=new YAHOO.widget.Calendar(el.id,defcalobj);
		cmslib.unload.register(calobj);
		if ( calcfg.datasource )
		{
			try
			{
				if ( Y.Lang.isString(calcfg.datasource) )
					calcfg.datasource=new Function("calcfg",calcfg.datasource);
				calobj.ds=calcfg.datasource.call(calobj.cal,calcfg);
				calobj.ds.sendRequest("", {
					success:function(req,resp,cal) {
						calobj.rawdata=resp;
						calobj.data={};
						var ttab=resp.results;
						var datkey=/^\d+$/.test(calcfg.datefield)
							? parseInt(calcfg.datefield,10)
							: calcfg.datefield;
						for ( var itt=0 ; itt<ttab.length ; ++itt )
						{
							var datum=new Date(ttab[itt][datkey]);
							if ( !calobj.data[datum] )
								calobj.data[datum]=ttab[itt];
							else if ( calobj.data[datum] instanceof Array )
								calobj.data[datum].push(ttab[itt]);
							else
								calobj.data[datum]=[calobj.data[datum],ttab[itt]];
							cal.addRenderer(datum.getDate()+'.'+(datum.getMonth()+1)+'.'+datum.getFullYear(),cal.renderCellStyleHighlight1);
						}
						cal.render();
					 },
					failure:function(req,resp,cal) {
						Y.error("bhv-special-calendar: datasource Lesefehler");
					 },
					argument:calobj.cal
				 });
			}
			catch (ex)
			{
				Y.error('CATCH: bhv-special-calendar: datasource init');
			}
			
		}
		if ( calcfg.onselect )
		{
			try
			{
				if ( Y.Lang.isString(calcfg.onselect) )
					calcfg.onselect=new Function("date","record",calcfg.onselect);
				calobj.cal.selectEvent.subscribe(function(evtype,dates){
					var selected=dates[0];
					if ( selected.length>0 )
					{
						var dat=this.toDate(selected[0]);
						var rec=calobj.data[dat];
						return calcfg.onselect.call(this,dat,rec);
					}
				 },calobj.cal,true);
				
			}
			catch (ex)
			{
				Y.error('CATCH: calcfg.onselect: '+ex.description);
			}
			
		}
		if ( calcfg.Vorlagehtml || calcfg.popupscript )
		{
			YUI().use("node","event","overlay","substitute",function(Y) {
				var cal=Y.one(calobj.cal.oDomContainer);
				
				var tt=new Y.Overlay({visible:false,width:320});
				tt.render(document.body);
				tt.get("contentBox").addClass("tooltip");
				
				try
				{
					if ( calcfg.popupscript && Y.Lang.isString(calcfg.popupscript) )
						calcfg.popupscript=new Function("date","record","config","showtooltip",calcfg.popupscript);
					else if ( !Y.Lang.isFunction(calcfg.popupscript) )
						calcfg.popupscript=null;
				}
				catch (ex)
				{
					Y.error('CATCH: calcfg.popupscript:'+ex.description);
					calcfg.popupscript=null;
				}
				
				if ( calcfg.Vorlagehtml )
				{
					function tpl_subst(str,dat)
					 {
						var vp=str.split(/<!\*\*\*!>/);
						var tpl_hd="",tpl_bd="",tpl_sep="",tpl_ft="";
						var datstr=dat.getDate()+'.'+(dat.getMonth()+1)+'.'+dat.getFullYear();
						var datobj={_date:datstr,_day:dat.getDate(),_month:dat.getMonth()+1,_year:dat.getFullYear(),_index:''};
						var rec=calobj.data[dat];
						switch ( vp.length )
						{
						 case 1: //
							tpl_bd=vp[0];
							break;
						 case 2: //
							tpl_hd=vp[0];
							tpl_bd=vp[1];
							break;
						 case 3: //
							tpl_hd=vp[0];
							tpl_bd=vp[1];
							tpl_sep=vp[2];
							break;
						 case 4: //
						 default:
							tpl_hd=vp[0];
							tpl_bd=vp[1];
							tpl_sep=vp[2];
							tpl_ft=vp[3];
							break;
						}
						if ( !(rec instanceof Array) )
							rec=[rec];
						var out=[Y.substitute(tpl_hd,datobj)];
						for ( var i=0 ; i<rec.length ; ++i )
						{
							datobj._index=i;
							if ( i!=0 )
								out.push(Y.substitute(tpl_sep,datobj));
							out.push(Y.substitute(tpl_bd,Y.merge(rec[i],datobj)));
						}
						datobj._index="";
						out.push(Y.substitute(tpl_ft,datobj));
						return out.join('');
					 }
					
				}
				
				cal.delegate('mouseover',function(e){
					if ( calobj.tttimer )
					{
						window.clearTimeout(calobj.tttimer);
						calobj.tttimer=null;
					}
					var el=e.currentTarget;
					var fn=null,ret=null;
					var config={el:el,points:["tl","bl"],width:220};
					el.set("title","");
					var dat=calobj.cal.getDateByCellId(el.get("id"));
					var datstr=dat.getDate()+'.'+(dat.getMonth()+1)+'.'+dat.getFullYear();
					var rec=calobj.data[dat];
					function showtooltip(html)
					 {
						tt.set("bodyContent",html);
						tt.set("align",{node:config.el||el,points:config.points||["tl","bl"]});
						if ( config.width )
							tt.set("width",config.width);
						tt.show();
					 }
					
					try
					{
						if ( calcfg.popupscript )
						{
							try
							{
								ret=calcfg.popupscript.call(calobj.cal,dat,rec,config,showtooltip)
							}
							catch (ex)
							{
								Y.error('CATCH: calcfg.popupscript mouseover:'+ex.description);
								ret=false;
							}
						}
						else
							ret=calcfg.Vorlagehtml;
						if ( ret!==false  )
							showtooltip(tpl_subst(ret,dat));
					}
					catch (ex)
					{
						Y.log('CATCH: cal mouseover: '+el.get("tagName"));
					}
					
				 },'td.highlight1'); // irgendwie anders, nicht auf highlight1 beschränkt
				cal.delegate('mouseout',function(e){
					calobj.tttimer=window.setTimeout(function(){calobj.tttimer=null;tt.hide();},60);
				 },'td.highlight1');
			 });
		}
		calobj.cal.render();
		caltab[el.id]=calobj;
	 });
	cmslib.sync.notify("calendar",caltab);
});
