//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			= "#DCDCDC";
okColor				= "transparent";
errorColorTxt		= "#bd3e1e";
errorColor			= "#1d1d1d";
// Labels
okColorTxtLabel		= "#DCDCDC";
okColorLabel		= "";
errorColorTxtLabel	= "#bd3e1e";
errorColorLabel		= "";

// Fehlermeldungen
var errorMsg			= new Array();

errorMsg[0]				= '<h2>Bitte beachten Sie:</h2>';
//errorMsg[1]				= 'Damit wir Ihnen die gew&uuml;nschten Unterlagen zustellen k&ouml;nnen, ben&ouml;tigen wir Ihre vollst&auml;ndigen Angaben. Danke f&uuml;r das Ausf&uuml;llen der eingef&auml;rbten Felder.<br />';
errorMsg[1]				= 'Alle dunkel einge&auml;rbten Felder m&uuml;ssen angegeben werden.<br />';


var errorMsgId			= null;
var closeWindowId		= null;


/////////////////////////////////////////////////////////////////////////////////
// Start formCheck
/////////////////////////////////////////////////////////////////////////////////

var win = null;
function formCheck(/*ID, cwId*/)
{
	// 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[1]; }
	if(formCheck.arguments[1]) { closeWindowId = formCheck.arguments[0]; }
	sendMailTo = null;
	if(formCheck.arguments[2]) { sendMailTo = 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 = 0; l < labels.length; l++)
		{
			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()
	{
		// Formularfelder aktivieren
		//for (var i=0; i < formular.elements.length; i++) { input.disabled = ""; }
		formular.method = "post";
		formular.action = (sendMailTo)?sendMailTo: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++;
	}
}