var CCLD_Data = new Object();
var CCLD_Frames = new Array();
var CCLD_References = new Object();
var CCLD_Focused = null;

var CCLD_MONTHS_LONG = new Object();
var CCLD_MONTHS_SHORT = new Object();
var CCLD_DAYS_LONG = new Object();
var CCLD_DAYS_SHORT = new Object();

var CCLD_EVTDOC_MDWN = false;

/* Monate und Wochentage: Deutsch */
CCLD_MONTHS_LONG['de']	= new Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
CCLD_MONTHS_SHORT['de']	= new Array("Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sept", "Okt", "Nov", "Dez");
CCLD_DAYS_LONG['de'] 	= new Array("Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag");
CCLD_DAYS_SHORT['de']	= new Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");

/* Monate und Wochentage: Englisch */
CCLD_MONTHS_LONG['en']	= new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
CCLD_MONTHS_SHORT['en']	= new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
CCLD_DAYS_LONG['en']	= new Array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
CCLD_DAYS_SHORT['en']	= new Array("Mo", "Tu", "We", "Th", "Fr", "Sa", "Su");

function CCLD_DEBUG(message)
{
	document.getElementById('cal_debug').value = message;
}

function CCLD_SubDate(strDate, toInt)
{
	var return_data = new Object();
	
	temp = strDate.split(".");
	
	return_data.day 	= temp[0];
	return_data.month 	= temp[1];
	return_data.year 	= temp[2];
	
	if (return_data.year.length == 2)
		return_data.year = "20" + return_data.year;
	
	if (toInt)
	{
		return_data.day 	= parseInt(temp[0], 10);
		return_data.month 	= parseInt(temp[1], 10);
		return_data.year 	= parseInt(temp[2], 10);
	}
	
	return return_data;
}

function CCLD_ValidateDate(v_date, year_short)
{
	var temp = v_date.split(".");
	
	if (!year_short)
		year_short = false;
	
	if (!temp[0] || !temp[1] || !temp[2] || temp[2].length == 1 || temp[2].length == 3)
		return false;
	
	if (temp.length == 3 && temp[0] > 0 && temp[0] < 32 && temp[1] > 0 && temp[1] < 13 && temp[2].length < 5)
	{
		if (temp[0].length == 1)
			temp[0] = "0" + temp[0];
		
		if (temp[1].length == 1)
			temp[1] = "0" + temp[1];
		
		if (temp[2].length == 2)
			temp[2] = "20" + temp[2];
		
		if (year_short)
		{
			temp[2] = temp[2].substr(2, 2);
		}
		
		return temp[0]+"."+temp[1]+"."+temp[2];
	} else {
		return "";
	}
}

function CCLD_Event_Focus(e)
{
	if (!e) var e = window.event;
	
	target = GetTarget(e);
	
	for (s = 0; s < CCLD_Frames.length; s++)
	{
		if (CCLD_Data[CCLD_Frames[s]].popup && CCLD_Data[CCLD_Frames[s]].visible)
		{
			CCLD_Data[CCLD_Frames[s]].locked = false;
			CCLD_Hide(CCLD_Frames[s]);
		}
	}
	
	for (s = 0; s < CCLD_Frames.length; s++)
	{
		if (CCLD_Data[CCLD_Frames[s]].storage == target.id)
		{
			if (CCLD_Data[CCLD_Frames[s]].reference)
			{
				frame = CCLD_Data[CCLD_Frames[s]].reference;
			} else {
				frame = CCLD_Frames[s];
			}
			
			if (CCLD_Data[frame].popup)
			{	// Nur bei Popup neu zeichnen
				CCLD_Redraw(frame);
			}
			
			CCLD_Show(frame);
			
		} else
		if (CCLD_Data[CCLD_Frames[s]].popup) {
			
		}
	}
}

function CCLD_Event_Blur(e)
{
	if (!e) var e = window.event;
	
	target = GetTarget(e);
	
}

