function fg_checkAttach(formid,fieldid) {
	//log("fg_checkAttach()");

	var endings = document.getElementById('f'+fieldid).getAttribute('allowedtypes');
	endings = endings.split('|');

	var tmp = eval('document.forms.form'+formid+'.f'+fieldid+'.value');

	if (tmp){
		data = tmp;
		data = data.replace(/^\s|\s$/g, ""); //trims string

		ending = tmp.substr(tmp.lastIndexOf('.')+1);
		var found = false;
		for(i=0; i<endings.length; i++){
			if(endings[i].toLowerCase() == ending.toLowerCase()){
				found = true;
				break;
			}
		}
		//if (data.match(/([^\/\\]+)\.(png|jpg|gif)$/i) ){
		if (found){
			return null;
		}else{
			return 'Falsches Datei-Format.';
		}
	} else {
		return 'Eingabe erforderlich.';
	}
}


function fg_ShowHide(id) {
	//log("fg_ShowHide()");
	
	obj = document.getElementById(id);
	if (obj.style.display == 'none') {
		obj.style.display = 'block';
	}else{
		obj.style.display = 'none';
	}
}

function fg_ShowHideTree(id) {
	//log("fg_ShowHideTree()");

	boxID = "r"+id;
	obj = document.getElementById(boxID);
	linkID = "a"+id;
	obj2 = document.getElementById(linkID);
	if (obj.style.display == 'none') {
		obj.style.display = 'block';
		if(obj2.className == 'treeButtons' || obj2.className == 'treeButtonsExpanded'){
			obj2.className = "treeButtonsExpanded";
			obj2.title = "Antworten verbergen";
		}else{
			obj2.className = "chartButtonExpanded";
			obj2.title = "Chart verbergen";
		}
	}else{
		obj.style.display = 'none';
		if(obj2.className == 'treeButtons' || obj2.className == 'treeButtonsExpanded'){
			obj2.className = "treeButtons";
			obj2.title = "Antworten anzeigen";
		}else{
			obj2.className = "chartButton";
			obj2.title = "Chart anzeigen";
		}
	}
}

function fg_expandAll(){
	//log("fg_expandAll()");

	hobj = document.getElementById('hiddenNrOfElements');
	if(hobj.value){
		treebtn = document.getElementById('tree');

		if(treebtn.className=="expandall"){
			treebtn.className = "collapseall";
			treebtn.title = "Alle Antworten verbergen";
			dstyle = 'block';
		}else{
			treebtn.className = "expandall";
			treebtn.title = "Alle Antworten anzeigen";
			dstyle = 'none';
		}
		
		ids = hobj.value.split('|');
		for(i=0; i<ids.length; i++){
			obj = document.getElementById('r'+ids[i]);
			obj2 = document.getElementById('a'+ids[i]);
			

			if(treebtn.className == 'collapseall'){
				if(obj2.className == 'treeButtons' || obj2.className == 'treeButtonsExpanded'){
					dclass = 'treeButtonsExpanded';
					dtitle = 'Antworten verbergen';
				}else{
					dclass = "chartButtonExpanded";
					dtitle = "Chart verbergen";
				}
			}else{
				if(obj2.className == 'treeButtons' || obj2.className == 'treeButtonsExpanded'){
					dclass = 'treeButtons';
					dtitle = 'Antworten anzeigen';
				}else{
					dclass = "chartButton";
					dtitle = "Chart anzeigen";
				}
			}
			obj.style.display = dstyle;
			obj2.className = dclass;
			obj2.title = dtitle;
		}
	}
}

