var txt_title      = 'Folgende Felder wurden nicht korrekt ausgefüllt:\n\n\n';
var txt_max        = '(max. %x Zeichen)';
var txt_min        = '(min. %x Zeichen)';
var txt_notEqual   = '(%first und %second mÃ¼ssen gleich sein)';
var txt_required   = '(*)';
var txt_typ        = [];
txt_typ['email']   = '(inkorrekte E-Mail-Adresse)';
txt_typ['date']    = '(Format muss tt.mm.yyyy sein)';
txt_typ['integer'] = '(darf nur aus Zahlen von 0-9 bestehen)';
txt_typ['float']   = '(muss eine korrekte Fliesskommazahl sein)';
txt_typ['alpha']   = '(darf nur aus Buchstaben (A-z) bestehen)';

var types = [];
types['email']   = /^[\w-]+?(\.[\w-]+)*@([\w-]+?\.)+([a-z]){2,}$/i;
types['date']    = /^[0-3][0-9]\.[0-1][0-9]\.(19|20)[0-9][0-9]$/i;
types['integer'] = /^[0-9]*$/;
types['alpha']   = /^[A-Z]*$/i;
types['float']   = /^[0-9]*([,.][0-9]+)?$/;

var err_color = '#ffffff';
var ok_color = '#ffffff';

var useSilentCheck = true;
var silentCheck = new Array();

var check_true = 'images/check_1.gif';
var check_false = 'images/check_0.gif';

function checkElement(element) {

	var ret = true;
	var al = '';
	
	var stack = [];


	
	switch (element.type.toLowerCase()) {
		case 'submit':
		case 'button':
		case 'hidden':
		break;
		case 'checkbox':
		case 'radio':
		break;
		default:
		if (element.getAttribute('fc_mustEqual') !== null) {
			if (element.value != $F(element.getAttribute('fc_mustEqual'))) {
				if (err_color) {
					element.style.backgroundColor = err_color;
					$(element.getAttribute('fc_mustEqual')).style.backgroundColor = err_color;
				}
				if (element.getAttribute('fc_errID') && $(element.getAttribute('fc_errID'))) {
					if (!silent) {
						Element.show(element.getAttribute('fc_errID'));
					}
				} 
				else {
					al += '- ' + element.getAttribute('fc_name') + ' ' + txt_notEqual.replace(/%second/, element.getAttribute('fc_name')).replace(/%first/, $(element.getAttribute('fc_mustEqual')).getAttribute('fc_name')) + '\n';
				}
				ret = false;
			}
		}
	
		if (element.getAttribute('fc_required') == 'true' && element.value == '') {
			if (err_color) {
				element.style.backgroundColor = err_color;
			}
			if (element.getAttribute('fc_errID') && $(element.getAttribute('fc_errID'))) {
				if (!silent) {
					Element.show(element.getAttribute('fc_errID'));
				}
			} 
			else {
				al += '- ' + element.getAttribute('fc_name') + ' ' + txt_required + '\n';
			}
			ret = false;
		}
	
		if (element.value != '') {
			if (element.getAttribute('fc_type') && types[element.getAttribute('fc_type')]) {
				if (element.value.search(types[element.getAttribute('fc_type')]) == -1) {
					if (err_color) {
						element.style.backgroundColor = err_color;
					}
					if (element.getAttribute('fc_errID') && $(element.getAttribute('fc_errID'))) {
						if (!silent) {
							Element.show(element.getAttribute('fc_errID'));
						}
					} 
					else {
						al += '- ' + element.getAttribute('fc_name') + ' ' + txt_typ[element.getAttribute('fc_type')] + '\n';
					}
					ret = false;
				}
			}
	
			if (element.getAttribute('fc_type') == 'pattern' && element.getAttribute('fc_pattern')) {
				if (element.value.search(element.getAttribute('fc_pattern')) == -1) {
					if (err_color) {
						element.style.backgroundColor = err_color;
					}
					if (element.getAttribute('fc_errID') && $(element.getAttribute('fc_errID'))) {
						if (!silent) {
							Element.show(element.getAttribute('fc_errID'));
						}
					} 
					else {
						al += '- ' + element.getAttribute('fc_name') + ' ' + txt_typ[element.getAttribute('fc_name')] + '\n';
					}
					ret = false;
				}
			}
	
			if (element.getAttribute('fc_minsize')) {
				if (parseInt(element.getAttribute('fc_minsize')) > element.value.length) {
					if (err_color) {
						element.style.backgroundColor = err_color;
					}
					if (element.getAttribute('fc_errID') && $(element.getAttribute('fc_errID'))) {
						if (!silent) {
							Element.show(element.getAttribute('fc_errID'));
						}
					} 
					else {
						al += '- ' + element.getAttribute('fc_name') + ' ' + txt_min.replace(/%x/, element.getAttribute('fc_minsize')) + '\n';
					}
					ret = false;
				}
			}
	
			if (element.getAttribute('fc_maxsize')) {
				if (parseInt(element.getAttribute('fc_maxsize')) < element.value.length) {
					if (err_color) {
						element.style.backgroundColor = err_color;
					}
					if (element.getAttribute('fc_errID') && $(element.getAttribute('fc_errID'))) {
						if (!silent) {
							Element.show(element.getAttribute('fc_errID'));
						}
					} 
					else {
						al += '- ' + element.getAttribute('fc_name') + ' ' + txt_max.replace(/%x/, element.getAttribute('fc_maxsize')) + '\n';
					}
					ret = false;
				}
			}
		}
	
		if (err_color && ok_color) {
			element.style.backgroundColor = ok_color;
		}
		break;
	}

	
	if (!ret) {
		$('c_' + element.id).src = check_false;
	}
	else{
		$('c_' + element.id).src = check_true;
	}
	return ret;
}