function CCLD_Event_KeyClose(e)
{
	if (!e) var e = window.event;
	
	target = GetTarget(e);
	
	if (e.keyCode == 9)
	{
		for (s = 0; s < CCLD_Frames.length; s++)
		{
			frame = CCLD_Frames[s];
			
			if (target.id == CCLD_Data[frame].storage)
			{
				if (CCLD_Data[frame].reference)
				{
					CCLD_Hide(CCLD_Data[frame].reference);
				} else {
					CCLD_Hide(frame);
				}
			}
		}
	}
}

function CCLD_Event_KeyDown(e)
{
	if (!e) var e = window.event;
	
	target = GetTarget(e);
	
	for (s = 0; s < CCLD_Frames.length; s++)
	{
		if (target.id == CCLD_Data[CCLD_Frames[s]].id_input_year)
		{
			var year = document.getElementById(target.id);
			
			if (e.keyCode == 38 && parseInt(year.value) < 2100)
			{
				year.value = parseInt(year.value) + 1;
				
				CCLD_Data[CCLD_Frames[s]].display = new Date(year.value, CCLD_Data[CCLD_Frames[s]].display.getMonth(), 1, 12, 0, 0);
				
				CCLD_Redraw(CCLD_Frames[s]);
			} else
			if (e.keyCode == 40 && parseInt(year.value) > 1970)
			{
				year.value = parseInt(year.value) - 1;
				
				CCLD_Data[CCLD_Frames[s]].display = new Date(year.value, CCLD_Data[CCLD_Frames[s]].display.getMonth(), 1, 12, 0, 0);
				
				CCLD_Redraw(CCLD_Frames[s]);
			} else {
				
			}
		} else
		if (target.id == CCLD_Data[CCLD_Frames[s]].id_select_month)
		{
			
		}
	}
}

function CCLD_Event_KeyUp(e)
{
	if (!e) var e = window.event;
	
	target = GetTarget(e);
	
	for (s = 0; s < CCLD_Frames.length; s++)
	{
		if (target.id == CCLD_Data[CCLD_Frames[s]].id_input_year)
		{
			var year = parseInt(document.getElementById(target.id).value);
			
			if (year >= 1970 && year <= 2099 && year != CCLD_Data[CCLD_Frames[s]].display.getFullYear())
			{
				CCLD_Data[CCLD_Frames[s]].display = new Date(year, CCLD_Data[CCLD_Frames[s]].display.getMonth(), 1, 12, 0, 0);
				
				CCLD_Redraw(CCLD_Frames[s]);
			}
		} else
		if (target.id == CCLD_Data[CCLD_Frames[s]].storage)
		{
			var date = CCLD_ValidateDate(document.getElementById(CCLD_Data[CCLD_Frames[s]].storage).value);
			
			if (date)
			{
				d = CCLD_SubDate(date);
				
				var temp = new Date(d.year, d.month - 1, d.day, 12, 0, 0);
				
				CCLD_Data[CCLD_Frames[s]].select = temp;
				CCLD_Data[CCLD_Frames[s]].display = new Date(CCLD_Data[CCLD_Frames[s]].select.getFullYear(), CCLD_Data[CCLD_Frames[s]].select.getMonth(), 1, 12, 0, 0);
				
				CCLD_Redraw(CCLD_Frames[s]);
			}
		}
	}
}

