
function communiacs_rrdb_dates_toggle_hint(p_elem) {
	var t_grandparent = p_elem.parentNode.parentNode;
	if(t_grandparent) {
		var t_hint_elem = _communiacs_getElementsByTagAndClass(t_grandparent,'div','communiacs_rrdb_details_dates_item_callhint')[0];
		if(t_hint_elem) {
			if(p_elem.className.indexOf('open') >= 0) { //zuklappen
				if(p_elem.className == 'open')
					p_elem.className = '';
				else {
					p_elem.className = p_elem.className.replace(/ open/g, "");
				}
				t_hint_elem.style.display = 'none';
			}
			else { //aufklappen
				p_elem.className += ' open';
				t_hint_elem.style.display = 'block';
			}
		}
	}
}

var communiacs_rrdb_date_selector_day_labels = new Array("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");
var communiacs_rrdb_date_selector_month_labels = new Array("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");

var communiacs_rrdb_date_selector_now = new Date();
var communiacs_rrdb_date_selector_year = communiacs_rrdb_date_selector_now.getFullYear();
var communiacs_rrdb_date_selector_month = communiacs_rrdb_date_selector_now.getMonth();
var communiacs_rrdb_date_selector_toyear = communiacs_rrdb_date_selector_now.getFullYear();
var communiacs_rrdb_date_selector_tomonth = communiacs_rrdb_date_selector_now.getMonth();
var communiacs_rrdb_date_selector_today = communiacs_rrdb_date_selector_now.getDate();
var communiacs_rrdb_date_selector_act_year = -1;
var communiacs_rrdb_date_selector_act_month = -1;
var communiacs_rrdb_date_selector_act_day = -1;

function _communiacs_element_parent_check(p_elem_src, p_elem_container) {
	var t_elem = p_elem_src;
	var t_match = false;
	while(t_elem) {
		if(t_elem == p_elem_container) {
			t_match = true;
			break;
		}
		else {
			t_elem = t_elem.parentNode;
		}
	}
	return t_match;
}

function communiacs_rrdb_date_selector_handler(p_event) {
	var t_elem = (p_event.srcElement || p_event.target);
	var t_elems = _communiacs_getElementsByTagAndClass(document.body,'div','communiacs_rrdb_datesel_yearbox');
	for(var i = 0; i < t_elems.length; i++) {
		if(t_elems[i].parentNode.style.display == 'block' && !_communiacs_element_parent_check(t_elem,t_elems[i].parentNode)) {
			t_elems[i].parentNode.style.display = 'none';
		}
	}
}

function communiacs_rrdb_date_selector(p_selector, p_input) {
	//prüfen, ob die angegebenen Elemente existieren
	if(document.getElementById(p_selector) && document.getElementById(p_input)) {
		if(document.getElementById(p_selector).style.display == 'none') {
			//Heutiges Datum aktualisieren
			communiacs_rrdb_date_selector_now = new Date();
			communiacs_rrdb_date_selector_year = communiacs_rrdb_date_selector_now.getFullYear();
			communiacs_rrdb_date_selector_month = communiacs_rrdb_date_selector_now.getMonth();
			communiacs_rrdb_date_selector_toyear = communiacs_rrdb_date_selector_now.getFullYear();
			communiacs_rrdb_date_selector_tomonth = communiacs_rrdb_date_selector_now.getMonth();
			communiacs_rrdb_date_selector_today = communiacs_rrdb_date_selector_now.getDate();
			communiacs_rrdb_date_selector_act_year = -1;
			communiacs_rrdb_date_selector_act_month = -1;
			communiacs_rrdb_date_selector_act_day = -1;
			
			//Datum aus input-feld übernehmen, falls angegeben
			var t_actdate = '';
			if(document.getElementById(p_input).value != '') {
				t_actdate = document.getElementById(p_input).value;
			}
			else {
				// !!! Sonderregelung für Reise-Suchen-Formular !!!
				if(p_input == 'form_rs_bis') {
					if(document.getElementById('form_rs_bis').value == '' && document.getElementById('form_rs_von').value != '') {
						t_actdate = document.getElementById('form_rs_von').value;
					}
				}
			}
			if(t_actdate != '') {
				var t_split = t_actdate.split('.');
				communiacs_rrdb_date_selector_year = t_split[2];
				communiacs_rrdb_date_selector_month = (t_split[1] - 1);
				communiacs_rrdb_date_selector_now.setYear(communiacs_rrdb_date_selector_year);
				communiacs_rrdb_date_selector_now.setMonth(communiacs_rrdb_date_selector_month);
				communiacs_rrdb_date_selector_act_year = communiacs_rrdb_date_selector_year;
				communiacs_rrdb_date_selector_act_month = communiacs_rrdb_date_selector_month;
				communiacs_rrdb_date_selector_act_day = t_split[0];
			}
			
			//Kalender aktualisieren und einblenden
			communiacs_rrdb_date_selector_refresh(p_selector, p_input);
			document.getElementById(p_selector).style.display = 'block';
		}
	}
}

