/*	file:	form.js
	LJEX Formulare. © 2008-2009 by timo schweda.

	Description:
	JavaScript/PHP 5 Framework zum Erstellen von HTML Formularen mit Validierungsmöglichkeiten.

	Provides:
	<ljex.Form>, <ljex.Calendar>

	Requires:
	<json2.js>, <core.js>

*/
ljex.forms = [];
/*	class: ljex.Form
	HTML Formulare mit Validierungsmöglichkeiten.
*/
// {{{1 Dokumentation
/*	properties: Konfigurationsoptionen
	id (int) -	ID des Formularcontainers.
	url (string) - URL des PHP Skriptes, welches den Ajax-Request beim Submit erhält.
	width (int) - Breite des Formularcontainers in Pixel
	renderTo (string)  - ID des (div-) Containers, in welchen das Formular gerendert werden soll.
	style (string) - Zusätzliche Stylesheet Angaben für den Body des Formulars.
	footerStyle (string) - Zusätzliche Stylesheet - Angaben für den Footer des Formulars (den Button-Container).
	labelWidth (int) - Breite der Labels (in Pixel).
	items (hash) - JSON Array mit den Formularelementen (siehe unten).
	buttons (hash) - JSON Array mit den Buttons im Footer des Formulars (siehe auch unten).
*/
/*	properties: Items: Allgemein
	Allgemeingültige Konfigurationsoptionen, die allen HTML Formularfeldern zur Verfügung stehen.

	id (int) - ID des Elements (Pflichtangabe).
	xtype (string) - Typ des Formularelements, ebenfalls Pflichtangabe (verfügbare Typen siehe unten).
	width (int) - Breite des Formularelements
	labelWidth (int) - Individuelle Breite des Labels. Setzt sich gegen allgemeines labelWidth durch.
	label (string) - Label des Elements.
	help (string) - Hilfe in Form eines Tooltips bei mouseover.
	value - Wert des Elements. Datentyp natürl. abhängig vom HTML Formular Element.
*/
/*	properties: Items: textfield
	Einzeiliges Texteingabefeld.
	
	search (bool) - true = Suchfeld im WMC. Außerhalb WMC eher bedeutungslos ;-)
	allowBlank (bool) - true = kein Pflichtfeld, false = Pflichtfeld
	email (bool) - true = Eingabe muss eine valide Emailadresse sein (Format: example@example.com)
	password (bool) - true = Feld ist Passwort Eingabefeld. Die Eingabe erfolgt also verdeckt (Sternchen oder Punkte statt Buchstaben).
*/
/*	properties: Items: textarea
	Texteingabefeld. Wahlweise Standard HTML Textarea oder tinyMCE HTML Editor.

	allowBlank (bool) - true = kein Pflichtfeld, false = Pflichtfeld
	height (int) - Höhe der Textarea in Pixel.
	htmleditor (bool) - true = tinyMCE, false = Standard HTML TextArea
*/
/*  properties: Items: upload
	Spezielles Uploadfeld, das den Filemanager zum uploaden nutzt. Konfigurationsoptionen ansonsten wie bei textfield.

	upload (string) - Pfad zum Upload Verzeichnis.
*/
/*	properties: Items: dropdown
	DropDown-Feld, welches wahlweise per JSON Array, oder auch per Datenbankabfrage befüllt werden kann.
	Dabei schließen sich die Optionen (items+values) und (table+distinct+displayField+valueField+condition)
	gegenseitig aus.

	items (array) - JSON Array das die darzustellenden Einträge des Feldes enthält (Bsp: ["erster","zweiter", ...])
	values (array) - JSON Array, das die zu den Items passenden Werte beinhaltet (Bsp: [1,2,..])
	table (string) - Name der Tabelle aus der die Datensätze ausgelesen werden sollen.
	distinct (bool) - SQL Abfrage "distinct" machen, d.h. ohne evtl. doppelte Datensätze.
	displayField (string) - Tabellenspalte, deren Einträge die DropDown-Liste bilden (z.B. Bezeichnungen).
	valueField (string) - Tabellenspalte, deren Einträge die Werte der DropDown-Liste bilden (z.B. ID's).
	condition (string) - SQL Bedingung der zu generierenden Abfrage (also die WHERE Bedingung, aber ohne das Schlüsselwort WHERE).
						 Optional (oder auch exklusiv) ist auch noch eine ORDER BY Klausel dahinter erlaubt.
	handler (function) - Eventhandler. Zur Zeit wird nur das "change"-Event unterstützt.
	Bsp:
	(code)
		handler: {
			'change': function(){
				var serienId = $('produktkat').value;
				var produktDropDown = searchForm.getField('produkt');
				produktDropDown.table="hk_product_set, hk_product_set_serie";
				produktDropDown.condition="sz_serie_ident='"+serienId+"' and \
				ps_ident=sz_set_ident and lang='"+hk.lang+"' order by ps_bez";
				searchForm.reload(produktDropDown);
			}
		}
	(end)
*/
/*	properties: Items: datefield
	Eingabefeld mit primitivem Kalender um Datumsangaben im Format YYYY-MM-DD zu erfassen. Grundsätzlich Readonly.

	- (noch) keine zusätzlichen Optionen.
*/
// }}}1 END Dokumentation
/*  constructor: ljex.Form
	Initialisiert das Formularobjekt. Rendert nicht mehr automatisch.

	parameters:
	data (hash) - <Konfigurationsoptionen>
*/
ljex.Form = function(data){
	$assimilate.call(this, data);

	this.config = data;
	this.buttonsConfig=[];
	ljex.forms[this.id]=this;

	this.fldValues=[];
	this.domForm=null;
	this.stdUploadFields=[];
	this.flds2check=[];
}

/*	function: getField
	Liefert eine Referenz auf das Item-Objekt mit der angegebenen ID zurück.

	parameters:
	id (string) - ID des Items.
	items (object) - Nur zur internen Nutzung. Braucht nicht mit angegeben werden.
*/
ljex.Form.prototype.getField = function(id, items){ // {{{
	if(!items) var items=this.items;

	id=id.replace(/\-input/g,"");

	for(var i=0;i<items.length;i++){
		if(items[i].items && items[i].xtype!="dropdown"){
			this.getField(id, items[i].items);
		}
		if(items[i].id==id){
			if(items[i].xtype=='radio'){
				return items;
			}else{
				return items[i];
			}
		}
	}
} // }}}

