Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};

function isArray(obj) {
	if (obj.constructor.toString().indexOf("Array") == -1) return false;
	else return true;
}

function libform3_ajaxPostForm(form) {
	if(!form || !form.elements) return false;
	
	var fe = form.elements;
	var fields = new Array();
	for(var i=0;i<fe.length;i++) {
		var fn = fe[i].name;
		var fv = null;
		switch (fe[i].type) {
			case "text":
			case "password":
			case "textarea":
			case "hidden":
			case "select-one":
				fv=fe[i].value;
				break;
			case "radio":
			case "checkbox":
				if (fe[i].checked) fv=fe[i].value;
				break;
			case "select-multiple":
				fv = new Array();
				for (a=0;a<fe[i].options.length;a++) {
					if (fe[i].options[a].selected) {
						fv.push(fe[i].options[a].value);
						vpos++;
					}
				}
				break;
			default: fv=fe[i].value;
		}
		if(isArray(fv)) {
			for(var v=0;v<fv.length;v++) {
				fields.push({"n":fn,"v":fv[v]});
			}
		} else fields.push({"n":fn,"v":fv});
	}
	var post_data='formdata='+Base64.encode(JSON.stringify(fields));
	var url='ajax_index.php'+window.location.search;
	ajax_post(url,post_data);
	return false;
}

function libform3_ajaxPostResult(result,formname) {
		var form = document.forms[formname];
		if(!form) return;
		
		for(var f in result['data']) {
			if(form[f])	form[f].className = "inp1";
		}
		
		if(result['error']) {
			DDSDialog.setError(result['error']);
			if(result['error_fields']) {
				for(var f in result['error_fields']) {
					if(form[f]) form[f].className = "inperr";
				}
			}
		}
		if(result['processed']==1) {
			if(result['message']) {
				DDSDialog.setContent(result['message']);
				DDSDialog.setError("");
			} else {
				DDSDialog.hide();
			}
		}
		return false;
}