function CCLD_Event_MouseDown(e)
{
	if (!e) var e = window.event;
	
	target = GetTarget(e);
		
	for (s = 0; s < CCLD_Frames.length; s++)
	{
		if (target.id == CCLD_Data[CCLD_Frames[s]].id_dec_month || target.id == CCLD_Data[CCLD_Frames[s]].id_inc_month)
		{
			var list = document.getElementById(CCLD_Data[CCLD_Frames[s]].id_select_month);
			
			if (target.id == CCLD_Data[CCLD_Frames[s]].id_dec_month)
			{
				CCLD_Data[CCLD_Frames[s]].display = new Date(CCLD_Data[CCLD_Frames[s]].display.getFullYear(), CCLD_Data[CCLD_Frames[s]].display.getMonth() - 1, 1, 12, 0, 0);
				
				if (CCLD_Data[CCLD_Frames[s]].display.getTime() < CCLD_Data[CCLD_Frames[s]].v_start.getTime())
				{
					// Wieder zurück, da ausserhalb des gültigen Bereichs
					CCLD_Data[CCLD_Frames[s]].display = new Date(CCLD_Data[CCLD_Frames[s]].display.getFullYear(), CCLD_Data[CCLD_Frames[s]].display.getMonth() + 1, 1, 12, 0, 0);
				}
			} else {
				CCLD_Data[CCLD_Frames[s]].display = new Date(CCLD_Data[CCLD_Frames[s]].display.getFullYear(), CCLD_Data[CCLD_Frames[s]].display.getMonth() + 1, 1, 12, 0, 0);
				
				if (CCLD_Data[CCLD_Frames[s]].display.getTime() > CCLD_Data[CCLD_Frames[s]].v_end.getTime())
				{
					// Wieder zurück, da ausserhalb des gültigen Bereichs
					CCLD_Data[CCLD_Frames[s]].display = new Date(CCLD_Data[CCLD_Frames[s]].display.getFullYear(), CCLD_Data[CCLD_Frames[s]].display.getMonth() - 1, 1, 12, 0, 0);
				}
			}
			
			CCLD_Redraw(CCLD_Frames[s]);
		} else
		if (target.id == CCLD_Data[CCLD_Frames[s]].id_dec_year || target.id == CCLD_Data[CCLD_Frames[s]].id_inc_year)
		{
			if (target.id == CCLD_Data[CCLD_Frames[s]].id_dec_year)
			{
				// document.getElementById(CCLD_Data[CCLD_Frames[s]].id_input_year).value = parseInt(document.getElementById(CCLD_Data[CCLD_Frames[s]].id_input_year).value) - 1;
				if (CCLD_Data[CCLD_Frames[s]].display.getFullYear() > CCLD_Data[CCLD_Frames[s]].v_start.getFullYear())
					CCLD_Data[CCLD_Frames[s]].display = new Date(CCLD_Data[CCLD_Frames[s]].display.getFullYear() - 1, CCLD_Data[CCLD_Frames[s]].display.getMonth(), 1, 12, 0, 0);
			} else {
				// document.getElementById(CCLD_Data[CCLD_Frames[s]].id_input_year).value = parseInt(document.getElementById(CCLD_Data[CCLD_Frames[s]].id_input_year).value) + 1;
				if (CCLD_Data[CCLD_Frames[s]].display.getFullYear() < CCLD_Data[CCLD_Frames[s]].v_end.getFullYear())
					CCLD_Data[CCLD_Frames[s]].display = new Date(CCLD_Data[CCLD_Frames[s]].display.getFullYear() + 1, CCLD_Data[CCLD_Frames[s]].display.getMonth(), 1, 12, 0, 0);
			}
			
			CCLD_Redraw(CCLD_Frames[s]);
			
			if (CCLD_Data[CCLD_Frames[s]].id_input_year)
			{
				document.getElementById(CCLD_Data[CCLD_Frames[s]].id_input_year).select();
			}
		} else {
			
			frame = CCLD_Frames[s];
			
			if (CCLD_Data[frame].storage == target.id)
			{
				CCLD_Event_Focus(e);
			} else
			if (CCLD_Data[frame].visible && !CCLD_Data[frame].locked && target.id != CCLD_Data[frame].storage) //  && target.id != CCLD_Data[CCLD_Frames[s]].id_select_month
			{
				if (target.id != CCLD_Data[frame].id_select_month && target.id != CCLD_Data[frame].id_select_year && target.id != CCLD_Data[frame].id_select_month_full)
				{
					//Checke Referenzen
					if (CCLD_References[frame])
					{
						if (target.id != CCLD_Data[CCLD_References[frame]].id_select_month
							&&
							target.id != CCLD_Data[CCLD_References[frame]].id_select_year
							&&
							target.id != CCLD_Data[CCLD_References[frame]].id_select_month_full)
						{
							CCLD_Hide(frame);
						}
					} else {
						CCLD_Hide(frame);
					}
				}
			} else
			if (!CCLD_Data[frame].visible && CCLD_Data[frame].popup) {
				
			}
		}
	}
}

