/******************************************************************************
 * Globale Variablen
 ******************************************************************************/
var status = new Array();
var formFelder = new Array();
var submit = false;

function newStatusArray(fN){
	status[fN] = new Array();
	status[fN]['error'] = false;
	status[fN]['messages'] = new Array();
}

/******************************************************************************
 * Pflichtfelder
 ******************************************************************************/
function writeRequiredMsg(fN){
	status[fN]['error'] = true;
	var arrCount = status[fN]['messages'].length;
	status[fN]['messages'][arrCount] = langLabels['requiredMsg'];
}

function checkRequiredField(fN) {
	if(formFelder[fN] && formFelder[fN]['required']) {
		if(!document.getElementById(fN).value) {
			writeRequiredMsg(fN);
		}
	}
}

function checkRequiredFieldCR(fN,type){
	if(formFelder[fN] && formFelder[fN]['required']) {
		var wrapId = fN + '-' + type;
		var fields = document.getElementById(wrapId).getElementsByTagName('input');
		var isChecked = false;
		for(var i=0;i<fields.length;i++) {
			if(fields[i].checked == true) {
				isChecked = true;
			}
		}

		if(!isChecked) {
			writeRequiredMsg(fN);
		}
	}
}

function checkRequiredFieldSelect(fN){
	if(formFelder[fN] && formFelder[fN]['required']) {
		var options = document.getElementById(fN).getElementsByTagName('option');
		var isSelected = false;
		for(var i=0;i<options.length;i++) {
			if(options[i].selected == true) {
				if((options[i].value) && (options[i].value != '')) {
					isSelected = true;
				}
			}
		}

		if(!isSelected) {
			writeRequiredMsg(fN);
		}
	}
}

function checkRequiredFieldRTE(fN){
	if(formFelder[fN] && formFelder[fN]['required']) {
		if(formFelder[fN]['temp_ednr']) {
			var rteCode = RTEarea[formFelder[fN]['temp_ednr']]['editor'].getHTML();
			if(!rteCode) {
				writeRequiredMsg(fN);
			}
		}
	}
}

/******************************************************************************
 * Felderevaluierung
 ******************************************************************************/
function evalField(fN){
	if(document.getElementById('status-' + fN)) {
		document.getElementById('status-' + fN).innerHTML = '<img src="' + siteRelPath + 'gfx/evaluate.gif" />';
	}

	if(formFelder[fN]) {
		newStatusArray(fN);
		switch(formFelder[fN]['typ']) {
			case 'text':
			case 'password':
			case 'passwordtwice':
				checkRequiredField(fN);
				if(!submit) {
					evalFieldText(fN);
				}
				break;
			case 'textarea':
				if( (formFelder[fN]['rte']) && (formFelder[fN]['rte'] == '1')) {
					checkRequiredFieldRTE(fN);
					setStatusField(fN);
				} else {
					checkRequiredField(fN);
					setStatusField(fN);
				}
				break;
			case 'select':
				checkRequiredFieldSelect(fN);
				setStatusField(fN);
				break;
			case 'check':
			case 'radio':
				checkRequiredFieldCR(fN,formFelder[fN]['typ']);
				setStatusField(fN);
				break;
			case 'files':
			case 'display':
			case 'submit':
				setStatusField(fN);
				break;
		}
	}
}

function setConfigArray(fN){
	var config = new Array();
	config = formFelder[fN];
	config['value']		= document.getElementById(fN).value;
	config['fN']		= fN;

	if(config['eval'] == 'pwtwice') {
		if(fN.substr((fN.length-6),fN.length) == '-twice') {
			config['fNtwice']	 = config['fN'];
			config['valuetwice'] = config['value'];

			config['fN'] 	= config['fN'].substr(0,(fN.length-6));
			config['value'] = document.getElementById(config['fN']).value;

			newStatusArray(config['fN']);
		} else {
			config['fNtwice']	= fN + '-twice';
			config['valuetwice']= document.getElementById(config['fNtwice']).value;
			newStatusArray(config['fNtwice']);
		}
	}

	return config;
}

function evalFieldText(fN) {
	var config = setConfigArray(fN);

	if(!status[config['fN']]['error']) {
		if( (config['value']) || ( (config['eval']=='pwtwice') && (config['value'] || config['valuetwice']) ) ) {
			jfv2request('evalField',config);
		} else setStatusField(config['fN']);
	} else setStatusField(config['fN']);

}

