//------------------------------------------------------------------------------------------------------------------------------------------------------
// Alkalmazza az űrlapellenőrzést a megjelelölt űrlapokon
//------------------------------------------------------------------------------------------------------------------------------------------------------
function preForm(vPreCheck) {
	var oForms = document.forms;
	
	for(var i = 0; i < oForms.length; i++) {
		var oForm = oForms[i];
		
		if(String(oForm.getAttribute("check")) == "yes") {
			Form(oForm, vPreCheck);
		}
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Alkalmazza a mezőellenőrzést
//------------------------------------------------------------------------------------------------------------------------------------------------------
function Form(oForm, vPreCheck) {
	var oEls = oForm.elements;
	
	for(var i = 0; i < oEls.length; i++) {
		var oEl = oEls[i];
		
		var vRequire = oEl.getAttribute("require");
		var vValid = oEl.getAttribute("valid");
		var vRestrict = oEl.getAttribute("restrict");
		var vSave = oEl.getAttribute("save");

		if(oEl.type == "text" || oEl.type == "password") {
			if(vRequire != null || vValid != null) {
				oEl.onblur = function() {
					FilterSpace(this);
					CheckForm(this.form);
				}
				
				oEl.onkeyup = function() {
					CheckForm();
					
					if(document.getElementById(this.form.name + "_name")) {
						FollowName(this.form.name);
					}
				}
			}
		}

		if(vRestrict != null) {
			switch(String(vRestrict)) {
				case "integer":
					oEl.onkeypress = function() {
						RestrictInteger;
						CheckForm(this.form);
					}
					
					oEl.onblur = function() {
						FilterInteger(this);
						CheckForm(this.form);
					}
				break;
				case "float":
					oEl.onkeypress = function() {
						RestrictFloat;
						FilterFloat(this);
						CheckForm(this.form);
					}
					
					oEl.onblur = function() {
						FilterFloat(this);
						CheckForm(this.form);
					}
				break;
			}
		}
		
		if(vSave == "yes") {
			if(oEl.type == "hidden") {
				oEl.onpropertychange = function() {
					SetCookie("registration_" + this.name, this.value);
				}
			} else {
				oEl.onblur = function() {
					SetCookie("registration_" + this.name, this.value);
				}
			}
		}
	}
	
	if(vPreCheck == "precheck") {
		CheckForm(oForm);
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőrzi a mezőket, és aszerint állítja be a submit gombot
//------------------------------------------------------------------------------------------------------------------------------------------------------
function CheckForm(oForm) {
	if(!oForm) {
		var oForm = window.event.srcElement.form;
	}
	
	var oEls = oForm.elements;
	var vOk = false;
	
	for(var i = 0; i < oEls.length; i++) {
		var oEl = oEls[i];
		
		var vRequire = oEl.getAttribute("require");
		var vValid = oEl.getAttribute("valid");
		
		if((oEl.type == "text" || oEl.type == "password") && (vRequire != null || vValid != null)) {
			vOk = (CheckElement(oEl)) ? vOk : true;
		}
	}
	
	if(document.getElementById(oForm.name + "_error")) {
		if(vOk) {
			document.getElementById(oForm.name + "_error").style.display = "block";
		} else {
			document.getElementById(oForm.name + "_error").style.display = "none";
		}
	}

	oForm.sBtn.disabled = vOk;
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőriz egy mezőt
//------------------------------------------------------------------------------------------------------------------------------------------------------
function CheckElement(oEl) {
	var vOk = false;
	
	if(!oEl) {
		var oEl = window.event.srcElement;
	}

	var vState = oEl.form.getAttribute("state");
	var vRequire = oEl.getAttribute("require");
	var vValid = oEl.getAttribute("valid");
	var vRestrict = oEl.getAttribute("restrict");
	
	switch(String(vValid)) {
		case "email":
			if(ValidEmail(oEl.value)) {
				oEl.className = "text";
				vOk = true;

				if(!document.getElementById(oEl.form.name + "_error") && String(vState) == "yes") {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0 || document.getElementById(oEl.form.name + "_error")) ? "textw" : "text";
				
				if(oEl.value.length > 0 && !document.getElementById(oEl.form.name + "_error") && String(vState) == "yes") {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && !document.getElementById(oEl.form.name + "_error") && String(vState) == "yes") {
					SetState(oEl, "required");
				}
			}
		break;
		case "password":
			if(oEl.value.length >= parseInt(vRequire) && oEl.value == oEl.form.password.value && ValidPassword(oEl.value)) {
				oEl.className = "text";
				vOk = true;
				
				if(!document.getElementById(oEl.form.name + "_error") && String(vState) == "yes") {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0 || document.getElementById(oEl.form.name + "_error")) ? "textw" : "text";
				
				if(oEl.value.length > 0 && !document.getElementById(oEl.form.name + "_error") && String(vState) == "yes") {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && !document.getElementById(oEl.form.name + "_error") && String(vState) == "yes") {
					SetState(oEl, "required");
				}
			}
		break;
		default:
			if(oEl.value.length >= parseInt(vRequire)) {
				oEl.className = "text";
				vOk = true;
				
				if(!document.getElementById(oEl.form.name + "_error") && String(vState) == "yes") {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0 || document.getElementById(oEl.form.name + "_error")) ? "textw" : "text";
				
				if(oEl.value.length > 0 && !document.getElementById(oEl.form.name + "_error") && String(vState) == "yes") {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && !document.getElementById(oEl.form.name + "_error") && String(vState) == "yes") {
					SetState(oEl, "required");
				}
			}
		break;
	}
	
	return vOk;
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőrzi a leütött karaktert, hogy az integer-e
//------------------------------------------------------------------------------------------------------------------------------------------------------
function RestrictInteger(oEvt) {
	if(!oEvt) {
		var oEvt = window.event;
	}
		
	var Keycode = oEvt.keyCode ? String.fromCharCode(oEvt.keyCode) : String.fromCharCode(oEvt.which);
	
	switch(Keycode) {
		case "0":
		case "1":
		case "2":
		case "3":
		case "4":
		case "5":
		case "6":
		case "7":
		case "8":
		case "9":
		break;
		default:
			if(oEvt.keyCode != 8 && oEvt.keyCode != 46 && oEvt.keyCode != 37 && oEvt.keyCode != 39) {
				return false;
			}
		break;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőrzi a leütött karaktert, hogy az integer-e
//------------------------------------------------------------------------------------------------------------------------------------------------------
function RestrictFloat(oEvt) {
	if(!oEvt) {
		var oEvt = window.event;
	}
		
	var Keycode = oEvt.keyCode ? String.fromCharCode(oEvt.keyCode) : String.fromCharCode(oEvt.which);
	
	switch(Keycode) {
		case "0":
		case "1":
		case "2":
		case "3":
		case "4":
		case "5":
		case "6":
		case "7":
		case "8":
		case "9":
		case ".":
		case ",":
		break;
		default:
			if(oEvt.keyCode != 8 && oEvt.keyCode != 46 && oEvt.keyCode != 37 && oEvt.keyCode != 39) {
				return false;
			}
		break;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Kiszűri egy mező érétkéből a 'space'-eket
//------------------------------------------------------------------------------------------------------------------------------------------------------
function FilterSpace(oObj) {
	oObj.value = oObj.value.replace(/^\s+|\s+$/g, "");
	oObj.value = oObj.value.replace(/[\s]{2,}/g, " ");
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Kiszűri egy mező érétkéből a nem numerikus karaktereket
//------------------------------------------------------------------------------------------------------------------------------------------------------
function FilterInteger(oObj) {
	oObj.value = oObj.value.replace(/[^0-9]/g, "");
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Kiszűri egy mező érétkéből a nem numerikus karaktereket
//------------------------------------------------------------------------------------------------------------------------------------------------------
function FilterFloat(oObj) {
	oObj.value = oObj.value.replace(/[\.]{2,}|[\,]{1,}/g, ".");
	oObj.value = oObj.value.replace(/[^0-9\.]/g, "");
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőrzi, hogy az átadott string megfelel-e egy email-nek
//------------------------------------------------------------------------------------------------------------------------------------------------------
function ValidEmail(vEmail) {
	if(vEmail.match(/^(([\-\w]+)\.?){0,}([\-\w]+)@(([\-\w]+)\.?)+\.[a-zA-Z]{2,4}$/)) {
		return true;
	} else {
		return false;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőrzi, hogy az átadott string megfelel-e egy jelszónak
//------------------------------------------------------------------------------------------------------------------------------------------------------
function ValidPassword(vPassword) {
	if(vPassword == vPassword.replace(/[^0-9a-zA-Z]/g, "")) {
		return true;
	} else {
		return false;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Cserélgeti a kis állapotjelző ikonokat
//------------------------------------------------------------------------------------------------------------------------------------------------------
function SetState(oObj, vState) {
	var oRow = oObj.parentNode;
	
	while(oRow.tagName != "TR" && oObj.parentNode) {
		oRow = oRow.parentNode;
	}
	
	var oImg = oRow.cells[2].firstChild;
	
	while(oImg.tagName != "IMG") {
		oImg = oImg.firstChild;
	}
	
	switch(vState) {
		case "required":
			oImg.src = oImg.src.replace(/[^\/]+$/, "required.gif");
		break;
		case "error":
			oImg.src = oImg.src.replace(/[^\/]+$/, "error.gif");
		break;
		case "ok":
			oImg.src = oImg.src.replace(/[^\/]+$/, "ok.gif");
		break;
	}
}