/*	function: replaceField
	
	*Diese Funktion ist (noch) mit VORSICHT ZU GENIESSEN!*

	Ersetzt ein Formularelement (Item) durch ein anderes.

	parameters:
	id (string)		- id des zu ersetzenden Feldes
	newitem (json)	- neues Feld(objekt). Definition wie üblich als JSON-Array.
*/
ljex.Form.prototype.replaceField = function(id, newitem, items){
	if(!items) var items=this.items;

	var olditem = this.getField(id);
	olditem = newitem;

	this.config.items = this.items;
/*
	for(var i=0;i<items.length;i++){
		if(items[i].id==id){
			items[i]=newitem;
		}
		if(items[i].items){
			this.getField(id, items[i].items);
		}
	}*/
}


ljex.Form.prototype.reset = function(){
	$(this.id).reset();
	for(var i=0;i<this.items.length;i++){
		var itemId=this.items[i].id;
		var itemErr=$(itemId+'_err');
		if(itemErr!=undefined && itemErr !=null) itemErr.style.display='none';

		switch(this.items[i].xtype){
			case 'textfield':
				var stdClass='lx-form-input';
				break;
			case 'textarea':
				var stdClass='lx-form-input-textarea';
				break;
		}
		try{
			$(itemId).className=stdClass;
		}catch(e){
			// einfach nix tun...
		}
	}
}

ljex.Form.prototype.setValue = function(id,val){
	document.forms[this.id].elements[id].value=val;
	this.fldValues[id]=val;
}

ljex.Form.prototype.submit = function(id){
	if(this.stdUploadFields.length>0  ){
		var upl=this.stdUploadFields[0];

		if($(this.id+'-ifr') && $(upl.id).value!=""){
			//var uplPath= (inCMS)?"../htroot/"+upl.upload:"../../"+upl.upload;
			
			$(this.id+'-ifr').style.display="block";
			this.domForm.submit();

			if($(this.id+'-ifr') && $(this.id+'-ifr').style.display=="block"){
				$(this.id+'-ifr').src="ljex/upload_done.html"; //style.display="none";
				window.setTimeout("ljex.Form.closeUpload('"+this.id+"-ifr')",2000);
			}

		}else{
			this.doSubmit(id);
		}

	}else{
		this.doSubmit(id);
	}
}


ljex.Form.closeUpload = function(id){
	new ljex.FX({ id: id }).fadeOut();
}

ljex.Form.prototype.doSubmit = function(id){
	if(!this.url){
		this.url = '/lib/FormController.php5?command=save&id='+this.id;
	}

		new ljex.Ajax({
			url: this.url,
			method: 'POST',
			param: this.fldValues ,
			scope: this,
			callback: function(response){ 
				var scope = this.buttonsConfig[id].scope || this;
				this.buttonsConfig[id]['handler'].call(scope,response);
			}
		}).request();

}

ljex.Form.prototype.postSubmit = function(){
	this.callback.call(this);
}

ljex.Form.prototype.fileSizeError = function(){
	$error("Dateigröße > "+this.maxfilesize+" KB. Ihre Daten wurden nicht gespeichert.");
}

ljex.Form.prototype.stdSubmit = function(){
	var thisObj=this;
	var frm = thisObj.domForm; 
	thisObj.fldValues= new Array();

	try {
		tinyMCE.triggerSave();
	}catch(e){
	}
	// Formdaten auslesen
	for(var k=0;k<frm.elements.length;k++){
		if(frm.elements[k].type=='checkbox' )
			frm.elements[k].value=frm.elements[k].checked;

		if(frm.elements[k].type=='radio'){
			if(frm.elements[k].checked) 
				thisObj.fldValues[frm.elements[k].name] = frm.elements[k].value;
		}else{
				thisObj.fldValues[frm.elements[k].name] = frm.elements[k].value;
		}
	}
	
	return thisObj.validate();
}


ljex.Form.prototype.validate = function(){
	var isValid=true;
	for(var i=0;i<this.flds2check.length;i++){
		if(this.flds2check[i]==null) alert(JSON.stringify(this.flds2check));
		if(this.check.call(this.flds2check[i], this.flds2check[i].getAttribute("regex"), this)==false)
			var isValid=false;
	}
	
	if(!isValid){
		$error("Das Formular ist nicht vollständig ausgefüllt oder Sie haben ungültige Angaben gemacht / Please fill out the form completely and check for invalid input.");
	}
	
	if(this.preSubmit!=undefined){
		isValid=this.preSubmit.call(this);
	}
	return isValid;
}


ljex.Form.prototype.init = function(){
	var thisObj=this;
	this.domForm = $(this.id);

	if(this.buttons!=undefined && this.buttons){
	// Buttons initialisieren
	for(var i=0;i<this.buttons.length;i++){
		var el=$(this.buttons[i]['id']);
		this.buttonsConfig[this.buttons[i]['id']]=this.buttons[i];
		
		
		if(this.buttons[i]['submit']=='submit'){
			el.onclick = function(){
				thisObj.domForm.submit();
			} //
		}else if(this.buttons[i]['submit']=='ajax'){
			el.onclick = function(){
				var frm = thisObj.domForm; 
				thisObj.fldValues= new Array();

				if(!thisObj.validate()){
					return false;
				}

				try {
					tinyMCE.triggerSave();
				}catch(e){
				}
				// Formdaten auslesen
				for(var k=0;k<frm.elements.length;k++){
					if(frm.elements[k].type=='checkbox' )
						frm.elements[k].value=frm.elements[k].checked;

					if(frm.elements[k].type=='radio'){
						if(frm.elements[k].checked) 
							thisObj.fldValues[frm.elements[k].name] = frm.elements[k].value;
					}else{
							thisObj.fldValues[frm.elements[k].name] = frm.elements[k].value;
					}
				}
				
				var ok=true;
				// Evtl. Funktion vor submit ausführen
				if(thisObj.buttonsConfig[this.id]['preSubmit']){
					eval("var fkt="+thisObj.buttonsConfig[this.id]['preSubmit']);
					ok=fkt.call(thisObj);
				}

				if(ok) thisObj.submit(this.id);
				
			}
		}else{
			el.onclick = function(){
				thisObj.buttonsConfig[this.id]['handler'].call(thisObj, this);
			}
		}

		if(this.buttons[i]['enabled']!=undefined && !this.buttons[i]['enabled']){
			el.style.opacity='0.5';
			$(this.buttons[i]['id']+'_left').style.opacity='0.5';
			$(this.buttons[i]['id']+'_right').style.opacity='0.5';
			el.onclick = function(e){ return }
		}

		
	}
	}
	this.configItems(this.items);
}