function checkForm(theForm, silent) {
	var theForm = $(theForm);
	var ret = true;
	var al = '';
	
	var stack = [];
	var elems = $A(theForm.getElementsByTagName('input'));
	var areas = $A(theForm.getElementsByTagName('textarea'));
	for (var j = 0; j < areas.length; j++) {
		elems.push(areas[j]);
	}
	
	for (var i = 0; i < elems.length; i++) {
		if (elems[i].form != theForm) {
			continue;
		}
	
		switch (elems[i].type.toLowerCase()) {
			case 'submit':
			case 'button':
			case 'hidden':
			break;
			case 'checkbox':
			case 'radio':
			break;
			default:
			if (elems[i].getAttribute('fc_mustEqual') !== null) {
				if (elems[i].value != $F(elems[i].getAttribute('fc_mustEqual'))) {
					if (err_color) {
						elems[i].style.backgroundColor = err_color;
						$(elems[i].getAttribute('fc_mustEqual')).style.backgroundColor = err_color;
					}
					if (elems[i].getAttribute('fc_errID') && $(elems[i].getAttribute('fc_errID'))) {
						if (!silent) {
							Element.show(elems[i].getAttribute('fc_errID'));
						}
					} 
					else {
						al += '- ' + elems[i].getAttribute('fc_name') + ' ' + txt_notEqual.replace(/%second/, elems[i].getAttribute('fc_name')).replace(/%first/, $(elems[i].getAttribute('fc_mustEqual')).getAttribute('fc_name')) + '\n';
					}
					ret = false;
					continue;
				}
			}
		
			if (elems[i].getAttribute('fc_required') == 'true' && elems[i].value == '') {
				if (err_color) {
					elems[i].style.backgroundColor = err_color;
				}
				if (elems[i].getAttribute('fc_errID') && $(elems[i].getAttribute('fc_errID'))) {
					if (!silent) {
						Element.show(elems[i].getAttribute('fc_errID'));
					}
				} 
				else {
					al += '- ' + elems[i].getAttribute('fc_name') + ' ' + txt_required + '\n';
				}
				ret = false;
				continue;
			}
		
			if (elems[i].value != '') {
				if (elems[i].getAttribute('fc_type') && types[elems[i].getAttribute('fc_type')]) {
					if (elems[i].value.search(types[elems[i].getAttribute('fc_type')]) == -1) {
						if (err_color) {
							elems[i].style.backgroundColor = err_color;
						}
						if (elems[i].getAttribute('fc_errID') && $(elems[i].getAttribute('fc_errID'))) {
							if (!silent) {
								Element.show(elems[i].getAttribute('fc_errID'));
							}
						} 
						else {
							al += '- ' + elems[i].getAttribute('fc_name') + ' ' + txt_typ[elems[i].getAttribute('fc_type')] + '\n';
						}
						ret = false;
						continue;
					}
				}
		
				if (elems[i].getAttribute('fc_type') == 'pattern' && elems[i].getAttribute('fc_pattern')) {
					if (elems[i].value.search(elems[i].getAttribute('fc_pattern')) == -1) {
						if (err_color) {
							elems[i].style.backgroundColor = err_color;
						}
						if (elems[i].getAttribute('fc_errID') && $(elems[i].getAttribute('fc_errID'))) {
							if (!silent) {
								Element.show(elems[i].getAttribute('fc_errID'));
							}
						} 
						else {
							al += '- ' + elems[i].getAttribute('fc_name') + ' ' + txt_typ[elems[i].getAttribute('fc_name')] + '\n';
						}
						ret = false;
						continue;
					}
				}
		
				if (elems[i].getAttribute('fc_minsize')) {
					if (parseInt(elems[i].getAttribute('fc_minsize')) > elems[i].value.length) {
						if (err_color) {
							elems[i].style.backgroundColor = err_color;
						}
						if (elems[i].getAttribute('fc_errID') && $(elems[i].getAttribute('fc_errID'))) {
							if (!silent) {
								Element.show(elems[i].getAttribute('fc_errID'));
							}
						} 
						else {
							al += '- ' + elems[i].getAttribute('fc_name') + ' ' + txt_min.replace(/%x/, elems[i].getAttribute('fc_minsize')) + '\n';
						}
						ret = false;
						continue;
					}
				}
		
				if (elems[i].getAttribute('fc_maxsize')) {
					if (parseInt(elems[i].getAttribute('fc_maxsize')) < elems[i].value.length) {
						if (err_color) {
							elems[i].style.backgroundColor = err_color;
						}
						if (elems[i].getAttribute('fc_errID') && $(elems[i].getAttribute('fc_errID'))) {
							if (!silent) {
								Element.show(elems[i].getAttribute('fc_errID'));
							}
						} 
						else {
							al += '- ' + elems[i].getAttribute('fc_name') + ' ' + txt_max.replace(/%x/, elems[i].getAttribute('fc_maxsize')) + '\n';
						}
						ret = false;
						continue;
					}
				}
			}
		
			if (err_color && ok_color) {
				elems[i].style.backgroundColor = ok_color;
			}
			break;
		}
	}
	
	if (useSilentCheck && theForm.id) {
		if (!silentCheck[theForm.id]) {
			silentCheck[theForm.id] = new Form.EventObserver(theForm, function() {checkForm(theForm, true)});
		}
	} 
	if (!ret) {
		if (!silent && al != '') {
			alert(txt_title + al);
		}
	}
	
	return ret;
}