function communiacs_rrdb_date_selector_refresh(p_selector, p_input) {
	//prüfen, ob die angegebenen Elemente existieren
	if(document.getElementById(p_selector) && document.getElementById(p_input)) {
		
		
		// Wochentag des Monatsersten ermitteln
		var t_date = new Date();
		//auf aktuell gewähltes Jahr setzen
		t_date.setYear(communiacs_rrdb_date_selector_year);
		//auf aktuell gewählten Monat setzen
		t_date.setMonth(communiacs_rrdb_date_selector_month);
		//auf den Monatsersten setzen
		t_date.setDate(1);
		//Wochentag ermitteln und um eins subtrahieren, da bei dieser Funktion der erste Wochentag der Sonntag ist
		var t_weekday_of_first = t_date.getDay() - 1;
		//Sonntag von vorn nach hinten befördern
		if(t_weekday_of_first == -1)
			t_weekday_of_first = 6
		
		
		// Letzten Tag im Monat ermitteln
		var t_ld_date = new Date();
		//prüfen, ob es der letzte Monat im Jahr ist
		if(communiacs_rrdb_date_selector_month == 11) {
			//wenn ja, dann Monat auf Januar setzen und Jahr erhöhen
			var t_ld_month = 0;
			var t_ld_year = communiacs_rrdb_date_selector_year + 1;
		}
		else {
			//andernfalls nur den Monat erhöhen
			var t_ld_month = communiacs_rrdb_date_selector_month + 1;
			var t_ld_year = communiacs_rrdb_date_selector_year;
		}
		//Monat und Jahr wie berechnet setzen
		t_ld_date.setMonth(t_ld_month);
		t_ld_date.setYear(t_ld_year);
		//Tag auf den ersten setzen
		t_ld_date.setDate(1);
		//einen Tag zur&uuml;ck gehen zum letzten des aktuellen Monats
		var t_ld_ut = t_ld_date.getTime();
		t_ld_ut -= 86400000;
		t_ld_date.setTime(t_ld_ut);
		//Monatstag ermitteln
		var t_last_day_of_month = t_ld_date.getDate();
		
		//alert(t_last_day_of_month);
		//alert(communiacs_rrdb_date_selector_day_labels[t_weekday_of_first]);
		
		
		// HTML-Code für den Wähler generieren
		//Jahrwähler
		var t_code = '<div class="communiacs_rrdb_datesel_yearbox">';
		t_code += '<img onClick="communiacs_rrdb_date_selector_browse(\'' + p_selector + '\',\'' + p_input + '\',\'year_prev\')" src="fileadmin/templates/rotel_tours/images/datesel_arrow_year_left.gif" alt="Jahr zur&uuml;ck" title="Jahr zur&uuml;ck" />';
		t_code += '<div class="communiacs_rrdb_datesel_yearlabel">' + communiacs_rrdb_date_selector_year + '</div>';
		t_code += '<img onClick="communiacs_rrdb_date_selector_browse(\'' + p_selector + '\',\'' + p_input + '\',\'year_next\')" src="fileadmin/templates/rotel_tours/images/datesel_arrow_year_right.gif" alt="Jahr zur&uuml;ck" title="Jahr zur&uuml;ck" />';
		t_code += '<div class="clear">&nbsp;</div>';
		t_code += '</div>';
		
		//Monatswähler
		t_code += '<div class="communiacs_rrdb_datesel_monthbox">';
		t_code += '<img onClick="communiacs_rrdb_date_selector_browse(\'' + p_selector + '\',\'' + p_input + '\',\'month_prev\')" src="fileadmin/templates/rotel_tours/images/datesel_arrow_year_left.gif" alt="Jahr zur&uuml;ck" title="Jahr zur&uuml;ck" />';
		t_code += '<div class="communiacs_rrdb_datesel_monthlabel">' + communiacs_rrdb_date_selector_month_labels[communiacs_rrdb_date_selector_month] + '</div>';
		t_code += '<img onClick="communiacs_rrdb_date_selector_browse(\'' + p_selector + '\',\'' + p_input + '\',\'month_next\')" src="fileadmin/templates/rotel_tours/images/datesel_arrow_year_right.gif" alt="Jahr zur&uuml;ck" title="Jahr zur&uuml;ck" />';
		t_code += '<div class="clear">&nbsp;</div>';
		t_code += '</div>';
		
		//Tageswähler
		t_code += '<div class="communiacs_rrdb_datesel_daysbox">';
		//   Kopfbereich
		t_code += '<div class="communiacs_rrdb_datesel_dayshead">';
		t_code += '<div class="communiacs_rrdb_datesel_daysitem">Mo</div>';
		t_code += '<div class="communiacs_rrdb_datesel_daysitem">Di</div>';
		t_code += '<div class="communiacs_rrdb_datesel_daysitem">Mi</div>';
		t_code += '<div class="communiacs_rrdb_datesel_daysitem">Do</div>';
		t_code += '<div class="communiacs_rrdb_datesel_daysitem">Fr</div>';
		t_code += '<div class="communiacs_rrdb_datesel_daysitem">Sa</div>';
		t_code += '<div class="communiacs_rrdb_datesel_daysitem">So</div>';
		t_code += '<div class="clear">&nbsp;</div>';
		t_code += '</div>';
		//   Tagesauflistung
		t_code += '<div class="communiacs_rrdb_datesel_dayslist">';
		var t_weekdaycounter = 0; //Wochentagszähler (nötig für Klassenangaben)
		var i;
		for(i = 0; i < t_weekday_of_first; i++) {
			t_code += '<div class="communiacs_rrdb_datesel_daysitem communiacs_rrdb_datesel_daysitem_' + (t_weekdaycounter % 7) + '">&nbsp;</div>';
			t_weekdaycounter++;
		}
		for(i = 0; i < t_last_day_of_month; i++) {
			var t_add_class = '';
			//wenn es der heutige Tag ist, dann klasse anfuegen
			if(communiacs_rrdb_date_selector_toyear == communiacs_rrdb_date_selector_year && communiacs_rrdb_date_selector_tomonth == communiacs_rrdb_date_selector_month && (i+1) == communiacs_rrdb_date_selector_today) {
				t_add_class = ' communiacs_rrdb_datesel_daysitem_today';
			}
			//wenn es der aktuell gewählte Tag ist, dann klasse anfuegen
			if(communiacs_rrdb_date_selector_act_year == communiacs_rrdb_date_selector_year && communiacs_rrdb_date_selector_act_month == communiacs_rrdb_date_selector_month && communiacs_rrdb_date_selector_act_day == (i+1)) {
				t_add_class = ' communiacs_rrdb_datesel_daysitem_selected';
			}
			t_code += '<div onMouseOver="_communiacs_show(this);" onMouseOut="_communiacs_hide(this);" onClick="communiacs_rrdb_date_selector_choose(\'' + p_selector + '\',\'' + p_input + '\',' + (i+1) + ')" class="communiacs_rrdb_datesel_daysitem communiacs_rrdb_datesel_daysitem_' + (t_weekdaycounter % 7) + t_add_class + '">';
			t_code += '<span class="communiacs_rrdb_datesel_dayslink">' + (i+1) + '</span>';
			t_code += '</div>';
			t_weekdaycounter++;
		}
		var t_max = (6 - ((t_weekdaycounter - 1) % 7));
		for(i = 0; i < t_max; i++) {
			t_code += '<div class="communiacs_rrdb_datesel_daysitem communiacs_rrdb_datesel_daysitem_' + (t_weekdaycounter % 7) + '">&nbsp;</div>';
			t_weekdaycounter++;
		}
		t_code += '<div class="clear">&nbsp;</div>';
		t_code += '</div>';
		t_code += '</div>';
		
		document.getElementById(p_selector).innerHTML = t_code;
	}
}