ljex.Form.setItemValue = function(formid, xtype, id, value){
	if(!ljex.forms[formid]) return true;
	var frm=ljex.forms[formid];
	var fld = frm.getField.call(frm, id);
/*
	if(fld==undefined){
		$alert("Kleiner Bug! Hier wird das FormItem nicht gefunden. <br><br>Parameter:<br><br>formid="+formid+";xtype="+xtype+";id="+id+";value="+value);
	}
*/

	if(fld!=undefined){
		if(typeof(fld)=='object'){
			for(i=0;i<fld.length;i++){
				if(fld[i].value==value){
					fld[i].checked='checked';
				}else{
					if(fld[i].checked) fld[i].checked=undefined;
				}
			}
			return true;
		}
		
		if(fld.xtype=='checkbox'){
			if(fld.checked) 
				fld.checked=undefined;
			else
				fld.checked='checked';
		}else if(fld.xtype=='dropdown'){
	//		if(value=="") $(id).value=""; 
			fld.value=value;
		}else{
			fld.value=value;
		}
	}
	return true;
//	alert(JSON.stringify(fld));
}

ljex.Form.prototype.check = function(type, form, prechecked){
	var elErr=$(this.id+'_err');
	switch(type){
		case 'email':
			var regex =/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
			var success = regex.test(this.value);
			var msg = "Email Format: example@example.com";
			break;
		case 'allowBlank':
			var item=form.getField(this.id);
		/*	alert(this.id);
			alert(JSON.stringify(item));*/
			if(item && item.xtype=="dropdown"){
				valid=this.id.replace(/\-input/g,"");
				var entryFound=false;

				if(this.value){
					var entries = $(this.id+'_lst').childNodes;
					for(j=0;j<entries.length;j++){
						if(entries[j].className=='lx-form-dropdown-entry'){
							if(entries[j].firstChild!=null && entries[j].firstChild.data==this.value){
								entryFound=true;
								break;
							}
						}
					} 
				}

				//alert($(valid).value+";"+entryFound);

				if($(valid).value=="" || !entryFound){
					success=false;
					msg = "Eintrag aus Liste wählen / Choose from list";
				}else{
					success=true;
				}
			}else{
				var regex=/^\ *$/;
				var success = (this.value!="" && !regex.test(this.value))?true:false;
				var msg = "Pflichtfeld / input required";
				if(success && this.getAttribute("forceChoice")) return true;
			}
			break;
		case 'forceChoice': 
			var success = prechecked;
			if(!success){
				$(this.id+"_lst").style.display="none";
			}
			var msg = "Please choose entry from list";
			break;
	}
		
	switch(this.type){
		case 'textarea':
			baseClassName="lx-form-input-textarea";
			break;
		case 'text':
			baseClassName="lx-form-input";
			break;
		default:
			baseClassName="lx-form-input";
			break;
	}

	var item=form.getField(this.id);
	if(item && item.xtype=="datefield"){
		baseClassName="lx-form-input";
		var regex=/^\d\d\d\d\-\d\d\-\d\d$/;
		var success = (this.value!="" && regex.test(this.value))?true:false;

		if(success){
			if(parseInt(this.value.substr(5,2))>12 || parseInt(this.value.substr(8,2))>31) success=false;
		}

		var msg = "Format: YYYY-MM-DD";
	}
			

	if(!success){
		elErr.style.display='block';
		elErr.style.paddingLeft=form.labelWidth+5+'px';
		elErr.innerHTML=msg;
		this.className=baseClassName+"-error";
		this.onfocus = function(){
			this.className=baseClassName+"-error";
		}
		this.onblur = function(){
			this.className=baseClassName+"-error";
		}
		return false;
	}else{
		elErr.style.display='none';
		this.className=baseClassName+'-focus';
		this.onfocus= function(){
			this.className=baseClassName+"-focus";
		}
		this.onblur = function(){
			this.className=baseClassName+'-blur';
		}
		return true;
	}
}

ljex.Form.prototype.openEditor = function(item){
	var areaID=item.id+'-textarea';
	var thisItem=item; // closure

	var ajaxObj=new ljex.Ajax({
		url: '/lib/FormController.php5?command=fetchImageList&dir='+item.upload,
		method:'GET',
		async: true
	});

	var response=ajaxObj.request();

	var editorWin = new ljex.Window({
		id: item.id+'-editorWin',
		title: 'tinyMCE',
		center: true,
		html: '<textarea id="'+areaID+'" name="'+areaID+'" style="width:'+item.width+'px;height:'+item.height+'px">'+item.value+'</textarea><div id="'+item.id+'-editor-tb-ct"></div>'
	});

	editorWin.open(true);

	var ed = new tinymce.Editor(areaID,{
		theme: "advanced",
		plugins : "safari,spellchecker,pagebreak,style,layer,table,save,advhr,advlink,emotions,insertdatetime,searchreplace,print,contextmenu,paste,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras",
		theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
		theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
		theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
		theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,|,insertfile,insertimage",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
	//	theme_advanced_statusbar_location : "bottom",
	//	theme_advanced_resizing : true,
		convert_urls : true,

		external_image_list_url: "htroot/"+item.upload+"/imagelist.js"
	});

	ed.render();

	var tb = new ljex.ToolBar({
		id: item.id+'-editor-tb',
		renderTo: item.id+'-editor-tb-ct',
		border: false,
//		bgColor: 'transparent',
		items:[{
			id: item.id+'-editor-ok',
			text: 'Übernehmen',
			icon: '/ljex/images/ok.png',
			scope: this,
			onclick: function(){
				try {
					tinyMCE.triggerSave();
					$(thisItem.id).value=$(areaID).value;
					thisItem.value=$(areaID).value;
				}catch(e){
					$error("Konnte Änderungen nicht übernehmen, sry.");
				}
				editorWin.close();
			}
		},{
			id: item.id+'-editor-cancel',
			text: 'Abbrechen',
			icon: '/ljex/images/cancel.png',
			scope: this,
			onclick: function(){
				editorWin.close();
			}
		}]
	});

	tb.render();

	editorWin.show();
}