function CCLD_Event_Change(e)
{
	if (!e) var e = window.event;
	
	target = GetTarget(e);
	
	for (s = 0; s < CCLD_Frames.length; s++)
	{
		if (target.id == CCLD_Data[CCLD_Frames[s]].id_select_month)
		{
			CCLD_Data[CCLD_Frames[s]].display = new Date(CCLD_Data[CCLD_Frames[s]].display.getFullYear(), target.selectedIndex, 1, 12, 0, 0);
			
			CCLD_Redraw(CCLD_Frames[s]);
			
		} else
		if (target.id == CCLD_Data[CCLD_Frames[s]].id_select_year)
		{
			CCLD_Data[CCLD_Frames[s]].display = new Date(target.value, CCLD_Data[CCLD_Frames[s]].display.getMonth(), 1, 12, 0, 0);
			
			CCLD_Redraw(CCLD_Frames[s]);
		} else
		if (target.id == CCLD_Data[CCLD_Frames[s]].id_select_month_full)
		{
			temp = target.value.split(".");
			
			CCLD_Data[CCLD_Frames[s]].display = new Date(temp[1], temp[0], 1, 12, 0, 0);
			
			CCLD_Redraw(CCLD_Frames[s]);
		}
	}
}

function CCLD_Event_MouseMove(e) { }

function CCLD_Event_MouseOut(e) { }

function CCLD_Event_MouseOver(e) { }

function CCLD_Show(frame)
{
	if (CCLD_Data[frame].popup)
	{
		document.getElementById(frame).style.display = 'block';
		document.getElementById(frame).style.visibility = 'visible';
		
		CCLD_Data[frame].visible = true;
		
		if (CCLD_References[frame])
		{
			CCLD_Data[CCLD_References[frame]].visible = true;
		}
	}
}

function CCLD_Hide(frame)
{
	if (CCLD_Data[frame].popup)
	{
		document.getElementById(frame).style.display = 'none';
		document.getElementById(frame).style.visibility = 'hidden';
		
		CCLD_Data[frame].visible = false;
		
		if (CCLD_References[frame])
		{
			CCLD_Data[CCLD_References[frame]].visible = false;
		}
	}
}

function CCLD_Lock(frame)
{
	if (!CCLD_Data[frame])
		return false;
	
	if (CCLD_Data[frame].styles.storage)
	{
		document.getElementById(CCLD_Data[frame].storage).className = CCLD_Data[frame].styles.storage.on_focus;
	}
	
	CCLD_Data[frame].locked = true;
	
	if (CCLD_References[frame])
	{
		CCLD_Data[CCLD_References[frame]].locked = true;
	}
}

function CCLD_Unlock(frame)
{
	if (!CCLD_Data[frame])
		return false;
	
	if (CCLD_Data[frame].styles.storage)
	{
		document.getElementById(CCLD_Data[frame].storage).className = CCLD_Data[frame].styles.storage.on_blur;
	}
	
	CCLD_Data[frame].locked = false;
	
	if (CCLD_References[frame])
	{
		CCLD_Data[CCLD_References[frame]].locked = false;
	}
}