function communiacs_rrdb_date_selector_browse(p_selector, p_input, p_type) {
	switch(p_type) {	
		case 'year_prev':
			communiacs_rrdb_date_selector_year--;
			break;
		case 'year_next':
			communiacs_rrdb_date_selector_year++;
			break;
		case 'month_prev':
			communiacs_rrdb_date_selector_month--;
			if(communiacs_rrdb_date_selector_month == -1) {
				communiacs_rrdb_date_selector_month = 11;
				communiacs_rrdb_date_selector_year--;
			}
			break;
		case 'month_next':
			communiacs_rrdb_date_selector_month++;
			if(communiacs_rrdb_date_selector_month == 12) {
				communiacs_rrdb_date_selector_month = 0;
				communiacs_rrdb_date_selector_year++;
			}
			break;
		default:
			// noop
			break;
	}
	communiacs_rrdb_date_selector_refresh(p_selector, p_input);
}

function communiacs_rrdb_date_selector_choose(p_selector, p_input, p_day) {
	communiacs_rrdb_date_selector_day = p_day;
	document.getElementById(p_selector).style.display = 'none';
	document.getElementById(p_input).value = p_day + '.' + (communiacs_rrdb_date_selector_month+1) + '.' + communiacs_rrdb_date_selector_year;
}