ljex.Form.prototype.configItems = function(items){
	var thisObj=this;

	for(var i=0;i<items.length;i++){
		for(key in items[i]){
			switch(key){
				case 'handler':
					for(handler in items[i]['handler']){
						// Kleiner Trick 17! change-handler für dropdown umbiegen auf 
						// click auf die liste
						if(items[i]['xtype']=='dropdown' && handler=='change'){
							var el=$(items[i]['id']+'-input_lst');
							if(ljex.isIE())
								el.attachEvent("onclick", items[i]['handler'][handler]);
							else
								el.addEventListener('click', items[i]['handler'][handler],false);
						}else{
							var el=$(items[i]['id']);
							if(ljex.isIE())
								el.attachEvent("on"+handler,items[i]['handler'][handler]);
							else
								el.addEventListener(handler, items[i]['handler'][handler],false);
						}
					}
					break;
				case 'xtype':
					switch(items[i]['xtype']){
						case 'dropdown':
							if(items[i]['forceChoice']) 
								$(items[i]['id']+'-input').setAttribute("forceChoice","true");
							else 
								$(items[i]['id']+'-input').setAttribute("forceChoice","false");
							
							$(items[i]['id']+'-input').onkeyup =
							function(){
								var entryFound=false;
								var entries = $(this.id+'_lst').childNodes;
								for(j=0;j<entries.length;j++){
									if(entries[j].className=='lx-form-dropdown-entry'){
										var regex=eval("/^"+this.value+"/i");
//										alert(regex);
//										alert(entries[j].firstChild.data.match(regex)); break;
										if(entries[j].firstChild && entries[j].firstChild.data.match(regex)){
											entryFound=true;
											entries[j].style.display='block';
										}else{
											entries[j].style.display='none';
										}
									}
								} 
								$(this.id+"_lst").style.display="block";
								if(this.getAttribute("forceChoice")=='true'){
									if(!thisObj.check.call(this, "forceChoice", thisObj, entryFound)){
										this.value=this.value.charAt(0);
										for(j=0;j<entries.length;j++){
											entries[j].style.display='block';
										}
									}
								}
							}
							break;
						case 'checkbox':
							$(items[i]['id']+'-div').onclick = function(){
								var mainID=this.getAttribute("mainID");
								var el=$(mainID+'-div');

								if(!thisObj.domForm[mainID].checked){
									thisObj.domForm[mainID].setAttribute("checked","true");
									this.style.backgroundPosition="0 -16";
								}else{
									thisObj.domForm[mainID].removeAttribute("checked");
									el.style.backgroundPosition="0 0";
								}

								if(thisObj.domForm[mainID].onclick) thisObj.domForm[mainID].onclick();
							}

							break;
						case 'radio':
							$(items[i]['id']+'-'+items[i]['value']+'-div').onclick = function(){
								var mainID=this.getAttribute("mainID");
								myIndex=0;
								for(var i=0;i<thisObj.domForm[mainID].length;i++){
									var el=$(mainID+'-'+thisObj.domForm[mainID][i].value+'-div');

									if(thisObj.domForm[mainID][i].value==this.getAttribute("value")){
										thisObj.domForm[mainID][i].checked=true;
										this.style.backgroundPosition="0 -16";
										myIndex=i;
									}else{
										thisObj.domForm[mainID][i].removeAttribute("checked");
										el.style.backgroundPosition="0 0";
									}
								}
								if(thisObj.domForm[mainID][myIndex].onclick)
									thisObj.domForm[mainID][myIndex].onclick();
							}
							break;
						case 'container':
							this.configItems(items[i]['items']); // call me selber!
							break;
						case 'upload':
							$(items[i]['id']+'-btn').setAttribute("upload", items[i].upload);
							$(items[i]['id']+'-btn').setAttribute("tnwidth", items[i].tnwidth);
							$(items[i]['id']+'-btn').setAttribute("tnheight", items[i].tnheight);
							$(items[i]['id']+'-btn').onclick = function() {
								thisObj.upload.call(this, thisObj);
							}
							break;
						case 'textarea':
							if(items[i].html){
								if(items[i].htmlconfig){
									var ed = new tinymce.Editor(items[i].id, items[i].htmlconfig);
								}else{
									var ed = new tinymce.Editor(items[i].id,{
										theme: "advanced",
										plugins : 'advlink',
										theme_advanced_buttons1 : "bold,italic,underline,|,forecolor,backcolor,|,undo,redo,|,link,unlink,|,charmap,cleanup,code,|,image",
										theme_advanced_buttons2 : "",
										theme_advanced_buttons3 : "",
	//									theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
	//									theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
	//									theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,|,insertfile,insertimage",

										theme_advanced_toolbar_location : "top",
										theme_advanced_toolbar_align : "left",
										convert_urls : false

									});
								}
								ed.render();
							}
							break;
						case 'tinyMCE':
							var it=items;
							var tb = new ljex.ToolBar({
								id: items[i].id+'-tb',
								renderTo: items[i].id+'-btn-ct',
								bgColor: 'transparent',
								border: false,
								items:[{
									id: items[i].id+'-upload',
									text: 'Bild hochladen',
									upload: items[i].upload,
									onclick: function(){
										loadModule("filemanager","core", {path: this.upload,
											  form: thisObj }, true);
									}
								},{
									id: items[i].id+'-edit',
									text: 'Editor starten',
								//	scope: this,
									idx: i,
									onclick: function(){
//										$alert(JSON.stringify(tb.item));
										thisObj.openEditor(it[this.idx]);
									}
								}]
							});
							tb.render();
							break;
						case 'scriptfield':
								$(items[i]['id']+'-btn').setAttribute("script", items[i].script);
								$(items[i]['id']+'-btn').onclick = function() {
								var script=this.getAttribute("script");
								eval(script+".call(this, thisObj)");
							}
							break;
						case 'stdupload':
							thisObj.stdUploadFields.push(items[i]);
							with($(thisObj.id+'-ifr').style){
								if(ljex.isIE() || ljex.isSafari()){
									position="absolute";
								}else{
									position="fixed";
								}
								marginLeft=parseInt($(thisObj.id+'-ct').offsetWidth)/2-150;
								marginTop=parseInt($(thisObj.id+'-ct').offsetHeight)/2-40;
							}
							break;
						case 'datefield':
							this.flds2check.push($(items[i].id));
							$(items[i].id).onclick=function(){
							}

							$(items[i].id+'-btn').onclick= function(){
								var inputID = this.id.split("-btn");
								inputID=inputID[0];
								var cal = ljex.Calendar.getInstance(inputID); 
								if(!cal){
									var cal = new ljex.Calendar({id: inputID, lang: 'fr'});
								}
								cal.open();
							}

							$(items[i].id).onfocus=function(){
								this.className="lx-form-input-focus";
								this.onclick();
							}
							break;
						case 'nmgridpanel':
							new ljex.nmGridPanel(items[i],thisObj);
							break;
					}
					break;
				case 'readonly':
					if(items[i]['xtype']=="dropdown"){
						var el = $(items[i].id+'-input');
					}else{
						var el = $(items[i].id);
					}
					el.setAttribute("readonly","true");
					break;
				case 'email':
					if(items[i][key]){
						var el = $(items[i].id);
						this.flds2check.push(el);
						el.setAttribute("regex","email");
						el.onkeyup = function(){
							thisObj.check.call(this, "email", thisObj);
						}
					}
					break;
				case 'allowBlank': 
					if(items[i][key]==false ){
						if(items[i]['xtype']=="dropdown"){
							var el = $(items[i].id+'-input');
						}else{
							var el = $(items[i].id);
						}
						this.flds2check.push(el);
						el.setAttribute("regex","allowBlank");
						if(ljex.isIE()){
							el.attachEvent("onkeyup", function(){
								thisObj.check.call(event.srcElement, "allowBlank", thisObj);
							});
						}else{
							el.addEventListener('keyup',function(){
								thisObj.check.call(this, "allowBlank", thisObj);
							},false);
						}

						/*		
							if(this.getAttribute("xtype")=="dropdown"){
								if(ljex.Form.openDropDown ){
									ljex.Form.openDropDown.style.display='none';
								}

								ljex.Form.openDropDown=$(this.id+"_lst");
							}
*/
					}
					break;
				case 'submit':
					$(items[i]['id']).onkeyup = function(){
					/*	var frm = this.getAttribute('formid');
						$(frm).submit();*/
						alert("Key pressed: "+this.value);
					}
					break;
			}
		}
	}
}