function CCLD_SetDate(frame, date, set_display_date)
{
	var date_old = null;
	
	if (CCLD_Data[frame].storage)
	{
		date_old = document.getElementById(CCLD_Data[frame].storage).value;
		
		document.getElementById(CCLD_Data[frame].storage).value = date;
		
		d = CCLD_SubDate(date);
		
		var temp = new Date(d.year, d.month - 1, d.day, 12, 0, 0);
		
		CCLD_Data[frame].select = temp;
		
		if (set_display_date)
		{
			CCLD_Data[frame].display  = new Date(temp.getFullYear(), temp.getMonth(), 1, 12, 0, 0);
		}
	}
	
	CCLD_Redraw(frame, date);
	
	if (CCLD_Data[frame].stor_other)
	{
		var date_other = date;
		var temp0 = null;
		
		if (CCLD_Data[frame].stor_other)
		{
			if (CCLD_Data[frame].stor_other_add > 0)
			{
				// Neues Datum berechnen + Tage
				d0 = CCLD_SubDate(date);
				
				temp0 = new Date(d0.year, d0.month - 1, d0.day, 12, 0, 0);
				
				temp0.setTime(temp0.getTime() + CCLD_Data[frame].stor_other_add * 24 * 60 * 60 * 1000);
				
				date_other = CCLD_ValidateDate(temp0.getDate()+"."+(temp0.getMonth() + 1)+"."+temp0.getFullYear());
				
			} else
			if (CCLD_Data[frame].stor_other_add == -1 && date_old)
			{
				// Verwende bisherigen Abstand
				d0 = CCLD_SubDate(date);
				d1 = CCLD_SubDate(date_old);
				d2 = CCLD_SubDate(document.getElementById(CCLD_Data[frame].stor_other).value);
				
				var temp0 = new Date(d0.year, d0.month - 1, d0.day, 12, 0, 0);
				var temp1 = new Date(d1.year, d1.month - 1, d1.day, 12, 0, 0);
				var temp2 = new Date(d2.year, d2.month - 1, d2.day, 12, 0, 0);
				
				var intvl = ((temp2.getTime() - temp1.getTime()) / (24*60*60*1000));
				 
				temp0.setTime(temp0.getTime() + intvl * (24*60*60*1000));
				
				date_other = CCLD_ValidateDate(temp0.getDate()+"."+(temp0.getMonth() + 1)+"."+temp0.getFullYear());
			}
		}
		
		document.getElementById(CCLD_Data[frame].stor_other).value = date_other;
		
		for (s = 0; s < CCLD_Frames.length; s++)
		{
			if (CCLD_Data[CCLD_Frames[s]].storage == CCLD_Data[frame].stor_other)
			{
				// Monat und Jahreszahl anpassen!
				CCLD_Data[CCLD_Frames[s]].display = new Date(temp0.getFullYear(), temp0.getMonth(), 1, 12, 0, 0);
				CCLD_Data[CCLD_Frames[s]].select = temp0;
				
				CCLD_Redraw(CCLD_Frames[s]);
			}
		}
	}
	
	if (CCLD_Data[frame].popup && CCLD_Data[frame].close)
	{
		//alert("!");
		CCLD_Hide(frame);
		CCLD_Unlock(frame);
		
		return true;
	}
}

