

red.prototype.calender = {
		
	nowjahr : false,

	nowmonat : false,
	
	nowtag : false,
	
	nowstunde : false,
	
	nowminute : false,	
	
	jahr : '',

	monat : '',
	
	tag : '',
	
	stunde : '10',
	
	minute : '0',
	
	selectedjahr : '',
	
	selectedmonat : '',
	
	selectedtag : '',
		
	container : '',
	
	containerid : '',
	
	inputfeldid : '',
	
	tagselect : true,
	
	monatselect : true,
	
	kwselect : true,
	
	sonntag : false,
	
	uhrzeitselect : true,
	
	stundevon : 8,
	
	stundebis : 20,
	
	monatnamen : new Array('Januar','Februar','M&auml;rz','April','Mai','Juni','Juli',
						'August','September','Oktober','November','Dezember'),
	
	outerdivstyle : 'font-family:arial;font-size:8pt;width:170px;border:1px solid #666;background-color:white;z-Index:500;height:162px;',
	
	uhrzeitdivstyle : '',
	
	typ : false,
	
	
	/* form: 2008-06-02 08:00:00 */
	init : function(containerid,inputfeldid,date,typ){
						
		red.prototype.calender.setdate(date);
		red.prototype.calender.setjetzt();
		
		red.prototype.calender.typ = typ;
		
		red.prototype.calender.containerid = containerid;
		red.prototype.calender.inputfeldid = inputfeldid;
		
		if(red.prototype.is_object(red.prototype.calender.container)){
			red.prototype.dom.remove(red.prototype.calender.container);
		}
		// kalender in externes div
		if(typ == 0){
			red.prototype.calender.container = red.prototype.dom.byid(containerid);
		}
		// kalender in eigenes div neben inputfeld
		if((red.prototype.calender.typ == 1)&&(containerid=='')){
			red.prototype.calender.container = red.prototype.calender.makecontainer(inputfeldid);
		}

		red.prototype.calender.selectedjahr 	= red.prototype.calender.nowjahr;
		red.prototype.calender.selectedmonat 	= red.prototype.calender.nowmonat;
		red.prototype.calender.selectedtag 		= red.prototype.calender.nowtag;

	},
	
	uhrzeitselecta : function(){
		var stunden = 'Stunde:<table style="border:0px;margin:0px;"><tr>';
				
		var j=0;
		for(var i=red.prototype.calender.stundevon;i<=red.prototype.calender.stundebis;i++){
						
			var button = red.prototype.calender.linkbutton(i,'red.prototype.calender.submit("3","'+i+'")','color:#000;font-size:7pt;');
			stunden += '<td style="border:0px;">'+button+'</td>';
			
			if(i != red.prototype.calender.stundevon){
				if((j==7)||(i==red.prototype.calender.stundebis)){stunden += '</tr>';}
				if(i != red.prototype.calender.stundebis){
					if(j==7){stunden += '<tr>';}
				}
			}			
			if(j==7){j=0;}
			else{j++;}
		}
		stunden += "</table>";
		
		
		var min1 = red.prototype.calender.linkbutton(0,'red.prototype.calender.submit("4","0")','color:#000;font-size:7pt;');
		var min2 = red.prototype.calender.linkbutton(15,'red.prototype.calender.submit("4","15")','color:#000;font-size:7pt;');
		var min3 = red.prototype.calender.linkbutton(30,'red.prototype.calender.submit("4","30")','color:#000;font-size:7pt;');
		var min4 = red.prototype.calender.linkbutton(45,'red.prototype.calender.submit("4","45")','color:#000;font-size:7pt;');
		
		var minuten = '<br>Minute:<table><tr>'+
						'<td style="border:0px;">'+min1+'</td>'+
						'<td style="border:0px;">'+min2+'</td>'+
						'<td style="border:0px;">'+min3+'</td>'+
						'<td style="border:0px;">'+min4+'</td>'+
						'</tr></table>';
		
		//alert(stunden);
		return stunden+minuten;	
	},
			
	show : function(){
		// kalender in eigenes div neben inputfeld
		if((red.prototype.calender.typ == 1)&&(red.prototype.calender.container=='')){
			red.prototype.calender.container = red.prototype.calender.makecontainer(red.prototype.calender.inputfeldid);
		}
		red.prototype.calender.fillcontainer();
	},
	
	fillcontainer : function(){
		var calender = red.prototype.calender.get();	
		if(red.prototype.calender.uhrzeitselect){
			red.prototype.calender.container.innerHTML = '<table cellpadding=0 cellspacing=0 style="padding:0px;margin:0px;border:0px;" border=0><tr valign=top><td style="padding:0px;border:0px;">'+calender+'</td><td style="padding:5px;border:0px;">'+
														red.prototype.calender.uhrzeitselecta()+'</td></tr></table>';
		}
		else{
			red.prototype.calender.container.innerHTML = calender;
		}	
	},	
	
	get : function(){
		var tagearray = red.prototype.calender.tagearray(red.prototype.calender.jahr,red.prototype.calender.monat);
		
		var tagtable = red.prototype.calender.format_tagearray(tagearray);
		
		var nextbutton = red.prototype.calender.linkbutton('>>','red.prototype.calender.nextmonth()','color:black;');
		var prevbutton = red.prototype.calender.linkbutton('<<','red.prototype.calender.prevmonth()','color:black;');
		
		var thisjahr = red.prototype.calender.jahr;
		var thismonat = red.prototype.calender.monat;
				
		if(red.prototype.calender.monatselect){
			var anzeige = '<div style="text-align:center;">'+
						red.prototype.calender.linkbutton(
						red.prototype.calender.monatnamen[thismonat-1]+' '+thisjahr,
						'red.prototype.calender.submit("1","'+thismonat+'")','color:black;')+
						'</div>';
		}
		else{
			var anzeige = '<div style="text-align:center;font-weight:bold;">'+red.prototype.calender.monatnamen[thismonat-1]+' '+thisjahr+'</div>';
		}		
		
		var resetbutton = red.prototype.calender.linkbutton('reset','red.prototype.calender.reset();red.prototype.calender.show()','color:#666;');
					
		var buttons = '<table width=100%><tr><td align=left>'+prevbutton+'</td><td align=center>'+resetbutton+'</td><td align=right>'+nextbutton+'</td></tr></table>';		

		var outerdiv = '<div style="'+red.prototype.calender.outerdivstyle+'">'+anzeige+buttons+tagtable+'</div>';
				
		return outerdiv;			
				
	},
	
	makecontainer : function(inputfeldid){			
		if(red.prototype.is_object(inputfeldid)){var input=inputfeldid;}
		else{var input = red.prototype.dom.byid(inputfeldid);}
		
		var inputpos = red.prototype.css.getxy(input);

		var screensize 	= red.prototype.f_clientHeight();
		var scrolltop	= red.prototype.f_scrollTop();
		
		if((screensize-(inputpos[1]-scrolltop)) < 180){
			var posarray = new Array(inputpos[0],inputpos[1]-164);
		}
		else{
			var posarray = new Array(inputpos[0],inputpos[1]+22);
		}

		var outerdiv = red.prototype.dom.element('div');
		outerdiv.id = "calenderdiv";
		red.prototype.css.setxy(outerdiv,posarray,'absolute');
		outerdiv.style.zIndex = 500;
		red.prototype.dom.insert(outerdiv);
		return outerdiv;
	},
	
	kalenderwoche : function(j,m,t){
		Datum = new Date(j,m-1,t); 
		DoDat = red.prototype.calender.donnerstag(Datum);
		kwjahr = DoDat.getFullYear();
		DoKW1 = red.prototype.calender.donnerstag(new Date(kwjahr,0,4)); 
		var kw = Math.floor(1.5+(DoDat.getTime()-DoKW1.getTime())/86400000/7);
		return kw;
	},

	donnerstag : function(datum) { 
		var Do=new Date();
		Do.setTime(datum.getTime() + (3-((datum.getDay()+6) % 7)) * 86400000);
		return Do;
	},
	
	reset : function(){
		red.prototype.calender.setdate();
		red.prototype.calender.setjetzt();
	},
	
 	nextmonth : function(elem){
		var monat 	= red.prototype.calender.monat;
		var jahr 	= red.prototype.calender.jahr;
		var nextmonat;var nextjahr;
		if(monat==12){nextmonat = 1;nextjahr = jahr+1;}
		else{nextmonat = monat+1;nextjahr = jahr;}
		red.prototype.calender.monat = nextmonat;
		red.prototype.calender.jahr = nextjahr;
		red.prototype.calender.fillcontainer();
	},
	
	prevmonth : function(){
		var monat 	= red.prototype.calender.monat;
		var jahr 	= red.prototype.calender.jahr;
		var prevmonat;var prevjahr;
		if(monat==1){prevmonat = 12;prevjahr = jahr-1;}
		else{prevmonat = monat-1;prevjahr = jahr;}
		red.prototype.calender.monat = prevmonat;
		red.prototype.calender.jahr = prevjahr;
		red.prototype.calender.fillcontainer();
	},
	
	button : function(text,btnfunction){
		var button = "<button onclick='"+btnfunction+"'>"+text+"</button>";
		return button;
	},
	
	linkbutton : function(text,btnfunction,style){
		var button = "<a onClick='"+btnfunction+"\' style='"+style+";cursor:pointer;'>"+text+"</a>";
		return button;
	},
	
	setjetzt : function(){
		var jetzt = red.prototype.calender.jetzt();
		red.prototype.calender.nowjahr 	= jetzt[0];
		red.prototype.calender.nowmonat 	= jetzt[1];
		red.prototype.calender.nowtag 		= jetzt[2];
		red.prototype.calender.nowstunde 	= jetzt[3];
		red.prototype.calender.nowminute 	= jetzt[4];
		
		var thistag = jetzt[2];
		if(thistag < 10){
			thistag = '0'+thistag;
		}
		var thismonat = jetzt[1];
		if(thismonat < 10){
			thismonat = '0'+thismonat;
		}
		
		red.prototype.calender.tag 		= thistag;
				
	},
	
	setdate : function(date){
		if((date!='')&&(date!=null)){
			var datearray = date.split('-');
			red.prototype.calender.jahr 	= parseInt(datearray[0],10);
			red.prototype.calender.monat 	= parseInt(datearray[1],10);
		}
		else{
			var jetzt = red.prototype.calender.jetzt();
			red.prototype.calender.jahr 	= jetzt[0];
			red.prototype.calender.monat 	= jetzt[1];
		}	
	},	
	
	tagearray : function(jahr,monat){
		monat			= monat-1;
		var tagezahl	= new Array(31,red.prototype.calender.schaltjahr(jahr),31,30,31,30,31,31,30,31,30,31);
		var tagearray = new Array();
		for(var i=0;i<tagezahl[monat];i++){
			tagearray[i] = new Array();
			tagearray[i][0] = (i+1);
			tagearray[i][1] = red.prototype.calender.getday(jahr,(monat+1),(i+1));
		}
		return tagearray;				
	},
	
	format_tagearray : function(tagearray){
		var table = '<table border=0 width=100% style="border-collapse:collapse;" cellspacing=0 cellpadding=0>';
		
		table += '<tr><td><b>Mo</b></td><td><b>Di</b></td><td><b>Mi</b></td><td><b>Do</b></td><td><b>Fr</b></td><td><b>Sa</b></td><td>So</td><td>KW</td></tr>';
				
		var i = 0;
		var j = 0;
		
		var daynames = new Array( "Mo", "Di", "Mi","Do", "Fr", "Sa","So");
		var zeilen = new Array();
		var flag = true;
		var value = '';
		
		while(true){
			zeilen[j] = new Array();
			table += '<tr>';
			for(var k=0;k<daynames.length;k++){
				zeilen[j][k] = new Array();
				value = '';
				if(flag){				
					if(tagearray[i][1] == daynames[k]){
						zeilen[j][k] = tagearray[i][0];
						if((red.prototype.calender.is_selectedday(red.prototype.calender.jahr,red.prototype.calender.monat,tagearray[i][0]))&&
						red.prototype.calender.is_thisday(red.prototype.calender.jahr,red.prototype.calender.monat,tagearray[i][0])){
							value = red.prototype.calender.format_tagtd(tagearray[i][0],'background-color:#FF9999;border:2px solid black;');
						}
						else if(red.prototype.calender.is_selectedday(red.prototype.calender.jahr,red.prototype.calender.monat,tagearray[i][0])){
							value = red.prototype.calender.format_tagtd(tagearray[i][0],'background-color:#FF9999');
						}
						else if(red.prototype.calender.is_thisday(red.prototype.calender.jahr,red.prototype.calender.monat,tagearray[i][0])){
							value = red.prototype.calender.format_tagtd(tagearray[i][0],'background-color:#eee;border:2px solid black;');
						}
						else{
							if(tagearray[i][1] == 'So'){
								if(red.prototype.calender.sonntag){
									value = red.prototype.calender.format_tagtd(tagearray[i][0],'background-color:#ccc');
								}
								else{
									value = '<td style="padding:1px;background-color:#ccc;border:0px;">'+tagearray[i][0]+'</td>';
								}
							}
							else{
								value = red.prototype.calender.format_tagtd(tagearray[i][0],'background-color:#eee');
							}
						}
						
						
						
						i++;
					}
					else{
						zeilen[j][k] = '';
						value = red.prototype.calender.format_tagtd('','background-color:#eee');
					}
				}
				else{
					zeilen[j][k] = '';
					value = red.prototype.calender.format_tagtd('','background-color:#eee');
				}
				table += value;
				if(i==tagearray.length){flag=false;}
			
				// kws
				if(k==daynames.length-1){
					var kw = red.prototype.calender.kalenderwoche(red.prototype.calender.jahr,red.prototype.calender.monat,i);
					if(red.prototype.calender.kwselect){
						var button = red.prototype.calender.linkbutton(kw,'red.prototype.calender.submit("2","'+kw+'")','color:#eee;');
					}
					else{
						var button = '<span style="color:#eee;">'+kw+'</span>';
					}
					table += '<td style="background-color:#999;border:0px solid #666;padding:1px;" align=center>'+button+'</td>';
				}			
			
			}
			table += '</tr>';
			if(!flag){break;}
			j++;
			
		}
		
		table += '</table>';
		
		return table;
		
	},
	
	format_tagtd : function(value,style){
		var button = '&nbsp;';
		if(value != ''){
			if(red.prototype.calender.tagselect){
				button = red.prototype.calender.linkbutton(value,'red.prototype.calender.submit("0","'+value+'")','color:black;display:block;width:100%;');
			}
			else{
				button = value;
			}
		}
				
		var td = '<td style="padding:1px;border:0px solid #666;'+style+'" align=center>'+button+'</td>';
		
		return td;		
	},	
	
	submit : function(type,value){
		var thisjahr 	= red.prototype.calender.jahr;
		var thismonat 	= red.prototype.calender.monat;
		var stunde 		= red.prototype.calender.stunde;
		var minute 		= red.prototype.calender.minute;
		
		var selectjahr 	= red.prototype.calender.selectedjahr;
		var selectmonat	= red.prototype.calender.selectedmonat;
		var selecttag	= red.prototype.calender.selectedtag;
						
		if(thismonat < 10){
			thismonat = '0'+thismonat;
		}
		if(value < 10){
			value = '0'+value;
		}
		
		if(selectmonat < 10){
			selectmonat = '0'+selectmonat;
		}
		if(selecttag < 10){
			selecttag = '0'+selecttag;
		}
		if(stunde < 10){
			stunde = '0'+stunde;
		}
		if(minute < 10){
			minute = '0'+minute;
		}
		
		var uhrzeit = '';
		if(red.prototype.calender.uhrzeitselect){
			uhrzeit = ' '+stunde+':'+minute+':00';
		}
		
		
		var result;
		
		if(type == '0'){
			red.prototype.calender.tag = parseInt(value,10);
			result = thisjahr+'-'+thismonat+'-'+value+uhrzeit;
		}
		
		if(type == '1'){
			result = thisjahr+'-'+value;
		}
		
		if(type == '2'){
			result = thisjahr+'/'+value;
		}
		
		if(type == '3'){
			red.prototype.calender.stunde = parseInt(value,10);
			result = selectjahr+'-'+selectmonat+'-'+selecttag+' '+value+':'+minute+':00';
		}
		
		if(type == '4'){
			red.prototype.calender.minute = parseInt(value,10);
			result = selectjahr+'-'+selectmonat+'-'+selecttag+' '+stunde+':'+value+':00';
		}
		
		if(red.prototype.is_object(red.prototype.calender.inputfeldid)){var input=red.prototype.calender.inputfeldid;}
		else{var input = red.prototype.dom.byid(red.prototype.calender.inputfeldid);}
				
		input.value = result;
				
		if(red.prototype.calender.typ == 1){
			red.prototype.dom.remove(red.prototype.calender.container);
			red.prototype.calender.container.innerHTML = '';
			red.prototype.calender.container = '';
			red.prototype.calender.reset();
		}
		else if(red.prototype.calender.typ == 0){
			if(type == '0'){
				red.prototype.calender.selectedjahr = thisjahr;
				red.prototype.calender.selectedmonat = parseInt(thismonat,10);
				red.prototype.calender.selectedtag = red.prototype.calender.tag;
			}
			red.prototype.calender.show();	
		}
	},
	
	is_thisday : function(jahr,monat,tag){
		if((red.prototype.calender.nowjahr==jahr)&&(red.prototype.calender.nowmonat==monat)&&
			(red.prototype.calender.nowtag==tag)){
			return true;
		}
		else{
			return false;
		}
	},
	
	is_selectedday : function(jahr,monat,tag){
		if((parseInt(red.prototype.calender.selectedjahr,10)==parseInt(jahr,10))
			&&(parseInt(red.prototype.calender.selectedmonat,10)==parseInt(monat,10))&&
			(parseInt(red.prototype.calender.selectedtag,10)==parseInt(tag,10))){
			return true;
		}
		else{
			return false;
		}
	},
	

	getday : function(jahr,monat,tag){
		monat			= monat-1;
		var thisdate 	= new Date(jahr,monat,tag,0,0,0);
		var day 		= thisdate.getDay();
		var dayname 	= new Array("So", "Mo", "Di", "Mi","Do", "Fr", "Sa");
		dayname = dayname[day];
		return dayname;
	},

	jetzt : function(){
		var thisdate 	= new Date();
		var jahr 		= thisdate.getFullYear();
		var monat		= thisdate.getMonth()+1;
		var tag 		= thisdate.getDate();
		var std			= thisdate.getHours();
		var min			= thisdate.getMinutes();
		var sek			= thisdate.getSeconds();
		var mil			= thisdate.getMilliseconds();
		return new Array(jahr,monat,tag,std,min,sek,mil);
	},
	
	schaltjahr : function(j){
		t = 28;
		if (j % 4 == 0) {
			t = 29;
			if (j % 100 == 0 && j % 400 != 0) t = 28;
		}
		return t;
	},
	
	remove : function(){
		if(red.prototype.calender.container != ''){
			red.prototype.dom.remove(red.prototype.calender.container);
			red.prototype.calender.container.innerHTML = '';
			red.prototype.calender.container = '';
			red.prototype.calender.reset();
		}
	}
	
};