function fg_CheckState(formid, triggerElement, serValueArr, serAffectedArr, option) {
	//log("fg_CheckState("+formid+" , "+triggerElement+" , "+serValueArr+" , "+serAffectedArr+" , "+option+")");
	
	// finde heraus, wieviele antworten existieren (das attribut length gibt es nur, wenn es mehrere antworten gibt)
	//dir(document.forms["form"+formid].elements[triggerElement]);
	var evalStr = 'document.forms["form'+formid+'"].elements["'+triggerElement+'"].length';
	//log(evalStr);
	var answersCount = eval(evalStr);
	//log("answersCount = "+answersCount);
	
	
	var selectedAnswersArr = new Array(); // bilde ein array aus den value werten der ausgewählten radio buttons bzw. checkboxen
	if( 0 < answersCount ){
		for(i=0; i < answersCount; i++){
			if(option){ // damit kann mit einer funktion, das Verhalten für checkboxen und selects behandelt werden
				var isSelected = 'document.forms["form'+formid+'"].elements["'+triggerElement+'"][i].'+option
			} else{
				var isSelected = 'document.forms["form'+formid+'"].elements["'+triggerElement+'"][i].checked';
			}
			if(eval(isSelected)){ // wenn selektiert
				var checkedValue = eval('document.forms["form'+formid+'"].elements["'+triggerElement+'"][i].value');
				selectedAnswersArr.push(checkedValue);
			}
		}
	} else{
		if(option){ // damit kann mit einer funktion, das Verhalten für checkboxen und selects behandelt werden
			var isSelected = 'document.forms["form'+formid+'"].elements["'+triggerElement+'"].'+option;
		} else{
			var isSelected = 'document.forms["form'+formid+'"].elements["'+triggerElement+'"].checked';
		}
		if(eval(isSelected)){ // wenn selektiert
			var checkedValue = eval('document.forms["form'+formid+'"].elements["'+triggerElement+'"].value');
			selectedAnswersArr.push(checkedValue);
		}
	}
	//log("selectedAnswersArr = "+selectedAnswersArr);
	
	
	// vorbereiten der serialisierten Arrays -----------------------------------
	var targetValuesArr = serValueArr.split('##'); // wandle das serialisierte Array in ein echtes um
	//log("--- targetValuesArr ---");
	//dir(targetValuesArr);
	
	var dependentElementCollection = new Array();
	var temp = serAffectedArr.split('##'); // serialisiertes 2-dim Array der betroffenen Elemente (a1,a2,a3##b1,b2##c1,c2,c3)
	for (i=0; i<temp.length; i++){
		dependentElementCollection.push(temp[i].split(','));
	}
	//log("--- dependentElementCollection ---");
	//dir(dependentElementCollection);
	
	//log("für alle zielwerte");
	for (i=0; i < targetValuesArr.length; i++){ // für alle zielwerte
		var index = array_search(targetValuesArr[i], selectedAnswersArr); // ist der aktuelle Werte einer der Zielwerte?
		//log(" index selektiert? -> "+index);
		
		if(false !== index){ //log(" abhängige elemente einblenden ");
			for (x=0; x < dependentElementCollection[i].length; x++){ // abhängige elemente einblenden
				var elementID = dependentElementCollection[i][x];
				if(elementID){
					//log(" enable "+elementID);
					obj = document.getElementById(elementID);
					//log(" typeof obj = "+typeof obj);
					if(typeof obj == "object"){
						obj.style.display = 'block';
					}
				}
			}
		} else{ //log(" abhängige elemente ausblenden ");
			for (x=0; x < dependentElementCollection[i].length; x++){ // abhängige elemente ausblenden
				var elementID = dependentElementCollection[i][x];
				if(elementID){
					//log(" disable "+elementID);
					obj = document.getElementById(elementID);
					//log(" typeof obj = "+typeof obj);
					if(typeof obj == "object"){
						obj.style.display = 'none';
					}
				}
			}
		}
	}
}

// fg_CheckStateSelect('.$formRow['idnr'].',this.name,\''.$parts[0].'\',\''.$parts[1].'\');
function fg_CheckStateSelect(formid, triggerElement, serValueArr, serAffectedArr) {
	fg_CheckState(formid, triggerElement, serValueArr, serAffectedArr, 'selected');
}

function fg_changeImg(image, imageIndex){
	document.images[imageIndex].src = image;
	return false;
}

/* @func	in_array - sucht needle in haystack  und gibt bei Erfolg TRUE zurück, andernfalls FALSE
 @param		mixed needle
 @param		array haystack
 @param		boolean strict
 @returns	boolean TRUE if needle is found, else FALSE
*/
function in_array(needle, haystack, strict) {
	if(true == strict){
		for(var i=0; i < haystack.length; i++)
		{
			if(haystack[i] === needle)
			{
				return true;
			}
		}
	} else{
		for(var i=0; i < haystack.length; i++)
		{
			if(haystack[i] == needle)
			{
				return true;
			}
		}
	}
	return false;
}

/* @func	array_search - sucht needle in haystack und gibt bei Erfolg den Schlüssel zurück, andernfalls FALSE.
 @param		mixed needle
 @param		array haystack
 @param		boolean strict
 @returns	mixed key if needle is found, else boolean FALSE
*/
function array_search(needle, haystack, strict) {
	//log("array_search("+needle+", "+haystack+", "+strict+")");
	if(true == strict){
		for(var i=0; i < haystack.length; i++)
		{
			if(haystack[i] === needle)
			{
				return i;
			}
		}
	} else{
		for(var i=0; i < haystack.length; i++)
		{
			if(haystack[i] == needle)
			{
				return i;
			}
		}
	}
	return false;
}


function changeImg(image, imageIndex){
	document.images[imageIndex].src = image;
	return false;
}

// Anfrage Form

function validateAnfrage(myform) {
	msg = "";
	if(myform.vn.value==""){
		msg = "Bitte geben Sie Ihren Vornamen ein.\n";
	}
	if(myform.nn.value==""){
		msg += "Bitte geben Sie Ihren Nachnamen Vornamen ein.\n";
	}
	if(myform.email.value==""){
		msg += "Bitte geben Sie Ihre E-Mail Adresse ein.\n";
	}else{
		if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(myform.email.value)){
			//OK
		}else{
			msg += "Bitte geben Sie Ihre korrekte E-Mail Adresse ein.\n";
		}
	}
	if(myform.tel.value==""){
		msg += "Bitte geben Sie Ihre Telefonnummer ein.\n";
	}
	if(msg!=""){
		alert(msg);
		return false;
	}
}

// Pop-Up Windows

function info(breite,hoehe,datei,fenstername,scrollbars) {
	var mittehorizontal=(screen.width-breite)/2;
	var mittevertikal=(screen.height-hoehe)/2;
	var eigenschaften="width="+breite+",height="+hoehe+",left="+mittehorizontal+",top="+ mittevertikal+",menubar=no, resizable=no, locationbar=no, statusbar=no, scrollbars="+scrollbars;
	window.open(datei,fenstername,eigenschaften);
}

function confirmwindow(question, gotourl){
	if(confirm(question)){
		top.location.replace(gotourl);
	}
}

function validateSearch(myform) {
	msg = "";
	if(myform.word.value==""){
		msg += "Bitte geben Sie einen Suchbegriff ein.\n";
	}
	if(msg!=""){
		alert(msg);
		return false;
	}
}
