var frm = new Array();

/**
 * Validators
 */

// Initialisiert
function frmInitTf(frmId, validator, tag) {
	frm[frmId] = new Array();
	frm[frmId]['onCheck'] = 0;
	frm[frmId]['validator'] = validator;
	frm[frmId]['layer'] = document.getElementById(frmId);
	frm[frmId]['className'] = frm[frmId]['layer'].className.split("_error")[0];
	frm[frmId]['input'] = frm[frmId]['layer'].getElementsByTagName(tag);

	var divs = frm[frmId]['layer'].getElementsByTagName("div");
	var numDivs = divs.length;
	for(var dc = 0; dc < numDivs; dc++) {
		if(divs[dc].className == "errormsg") {
			frm[frmId]['div'] = divs[dc];
		}
	}

	frm[frmId]['visited'] = false;

	if(frm[frmId]['layer'].className.search(/^.+_error$/) == -1) {
		frm[frmId]['error'] = false;
		frm[frmId]['initerror'] = false;
	} else {
		frm[frmId]['error'] = true;
		frm[frmId]['initerror'] = true;
	}

	var numInputs = frm[frmId]['input'].length;
	for(var ic = 0; ic < numInputs; ic++) {
		frm[frmId]['input'][ic].frmId = frmId;
		frm[frmId]['input'][ic].onfocus = frmStarting;
		if(frm[frmId]['validator'] != "none") {
			frm[frmId]['input'][ic].frmId = frmId;
			frm[frmId]['input'][ic].onkeydown = frmChanging;
			frm[frmId]['input'][ic].onkeyup = frmChanged;
			frm[frmId]['input'][ic].onblur = frmAfterChecker;
		}
	}
}

function frmStarting(e) {
	var frmId = this.frmId;

	if(frm[frmId]['initerror']) {
		frm[frmId]['initerror'] = false;
		if(frm[frmId]['validator'] == "none" || frm[frmId]['validator'](frmId)) {
			frm[frmId]['error'] = false;
			frm[frmId]['layer'].className = frm[frmId]['className'];
		}
	}

	if(frm[frmId]['error']) {
		frm[frmId]['div'].style.display = "block";
		frm[frmId]['layer'].className = frm[frmId]['className'];
	}
}

function frmChanging(e) {
	var frmId = this.frmId;

	frm[frmId]['onCheck']++;
	frm[frmId]['div'].style.display = "none";
}

function frmChanged(e) {
	var frmId = this.frmId;

	frm[frmId]['onCheck']++;
	setTimeout("frmChangingChecker(\"" + frmId + "\", \"" + frm[frmId]['onCheck'] + "\");", 750);
}

function frmChangingChecker(frmId, oc) {
	if(frm[frmId]['onCheck'] == oc) {
		frm[frmId]['onCheck'] = 0;
		if(!frm[frmId]['validator'](frmId)) {
			frm[frmId]['div'].style.display = "block";
		}
	}
}

function frmAfterChecker(e) {
	var frmId = this.frmId;
	frm[frmId]['onCheck'] = 0;
	if(!frm[frmId]['validator'](frmId)) {
		frm[frmId]['error'] = true;
		frm[frmId]['layer'].className = frm[frmId]['className'] + "_error";
		frm[frmId]['div'].style.display = "none";
	} else {
		frm[frmId]['error'] = false;
	}
}

function frmSubmitChecker() {
	var status = true;
	for (var key in frm) {
	    frm[key]['onCheck'] = 0;
	    if(frm[key]['validator'] != "none") {
		    if(!frm[key]['validator'](key)) {
				frm[key]['error'] = true;
				frm[key]['layer'].className = frm[key]['className'] + "_error";
				frm[key]['div'].style.display = "none";
				status = false;
			} else {
				frm[key]['error'] = false;
			}
	    }
	}

	return status;
}


/**
 * TeigCode
 */
var frmteig = new Array();

function frmRegTeigTf(frmId, tag) {
	frmteig[frmId] = new Array();
	frmteig[frmId]['layer'] = document.getElementById(frmId);
	frmteig[frmId]['input'] = frmteig[frmId]['layer'].getElementsByTagName(tag);
}

