//------------------------------------------------------------------------------------------------------------------------------------------------------
// Alkalmazza az rlapellenrzst a megjelellt 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);

			if(document.all) {
				oForm.attachEvent("onsubmit", function() {
					DisableForm(window.event.srcElement);
				});
			} else {
				oForm.addEventListener("submit", function() {
					DisableForm(this);
				}, false);
			}
		}
	}
}

var dForm = "";
//------------------------------------------------------------------------------------------------------------------------------------------------------
// Letiltja az űrlapot, hogy ne lehessen többször elküldeni az űrlapot
//------------------------------------------------------------------------------------------------------------------------------------------------------
function DisableForm(oForm) {
	oForm.elements['sBtn'].disabled = true;
	
	dForm = oForm;
	
	setTimeout("dForm.disabled = true;", 100);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Alkalmazza a mezellenrzst
//------------------------------------------------------------------------------------------------------------------------------------------------------
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");
		
		switch(oEl.type) {
			case "text":
			case "password":
				if(vRequire != null || vValid != null) {
					if(oEl.name == "check_number") {
						if(document.all) {
							oEl.attachEvent("onkeyup", CheckNumber);
						} else {
							oEl.addEventListener("keyup", CheckNumber, false);
						}
					}
					
					if(document.all) {
						oEl.attachEvent("onkeyup", function() {
							if(String(window.event.srcElement.getAttribute('unique')) == "yes") {
								CheckUniqueField(window.event.srcElement);
							}
							
							CheckForm(window.event.srcElement.form);
						}, false);
						
						oEl.attachEvent("onblur", function() {
							FilterSpace(window.event.srcElement);
							
							if(String(window.event.srcElement.getAttribute('unique')) == "yes") {
								CheckUniqueField(window.event.srcElement);
							}
							
							CheckForm(window.event.srcElement.form);
						}, false);
					} else {
						oEl.addEventListener("keyup", function() {
							if(String(this.getAttribute('unique')) == "yes") {
								CheckUniqueField(this);
							}
							
							CheckForm(this.form);
						}, false);
						
						oEl.addEventListener("blur", function() {
							FilterSpace(this);
							
							if(String(this.getAttribute('unique')) == "yes") {
								CheckUniqueField(this);
							}
							
							CheckForm(this.form);
						}, false);
					}
				}
				
				if(vRestrict != null) {
					switch(String(vRestrict)) {
						case "integer":
								oEl.onkeypress = RestrictInteger;
						break;
						case "float":
								oEl.onkeypress = RestrictFloat;
						break;
					}
				}
			break;
			case "select-one":
				if(vRequire != null) {
					if(document.all) {
						oEl.attachEvent("onchange", function() {
							CheckForm(window.event.srcElement.form);
						});
					} else {
						oEl.addEventListener("change", function() {
							CheckForm(this.form);
						}, false);
					}
				}
			break;
			case "checkbox":
				if(vRequire != null) {
					if(document.all) {
						oEl.attachEvent("onclick", function() {
							CheckForm(window.event.srcElement.form);
						});
					} else {
						oEl.addEventListener("click", function() {
							CheckForm(this.form);
						}, false);
					}
				}
			break;
			case "hidden":
				if(vRequire != null) {
					if(document.all) {
						oEl.attachEvent("onpropertychange", function() {
							CheckForm(window.event.srcElement.form);
						});
					} else {
						oEl.addEventListener("propertychange", function() {
							CheckForm(this.form);
						}, false);
					}
				}
			break;
		}
	}
	
	if(vPreCheck == "precheck") {
		CheckForm(oForm);
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenrzi a mezket, s aszerint lltja be a submit gombot
//------------------------------------------------------------------------------------------------------------------------------------------------------
function CheckForm(oForm) {
	if(!oForm) {
		var oForm = window.event.srcElement.form;
	}
	
	var oEls = oForm.elements;
	var vCC = oForm.getAttribute("cc");
	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(vRequire != null) {
			switch(oEl.type) {
				case "text":
				case "password":
				case "select-one":
					vOk = (CheckElement(oEl)) ? vOk : true;
				break;
				case "checkbox":
					vOk = (CheckCheckbox(oEl)) ? vOk : true;
				break;
				case "hidden":
					vOk = (CheckHidden(oEl)) ? vOk : true;
				break;
			}
		}
	}
	
	if(oForm.elements['sBtn']) {
		var Submit = oForm.elements['sBtn'];
	} else if(document.getElementById(oForm.name + "_sBtn")) {
		var Submit = document.getElementById(oForm.name + "_sBtn");
	}
	
	if(oForm.disabled != true) {
		if(vCC == "yes") {
			vOk = checkCard(oForm) ? vOk : true;			
		}
		
		Submit.disabled = vOk;
		
		if(document.getElementById(oForm.name + "_standard_error_msg")) {
			if(vOk) {
				document.getElementById(oForm.name + "_standard_error_msg").style.display = "inline";
			} else {
				document.getElementById(oForm.name + "_standard_error_msg").style.display = "none";
			}
		}
	} else {
		Submit.disabled = true;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenriz egy mezt
//------------------------------------------------------------------------------------------------------------------------------------------------------
function CheckElement(oEl) {
	var vOk = false;
	
	if(!oEl) {
		var oEl = window.event.srcElement;
	}
	
	var vState = parseInt(oEl.form.getAttribute("state"));
	var vRequire = parseInt(oEl.getAttribute("require"));
	var vValid = String(oEl.getAttribute("valid"));
	var vUnique = String(oEl.getAttribute("unique"));
	var vRestrict = String(oEl.getAttribute("restrict"));
	var vAvaible = String(oEl.getAttribute("avaible"));
	var vOkClassName = oEl.className.replace(/\_w$/, "");
	var vErrorClassName = oEl.className.replace(/\_w$/, "") + "_w";
	
	switch(String(vValid)) {
		case "username":
			if(vAvaible == vUnique && oEl.value.length >= vRequire && ValidUsername(oEl.value)) {
				oEl.className = vOkClassName;
				vOk = true;

				if(!document.getElementById(oEl.form.name + "_error") && vState) {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0) ? vErrorClassName : vOkClassName;
				
				if(oEl.value.length > 0 && vState) {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && vState) {
					SetState(oEl, "required");
				}
			}
		break;
		case "email":
			if(vAvaible == vUnique && (ValidEmail(oEl.value) || oEl.value.length == 0) && oEl.value.length >= vRequire) {
				oEl.className = vOkClassName;
				vOk = true;

				if(vState) {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0) ? vErrorClassName : vOkClassName;
				
				if(vAvaible == "no" && vUnique == "yes" && ValidEmail(oEl.value) && oEl.value.length > 0 && vState) {
					SetState(oEl, "taken");
				} else if(oEl.value.length > 0 && vState) {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && vState) {
					SetState(oEl, "required");
				}
			}
		break;
		case "password":
			if(oEl.value.length >= vRequire && ValidPassword(oEl.value)) {
				oEl.className = vOkClassName;
				vOk = true;
				
				if(vState) {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0) ? vErrorClassName : vOkClassName;
				
				if(oEl.value.length > 0 && vState) {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && vState) {
					SetState(oEl, "required");
				}
			}
		break;
		case "re-password":
			if(oEl.value == oEl.form.elements['password'].value) {
				oEl.className = vOkClassName;
				vOk = true;
				
				if(vState) {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0) ? vErrorClassName : vOkClassName;
				
				if(oEl.value.length > 0 && vState) {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && vState) {
					SetState(oEl, "required");
				}
			}
		break;
		case "date":
			if(oEl.value.length >= vRequire && ValidDate(oEl.value)) {
				oEl.className = vOkClassName;
				vOk = true;
				
				if(vState) {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0) ? vErrorClassName : vOkClassName;
				
				if(oEl.value.length > 0 && vState) {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && vState) {
					SetState(oEl, "required");
				}
			}
		break;
		case "pdate":
			if(oEl.value.length >= vRequire && ValidPastDate(oEl.value) || oEl.disabled) {
				oEl.className = vOkClassName;
				vOk = true;
				
				if(vState) {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0) ? vErrorClassName : vOkClassName;
				
				if(oEl.value.length > 0 && vState) {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && vState) {
					SetState(oEl, "required");
				}
			}
		break;
		case "fdate":
			if(oEl.value.length >= vRequire && ValidFutureDate(oEl.value) || oEl.disabled) {
				oEl.className = vOkClassName;
				vOk = true;
				
				if(vState) {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0) ? vErrorClassName : vOkClassName;
				
				if(oEl.value.length > 0 && vState) {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && vState) {
					SetState(oEl, "required");
				}
			}
		break;
		default:
			if(vAvaible == vUnique && oEl.value.length >= vRequire) {
				oEl.className = vOkClassName;
				vOk = true;
				
				if(vState) {
					SetState(oEl, "ok");
				}
			} else {
				oEl.className = (oEl.value.length > 0) ? vErrorClassName : vOkClassName;
				
				if(oEl.value.length > 0 && vState) {
					SetState(oEl, "error");
				} else if(oEl.value.length == 0 && vState) {
					SetState(oEl, "required");
				}
			}
		break;
	}
	
	switch(vRestrict) {
		case "integer":
			FilterInteger(oEl);
		break;
		case "float":
			FilterFloat(oEl);
		break;
	}
	
	return vOk;
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőrzi, hogy a checbox be van-e pipálva
//------------------------------------------------------------------------------------------------------------------------------------------------------
function CheckCheckbox(oEl) {
	var vOk = false;

	var vState = oEl.form.getAttribute("state");
	var vRequire = oEl.getAttribute("require");
	
	switch(String(vRequire)) {
		case "yes":
			if(oEl.checked == true) {
				vOk = true;
				
				if(vState) {
					SetState(oEl, "ok");
				}
			} else {
				if(vState) {
					SetState(oEl, "required");
				}
			}
		break;
	}
	
	return vOk;
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőrzi a rejtett beviteli mezőt
//------------------------------------------------------------------------------------------------------------------------------------------------------
function CheckHidden(oEl) {
	var vOk = false;

	var vState = oEl.form.getAttribute("state");
	var vRequire = oEl.getAttribute("require");

	if(oEl.value.length >= parseInt(vRequire)) {
		vOk = true;
		
		if(vState) {
			SetState(oEl, "ok");
		}
	} else {
		if(oEl.value.length > 0 && vState) {
			SetState(oEl, "error");
		} else if(oEl.value.length == 0 && vState) {
			SetState(oEl, "required");
		}
	}
	
	return vOk;
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenrzi a lettt 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 != 9 && oEvt.keyCode != 13 && 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 != 9 && oEvt.keyCode != 13 && oEvt.keyCode != 8 && oEvt.keyCode != 46 && oEvt.keyCode != 37 && oEvt.keyCode != 39) {
				return false;
			}
		break;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Kiszri egy mez rtkbl a 'space'-eket
//------------------------------------------------------------------------------------------------------------------------------------------------------
function FilterSpace(oObj) {
	oObj.value = oObj.value.replace(/^\s+|\s+$/g, "");
	oObj.value = oObj.value.replace(/[\s]{2,}/g, " ");
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Kiszri egy mez rtkbl 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, "");
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenrzi, hogy az tadott string megfelel-e egy felhasználónévnek
//------------------------------------------------------------------------------------------------------------------------------------------------------
function ValidUsername(vUsername) {
	if(vUsername == vUsername.replace(/([^0-9a-zA-Z\_\[\]\s\-]|[\t\n])/g, "")) {
		return true;
	} else {
		return false;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenrzi, 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, "") && (vPassword.length >= 6 || vPassword.length == 0)) {
		return true;
	} else {
		return false;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőrzi, hogy az átadott string megfelel-e egy dátumnak
//------------------------------------------------------------------------------------------------------------------------------------------------------
function ValidDate(vDate) {
	var y = vDate.substr(0,4);
	var m = vDate.substr(4,2);
	var d = vDate.substr(6,2);
	
	var sDate = new Date(y + "/" + m + "/" + d);
	var mDate = new Date("1960/01/01");
	
	if(sDate >= mDate && sDate.getFullYear() == y && sDate.getMonth() == m-1 && sDate.getDate() == d) {
		return true;
	} else {
		return false;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőrzi, hogy az átadott string megfelel-e egy múltbeli dátumnak
//------------------------------------------------------------------------------------------------------------------------------------------------------
function ValidPastDate(vDate) {
	var y = vDate.substr(0,4);
	var m = vDate.substr(4,2);
	var d = vDate.substr(6,2);
	
	var sDate = new Date(y + "/" + m + "/" + d);
	var cDate = new Date();
	var mDate = new Date("1900/01/01");
	
	cDate.setTime((parseInt(cDate / 1000 / 3600 / 24) + cDate.getTimezoneOffset() / 60 / 24) * 1000 * 3600 * 24);
	
	if(sDate >= mDate && sDate <= cDate && sDate.getFullYear() == y && sDate.getMonth() == m-1 && sDate.getDate() == d) {
		return true;
	} else {
		return false;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Ellenőrzi, hogy az átadott string megfelel-e egy jövőbeni dátumnak
//------------------------------------------------------------------------------------------------------------------------------------------------------
function ValidFutureDate(vDate) {
	var y = vDate.substr(0,4);
	var m = vDate.substr(4,2);
	var d = vDate.substr(6,2);
	
	var sDate = new Date(y + "/" + m + "/" + d);
	var cDate = new Date();
	
	cDate.setTime((parseInt(cDate / 1000 / 3600 / 24) + cDate.getTimezoneOffset() / 60 / 24) * 1000 * 3600 * 24);
	
	if(sDate >= cDate && sDate.getFullYear() == y && sDate.getMonth() == m-1 && sDate.getDate() == d) {
		return true;
	} else {
		return false;
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Cserlgeti a kis llapotjelz ikonokat
//------------------------------------------------------------------------------------------------------------------------------------------------------
function SetState(oObj, vState) {
	if(document.getElementById(oObj.id + "_state_required")) {
		document.getElementById(oObj.id + "_state_required").style.display = "none";
	}
	
	if(document.getElementById(oObj.id + "_state_taken")) {
		document.getElementById(oObj.id + "_state_taken").style.display = "none";
	}
	
	if(document.getElementById(oObj.id + "_state_error")) {
		document.getElementById(oObj.id + "_state_error").style.display = "none";
	}
	
	if(document.getElementById(oObj.id + "_state_ok")) {
		document.getElementById(oObj.id + "_state_ok").style.display = "none";
	}

	if(document.getElementById(oObj.id + "_state_" + vState)) {
		document.getElementById(oObj.id + "_state_" + vState).style.display = "";
	}
}

//------------------------------------------------------------------------------------------------------------------------------------------------------
// Jelszót generál az átadott mező id-be
//------------------------------------------------------------------------------------------------------------------------------------------------------
function GeneratePassword(id) {
	var vLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	var vPass = "";
	
	for(var i = 0; i < 10; i++) {
		vPass += vLetters.substr(parseInt(Math.random() * vLetters.length), 1);
	}
	
	document.getElementById(id).value = vPass;
}