ljex.nmGridPanel = function(conf,form){
	$assimilate.call(this, conf);
	var thisObj=this;

	this.conf=conf;
	this.form=form;
	
	new ljex.Ajax({
		url: '/lib/FormController.php5?command=fetchnmdata&id='+form.id+'&myid='+$(thisObj.mykeycol+thisObj.form.uid).value,
		method: 'POST',
		param: {
			item: JSON.stringify(conf)
		}, 
		scope: this,
		callback: function(response){ 
			data = eval("("+response.responseText+")");
			this.data=data;
			
			this.gridpanel = new ljex.GridPanel({
				id: 'nmgrid-'+this.id,
				width: this.width,
				renderTo: this.id+'-nm-container',
				height: 150,
				maxItems: 20,
				cols: eval("("+this.cols+")"), //[{id: 'pp_ident', title: 'ID'}, {id: 'pp_bez', title: 'pp_bez'}, {id: 'lang', title: 'lang'}],
				items: data['datasets']
			});

			this.gridpanel.render();

			this.toolbar = new ljex.ToolBar({
				id: this.id+'-toolbar',
//				width: parseInt(this.width)+4,
				renderTo: this.id+'-buttons',
				items: [{
					id: this.id+'-buttons-add',
					text: 'Verknüpfen',
					scope: this,
					onclick: function() {
						if($(thisObj.mykeycol+thisObj.form.uid).value==""){
							$error("Bitte speichern Sie den (neuen) Datensatz zunächst, um Verknüpfungen erstellen zu können.");
							return;
						}

						var gridwin = new ljex.Window({
							id: this.id+'-fkgrid-win',
							title: 'Verknüpfung erstellen',
							html: "<div id='"+this.id+'-fk-container'+"'></div>",
							center: true
						});

						gridwin.open();

						var gridp =  new ljex.GridPanel({
							id: 'fkgrid-'+this.id,
							width: this.width,
							renderTo: this.id+'-fk-container',
							height: 150,
							maxItems: 20,
							cols: eval("("+this.cols+")"), //[{id: 'pp_ident', title: 'ID'}, {id: 'pp_bez', title: 'pp_bez'}, {id: 'lang', title: 'lang'}],
							items: this.data['fkdatasets'],
							rowclicked: function(){
								gridwin.close();
								new ljex.Ajax({
									url: '/lib/FormController.php5?command=linkforeignkey&myid='+$(thisObj.mykeycol+thisObj.form.uid).value+'&fkid='+gridp.selectedRow.cells.item(0).value+'&formid='+thisObj.form.id,
									method: 'POST',
									param: {
										item: JSON.stringify(thisObj.conf)
									}, 
									callback: function(response){ 
										var result = eval("("+response.responseText+")");
										thisObj.data['datasets']=result['datasets'];
										thisObj.data['fkdatasets']=result['fkdatasets'];
										thisObj.gridpanel.update(result['datasets']);
									}
								}).request();
							}
						});

						gridp.render();

					}
				},{
					id: this.id+'-buttons-add',
					text: '<div style="color:#f00">Verknüpfung lösen</div>',
					scope: this,
					onclick: function() {
						new ljex.Ajax({
							url: '/lib/FormController.php5?command=unlinkforeignkey&myid='+$(thisObj.mykeycol+thisObj.form.uid).value+'&fkid='+thisObj.gridpanel.selectedRow.cells.item(0).value+'&formid='+thisObj.form.id,
							method: 'POST',
							param: {
								item: JSON.stringify(thisObj.conf)
							}, 
							callback: function(response){ 
								var result = eval("("+response.responseText+")");
								thisObj.data['datasets']=result['datasets'];
								thisObj.data['fkdatasets']=result['fkdatasets'];
								thisObj.gridpanel.update(result['datasets']);
							}
						}).request();

					}
				},{
					id: this.id+'-buttons-edit',
					text: 'Neu/Bearbeiten',
					scope: this,
					onclick: function() {
						
						if($(thisObj.mykeycol+thisObj.form.uid).value==""){
							$error("Bitte speichern Sie den (neuen) Datensatz zunächst, um Verknüpfungen erstellen zu können.");
							return;
						}

							// An dieser Stelle auch DMC berücksichtigen!!!
						if(thisObj.gridpanel.selectedRow!=null){
							var dsid=thisObj.gridpanel.selectedRow.cells.item(0).value;
							ljex.Form.externalEdit(dsid,thisObj);
						}else{

							ljex.Form.externalEdit(null,thisObj);
						}

					}
				}]
			});

			this.toolbar.render();

		}
	}).request();
}