function frmInsertText(frmId, number, str, str2) {
	var form = frmteig[frmId]['input'][number];
	form.focus();
	if(window.getSelection || document.getSelection) {
		var start = form.selectionStart;
		var end = form.selectionEnd
		if(str2 == undefined) {
		 	form.value = form.value.slice(0, start) + str +  form.value.slice(end);
		 	form.selectionStart = start + str.length;
		 	form.selectionEnd = start + str.length;
		} else {
		 	form.value = form.value.slice(0, start) + str +  form.value.slice(start, end) + str2 +  form.value.slice(end);
		 	form.selectionStart = start + str.length;
		 	form.selectionEnd = end + str.length;
		}
	} else {
		if(form.createTextRange && document.selection.createRange().parentElement().name == frmteig[frmId]['input'][number].name) {
			if(str2 == undefined) {
				document.selection.clear();
				document.selection.createRange().text = str;
			} else {
				var sel = document.selection.createRange().text;
				document.selection.createRange().text = str + sel + str2;
			}
		} else {
			form.value += str;
		}
	}
	form.focus();
	/*
		var i=document.f.txt.value.length+1;
		if (document.f.txt.createTextRange){
			theCaret = document.selection.createRange().duplicate();
			while ( theCaret.parentElement() == document.f.txt && theCaret.move("character",1)==1 )) {
				--i;
			}
		}
		return i==document.f.txt.value.length+1?-1:i;*/
}


/**
 * Checkbox Changer
 */



/**
 * Validaters
 */

function frmIsTitle(frmId) {
	var regexp = /^[A-Z].+$/; //regular expression defining a 5 digit number
	if (frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmIsDate(frmId) {
	var regexp = /^[0-9]{2,2}\.[0-9]{2,2}\.[0-9]{4,4}$/;
	if (frm[frmId]['input'][0].value.search(regexp) == -1) return false;
	else return frmIsOptDate(frmId);
}

function frmIsOptDate(frmId) {
	if (frm[frmId]['input'][0].value.length == 0) return true;
	else {
		var dtmp = frm[frmId]['input'][0].value.split(".");
		var dt = new Date(dtmp[2], (dtmp[1] - 1), dtmp[0]);
		if('Invalid Date' == dt || 'NaN' == dt) {
			return false;
		} else {
			return true;
		}
	}
}

function frmIsStr(frmId) {
	var regexp = /^.{3,}$/; //regular expression defining a 5 digit number
	if (frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmIsNumeric(frmId) {
	var regexp = /^[0-9]+$/; //regular expression defining a 5 digit number
	if (frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmIsCookieNumber(frmId) {
	var regexp = /^[0-9]+(\.[0-9]{2})?$/; //regular expression defining a 5 digit number
	if (frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmIsCharacter(frmId) {
	var regexp = /^(\D|\S|\W){3,}$/; //regular expression defining a 5 digit number
	if (frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmIsPost(frmId) {
	var regexp = /.{3,}/; //regular expression defining a 5 digit number
	if (frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmIsEMail(frmId) {
	var regexp = /^.+@.+\..+$/; //regular expression defining a 5 digit number
	if (frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmIsOptEMail(frmId) {
	var regexp = /^.+@.+\..+$/; //regular expression defining a 5 digit number
	if (frm[frmId]['input'][0].value.length > 0 && frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmIsOptICQ(frmId) {
	var regexp = /^[0-9]{5,9}$/; //regular expression defining a 5 digit number
	if (frm[frmId]['input'][0].value.length > 0 && frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmIsOptHTTP(frmId) {
	var regexp = /^http:\/\/[^ ]{2,}\.[^ ]{2,}$/; //regular expression defining a 5 digit number
	if (frm[frmId]['input'][0].value.length > 0 && frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmIsOptWWW(frmId) {
	var regexp = /^(((ht|f)tp(s?)\:\/\/){1})?([a-zA-Z0-9]{3,})\.([a-zA-Z0-9\-\_]{3,})\.([a-zA-Z\.]{2,6})$/;
	if (frm[frmId]['input'][0].value.length > 0 && frm[frmId]['input'][0].value.search(regexp) == -1) {
		return false;
	} else {
		return true;
	}
}

function frmAreOptEqualPws(frmId) {
	var regexp = /^.{6,}$/; //regular expression defining a 5 digit number

	if(frm[frmId]['input'][0].value != frm[frmId]['input'][1].value) {
		frm[frmId]['div'].innerHTML = "Die Passw&ouml;rter sind nicht gleich du Quersch&auml;del!";
		return false;
	} else if(frm[frmId]['input'][0].value.length == 0){
		return true;
	} else if (frm[frmId]['input'][0].value.search(regexp) == -1) {
		frm[frmId]['div'].innerHTML = "Nein, du nimmst jetzt einfach mal kein Passwort, das k&uuml;rzer als 6 Zeichen ist.";
		return false;
	}

	return true;
}
