
function $(obj) { return document.getElementById(obj); }

/*
	javascript sourcecode Â© 2007 by
	_______________________________________________________________
	netvision internet media agentur ag
	schaffhauserstrasse 4, 8400 winterthur switzerland europe earth
	fon +41 52 260 59 99
	www.netvision.ch, brain@netvision.ch
	_______________________________________________________________
*/

formID				= null;
formular			= null;
input				= null;
formScriptIsRunning = false;

// Textfelder
okColorTxt			= "#000000";
okColor				= "#FFFFFF";
errorColorTxt		= "#000000";
errorColor			= "#fbca7f";
// Labels
okColorTxtLabel		= "#000000";
okColorLabel		= "";
errorColorTxtLabel	= "#bd3e1e";
errorColorLabel		= "";

// Fehlermeldungen
var errorMsg			= new Array();

errorMsg[0]				= '<h1 style="color:#dd4515;">Bitte beachten Sie:</h1>';
errorMsg[1]				= 'Alle eingef&auml;rbten Felder m&uuml;ssen angegeben werden.<br />';

errorMsg[50]			= 'Bitte geben Sie eine Aufenthaltsdauer an.<br />';
errorMsg[51]			= 'Bitte w&auml;hlen Sie mindestens ein Hotelzimmer aus.<br />';
errorMsg[52]			= 'Das Anreisedatum wurde nicht korrekt angegeben.<br />';
errorMsg[53]			= 'Bitte geben Sie die Anzahl Erwachsene an.<br />';
errorMsg[54]			= 'W&auml;hlen Sie noch ein Zimmer aus, es sind 3 Personen pro Zimmer zugelassen.<br />';
errorMsg[55]			= 'Vom 05. - 09.04.2007 (Ostern) gilt eine Mindestaufenthaltsdauer von 5 Nächten<br />';
errorMsg[56]			= 'Vom 25. - 29.05.2007 (Pfingsten) gilt eine Mindestaufenthaltsdauer von 3 Nächten<br />';
errorMsg[57]			= 'Vom 07. - 10.06.2007 (Fronleichnam) gilt eine Mindestaufenthaltsdauer von 3 Nächten<br />';
errorMsg[58]			= 'Vom 23. - 31.12.2006 gilt eine Mindestaufenthaltsdauer von 10 Nächten<br />';
errorMsg[59]			= 'Vom 29.07. - 02.08.2006 (Nationalfeiertag 01.08.) gilt eine Mindestaufenthaltsdauer von 3 Nächten<br />';
errorMsg[60]			= 'Vom 17. - 20.05.2007 (Himmelfahrt) gilt eine Mindestaufenthaltsdauer von 4 Nächten<br />';

errorMsg[70]			= 'Name<br />';
errorMsg[71]			= 'Vorname<br />';
errorMsg[72]			= 'Adresse<br />';
errorMsg[73]			= 'PLZ<br />';
errorMsg[74]			= 'Ort<br />';
errorMsg[75]			= 'Land<br />';
errorMsg[76]			= 'Telefon<br />';
errorMsg[77]			= 'Email<br />';
errorMsg[78]			= 'Kreditkarte<br />';
errorMsg[79]			= 'Kreditkartennummer<br />';
errorMsg[80]			= 'Verfalldatum<br />';
errorMsg[81]			= 'Die Kreditkartendaten sind nicht gültig.<br />';
errorMsg[82]			= 'Geschäftsbedingungen<br />';


errorMsg[40]			= 'W&auml;hlen Sie mindestens ein Arrangement aus.<br />';
errorMsg[41]			= 'Das gewünschte Arrangement kann an diesem Tag nicht gebucht werden.<br />';
errorMsg[43]			= 'Das gewünschte Arrangement muss mindestens 1 Tag im Voraus gebucht werden.<br />';
errorMsg[44]			= 'An diesem Wochentag kann nicht angereist werden.<br />';
errorMsg[45]			= 'Zu diesem Datum kann nicht gebucht werden.<br />';