/* ToDO: In eine halbwegs oo-Form bringen */
ljex.Calendar = function(conf){
	$assimilate.call(this, conf);
		
	var names = ljex.Calendar.monthnames[ljex.lang];

	this.calID = this.id+'_calendar';
//	this.fldID = id; -> this.id
	this.months = [
		{ name: names[0], value: "01", days: 31, next: 1, prev: 11 },
		{ name: names[1], value: "02", days: 28, next: 2, prev: 0 },
		{ name: names[2], value: "03", days: 31, next: 3, prev: 1 },
		{ name: names[3], value: "04", days: 30, next: 4, prev: 2 },
		{ name: names[4], value: "05", days: 31, next: 5, prev: 3 },
		{ name: names[5], value: "06", days: 30, next: 6, prev: 4 },
		{ name: names[6], value: "07", days: 31, next: 7, prev: 5 },
		{ name: names[7], value: "08", days: 31, next: 8, prev: 6 },
		{ name: names[8], value: "09", days: 30, next: 9, prev: 7 },
		{ name: names[9], value: "10", days: 31, next: 10, prev: 8 },
		{ name: names[10], value: "11", days: 30, next: 11, prev: 9 },
		{ name: names[11], value: "12", days: 31, next: 0, prev: 10 }
	];

	
	ljex.Calendar.instances[this.id]=this;
}

ljex.Calendar.instances = [];
ljex.Calendar.getInstance = function(id){
	return (ljex.Calendar.instances[id]==undefined)?null:ljex.Calendar.instances[id];
}

ljex.Calendar.monthnames = {
	de: ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],
	en: ["January","February","March","April","Mai","June","Juli","August","September","October","November","December"],
	fr: ["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Auguste","Septembre","Octobre","Novembre","Décembre"]
};