function CCLD_Redraw(frame)
{
	// Welcher Monat soll dargestellt werden?
	var current = CCLD_Data[frame].display;
	
	if (CCLD_Data[frame].id_select_month)
	{
		document.getElementById(CCLD_Data[frame].id_select_month).selectedIndex = CCLD_Data[frame].display.getMonth();
	}
	
	if (CCLD_Data[frame].id_select_year)
	{
		document.getElementById(CCLD_Data[frame].id_select_year).selectedIndex = ( parseInt(current.getFullYear()) - parseInt(CCLD_Data[frame].v_start.getFullYear()) );
	}
	
	if (CCLD_Data[frame].id_select_month_full)
	{
		var list = document.getElementById(CCLD_Data[frame].id_select_month_full);
		
		if (list)
		{
			for (s = 0; s < list.length; s++)
			{
				if (list[s].value == current.getMonth()+"."+current.getFullYear())
				{
					list.selectedIndex = s;
					
					s = list.length;
				}
			}
		}
	}
	
	if (CCLD_Data[frame].id_input_year)
	{
		document.getElementById(CCLD_Data[frame].id_input_year).value = current.getFullYear();
	}
	
	if (CCLD_Data[frame].id_label_month)
	{
		document.getElementById(CCLD_Data[frame].id_label_month).innerHTML = CCLD_MONTHS_LONG[CCLD_Data[frame].lang][parseInt(current.getMonth())];
	}
	
	// Füge Jahr(e) hinzu...
	if (CCLD_Data[frame].id_label_year)
	{
		document.getElementById(CCLD_Data[frame].id_label_year).innerHTML = CCLD_Data[frame].display.getFullYear();
	}
	
	if (CCLD_Data[frame].id_label_month_full)
	{
		document.getElementById(CCLD_Data[frame].id_label_month_full).innerHTML = CCLD_MONTHS_LONG[CCLD_Data[frame].lang][parseInt(current.getMonth())] + " " + current.getFullYear();
	}
	
	for (m = 1; m < 3; m++)
	{
		var content = "";
		
		var storage_days = null;
		
		if (m == 1)
		{
			storage_days = CCLD_Data[frame].id_select_day;
		} else
		if (m == 2 && CCLD_Data[frame].next) {
			
			if (CCLD_Data[frame].next.select_day)
			{
				storage_days = CCLD_Data[frame].next.select_day;
				
				current = new Date(current.getFullYear(), current.getMonth() + 1, 1, 12, 0, 0);
				
				if (CCLD_Data[frame].next.label_month)
				{
					document.getElementById(CCLD_Data[frame].next.label_month).innerHTML = CCLD_MONTHS_LONG[CCLD_Data[frame].lang][parseInt(current.getMonth())];
				}
				
				if (CCLD_Data[frame].next.label_year)
				{
					document.getElementById(CCLD_Data[frame].next.label_year).innerHTML = current.getFullYear();
				}
			}
		}
		
		if (current.getDay() == 0)
			var CM_OFFSET = 6;
		else
			var CM_OFFSET = current.getDay() - 1;
		
		if (storage_days)
		{
			for (r = 0; r < 6; r++)
			{
				content += '<div style="clear: left; float: left; width: 100%;">';
				
				for (d = 0; d < 7; d++)
				{
					i = d + (7*r);
					
					i_day = (i - CM_OFFSET + 1);
					
					var today = new Date(current.getFullYear(), current.getMonth(), i_day, 12, 0, 0);
					
					if (today.getTime() >= CCLD_Data[frame].s_start && today.getTime() <= CCLD_Data[frame].s_end)
					{
						var date = CCLD_ValidateDate(today.getDate()+"."+(today.getMonth() + 1)+"."+today.getFullYear());
						
						if (today.getDate()+"/"+today.getMonth()+"/"+today.getYear() == CCLD_Data[frame].select.getDate()+"/"+CCLD_Data[frame].select.getMonth()+"/"+CCLD_Data[frame].select.getYear() && (today.getMonth() == current.getMonth()))
						{
							content += '<div style="' + (d == 0 ? 'clear: left; ' : '') + 'float: left;" class="' + CCLD_Data[frame].styles.cell_selected + '" onClick="CCLD_SetDate(\'' + frame + '\', \'' + date + '\');">' + today.getDate() + '</div>';
						} else
						if (today.getMonth() == current.getMonth())
						{
							content += '<div style="' + (d == 0 ? 'clear: left; ' : '') + 'float: left;" class="' + CCLD_Data[frame].styles.cell_active + '" onClick="CCLD_SetDate(\'' + frame + '\', \'' + date + '\');">' + today.getDate() + '</div>';
						} else
						if (CCLD_Data[frame].continuous)
						{
							content += '<div style="' + (d == 0 ? 'clear: left; ' : '') + 'float: left;" class="' + CCLD_Data[frame].styles.cell_continuous_selectable + '" onClick="CCLD_SetDate(\'' + frame + '\', \'' + date + '\', true);">' + today.getDate() + '</div>';
						} else {
							content += '<div style="' + (d == 0 ? 'clear: left; ' : '') + 'float: left;" class="' + CCLD_Data[frame].styles.cell_continuous + '" >' + today.getDate() + '</div>';
						}
					} else {
						content += '<div style="' + (d == 0 ? 'clear: left; ' : '') + 'float: left;" class="' + CCLD_Data[frame].styles.cell_inactive + '" >' + today.getDate() + '</div>';
					}
				}
				
				content += '</div>';
			}
			
			document.getElementById(storage_days).innerHTML = content;
		}
	}
	
}