errorMsg[30]			= 'Wählen Sie mindestens eine Einzelleitung aus.<br />';
errorMsg[31]			= 'Das Anreisedatum wurde nicht korrekt angegeben.<br />';



var errorMsgId			= null;
var closeWindowId		= null;
var sendMailAfterCheck	= true;

var errorMsgId = new Array();


/////////////////////////////////////////////////////////////////////////////////
// Start formCheck
/////////////////////////////////////////////////////////////////////////////////

function setReservationErrorMsgId(id)
{
	if (errorMsgId.length == 0) { errorMsgId.push(0); }
	for (var i = 0; i < errorMsgId.length; i++)
	{
		if (errorMsgId[i] == id) { return; }
	}
	errorMsgId.push(id);
}

function showReservationError()
{
		closeWindowId			= showReservationError.arguments[0]
		showError();
}

var win = null;
function formCheck(/*ID, cwId, mailSenden*/)
{
	// Stoppt das funktion falls diese noch am laufen ist
	if(formScriptIsRunning) { return; }
	formScriptIsRunning = true;
	// Initialisierung
	formID					= formCheck.arguments[0];
	formular				= document.forms[formID];
	
	if(formCheck.arguments[1]) { closeWindowId = formCheck.arguments[0]; }
	if(formCheck.arguments[2] == false) { sendMailAfterCheck = formCheck.arguments[2]; }
	
	// PrÃ¼fungsvariabel (true:OK | false:Fehler)
	var check				= true;
	// Radiobuttons
	var arrRadio			= new Array();
	//var radioErrorImgSrc	= nclinks['pix']+'icons/hgf_gelb/fehler_ico.gif';
	
	errorMsgId			= new Array();
	
	
	/////////////////////////////////////////////////////////////////////////////////
	// STARTET CHECK (Steuerelement)
	/////////////////////////////////////////////////////////////////////////////////
	
	function startCheck()
	{
		// 1. Loopt alle Elemente im Formular
		for (var i=0; i < formular.elements.length; i++)
		{
			input = formular.elements[i];
			// Inputs welche den Wert inputType (vorher title) besitzen
			if(typeof(input.inputType) == "object" && input.inputType[1]) { inputCheck(); }
		}
		// 2. PrÃ¼ft spezielle Elemente
		checkOtherElements();
		// 3. Gibt Fehlermeldung aus oder Sendet Mail
		errorCheck(); //-->
	}
	
	/////////////////////////////////////////////////////////////////////////////////
	// PrÃ¼ft Felder in Formular
	/////////////////////////////////////////////////////////////////////////////////
	
	function inputCheck()
	{
		switch (input.inputType[0] || input.inputType[1])
		{
			// Strings
			case "txt":
				if (input.value.length > 0) { input.style.backgroundColor = okColor; input.style.color = okColorTxt; }
				else { input.style.backgroundColor = errorColor; input.style.color = errorColorTxt; check = false; setErrorMsgId(1); }
			break;
			// Zahlen
			case "no":
				if(input.value.match(/^[0-9]|\.+$/)) { input.style.backgroundColor = okColor; input.style.color = okColorTxt; }
				else { input.style.backgroundColor = errorColor; input.style.color = errorColorTxt; check = false; setErrorMsgId(1); }
			break;
			// Telefonnummern usw.
			case "tel":
				if (input.value.match(/^([0-9]|\+|\(|\)|\/| )+$/)) { input.style.backgroundColor = okColor; input.style.color = okColorTxt; }
				else { input.style.backgroundColor = errorColor; input.style.color = errorColorTxt; check = false; setErrorMsgId(1); }
			break;
			// Email
			case "mail":
				if (input.value.match(/^([_a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@([_a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$/)) { input.style.backgroundColor = okColor; input.style.color = okColorTxt; }
				else { input.style.backgroundColor = errorColor; input.style.color = errorColorTxt; check = false; setErrorMsgId(1); }
			break;
			// Checkboxen
			case "checkbox":
				checkCheckBoxes();
			break;
			// Radiobuttons
			case "radio":
				checkRadioButtons();
			break;
			// Selects
			case "select":
				selectCheck();
			break;
			
			/*#################################################################*/
			// Erweiterbarer Bereich
			/*#################################################################*/
			// (hier kÃ¶nnen weitere Elemente hinzugefÃ¼gt werden)
			
			case "cbCarOrHome":
				if(!$("smileCar").checked && !$("smileHome").checked) { if(!setLabel()) { check = false; setErrorMsgId(1); } }
				else { setLabel(true); }
			break;
		}
	}
	
	/////////////////////////////////////////////////////////////////////////////////
	// Setzt die Farben der Labes
	/////////////////////////////////////////////////////////////////////////////////
	
	function setLabel()
	{
		var labels = document.getElementsByTagName("label");
		for (l in labels)
		{
			if (labels[l].htmlFor == input.id)
			{
				if(setLabel.arguments.length > 0 && setLabel.arguments[0] == true) {
					if (setLabel.arguments[0] == true) { labels[l].style.color = okColorTxtLabel; return true; }
					else { labels[l].style.color = errorColorTxtLabel; return false; }
				}
				if (input.checked)	{ labels[l].style.color = okColorTxtLabel; return true; }
				else				{ labels[l].style.color = errorColorTxtLabel; return false; }
			}
		}
	}
	
	/////////////////////////////////////////////////////////////////////////////////
	// PrÃ¼ft Checkboxen im Formular
	/////////////////////////////////////////////////////////////////////////////////
	
	function checkCheckBoxes()
	{
		if(!setLabel()) { check = false; setErrorMsgId(1); }
	}
	
	/////////////////////////////////////////////////////////////////////////////////
	// PrÃ¼ft Radiobuttons im Formular
	/////////////////////////////////////////////////////////////////////////////////
	
	function checkRadioButtons()
	{
		if (arrRadio.length == 0) { arrRadio.push(input.name); checkRadioButtonsGroup(); }
		else
		{
			for (var i = 0; i < arrRadio.length; i++)
			{
				if (durchlauf())
				{
					arrRadio.push(input.name); checkRadioButtonsGroup();
				}
			}
		}
		function durchlauf() {
			for (var e = 0; e < arrRadio.length; e++) {
				if (arrRadio[e] == input.name) { return false; }
			}
			return true;
		}
		function checkRadioButtonsGroup()
		{
			var rbg = formular[input.name];
			var rbChecked = false;
			for (var c = 0; c < rbg.length; c++) { if (rbg[c].checked) { rbChecked = true; } }
			// FÃ¤rbt die Labels ein
			for (var c = 0; c < rbg.length; c++) { input = rbg[c]; setLabel(rbChecked); }
			if (!rbChecked) { check = false; setErrorMsgId(1); }
		}
	}
	
	/////////////////////////////////////////////////////////////////////////////////
	// PrÃ¼ft Selects im Formular
	/////////////////////////////////////////////////////////////////////////////////
	
	function selectCheck()
	{
		if(input.selectedIndex != 0) { input.style.backgroundColor = okColor; input.style.color = okColorTxt; }
		else { input.style.backgroundColor = errorColor; input.style.color = errorColorTxt; check = false; setErrorMsgId(1); }
	}
	
	/////////////////////////////////////////////////////////////////////////////////
	// PrÃ¼ft Spezielle Elemente (erweiterbar)
	/////////////////////////////////////////////////////////////////////////////////
	
	function checkOtherElements()
	{
		/*#################################################################*/
		// Erweiterbarer Bereich
		/*#################################################################*/
		// (hier kÃ¶nnen weitere Elemente hinzugefÃ¼gt werden)
	}
	
	/////////////////////////////////////////////////////////////////////////////////
	// Weist ID fÃ¼r Fehlermeldung zu
	/////////////////////////////////////////////////////////////////////////////////
	
	function setErrorMsgId(id)
	{
		if (errorMsgId.length == 0) { errorMsgId.push(0); }
		for (var i = 0; i < errorMsgId.length; i++)
		{
			if (errorMsgId[i] == id) { return; }
		}
		errorMsgId.push(id);
	}
	
	
	/////////////////////////////////////////////////////////////////////////////////
	// PrÃ¼ft ob ein Fehler auftrat
	/////////////////////////////////////////////////////////////////////////////////
	
	
	function errorCheck()
	{
		// OK
		if (check) { sendMail(); }
		// Fehler
		else { showError(); }
	}
	
	/////////////////////////////////////////////////////////////////////////////////
	// OK (Mail versenden)
	/////////////////////////////////////////////////////////////////////////////////
	
	function sendMail()
	{
		if(sendMailAfterCheck) {
			formular.method = "post";
			formular.action = location.href;
			formular.submit();
		}
	}
	
	startCheck(); //-->
	formScriptIsRunning = false;
	return check;
}

/////////////////////////////////////////////////////////////////////////////////
// FEHLER
/////////////////////////////////////////////////////////////////////////////////
	
	
function showError()
{
	// Leer Box
	$("errorBoxContent").innerHTML = "";
	// Wird arguments mitgegeben:
	if (showError.arguments[0])
	{
		closeWindowId = showError.arguments[0];
		//Nachricht
		var message = errorMsg[Number(showError.arguments[1])];
		//Wenn Parameter 2 oder 3 ersetze Platzhalter durch Parameter
		if (arguments[2]) message = message.replace ("[param_1]", arguments[2]);
		if (arguments[3]) message = message.replace ("[param_2]", arguments[3]);

		$("errorBoxContent").innerHTML = errorMsg[0] + message;
	}
	else { for (var i = 0; i < errorMsgId.length; i++) { $("errorBoxContent").innerHTML += errorMsg[errorMsgId[i]]; } }
	// Blendet aus
	if(closeWindowId) { windowManager(closeWindowId,"hidden"); }
	if(closeWindowId) { $("errorBoxButton").onclick = function() { windowManager('errorBox','hidden',closeWindowId,'visible'); } }
	// Positioniert Box
	var erBox_xPos = $(closeWindowId);
	var xPos = 0;
	while (erBox_xPos) { xPos += erBox_xPos.offsetLeft; erBox_xPos = erBox_xPos.offsetParent; }
	$("errorBox").style.left = Math.round((xPos + ($(closeWindowId).offsetWidth/2) - ($("errorBox").offsetWidth/2))) + "px";
	// Blendet Box ein
	windowManager("errorBox","visible");
}

/////////////////////////////////////////////////////////////////////////////////
// Error-Box Buttonfunktion Press + Release
/////////////////////////////////////////////////////////////////////////////////

function errorBtRelease() { enableForm(); }

/////////////////////////////////////////////////////////////////////////////////
// Furmularfelder einblenden
/////////////////////////////////////////////////////////////////////////////////

function enableForm()
{
	// Blendet Formularfelder ein
	for (var i=0; i < formular.elements.length; i++)
	{
		input = formular.elements[i];
		input.disabled = "";
	}
	// Blendet ErrorBox aus
	document.getElementById("errorBox").style.visibility = "hidden";
}

function setInputType(formular)
{
	for(var i = 0; i < formular.length; i++) {
		if(formular[i].title) {
			// obj.title wird zu obj.inputType
			formular[i].inputType = formular[i].title.split(",");
			formular[i].inputType[1] = (formular[i].inputType[1] == 1 || formular[i].inputType[1] == "true")?true:false;
			formular[i].title = "";
		}
	}
}

function windowManager()
{
	// Blendet Elemente ein oder aus
	var args = windowManager.arguments;
	for(var i = 0; i < args.length; i++)
	{
		var win = $(args[i]);
		var _visibility = new Array('visible', 'hidden');
		var _display = new Array('block', 'none');
		// VISIBILITY
		for (var v = 0; v < _visibility.length; v++) {
			if(args[i+1] == _visibility[v]) { win.style.visibility = _visibility[v]; }
		}
		// DISPLAY
		for (var d = 0; d < _visibility.length; d++) {
			if(args[i+1] == _display[d]) { win.style.display=_display[d]; }
		}
		i++;
	}
}