ljex.Calendar.prototype.open = function(){
	var thisObj=this;

	this.aktMonth = ($(this.id).value=="" )?new Date().getMonth()+1:$(this.id).value.substr(5,2);
	if(this.aktMonth=="") this.aktMonth="1";
	this.aktMonth--;

	this.aktYear = ($(this.id).value=="" )?new Date().getFullYear():$(this.id).value.substr(0,4);
	if(this.aktYear%4==0) this.months[1].days=29;

	$(this.id+'_calendar').style.display="block";
	var dayCount=1;

	if($(this.id).value!=""){
		$(this.id+'_calendar').innerHTML="";
	}

	if($(this.id+'_calendar').innerHTML==""){
		var monthCt=$create(this.id+'-month-ct');
		with(monthCt.style){
			position="absolute";
			width="138px";
			marginLeft="1px";
			marginTop="1px";
			backgroundColor="#111";
			color="#fff";
			fontSize="9px";
			height="20px";
		}
		var monthPrevCt=$create(this.id+'-month-prev-ct');
		with(monthPrevCt.style){
		/*	borderColor='#eee';
			borderStyle="solid";
			borderWidth="1px";*/
			position="absolute";
			margin="2px 2px 0px 2px";
			cursor="pointer";
			cssFloat="left";
		}
		monthPrevCt.innerHTML="«";
		monthPrevCt.onclick = function() {
			var prevmonth = thisObj.months[thisObj.aktMonth].prev;
			thisObj.aktMonth = prevmonth;
			$(thisObj.id+"-month-name-ct").innerHTML=thisObj.months[prevmonth].name;

			var anzdays = thisObj.months[prevmonth].days;
			for(var i=28;i<32;i++){
				if(i<=anzdays) $(thisObj.id+'_day_'+i).style.display="block";
				else $(thisObj.id+'_day_'+i).style.display="none";
			}
		}

		monthCt.appendChild(monthPrevCt);

		var monthNameCt=$create(this.id+"-month-name-ct");
		monthNameCt.innerHTML=this.months[this.aktMonth].name;
		with(monthNameCt.style){
			position="absolute";
			left="10px";
			cssFloat="left";
			width="50px";
			marginTop="4px";
		}
		monthNameCt.align="center";
		monthCt.appendChild(monthNameCt);

		
		var monthNextCt=$create(this.id+'-month-next-ct');
		with(monthNextCt.style){
			/*borderColor='#eee';
			borderStyle="solid";
			borderWidth="1px";*/
			position="absolute";
			left="60px";
			margin="2px 0px 0px 2px";
			cursor="pointer";
			cssFloat="left";
		}
		monthNextCt.innerHTML="»";
		monthNextCt.onclick = function() {
			var nextmonth = thisObj.months[thisObj.aktMonth].next;
			thisObj.aktMonth = nextmonth;
			$(thisObj.id+"-month-name-ct").innerHTML=thisObj.months[nextmonth].name;

			var anzdays = thisObj.months[nextmonth].days;
			for(var i=28;i<32;i++){
				if(i<=anzdays) $(thisObj.id+'_day_'+i).style.display="block";
				else $(thisObj.id+'_day_'+i).style.display="none";
			}

		}
		monthCt.appendChild(monthNextCt);
		
		var yearPrevCt=$create(this.id+'-year-prev-ct');
		with(yearPrevCt.style){
		/*	borderColor='#eee';
			borderStyle="solid";
			borderWidth="1px";*/
			position="absolute";
			left="70px";
			margin="2px 2px 0px 10px";
			cursor="pointer";
			cssFloat="left";
		}
		yearPrevCt.innerHTML="«";
		yearPrevCt.onclick = function() {
			thisObj.aktYear--;
			$(thisObj.id+"-year-name-ct").innerHTML=thisObj.aktYear;
			if(thisObj.aktYear%4==0){
				thisObj.months[1].days=29;
				$(thisObj.id+'_day_29').style.display='block';
			}else{
				thisObj.months[1].days=28;
				if(thisObj.aktMonth==1)
					$(thisObj.id+'_day_29').style.display='none';
			}
		}

		monthCt.appendChild(yearPrevCt);

		var yearNameCt=$create(this.id+"-year-name-ct");
		yearNameCt.innerHTML=this.aktYear;
		with(yearNameCt.style){
			position="absolute";
			left="88px";
			cssFloat="left";
			marginTop="4px";
		}
		yearNameCt.align="center";
		monthCt.appendChild(yearNameCt);

		
		var yearNextCt=$create(this.id+'-year-next-ct');
		with(yearNextCt.style){
			/*borderColor='#eee';
			borderStyle="solid";
			borderWidth="1px";*/
			position="absolute";
			left="110px";
			margin="2px 0px 0px 2px";
			cursor="pointer";
			cssFloat="left";
		}
		yearNextCt.innerHTML="»";
		yearNextCt.onclick = function() {
			thisObj.aktYear++;
			$(thisObj.id+"-year-name-ct").innerHTML=thisObj.aktYear; 

			if(thisObj.aktYear%4==0){
				thisObj.months[1].days=29;
				$(thisObj.id+'_day_29').style.display='block';
			}else{
				thisObj.months[1].days=28;
				if(thisObj.aktMonth==1)
					$(thisObj.id+'_day_29').style.display='none';
			}
		}
		monthCt.appendChild(yearNextCt);

		var clCt=$create();
		clCt.style.clear="left";
		monthCt.appendChild(clCt);

		$(this.id+'_calendar').appendChild(monthCt);
		
		var regex=/^\d\d\d\d\-\d\d\-\d\d$/;
		var success = ($(this.id).value!="" && regex.test($(this.id).value))?true:false;
		var aktday = (success)?$(this.id).value.substr(8,2):1;

		for(var j=0;j<5;j++){
			for(var i=0;i<7;i++){
				if(dayCount>31) break;
				var day=$create(this.id+'_day_'+dayCount);
				with(day.style){
					position="absolute";
					top=(j*20+22)+"px";
					left=(i*20)+"px";
					width="18px";
					height="18px";
					backgroundColor=((i==0 || (i%2)==0)?"#aaa":"#ccc");
					cssFloat="left";
					cursor="pointer";
					borderColor=(aktday==dayCount)?"#f00":"#fff";
					borderStyle="solid";
					borderWidth="1px";
					if(dayCount>this.months[this.aktMonth].days) display="none";
				}
				day.setAttribute("dayval",(dayCount<10)?"0"+dayCount:dayCount );
				day.onclick = function(){ 
					thisObj.aktDay=parseInt(this.getAttribute("dayval"));
					$(thisObj.id).value=thisObj.aktYear+"-"+thisObj.months[thisObj.aktMonth].value+"-"+this.getAttribute("dayval");
					$(thisObj.calID).style.display='none';

					$(thisObj.id+'_err').style.display="none";
					$(thisObj.id).className="lx-form-input";
				}
				day.onmouseover = function() { if(thisObj.aktDay!=parseInt(this.getAttribute("dayval"))) this.style.borderColor="#555"; };
				day.onmouseout = function() { if(thisObj.aktDay!=parseInt(this.getAttribute("dayval"))) this.style.borderColor="#fff"; };

				day.innerHTML="<div style='padding-top:4px;' align=center>"+(dayCount++)+"</div>";
				$(thisObj.id+'_calendar').appendChild(day);
			}
			var clCt=$create();
			clCt.style.clear="left";
			$(thisObj.id+'_calendar').appendChild(clCt);
		}
	}
}


ljex.Form.openDropDown=null;


ljex.Form.prototype.updateItems = function(items){
	this.config.items=items;
	this.items=items;
}

ljex.Form.prototype.loadForm = function(data){
	  var d=data;
	  this.updateItems([]);
	  var thisObj=this;


	  new ljex.Ajax({
		url: '/lib/FormController.php5?command=load',
		method: 'POST',
		param: {
			config: JSON.stringify(this.config)
		},
		scope: this,
		callback: function(response,scope){
			data = JSON.parse(response.responseText);
			this.searchitems=data['searchitems'];
			this.uid = data['uid'];
			this.updateItems(data['items']);
			this.positionable=data.positionable;
			this.flds2check=[];
			$(this.renderTo).innerHTML=data['html'];
			if(this.footer!=undefined && this.footer!=null){
				$(this.renderTo).innerHTML+=this.footer;
			}

			// Hier wahrscheinlich die preSubmit-Fkt. "einbauen"....
			// ---------------------------------------------------------------
			if(thisObj.buttons!=undefined){
				for(var i=0;i<thisObj.buttons.length;i++){
					if(thisObj.buttons[i]['submit'] && data['presubmit'] && data.presubmit!=""){
						$loadScript(data.presubmit+'.js',data.presubmit,null);
						thisObj.buttons[i]['preSubmit'] = data.presubmit;
						break;
					}
				}
			}
			this.init();
			if(this.onrender) this.onrender.call(this);
			if(d && d.callback) d.callback.call(this);
	/*		tinyMCE.init({
				mode : "textareas"
			});*/
		}
	}).request();

}

ljex.Form.prototype.render = function(rendermode,loadanim,callback){
	if(loadanim)
		$(this.renderTo).innerHTML="<img src='"+ljex.path+"/images/ajax-loader.gif'>";
		this.config.items = this.items;
		var conf=JSON.stringify(this.config);
	  new ljex.Ajax({
		url: '/lib/FormController.php5?command=render&mode=form&uid='+this.renderTo,
		method: 'POST',
		param: {
			config: conf
		},
		scope: this,
		callback: function(response,scope){
		//	alert(response.responseText);
			var data = eval("("+response.responseText+")");
			if($(this.renderTo)) $(this.renderTo).innerHTML=data['html'];

			if(this.footer!=undefined){
				$(this.renderTo).innerHTML+=this.footer;
			}
			this.init();
			if(this.onrender) this.onrender.call(this);
		}
	}).request();
}