function CCLD_Init(frame, settings, storage, styles, options, next) // -> Neuen Kalender intialisieren... {next}-Objekt: Daten für zweiten Kalender
{
	DataCal = new Object();
	
	if (!document.getElementById(frame))
	{
		// alert("FEHLER: Frame (" + frame + ") existiert nicht!");
		return false;
	}
	
	if (!settings.language)
	{
		settings.language = "de";
	} else
	if (!CCLD_MONTHS_LONG[settings.language] || !CCLD_MONTHS_SHORT[settings.language] || !CCLD_DAYS_LONG[settings.language] || !CCLD_DAYS_SHORT[settings.language])
	{
		alert("FEHLER: Sprache '" + settings.language + "' nicht (vollständig) definiert!");
	}
	
	var instant_redraw = false;
	
	var obj = document.getElementById(frame);
	
	if (settings.popup)
	{
		obj.style.display = 'none';
		obj.style.visibility = 'hidden';
	} else {
		obj.style.display = 'block';
		obj.style.visibility = 'visible';
		
		instant_redraw = true;
	}
	
	CCLD_Frames.push(frame);
	
	DataCal.id = CCLD_Frames.length;
	DataCal.style = settings.style;
	DataCal.lang = settings.language;
	DataCal.popup = settings.popup;
	
	DataCal.close = (options.close_on_select == true ? true : false);
	DataCal.storage = storage.storage;
	DataCal.stor_other = storage.other;
	DataCal.stor_other_add = storage.other_add;
	DataCal.locked = false;
	DataCal.styles = styles;
	DataCal.continuous = options.continuous;
	DataCal.visible = (settings.popup ? false : true);
	DataCal.id_label_week   = storage.label_week;
	DataCal.id_label_month  = storage.label_month;
	DataCal.id_label_year   = storage.label_year;
	DataCal.id_label_month_full = storage.label_month_full;
	DataCal.id_select_day   = storage.select_day;
	DataCal.id_select_month = storage.select_month;
	DataCal.id_select_year  = storage.select_year;
	DataCal.id_select_month_full = storage.select_month_full;
	DataCal.id_input_year   = storage.input_year;
	DataCal.id_inc_month    = storage.inc_month;
	DataCal.id_dec_month    = storage.dec_month;
	DataCal.id_inc_year     = storage.inc_year;
	DataCal.id_dec_year     = storage.dec_year;
	DataCal.next    		= (next ? next : null);
	DataCal.reference  		= storage.reference;
	
	if (DataCal.reference)
	{
		CCLD_References[DataCal.reference] = frame;
	}
	
	/* ---------------------------------------------------------------------------------------------- */
	// Sichtbarer Bereich
	var temp_range = settings.range.split("-");
	
	date_start = CCLD_SubDate(temp_range[0], true);
	date_end   = CCLD_SubDate(temp_range[1], true);
	
	DataCal.v_start	= new Date(date_start.year, (date_start.month - 1), date_start.day , 12, 0, 0);
	DataCal.v_end   = new Date(date_end.year, (date_end.month - 1), date_end.day, 12, 0, 0);
	
	// Auswählbarere Bereich
	if (settings.selectable)
	{
		var temp_range = settings.selectable.split("-");
		
		date_start = CCLD_SubDate(temp_range[0], true);
		date_end   = CCLD_SubDate(temp_range[1], true);
		
		DataCal.s_start	= new Date(date_start.year, (date_start.month - 1), date_start.day , 12, 0, 0);
		DataCal.s_end   = new Date(date_end.year, (date_end.month - 1), date_end.day, 12, 0, 0);
		
	} else {
		DataCal.s_start	= DataCal.v_start;
		DataCal.s_end   = DataCal.v_end;
	}
	
	if (document.getElementById(storage.storage))
	{	// Falls Datum im Storage vorhanden ist
		date_select 	= CCLD_SubDate(document.getElementById(storage.storage).value, false);
		DataCal.select 	= new Date(date_select.year, (date_select.month - 1), date_select.day, 12, 0, 0);
	} else
	if (settings.selected)
	{	// Vorausgewähltes Datum
		date_select 	= CCLD_SubDate(settings.selected, false);
		DataCal.select 	= new Date(date_select.year, (date_select.month - 1), date_select.day, 12, 0, 0);
	} else {
		// Verwende ansonsten das heutige Datum
		DataCal.select 	= new Date(); // Heute
	}
	
	DataCal.display = new Date(DataCal.select.getFullYear(), DataCal.select.getMonth(), 1, 12, 0, 0);
	
	/* ---------------------------------------------------------------------------------------------- */
	
	if (DataCal.styles.storage)
	{
		document.getElementById(DataCal.storage).className = DataCal.styles.storage.on_blur;
	}
	
	CCLD_Data[frame] = DataCal;
	
	// Füge Wochentage in den Header ein
	if (DataCal.id_label_week)
	{
		var temp = "";
		
		for (d = 0; d < 7; d++)
		{
			class_cell = (d < 5 ? DataCal.styles.cell_week : DataCal.styles.cell_weekend );
			
			temp += '<div style="' + (d == 0 ? 'clear: left; ' : '') + 'float: left;" class="' + class_cell + '">' + ( CCLD_DAYS_SHORT[DataCal.lang][d] ) + '</div>';
		}
		
		document.getElementById(DataCal.id_label_week).innerHTML = temp;
		
		if (DataCal.next)
		{
			if (DataCal.next.label_week)
			{
				document.getElementById(DataCal.next.label_week).innerHTML = temp;
			}
		}
	}
	
	// Füge Monate hinzu...
	if (DataCal.id_select_month)
	{
		var list = document.getElementById(DataCal.id_select_month);
		
		for (m = 0; m < 12; m++)
		{
			list.options[list.length] = new Option(CCLD_MONTHS_LONG[DataCal.lang][m], m + 1);
		}
	}
	
	if (DataCal.id_select_year)
	{
		var list = document.getElementById(DataCal.id_select_year);
		
		for (y = DataCal.v_start.getFullYear(); y <= DataCal.v_end.getFullYear(); y++)
		{
			list.options[list.length] = new Option(y, y);
		}
	}
	
	if (DataCal.id_select_month_full)
	{
		temp = new Array();
		
		date_tmp = DataCal.v_start;
		
		while (date_tmp.getTime() <= DataCal.v_end.getTime())
		{
			temp.push({text : CCLD_MONTHS_LONG[DataCal.lang][date_tmp.getMonth()]+" "+date_tmp.getFullYear(), value : date_tmp.getMonth()+"."+date_tmp.getFullYear()});
			
			date_tmp = new Date(date_tmp.getFullYear(), date_tmp.getMonth() + 1, 1, 12, 0, 0);
		}
		
		var list = document.getElementById(DataCal.id_select_month_full);
		
		if (list)
		{
			for (t = 0; t < temp.length; t++)
			{
				list.options[list.length] = new Option(temp[t]['text'], temp[t]['value']);
			}
		}
	}
	
	CCLD_Redraw(frame);
	
	AttachEvent(document.getElementById(storage.storage), "keydown", CCLD_Event_KeyClose);
	AttachEvent(document.getElementById(storage.storage), "keyup", CCLD_Event_KeyUp);
	
	if (DataCal.id_select_month)
	{
		AttachEvent(document.getElementById(DataCal.id_select_month), "change", CCLD_Event_Change);
	}
	
	if (DataCal.id_select_year)
	{
		AttachEvent(document.getElementById(DataCal.id_select_year), "change", CCLD_Event_Change);
	}
	
	if (DataCal.id_select_month_full)
	{
		AttachEvent(document.getElementById(DataCal.id_select_month_full), "change", CCLD_Event_Change);
	}
	
	if (DataCal.id_input_year)
	{
		AttachEvent(document.getElementById(DataCal.id_input_year), "keydown", CCLD_Event_KeyDown);
		AttachEvent(document.getElementById(DataCal.id_input_year), "keyup", CCLD_Event_KeyUp);
	}
	
	if (DataCal.storage)
	{
		AttachEvent(document.getElementById(DataCal.storage), "keyup", CCLD_Event_KeyUp);
		AttachEvent(document.getElementById(DataCal.storage), "focus", CCLD_Event_Focus);
	}
	
	if (!CCLD_EVTDOC_MDWN)
	{
		CCLD_EVTDOC_MDWN = AttachEvent(document, "mousedown", CCLD_Event_MouseDown);
	}
}