if (window.addEventListener) {
	window.addEventListener("mousedown", communiacs_rrdb_date_selector_handler, false);
}
else if(window.document.attachEvent) {
	window.document.attachEvent('onmousedown', communiacs_rrdb_date_selector_handler);
}
else {
	var onmousedown_old = document.body.onmousedown;
	document.body.onmousedown = function() {
		if(onmousedown_old) {
			onmousedown_old();
		}
		communiacs_rrdb_date_selector_handler();
	}
}

function communiacs_rrdb_check_book_form(p_elem) {
	var t_elems = _communiacs_getElementsByClass(document.getElementById(p_elem), 'form_rb_required');
	var t_errors = 0;
	var t_valid = false;
	var t_valid_groups = new Array();
	var t_valid_group_parents = new Array();
	var t_valid_group_ids = new Array();
	for(var i = 0; i < t_elems.length; i++) {
		// alert(t_elems[i].id + ', ' + t_elems[i].type);
		// alert(t_elems[i].nodeName + ', ' + t_elems[i].nodeType + ', ' + t_elems[i].nodeValue);
		t_valid = false;
		if(t_elems[i].className.indexOf('form_rb_required_email') > -1) {
			if(_communiacs_validateMail(t_elems[i].value)) {
				t_valid = true;
			}
		}
		else if(t_elems[i].className.indexOf('form_rb_required_date') > -1) {
			var t_tmp_split = t_elems[i].value.split('.');
			if(t_tmp_split.length == 3) {
				if(!isNaN(t_tmp_split[0]) && !isNaN(t_tmp_split[1]) && !isNaN(t_tmp_split[2])) {
					var t_tmp_date_parsed = Date.parse(t_tmp_split[2]+'/'+t_tmp_split[1]+'/'+t_tmp_split[0]);
					var t_tmp_date = new Date(t_tmp_date_parsed);
					if(t_tmp_split[0] == t_tmp_date.getDate() && t_tmp_split[1] == t_tmp_date.getMonth()+1 && t_tmp_split[2] == t_tmp_date.getFullYear()) {
						t_valid = true;
					}
				}
			}
		}
		else if(t_elems[i].nodeName == 'INPUT' && t_elems[i].type == 'checkbox') {
			if(t_elems[i].checked == true) {
				t_valid = true;
			}
		}
		else {
			if(_communiacs_trim(t_elems[i].value) != '') {
				t_valid = true;
			}
		}
		var t_group_offset = 0;
		if(t_valid) {
			if((t_group_offset = t_elems[i].className.indexOf('form_rb_required_group')) > -1) {
				var t_group_id = t_elems[i].className.substr(t_group_offset + 1,2);
				if(typeof(t_valid_groups[t_group_id]) == 'undefined') {
					t_valid_groups[t_group_id] = true;
					t_valid_group_parents[t_group_id] = t_elems[i].parentNode;
					t_valid_group_ids[t_valid_group_ids.length] = t_group_id;
				}
			}
			else {
				if(t_elems[i].parentNode.className.indexOf('form_rb_valid') == -1) {
					t_elems[i].parentNode.className += ' form_rb_valid';
				}
				if(t_elems[i].parentNode.className.indexOf('form_rb_invalid') > -1) {
					t_elems[i].parentNode.className = t_elems[i].parentNode.className.replace(/form_rb_invalid/g, '');
				}
			}
		}
		else {
			t_errors++;
			if((t_group_offset = t_elems[i].className.indexOf('form_rb_required_group')) > -1) {
				var t_group_id = t_elems[i].className.substr(t_group_offset + 1,2);
				if(typeof(t_valid_groups[t_group_id]) == 'undefined') {
					t_valid_group_ids[t_valid_group_ids.length] = t_group_id;
				}
				t_valid_group_parents[t_group_id] = t_elems[i].parentNode;
				t_valid_groups[t_group_id] = false;
			}
			else {
				if(t_elems[i].parentNode.className.indexOf('form_rb_invalid') == -1) {
					t_elems[i].parentNode.className += ' form_rb_invalid';
				}
				if(t_elems[i].parentNode.className.indexOf('form_rb_valid') > -1) {
					t_elems[i].parentNode.className = t_elems[i].parentNode.className.replace(/form_rb_valid/g, '');
				}
			}
		}
	}
	for(var j = 0; j < t_valid_group_ids.length; j++) {
		if(t_valid_groups[t_valid_group_ids[j]]) {
			if(t_valid_group_parents[t_valid_group_ids[j]].className.indexOf('form_rb_valid') == -1) {
				t_valid_group_parents[t_valid_group_ids[j]].className += ' form_rb_valid';
			}
			if(t_valid_group_parents[t_valid_group_ids[j]].className.indexOf('form_rb_invalid') > -1) {
				t_valid_group_parents[t_valid_group_ids[j]].className = t_valid_group_parents[t_valid_group_ids[j]].className.replace(/form_rb_invalid/g, '');
			}
		}
		else {
			if(t_valid_group_parents[t_valid_group_ids[j]].className.indexOf('form_rb_invalid') == -1) {
				t_valid_group_parents[t_valid_group_ids[j]].className += ' form_rb_invalid';
			}
			if(t_valid_group_parents[t_valid_group_ids[j]].className.indexOf('form_rb_valid') > -1) {
				t_valid_group_parents[t_valid_group_ids[j]].className = t_valid_group_parents[t_valid_group_ids[j]].className.replace(/form_rb_valid/g, '');
			}
		}
	}
	if(t_errors == 0) {
		document.getElementById(p_elem).submit();
	}
	else {
		alert('Bitte füllen Sie alle benötigten Felder korrekt aus. Fehlende Angaben werden im Formular in rot angezeigt.');
	}
}