ljex.Form.toggleDropDown = function(id){
	var el = $(id);

	if(el.style.display=='none' || el.style.display==''){
		el.style.display='block';
		ljex.Form.openDropDown=id; // Erstmal nur ID speichern. ljex.init, event body.onclick macht den rest.
	}else{
		el.style.display='none';
		ljex.Form.openDropDown=null;
	}
}

ljex.Form.dropDownClicked =function(id,val,realval){
	var el = $(id+'-input');
	el.value=val;
	el.focus();
	$(id).value=realval;
	$(id+'-input_lst').style.display="none";
	$(id+'-input_err').style.display='none';
	el.onchange(); // evtl. default value setzen.
}

ljex.Form.prototype.reload = function(item){
//	alert(JSON.stringify(item));
	 new ljex.Ajax({
		url: '/lib/FormController.php5?command=reload&operation=update_'+item['xtype'],
		method: 'POST',
		param: {
			config: JSON.stringify(item)
		},
		scope: this,
		callback: function(response){
			var data = eval("("+response.responseText+")");

			

			$(item['id']+'-input_lst').innerHTML=data['listHTML'];
			$(item['id']+'-label').innerHTML=item['label']+':';
			item=data.item;
			if(item['value']!=undefined && item['value']!=""){
				for(var i in item['values']){
					if(item['values'][i]==item.value){
						$(item.id+'-input').value=item.items[i];
						break;
					}
				}
			}else{
				$(item.id+'-input').value="";
			}
		}
	}).request();
}

ljex.Form.prototype.removeField = function(id){
	var parentEl = $(id+'-container').parentNode;
	parentEl.removeChild($(id+'-container'));
}

ljex.Form.prototype.insertField = function(insertBeforeId,config){
	var thisObj=this;
	 new ljex.Ajax({
		url: '/lib/FormController.php5?command=render&mode=field',
		method: 'POST',
		param: {
			config: JSON.stringify(config)
		},
		scope: this,
		callback: function(response){
			var outerEl=document.createElement("div");
			outerEl.innerHTML=response.responseText;

			var newEl = outerEl.firstChild;
			$(this.id+'-ct').insertBefore(newEl,$(insertBeforeId+'-container'));
			thisObj.configItems(config);
		}
	}).request();
}

ljex.Form.prototype.form2html = function(){

//	var html='<style>.bg1 { background-color: #ddd } .bg2 { background-color: #eee } </style>';

    var bg="background-color:#aaa;";
 
 
	html="<table cellpadding=5>";
	for(key in this.fldValues){
		var item = this.getField(key);
		if(item!==undefined && !(key.match(/-input/)) && item.label!==undefined && item.xtype!="hidden"){
			var label = item.label;
			if(item.xtype=='dropdown'){
				var value = this.fldValues[key+'-input'];
			}else if(item.xtype=="textarea"){
				var value = this.fldValues[key].replace(/\n/g,"<br>");
				value = value.replace(/\\/g,"");
			}else{
				var value = this.fldValues[key];
			}

			html+="<tr><td style="+bg+">"+label+":  </td><td > "+value+"</td></tr>";
		}
	}

	html+="</table>";
	return html;

/*	var tblCt = $create();
	var tbl = document.createElement("table");
	tbl.style.fontSize='11px';
	tbl.cellpadding=5;

	var c=0;

	for(key in this.fldValues){
		var item = this.getField(key);
		if(item!==undefined && !(key.match(/-input/)) && item.label!==undefined && item.xtype!="hidden"){
			var label = item.label;
			if(item.xtype=='dropdown'){
				var value = this.fldValues[key+'-input'];
			}else if(item.xtype=="textarea"){
				var value = this.fldValues[key].replace(/\n/g,"<br>");
				value = value.replace(/\\/g,"");
			}else{
				var value = this.fldValues[key];
			}

			var row = tbl.insertRow(c++);
			var labelCell = row.insertCell(0);
			var valueCell = row.insertCell(1);

			//labelCell.style.backgroundColor="#aaaaaa";
			labelCell.innerHTML=label;
			valueCell.innerHTML=value;
		}
	}

	tblCt.appendChild(tbl);

	return tblCt.innerHTML;
*/		
/*

	html="<table cellpadding=5>";
	for(key in this.fldValues){
		var item = this.getField(key);
		if(item!==undefined && !(key.match(/-input/)) && item.label!==undefined && item.xtype!="hidden"){
			var label = item.label;
			if(item.xtype=='dropdown'){
				var value = this.fldValues[key+'-input'];
			}else if(item.xtype=="textarea"){
				var value = this.fldValues[key].replace(/\n/g,"<br>");
				value = value.replace(/\\/g,"");
			}else{
				var value = this.fldValues[key];
			}

			html+="<tr><td >"+label+":  </td><td > "+value+"</td></tr>";
		}
	}

	html+="</table>";
	return html; */
}

ljex.Form.prototype.getValue = function(id){
	var el=this.domForm.elements[id];
	if(typeof(el)=="object"){
		for(var i=0;i<el.length;i++){
			if(el[i].checked){
				return el[i].value;
			}
		}
	}else{
		return el.value;
	}
}


ljex.Form.prototype.getValues = function(){
	var el=this.domForm.elements;
	var vals = new Array();

	for(var i=0;i<el.length;i++){
		// Checkboxen und Radiobuttons setzen checked=true, wenn angewählt.
		// Ansonsten value übergeben.
		vals[i] = {};
		vals[i]['id']=el[i].id;
		vals[i]['value']=(el[i].type=="checkbox" || el[i].type=="radio")?el[i].value:el[i].value;
		// Formularitems updaten
		
	/*	var item=this.getField(el[i].id);
		
		if(el[i].type=='radio' ){
			var k=0;
			while(el[i].type=='radio'){
				if(el[i].checked){
					item[k].checked = 'checked';
				}
				k++; i++;
			}
		}else{
			item.value = el[i].value;
		}*/
		
	}

	//alert(JSON.stringify(vals));

	return vals;
}