function libform3_root() {
	//SYS felviteli mezők
	this.fields_SYS=new Array;
	this.fields_USER=new Array;

	//Egy objektum tomb-e
	this.isArray = function(val) {
		if (typeof(val)!="object") return(false);
		if (typeof(val.length)=="undefined") return(false);
		if (typeof(val[0])=="undefined") return(false);
		return(true);
	}

	//Query string search részét parseolja
	this.parse_qs = function() {
		var q=window.location.search;
		if (q.length>1) q=q.substring(1,q.length);
		else q=null;
		
		this.qs=new Array;
		if (q)
			for(var i=0;i<q.split("&").length;i++) {
				blokk=q.split("&")[i];
				var s1=blokk.substring(0,blokk.indexOf("="));
				var s2=blokk.substring(blokk.indexOf("=")+1);
				this.qs[s1]=s2;
			}
	}

	this.ajax_loadLanguage = function(fname,lang) {
		var http = createRequestObject();
		var url="ajax_index.php?func="+this.qs['func']+"&module="+this.qs['module']+"&form_language="+lang;
		if (this.qs['func']=="mod") url+="&id="+this.qs['id'];
		
		http.open('get', url);
		http.onreadystatechange=function() {
			if(http.readyState == 4) {
				var response = http.responseText;
				var langdata=eval("("+response+")");
				libform3.forms[fname]['data'][lang]=langdata.data;
				libform3.setAll(fname);
			}
		}
		http.send(null);
	}
	
	//Nyelv vátlás
	this.setLanguage = function(fname,lang) {
		//Aktuális nyelv lekérése
		currlang=this.forms[fname].lang;
		deflang=this.forms[fname].def_lang;
		//Ha nincs nyelv váltás
		if (lang==currlang) return;
		//Adatok lekérése
		this.getAll(fname);
	
		//Ha a nyelv nem az alapnyelv, akkor mezők elrejtése, egyébként megjelenítése
		if (lang==deflang) this.ro_not_ml(fname, 0);
		else this.ro_not_ml(fname, 1);

		//Aktuális nyelv beállítása
		this.forms[fname].lang=lang;

		//Nyelvi adatok AJAX lekérése, ha még nincs letöltve
		if (!this.forms[fname]['data'][lang]) this.ajax_loadLanguage(fname, lang);
		else this.setAll(fname);
	}

	this.create_structure = function() {
		if (typeof(this.forms)!="undefined") return;
		this.forms=new Array;
		this.parse_qs();
	}

	this.register = function(formname,json) {
		this.create_structure();
		this.forms[formname]=new Array();
		this.forms[formname]=eval("("+json+")");
		//this.getAll(formname);
	}

	this.getAll = function(formname) {
		for (f in this.forms[formname].fields) {
			flag=this.forms[formname].fields[f].f;
			if (flag<2) continue;
			//Még nem kezeljük a user objectet
			uo=this.forms[formname].fields[f].uo;
			if (uo) continue;
			//Az adott mező több nyelvű?
			ml=this.forms[formname].fields[f].ml;
			//Ha a mező nem több nyelvű és ez nem az alapnyelv, akkor nem kell lekérdezni
			if ((!ml) && (this.forms[formname].lang!=this.forms[formname].def_lang)) continue;
			val=this.getValue(formname,f);
			if (val===null) continue;
			this.forms[formname].data[this.forms[formname].lang][f]=val;
		}
	}

	this.setAll = function(formname) {
		var val=new Array;
		for (f in this.forms[formname].fields) {
			flag=this.forms[formname].fields[f].f;
			if (flag<2) continue;
			//Még nem kezeljük a user objectet
			uo=this.forms[formname].fields[f].uo;
			if (uo) continue;
			//Az adott mező több nyelvű?
			ml=this.forms[formname].fields[f].ml;
			//Ha a mező nem több nyelvű és ez nem az alapnyelv, akkor nem kell lekérdezni
			if ((!ml) && (this.forms[formname].lang!=this.forms[formname].def_lang)) continue;
			val[0]=this.forms[formname].data[this.forms[formname].lang][f];
			this.setValue(formname,f,val);
		}
	}

	this.getValue = function(formname,inpfield) {
		t=this.forms[formname].fields[inpfield].t;
		if (this.fields_SYS[t]) return(this.fields_SYS[t].get(formname,inpfield));
		//alert("A mezőtípushoz nem tartozik JS objektum: "+inpfield+"("+t+")");
		return(null);
	}

	this.setValue = function(formname,inpfield,val) {
		t=this.forms[formname].fields[inpfield].t;
		if (this.fields_SYS[t]) return(this.fields_SYS[t].set(formname,inpfield,val));
		//alert("A mezőtípushoz nem tartozik JS objektum: "+inpfield);
	}

	this.setRO = function(formname,inpfield,ro) {
		t=this.forms[formname].fields[inpfield].t;
		if (this.fields_SYS[t]) {
			if (ro=1) return(this.fields_SYS[t].disable(formname,inpfield));
			else return(this.fields_SYS[t].enable(formname,inpfield));
		}
		return;
		//alert("A mezőtípushoz nem tartozik JS objektum: "+inpfield);
	}

	this.ro_not_ml = function(formname,ro) {
		for (f in this.forms[formname].fields) {
			ml=this.forms[formname].fields[f].ml;
			if (!ml) this.setRO(formname,f,ro);
		}
	}

	this.HTMLsetRO = function(formname,inpfield,ro) {
		//Ha nincs ilyen form
		if (typeof(document.forms[formname])=="undefined") return;

		field_o=document.forms[formname][inpfield];
		//Ha nincs ilyen mezo
		if (typeof(field_o)=="undefined") return;
	
		var apos = 0;

		while (1) {
			if ((this.isArray(field_o)) && (typeof(field_o.type)=="undefined")) field=field_o[apos];
			else field=field_o;
			if (typeof(field)=="undefined") return;
			if (ro==1) {
				field.disabled=true;
				if (field.className.indexOf("inp1i")==-1) field.className=field.className+" inp1i";
			} else {
				field.disabled=false;
				field.className=field.className.replace(" inp1i","");
			}
			if (field!=field_o) apos++;
			else return;
		}
	}

	//Egy form elem ertekenek lekerese
	this.HTMLgetValue = function(formname,inpfield) {
		//Ha nincs ilyen form
		if (typeof(document.forms[formname])=="undefined") return;

		field_o=document.forms[formname][inpfield];
		//Ha nincs ilyen mezo
		if (typeof(field_o)=="undefined") return;
	
		var val = Array();
		var apos = 0;
		var vpos=0;

		while (1) {
			if ((this.isArray(field_o)) && (typeof(field_o.type)=="undefined")) field=field_o[apos];
			else field=field_o;
			if (typeof(field)=="undefined") return(val);

			switch (field.type) {
				case "text":
				case "password":
				case "textarea":
				case "hidden":
				case "select-one":
					val[vpos]=field.value;
					vpos++;
					break;
				case "radio":
				case "checkbox":
					if (!field.checked) break;
					val[vpos]=field.value;
					vpos++;
					break;
				case "select-multiple":
					for (a=0;a<field.options.length;a++) {
						if (field.options[a].selected) {
							val[vpos]=field.options[a].value;
							vpos++;
						}
					}
					break;
				default:
			}
			if (field!=field_o) apos++;
			else return(val);
		}
	}

	//Egy form elem ertekenek lekerese
	this.HTMLsetValue = function(formname,inpfield,val) {
		//Ha nincs ilyen form
		if (typeof(document.forms[formname])=="undefined") return;

		field_o=document.forms[formname][inpfield];
		//Ha nincs ilyen mezo
		if (typeof(field_o)=="undefined") return;

		//Megnezzuk, hogy tomb-e
		if (typeof(val)=="undefined") return;
		if (typeof(val[0])=="undefined") return;
	
		var apos = 0;
		var vpos=0;

		while (1) {
			if ((this.isArray(field_o)) && (typeof(field_o.type)=="undefined")) field=field_o[apos];
			else field=field_o;
			if (typeof(field)=="undefined") return(val);

			switch (field.type) {
				case "text":
				case "password":
				case "textarea":
				case "hidden":
					field.value=val[vpos];
					vpos++;
					break;
				case "select-one":
					for (s=0;s<field.options.length;s++) {
						if (field.options[s].value==val[vpos]) {
							field.options[s].selected=true;
							vpos++;
							break;
						}
					}
					break;
				case "radio":
				case "checkbox":
					if (field.value==val[vpos]) {
						field.checked=true;
						vpos++;
					} else
						field.checked=false;
					break;
				case "select-multiple":
					for (a=0;a<field.options.length;a++) {
						if (val.inArray(field.options[a].value)) field.options[a].selected=true;
						else field.options[a].selected=false;
					}
					break;
				default:
			}
			if (field!=field_o) apos++;
			else return(val);
		}
	}
}

