	
	/*
		assoc_array = new Object();	//nebo new Array();
		//pro text/texarea:
		assoc_array['element name'] = new Array('display text', 'empty/number/name/email/url/date(dd.mm.yyyy)/text');
		//pro radiobuttony:
		assoc_array['element name'] = new Array('display text', 'pridruzeny radio 1', 'pridruzeny radio 2', 'atd...');
		
		//do formu pak staci dat: onsubmit="return validate(this, assoc_array);"
	*/
	
	function validate(obj, elms) {
		//cykli vsemy elementy daneho formu a hleda schodu kdyz najde vrati poradi daneho elementu
		for (i = 0; i < obj.elements.length; i++) {
			
			//pokud najde nazev pole v arrayi tak dal zjisti o jaky typ se jedna text/textarea nebo radio
			if (elms[obj.elements[i].name] != null) {
				if (obj.elements[i].type == "text" || obj.elements[i].type == "textarea" || obj.elements[i].type == "select-one") {
					
					//podle definice vyse urci co se ma provest za kontrolu
					switch (elms[obj.elements[i].name][1]) {
						case "empty" :
							if (!check_empty(obj.elements[i])) {
								alert(elms[obj.elements[i].name][0]);
								obj.elements[i].focus();
								return false;
							}
							break;
						case "number" :
							if (!check_number(obj.elements[i])) {
								alert(elms[obj.elements[i].name][0]);
								obj.elements[i].focus();
								return false;
							}
							break;
						case "name" :
							if (!check_name(obj.elements[i])) {
								alert(elms[obj.elements[i].name][0]);
								obj.elements[i].focus();
								return false;
							}
							break;
						case "email" :
							if (!check_email(obj.elements[i])) {
								alert(elms[obj.elements[i].name][0]);
								obj.elements[i].focus();
								return false;
							}
							break;
						case "url" :
							if (!check_url(obj.elements[i])) {
								alert(elms[obj.elements[i].name][0]);
								obj.elements[i].focus();
								return false;
							}
							break;
						case "psc" :
							if (!check_psc(obj.elements[i])) {
								alert(elms[obj.elements[i].name][0]);
								obj.elements[i].focus();
								return false;
							}
							break;
						case "phone" :
							if (!check_phone(obj.elements[i])) {
								alert(elms[obj.elements[i].name][0]);
								obj.elements[i].focus();
								return false;
							}
							break;
						case "date" :
							if (!check_czdate(obj.elements[i])) {
								alert(elms[obj.elements[i].name][0]);
								obj.elements[i].focus();
								return false;
							}
							break;
						case "text" :
							if (!check_text(obj.elements[i])) {
								alert(elms[obj.elements[i].name][0]);
								obj.elements[i].focus();
								return false;
							}
							break;
					}
	
				}
				if (obj.elements[i].type == "radio") {
				
					var radios_checked = false;
					
					//checkne prvni hlavni radio
					for (j = 0; j < obj.elements.length; j++) {
						if (obj.elements[i].name == obj.elements[j].name) {
							if (obj.elements[j].checked == true) { radios_checked = true; }
						}
					}
					
					//pokud  jsou definovane pridruzene radio buttony tak zkontroluje i je
					for (ar = 1; ar < elms[obj.elements[i].name].length; ar++) {
						for (j = 0; j < obj.elements.length; j++) {
							if (elms[obj.elements[i].name][ar] == obj.elements[j].name) {
								if (obj.elements[j].checked == true) { radios_checked = true; }
							}
						}
					}
					
					if (!radios_checked) {
						alert(elms[obj.elements[i].name][0]);
						obj.elements[i].focus();
						return false;
					}
				}
				
			}
		}
		return true;
	}
	
	//funkce checkne jestli string neni prazdny
	function check_empty(EntityName) {
		var str = new String(EntityName.value);
		
		if (str == "") {
			return false;
		}
		return true;
	}
	
	//funkce checkne jestli je to cislo
	function check_number(EntityName) {
		var ValidChars = "0123456789.";
		var str = new String(EntityName.value);
		var Char;
		
		if (str.length == 0) { return false; }
		
		for (ch = 0; ch < str.length; ch++) { 
			Char = str.charAt(ch); 
			if (ValidChars.indexOf(Char) == -1) {
				return false;
			}
		}
		return true;
	}
	
	//funkce checkne jestli string ma vic jak 2 znaky
	function check_name(EntityName) {
		var str = new String(EntityName.value);
		
		if (str.length < 2) {
			EntityName.focus();
			return false;
		}
		return true;
	}
	
	//funkce checkne mail (aaaaa@bbbbb.cccccc.xx)
	function check_email(EntityName) {
		var str = new String(EntityName.value);
		var filter = /^([a-zA-Z0-9_\-]+(\.))+{0,1}@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,8}$/i;
		
		if (filter.test(str)) {
			testresults = true;
		} else {
			EntityName.focus();
			testresults = false;
		}
		return (testresults);
	}
	
	//funkce checkne URL (www.xxxxxx.xx)
	function check_url(EntityName) {
		var str = new String(EntityName.value);
		var filter = /^(http:\/\/){0,1}([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,8}$/i;
	
		if (filter.test(str)) {
			testresults = true;
		} else {
			EntityName.focus();
			testresults = false;
		}
		return (testresults);
	}
	
	//funkce checkne psc (xxx xx nebo xxxxx)
	function check_psc(EntityName) {
		var str = new String(EntityName.value);
		
		var filter = /^[0-9]{3}[ ]{0,1}[0-9]{2}$/;
		
		if (filter.test(str)) {
			testresults = true;
		} else {
			EntityName.focus();
			testresults = false;
		}
		return (testresults);
	}
	
	//funkce checkne phone (+12345678901123..)
	function check_phone(EntityName) {
		var str = new String(EntityName.value);
		
		var filter = /^[\+]{0,1}[0-9 \.]+$/;
		
		if (filter.test(str)) {
			testresults = true;
		} else {
			EntityName.focus();
			testresults = false;
		}
		return (testresults);
	}
	
	//funkce checkne jestli datum je v cz formatu
	function check_czdate(EntityName) {
		var str = new String(EntityName.value);
		var filter = /^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4,4}$/;
	
		if (filter.test(str)) {
			var date_array = str.split(".");
			if (date_array[0] > 31 || date_array[0] == 0) { 
				//alert ("Špatný formát dnu!");
				return false;
			} else if (date_array[1] > 12 || date_array[1] == 0) { 
				//alert ("Špatný formát měsíce!");
				return false;
			} else if (date_array[2] > 3000 || date_array[2] == 0) { 
				//alert ("Špatný formát roku!");
				return false;
			}
			testresults = true;
		} else {
			//alert ("Špatný formát data!");
			EntityName.focus();
			testresults = false;
		}
		return (testresults);
	}
	
	//funkce checkne text (slova nesmeji byt delsi nez 30 znaku)
	function check_text(EntityName) {
		var str = new String(EntityName.value);
		
		var filter = /[a-zA-Z0-9]{30,}/;
		
		if (!filter.test(str)) {
			testresults = true;
		} else {
			EntityName.focus();
			testresults = false;
		}
		return (testresults);
	}
	
	
	//dumpne vsechny properties daneho objectu
	function dump_props(obj, obj_name) {
		var result = "";
		for (var i in obj) {
			result += obj_name + "." + i + " = " + obj[i] + "<BR>"
		}
		result += "<HR>";
		return result;
	}
	
	//pocita znaky v elementu formu
	function countit(obj){
		if (obj.value.length > 255) {
			obj.value = obj.value.substring(0,255);
			return false;
		}
		
		document.getElementById('chars').innerHTML = 255 - obj.value.length;
	}
	
	//resetne form
	function ResetForm() {
		document.subform.reset();
		countit(document.subform.data);
	}
	