function setStatusField(fN){
	switch(formFelder[fN]['typ']) {
		case 'files':
		case 'display':
		case 'submit':
			document.getElementById('status-' + fN).innerHTML = '';
			break;
		default:
			if(status[fN]['newValue']) {
				document.getElementById(fN).value = status[fN]['newValue'];
			}

			if(status[fN]['error']) {
				var errorMsg = '<div id="error-' + fN + '" class="jfv2-errormsg" style="visibility: hidden;" />';
				errorMsg += '<div class="jfv2-errormsg-rand">';
				errorMsg += '<span class="jfv2-errormsg-closelink">';
				errorMsg += '<a href="javascript:hideError(\'' + fN + '\');">';
				errorMsg += '<img src="' + siteRelPath + 'gfx/close.gif" height="10" width="10" />';
				errorMsg += '</a></span>';

				for (var i=0; i < status[fN]['messages'].length; i++) {
					errorMsg += status[fN]['messages'][i] + "<br />";
				}

				errorMsg += '</div></div>';
				errorMsg += '<img src="' + siteRelPath + 'gfx/error.gif" />';
				errorMsg +=	'<a href="javascript:showError(\'' + fN + '\');">';
				errorMsg += '<img src="' + siteRelPath + 'gfx/info.gif" />';
				errorMsg += '</a>';

				document.getElementById('status-' + fN).innerHTML = errorMsg;
			} else {
				if(document.getElementById('status-' + fN)) {
					document.getElementById('status-' + fN).innerHTML = '<img src="' + siteRelPath + 'gfx/ok.gif" />';
				}
			}
			break;
	}
}

function hideError(fN){
	document.getElementById('error-' + fN).style.visibility = 'hidden';
}

function showError(fN){
	document.getElementById('error-' + fN).style.visibility = 'visible';
}

/******************************************************************************
 * Dateiupload
 ******************************************************************************/

function uploadFile(fN){
	if(document.getElementById(fN).value) {
		onSubmitRTE();
		var config = new Array();
		config['fN'] = fN;
		config['file'] = document.getElementById(fN).value;

		document.getElementById('uploadForm-' + formName).value = 1;
		document.getElementById('submitForm-' + formName).value = 0;

		document.getElementById(formName).submit('upload');
		document.getElementById(fN + '-wrap').innerHTML = '<img src="' + siteRelPath + 'gfx/evaluate.gif" /> Lade Datei hoch...';
	}
}

function removeFile(fN,fileId,dontDelete){
	var hiddenField = 'hidden-' + fN + '-' + fileId;
	var config = new Array();
	config['fN'] = fN
	config['fileId'] = fileId;
	config['fileName'] = document.getElementById(hiddenField).value;
	config['path'] = formFelder[fN]['path'];

	if(dontDelete == 1) {
		document.getElementById(fN + '-' + fileId).innerHTML = '';

		var allFiles = document.getElementById('files-' + fN).getElementsByTagName('input');
		if(allFiles.length < formFelder[fN]['maxlength']) {
			var newId = fN + '-new';
			var uFfunc = "uploadFile('" + newId + "');";
			document.getElementById(fN + '-new-wrap').innerHTML = '<input onchange="' + uFfunc + '" name="' + newId + '" id="' + newId + '" value="" type="file" />';
		}
	} else {
		jfv2request('removeFile',config);
	}
}

/******************************************************************************
 * Formular übermittlen
 ******************************************************************************/
function submitValidation() {
	submit = true;
	onSubmitRTE();
	var requireValidFields = new Array();
	for(var fN in formFelder) {
		evalField(fN);

		if(!status[fN]['error']) {
			requireValidFields[requireValidFields.length] = fN;
		}
	}

	var config = new Array();
	for(var evalNr in requireValidFields) {
		var thisFN	= requireValidFields[evalNr];
		var thisTyp	= formFelder[thisFN]['typ'];
		if(thisTyp == 'text' || thisTyp == 'password' || thisTyp == 'passwordtwice') {
			var thisConfigArray = setConfigArray(thisFN);
			if( (thisConfigArray['value']) || ( (thisConfigArray['eval']=='pwtwice') && (thisConfigArray['value'] || thisConfigArray['valuetwice']) ) ) {
				config[thisFN] = thisConfigArray;
			}
		}
	}

	jfv2request('evalAllFields',config);
}

function submitForm(){
	var errorFields = new Array();
	for(var fN in formFelder) {
		if(status[fN]) {
			setStatusField(fN);
			if(status[fN]['error']) {
				errorFields[errorFields.length] = fN;
			}
		}
	}

	if(errorFields.length > 0) {
		var errorAlert = langLabels['checkfields'] + ": \n";
		for(var i=0; i < errorFields.length;i++) {
			if(i>0) errorAlert += ', ';
			errorAlert += formFelder[errorFields[i]]['label'];
		}
		alert(errorAlert);
		submit = false;
	} else {
		document.getElementById('uploadForm-' + formName).value = 0;
		document.getElementById('submitForm-' + formName).value = 1;
		document.getElementById(formName).submit('submit');
	}
}