var libform3 = new libform3_root();

//Egy felviteli mező skeleton
function libform3_field_root(type_char,user_type) {
	this.enable = function(formname,inpfield) {
		libform3.HTMLsetRO(formname,inpfield,0);
		return;
	}

	this.disable = function(formname,inpfield) {
		libform3.HTMLsetRO(formname,inpfield,1);
		return;
	}
	
	this.get = function(formname,inpfield) {
		val=libform3.HTMLgetValue(formname, inpfield);
		v=val[0];
		return(v);
	}
		
	this.set = function(formname,inpfield,value) {
		libform3.HTMLsetValue(formname, inpfield, value);
	}
	
	this._constructor = function(type_char,user_type) {
		if (user_type) libform3.fields_USER[user_type]=this;
		else libform3.fields_SYS[type_char]=this;
	}
	
	this._constructor(type_char,user_type)
	return;
	
}

var libform3_field_I = new libform3_field_root("I","");
var libform3_field_S = new libform3_field_root("S","");
var libform3_field_T = new libform3_field_root("T","");
var libform3_field_C = new libform3_field_root("C","");
var libform3_field_tree = new libform3_field_root("%","");
var libform3_field_C = new libform3_field_root("D","");

//HTML típusú felviteli mező
var libform3_field_H = new libform3_field_root("H","");

libform3_field_H.enable=function(formname,inpfield) {
	alert(inpfield);
	alert("enable");
}

libform3_field_H.disable=function(formname,inpfield) {
	alert(inpfield);
	alert("disable");
}

libform3_field_H.get=function(formname,inpfield) {
	return(xinha_editors[inpfield].getHTML());
}

libform3_field_H.set=function(formname,inpfield,value) {
	return(xinha_editors[inpfield].setHTML(value));
}

//N:M típusú felviteli mező
var libform3_field_X = new libform3_field_root("X","");
libform3_field_X.enable=function(formname,inpfield) {
	inpf=inpfield+"[]";
	libform3.HTMLsetRO(formname,inpf,0);
}

libform3_field_X.disable=function(formname,inpfield) {
	inpf=inpfield+"[]";
	libform3.HTMLsetRO(formname,inpf,1);
}

libform3_field_X.get=function(formname,inpfield) {
	inpf=inpfield+"[]";
	val=libform3.HTMLgetValue(formname, inpf);
	return(val);
	//return(xinha_editors[inpfield].getHTML());
}

libform3_field_X.set=function(formname,inpfield,value) {
	inpf=inpfield+"[]";
	val=libform3.HTMLsetValue(formname, inpf,value);
	//return(xinha_editors[inpfield].setHTML(value));
}
//libform3.fields_SYS['H'].enable("valami");