﻿function __(str,repl)
 // __("Willommen im schönen Österreich")
 // __("willk","Willommen im schönen Österreich") // "willk": Kurzschlüssel in Sprachdatei
 {
	return typeof cms_lang == 'object' && cms_lang[str] ? cms_lang[str] : repl ? repl : str;
 }

cmslib=function(){
	var dialoge={};
	//var Dom=null;
	//var Event=null;
	//var JSON=null;
	var imgdlg=null,imgdlgsrc=null,imgdlgalt=null,swfdlg=null,waitdlg=null,waitdlgtim=null,
		alertdlg=null,alertdlgtim=null;
	var mesg=null,mesgtid=null,onmesgclk=null;
	
	function send(obj,onerror,onok,config)	// benötigt YUI: connect,json
	 {
		function onsuccess(o)
		 {
			if (typeof onok == "function")
				onok(o.responseText);
		 }
		function onfailure(o)
		 {
			var errormsg=typeof onerror=="string" ? onerror : "Fehler bei der Übertragung";
			if (typeof onerror == "function")
				onerror(o);
			else
				alert(errormsg);
		 }
		if ( window.cms && cms_codeobj && cms_codeobj.lang || !window.cms && cms_code && cms_code.lang )
			obj.lang=window.cms ? cms_codeobj.lang : cms_code.lang;
		cmslib.asyncRequest('POST', (window.cms?'':'../../')+'update.asp', {
							success: onsuccess,
							failure: onfailure,
							timeout: config && config.timeout || 30000
							}, YAHOO.lang.JSON.stringify(obj));
	 }
	function refreshcss(filename)
	 {
		var w=typeof cms=='object' && cms.cwin ? cms.cwin : window;
		var regfilename=new RegExp(filename+"$","i");
		Y.one(w.document.documentElement).all('link').some(function(n,i,nl){
			if ( n.get('rel').toLowerCase()=='stylesheet' && regfilename.test(n.get('href').split(/\?/)[0]) )
			{
				n.remove();
				return true;
			}
			else
				return false;
		 });
		
		var csslink=w.document.createElement("link");
		csslink.rel="stylesheet";
		csslink.type="text/css";
		csslink.href='../../'+filename+"?"+new Date().getTime();
		Y.one(w.document.documentElement).one('head').appendChild(csslink);
	 }
	function setstyles(el,styles)
	 {
		var styles=(styles||'').split(/[;\r]\s*/);
		for ( var is=0 ; is<styles.length ; ++is )
		{
			var st=styles[is].split(/\s*:\s*/);
			if ( st.length>1 || st[0]!='' )
				Dom.setStyle(el,st[0],st[1]);
		}
	 }
	
	
	function vorlage_save(dlg)
	 {
	 	if ( dlg.filename )
		{
			var cfg=cmslib.dialog.getfields(dlg,dlg.dlgobj.form);
			debugger;
			cmslib.update("/s/PLUGINS/savedlg.js","list",{dlg:dlg.filename},function(o) {
				var obj=JSON.parse(o);
				cmslib.loaddialog("/s/DIALOGS/dialog-select",function(oo) {
					for ( var i=0 ; i<obj.result.length && obj.result[i].f!=oo.filename ; ++i )
						;
					if ( i>=obj.result.length || window.confirm('Vorlage existiert bereits!\nÜberschreiben?') )
						cmslib.update("/s/PLUGINS/savedlg.js","save",{dlg:dlg.filename,name:oo.filename,config:cfg})
				},obj.result);
			});
		}
	 }
	function vorlage_load(dlg)
	 {
	 	if ( dlg.filename )
		{
			cmslib.update("/s/PLUGINS/savedlg.js","list",{dlg:dlg.filename},function(o) {
				debugger;
				try
				{
					var obj=JSON.parse(o);
					if ( obj.s==0 )
					{
						cmslib.loaddialog("/s/DIALOGS/dialog-select",function(oo) {
							for ( var i=0 ; i<obj.result.length && obj.result[i].f!=oo.filename ; ++i )
								;
							if ( i<obj.result.length )
								cmslib.dialog.initfields(Y.mix(obj.result[i].config,dlg.config),dlg,dlg.dlgobj.form);
						},obj.result);
					}
				}
				catch (ex)
				{
				}
			 });
		}
	 }
	
	var dialogstack = function()
	 {
		var stack=[];
		return {
			push_and_show:function (dlgobj)
			 {
				if ( stack.length>0 )
				{
					//stack[stack.length-1].hide();
					// var topzindex=Dom.getStyle(stack[stack.length-1].element,"zIndex");
					// Dom.setStyle(dlgobj.element,"zIndex",topzindex+1);
					dlgobj.bringToTop();
					var kltab=stack[stack.length-1].cfg.getProperty("keylisteners")||[];
					for ( var ik=0 ; ik<kltab.length ; ++ik )
						kltab[ik].disable();
					stack[stack.length-1]._removeFocusHandlers();
				}
				stack.push(dlgobj);
				dlgobj.show();
			 },
			hide_and_pop:function ()
			 {
				if ( stack.length==0 )
					return;
				stack[stack.length-1].hide();
				stack.pop();
				if ( stack.length>0 )
				{
					var kltab=stack[stack.length-1].cfg.getProperty("keylisteners")||[];
					for ( var ik=0 ; ik<kltab.length ; ++ik )
						kltab[ik].enable();
					stack[stack.length-1]._addFocusHandlers();
					//stack[stack.length-1].show();
				}
			 },
			is_top_dialog:function (dlgobj)
			 {
				return stack.length>0 && stack[stack.length-1]===dlgobj;
			 }
			 
		 }
	 }();
	 
	var subtypes = {
		editor:"textarea",
		autocomplete:"text",
		properties:"table",
		popup:"button",
		"int":"text",
		"float":"text",
		date:"text"
	 }

	 
	return {
		stopEvent:false,	// workaround für click-Behandlung von Links
		unload:function(){
			var destroytab=[];
			return {
				purgeElement: function(el,flg)
				 {
					//cms.expand[el.id]=null;
					//var gschrappen=Dom.getChildren(el);
					if ( false ) // flg )
					{
						for ( var ig=0 ; ig<gschrappen.length ; ++ig )
							this.purgeElement(gschrappen[ig],flg);
					}
					Event.purgeElement(el,flg);
					//Event.purgeElement(el,false);
				 },
				register:function(obj)
				 {
					//alert('register: '+obj);
					for (var i=0; i<destroytab.length && destroytab[i]!=obj; ++i)
						;
					if (i==destroytab.length)
						destroytab.push(obj);
				 },
				unregister:function(obj)
				 {
					for (var i=0; i<destroytab.length && destroytab[i]!=obj; ++i)
						;
					if (i<destroytab.length)
						destroytab.splice(i,1);
				 },
				destroy:function(obj)
				 {
					for (var i=0; i<destroytab.length && destroytab[i]!=obj; ++i)
						;
					if (i<destroytab.length)
						destroytab.splice(i,1);
					if (typeof obj.destroy=='function')
						obj.destroy();
				 },
				destroyall:function()
				 {
					//alert("destroying "+destroytab.length+" objects");
					for (var i=destroytab.length-1; i>=0; --i)
					{
						try
						{
							if (YAHOO.lang.isFunction(destroytab[i].destroy))
							{
								destroytab[i].destroy();
								//alert(destroytab[i])
								destroytab[i]=null;
							}
						}
						catch(ex)
						{
							//alert("CATCH (cmslib.unload.destroyall): ["+destroytab[i]+"]"+ex.description);
						}
					}
					destroytab=[];
					cmslib.unload.purgeElement(document,true);
				 }
			 };
		 }(),
		asyncRequest:function(method,url,asyncconfig,data,lang)
		 {
			function callAsyncRequest(YAHOO)
			 {
			 	if ( lang )
				{
					var utab=url.split("?");
					utab[0]=utab[0].replace(/(\.\w+)$/,"-"+lang+"$1");
					var langurl=utab.join("?");
					var onfailure=asyncconfig.failure;
					debugger;
					asyncconfig.failure=function()
					 {
					 	asyncconfig.failure=onfailure;
					 	YAHOO.util.Connect.asyncRequest(method, url, asyncconfig, data);
					 };
					YAHOO.util.Connect.asyncRequest(method, langurl, asyncconfig, data);
				}
				else
					YAHOO.util.Connect.asyncRequest(method, url, asyncconfig, data);
			 }
			if ( YAHOO && YAHOO.util.Connect )
				callAsyncRequest(YAHOO);
			else if ( YUI )
			{
				Y.use("yui2-connect",function() {
					callAsyncRequest(Y.YUI2);
				 });
			}
			else
				alert("FEHLER: connection-Object nicht vorhanden");
		 },
		clone:function(){
			return function (o)
			 {
				if ( !o )
					return o;
				else if ( o instanceof Array )
				{
					var arr=[];
					for ( var ia=0 ; ia<o.length ; ++ia )
						arr.push(cmslib.clone(o[ia]));
					return arr;
				}
				else if ( o instanceof Object )
				{
					var obj={};
					for ( var k in o )
						obj[k]=cmslib.clone(o[k]);
					return obj;
				}
				else
					return o;
			 }
		 }(),
		dialog:{
			show:function() // dialog.show(dlg,dialogid,onok,config)
			 {
				return function(dlg,dialogid,onok,config)
				 {
					function createdlg(o)
					 {
						var dlgelem=typeof dialogid == 'string' ? Dom.get(dialogid) : dialogid;
						if ( !dlgelem )
						{
							dlgelem=document.createElement("div");
							dlgelem.id=dialogid;
							var papa=dlg.parentelement||document.body;
							papa.appendChild(dlgelem);
						}
						function oncancel()
						 {
							//alert('oncancel');
							dialogstack.hide_and_pop(dlgobj);
							if ( typeof dlg.oncancel == 'string' && dlg.oncancel!='' )
								dlg.oncancel = new Function("dlg",dlg.oncancel);
							if ( typeof dlg.oncancel == 'function' )
								dlg.oncancel.call(dlgobj.form,dlg);
							//this.cancel();
						 }
						
						if ( dlg.buttons && dlg.buttons instanceof Array )
						{
							for ( var ib=0 ; ib<dlg.buttons.length ; ++ib )
							{
								var fun;
								if ( typeof dlg.buttons[ib].handler=='string' )
									fun=new Function("dlg","ev",dlg.buttons[ib].handler);
								else if ( typeof dlg.buttons[ib].handler=='function' )
									fun=dlg.buttons[ib].handler;
								else if ( dlg.buttons[ib].handler && typeof dlg.buttons[ib].handler.fn == 'function' )
									fun=dlg.buttons[ib].handler.fn;
								else
									continue;
								dlg.buttons[ib].handler = function(fun) {return function(e,o) {
									fun.call(this.form,dlg,e);
								} }(fun);
							}
							dlg.butsobj=dlg.buttons;
						}
						else
							dlg.butsobj=[];
						/* if ( dlg.showdefaultbuttons!==false && dlg.showdefaultbuttons!=="" )
							dlg.butsobj=dlg.butsobj.concat([
									{ text:"Ok", handler:dialogok, isDefault:false },
									{ text:"Abbruch", handler:function(){this.cancel();} } 
								 ]);
						 */
						switch ( dlg.showdefaultbuttons )
						{
						 case false: //
						 case "": //
						 	break;
						 case "close": //
							dlg.butsobj=dlg.butsobj.concat([
									{ text:"Schließen", handler:function(){this.cancel();} } 
							 ]);
						 	break;
						 case "backnextokcancel": //
							dlg.butsobj=dlg.butsobj.concat([
									{ text:"zurück", handler:function(){
										var tv=dlg.maintab;
										if ( tv )
										{
											var ai=tv.get("activeIndex");
											if ( ai>0 )
												tv.set("activeIndex",ai-1);
										}
									 }, isDefault:false, disabled:true },
									{ text:"weiter", handler:function(){
										var tv=dlg.maintab;
										if ( tv )
										{
											var ai=tv.get("activeIndex");
											var alen=tv.get("tabs").length;
											if ( ai<alen-1 )
												tv.set("activeIndex",ai+1);
										}
									 }, isDefault:false, disabled:true },
									{ text:"fertig", handler:dialogok, isDefault:false },
									{ text:"abbrechen", handler:function(){this.cancel();} } 
							 ]);
						 	break;
						 default: // okesc
							dlg.butsobj=dlg.butsobj.concat([
									{ text:"Ok", handler:dialogok, isDefault:false },
									{ text:"Abbruch", handler:function(){this.cancel();} } 
							 ]);
						}
						if ( dlg.helpurl )
						{
							switch ( typeof dlg.width )
							{
							 case "number": //
							 	dlg.width+=250;
							 	break;
							 case "string": //
							 	if ( /\s*\d+px/.test(dlg.width) )
									dlg.width=parseInt(dlg.width)+250+'px';
							 	break;
							}
						}
						dlgobj=dlg.dlgobj=new YAHOO.widget.Dialog(dlgelem.id,{ 
								modal:dlg.modal,
								width: dlg.width,
								buttons: dlg.butsobj,
								postmethod:"async",
								draggable: dlg.draggable===undefined||dlg.draggable,
								visible:false,
								close:dlg.close,
								fixedcenter:dlg.fixedcenter===undefined||dlg.fixedcenter });
						cmslib.unload.register(dlgobj);
						dlgobj.cancelEvent.subscribe(oncancel);
						// alert('create');
						// dlgobj.showMaskEvent.subscribe(function(){alert(Dom.getStyle(this.mask,"z-index")+' < '+Dom.getStyle(this.element,"z-index"));});
						dlg.iscreated=false;
						dlg.ok=dialogok;
						dlg.cancel=function(){this.dlgobj.cancel();};
						var formhtml=o ? o.responseText : '<form></form>';
						if ( dlg.helpurl )
						{
							dlgobj.showEvent.subscribe(function(){
								if ( !dlg.helpdlg )
								{
									var regbody=Dom.getRegion(dlg.dlgobj.body)
									var helpheight=Math.max(regbody.bottom-regbody.top,300);
									dlg.helpdlg=new YAHOO.widget.SimpleDialog(Dom.generateId(null,"helpdlg"), {
										width:"230px",
										height:helpheight-14+'px',
										visible:false,
										close:false,
										draggable:false,
										//text:"HILFE",
										context:[dlgobj.body,"tr","tr"]
									 });
									cmslib.unload.register(dlg.helpdlg);
									dlg.helpdlg.render(dlgobj.element);
									var helpiframe=dlg.helpiframe=document.createElement("IFRAME");
									helpiframe.width=210;
									helpiframe.height=helpheight-60;
									if ( regbody.bottom-regbody.top<300 )
									{
										Dom.setStyle(dlg.dlgobj.body,"min-height","300px");
										this.center();
									}
									helpiframe.src=dlg.helpurl;
									dlg.helpdlg.body.appendChild(helpiframe);
									Dom.setStyle(dlg.dlgobj.form,"width",regbody.right-regbody.left-250+'px');
								}
								dlg.helpdlg.show();
								Dom.setStyle(dlg.helpdlg.element,"display","");
							 });
							dlgobj.hideEvent.subscribe(function(){
								if ( dlg.helpdlg )
								{
									dlg.helpdlg.hide();
									Dom.setStyle(dlg.helpdlg.element,"display","none");
								}
							 });
						}
						dlgobj.setBody(formhtml); //dlg.helpurl? '<table><tr><td><form></form></td><td><iframe width="200" height="100%" src="'+dlg.helpurl+'"></iframe></td></tr></table>' : '<form></form>');
						dlgobj.renderEvent.subscribe(function(){
								dlg.butref={};
								/* Dialog-Menü, geht aber nicht
									debugger;
									var dlgmen=document.createElement('span');
									dlgmen.className="dlgmenu";
									dlgmen.innerHTML="[...] ";
									this.header.insertBefore(dlgmen,this.header.firstChild);
									if ( !this.__vorlage )
									{
										this.__vorlage=new YAHOO.widget.Menu(dlg.id+'-but',{context:[dlgmen,"tl","bl"]});
										var self=this;
										this.__vorlage.addItems([
												{text:"letzte Eingabe", onclick:{fn:function(e,ev,dlg){
													if ( dlg.lastconfig )
														cmslib.dialog.initfields(dlg.lastconfig,dlg,dlg.dlgobj.form);
												 },obj:dlg,scope:this}},
												{text:"Eingabe laden", onclick:{fn:function(e,ev,dlg){
													 vorlage_load(dlg);
												 },obj:dlg,scope:this}},
												{text:"Eingabe speichern", onclick:{fn:function(e,ev,dlg){ 
													vorlage_save(dlg);
												 },obj:dlg,scope:this}}
										 ]);
										//dlg.vorlage.render(dlg.dlgobj.footer);
										this.__vorlage.render(this.element);
									}
									var _this=this;
									Y.on('click',function(ev) {
										_this.__vorlage.show();
									 },dlgmen);
								 */
								
								
								
								var dlgbuts=this.getButtons();
								for ( var ib=0 ; ib<dlgbuts.length ; ++ib )
								{
									if ( dlgbuts[ib] instanceof YAHOO.widget.Button )
										dlg.butref[dlgbuts[ib].get("name")||dlgbuts[ib].get("label")||ib]=dlgbuts[ib];
								}
								if ( !dlg.iscreated )
								{
									dlg.iscreated=true;
									cmslib.dialog.mkfields(dlgobj.form,dlg);
									dlg.backref={};
									if ( typeof dlg.oncreate == 'string' && dlg.oncreate!='' )
										dlg.oncreate=new Function("dlg",dlg.oncreate);
									if ( typeof dlg.oncreate == 'function' )
										dlg.oncreate.call(dlgobj.form,dlg);
									Event.on(dlgobj.element,'click',function(e){Event.stopPropagation(e);});
									
									
									dlg._onchange=function(e){
										var inpfield=e&&e.currentTarget || this;
										var f=dlg.backref[inpfield.get("name")];
										if ( f )
										{
											Y.log('change: '+f.name+' '+f.type);
											if ( f.onchange && Y.Lang.isString(f.onchange) )
												f.onchange=new Function("dlg","config",f.onchange);
											if ( f.onchange && Y.Lang.isFunction(f.onchange)) 
												f.onchange.call(Y.Node.getDOMNode(inpfield),dlg,f);
										}
										return true;
									 }
									if ( !Y.Node.prototype.getValue )
									{
										Y.Node.prototype.getValue=function(dlg){
											var eltagname=this.get("tagName").toLowerCase();
											var f=dlg.backref[this.get("name")];
											if ( f && f.onget )
											{
												try
												{
													if ( Y.Lang.isString(f.onget) )
														f.onget=new Function("dlg","config",f.onget);
													return f.onget.call(this,dlg,f);
												}
												catch (ex)
												{
													Y.error('CATCH: Y.Node.getValue: '+ex.description);
													return eltagname=="div" ? dlg.ediobj[this.get("name")].getContent() : this.get("value");
													//return eltagname=="div" ? this.get("innerHTML") : this.get("value");
												}
											}
											else
												return eltagname=="div" ? dlg.ediobj[this.get("name")].getContent().replace(/<VAR id=yui-ie-cursor><\/VAR>|<BR class=yui-cursor>/ig,'') : this.get("value");
												//return eltagname=="div" ? this.get("innerHTML") : this.get("value");
										 };
										Y.Node.prototype.setValue=function(val,dlg){
											var eltagname=this.get("tagName").toLowerCase();
											var f=dlg.backref[this.get("name")];
											if ( f && f.onset )
											{
												try
												{
													if ( Y.Lang.isString(f.onset) )
														f.onset=new Function("value","dlg","config",f.onset);
													f.onset.call(this,val,dlg,f);
												}
												catch (ex)
												{
													Y.error('CATCH: Y.Node.setValue: '+ex.description);
													if ( eltagname=="div" )
														  dlg.ediobj[this.get("name")].set("content",val);
														 //this.set("innerHTML",val);
													 else
													 	this.set("value",val);
												}
											}
											else
												if ( eltagname=="div" )
												{
													var ed= dlg.ediobj[this.get("name")];
													if ( !ed.__frameready )
														ed.once('frame:ready',function(){ed.set("content",val);});
													else
														ed.set("content",val);
													//this.set("innerHTML",val);
												}
												 else
													this.set("value",val);
										 };
									}
									Y.delegate('change',dlg._onchange,dlgobj.element,'input,textarea,button');
									// Y.delegate('change',dlg._onchange,dlgobj.element,'input,textarea,select,button'); // select geht mit yui3 auf ie nicht
									Y.delegate('click',function(e){
										var inpfield=e.currentTarget;
										var f=dlg.backref[inpfield.get("name")];
										if ( f )
										{
											//Y.log('click: '+f.name+' '+f.type);
											if ( f.onclick && Y.Lang.isString(f.onclick) )
												f.onclick=new Function("dlg","config",f.onclick);
											if ( f.onclick && Y.Lang.isFunction(f.onclick)) 
												f.onclick.call(Y.Node.getDOMNode(inpfield),dlg,f);
											switch ( f.type )
											{
											 case "date": //
												if ( dlg.cal && !dlg.cal.__supresshideonclick )
												{
													if ( dlg.cal.__isvisible )
														dlg.cal.hide();
													else
														dlg.cal.show();
												}
												if ( dlg.cal )
													dlg.cal.__supresshideonclick=false
											 	break;
											 
											}
										}
										return true;
									 },dlgobj.element,'input,textarea,select,button');
									Y.delegate('focus',function(e){
										var inpfield=e.currentTarget;
										var f=dlg.backref[inpfield.get("name")];
										if ( f )
										{
											//Y.log('focus: '+f.name+' '+f.type);
											if ( dlg._focustimer )
											{
												window.clearTimeout(dlg._focustimer);
												dlg._focustimer=null
											}
											dlg._focustimer=window.setTimeout(function(){
												dlg._focustimer=null;
												if ( f.onfocus && Y.Lang.isString(f.onfocus) )
													f.onfocus=new Function("dlg","config",f.onfocus);
												if ( f.onfocus && Y.Lang.isFunction(f.onfocus)) 
													f.onfocus.call(Y.Node.getDOMNode(inpfield),dlg,f);
												switch ( f.type )
												{
												 case "date": //
													if ( dlg.cal && dlg.cal.oDomContainer && dlg._aktfield!=e.currentTarget )
													{
														dlg._aktfield=e.currentTarget;
														var reg=e.currentTarget.get("region");
														var cont=Y.one(dlg.cal.oDomContainer);
														var dat=inpfield.getValue(dlg)||new Date();
														if ( Y.Lang.isString(dat) )
														{
															var dc=dat.split(/\D+/);
															if ( dc.length>=3 )
																dat=new Date(parseInt(dc[2]),parseInt(dc[1],10)-1,parseInt(dc[0]));
														}
														if ( dat instanceof Date )
														{
															dlg.cal.cfg.setProperty("pagedate",dat);
															dlg.cal.select(dat);
															dlg.cal.render();
														}
														dlg.cal.show();
														cont.setXY([reg.left+15,reg.bottom+2]);
														//Y.log('cal show');
														if ( dlg.cal.__supresshideonclicktimer )
															window.clearTimeout(dlg.cal.__supresshideonclicktimer);
														dlg.cal.__supresshideonclick=true;
														dlg.cal.__supresshideonclicktimer=window.setTimeout(function(){dlg.cal.__supresshideonclicktimer=null;dlg.cal.__supresshideonclick=false;},500);
													}
													break;
												 default:
													if ( dlg.cal && dlg.cal.oDomContainer && dlg.cal.__isvisible )
													{
														dlg.cal.hide();
														//Y.log('cal hidden');
													}
												}
											 },50);
										}
										return true;
									 },dlgobj.element,'input,textarea,select,button');
									Y.delegate('blur',function(e){
										var inpfield=e.currentTarget;
										var f=dlg.backref[inpfield.get("name")];
										var valid=true;
										if ( f )
										{
											//Y.log('blur: '+f.name+' '+f.type);
											if ( dlg._blurtimer )
											{
												window.clearTimeout(dlg._blurtimer);
												dlg._blurtimer=null
											}
											dlg._blurtimer=window.setTimeout(function(){
												dlg._blurtimer=null;
												//Y.log('validate: '+f.name+' '+f.type);
												if ( f.validate && Y.Lang.isString(f.validate) )
													f.validate=new Function("value","dlg","config",f.validate);
												if ( f.validate 
												    && Y.Lang.isFunction(f.validate) 
												    && !f.validate.call(Y.Node.getDOMNode(inpfield),inpfield.get("value"),dlg,f))
												{
													inpfield.addClass("error");
													inpfield.set("title",f.errormsg||'ungültige Eingabe');
													valid=false;
												}
												else
												{
													inpfield.removeClass("error");
													inpfield.set("title",'');
													if ( f && f.onblur )
													{
														if ( f.onblur && Y.Lang.isString(f.onblur) )
															f.onblur=new Function("dlg","config",f.onblur);
														if ( f.onblur && Y.Lang.isFunction(f.onblur)) 
															f.onblur.call(Y.Node.getDOMNode(inpfield),dlg,f);
													}
												}
											},200);
											
										}
										return valid;
									 },dlgobj.element,'input,textarea,select,button');
									Y.delegate('keypress',function(e){
										var inpfield=e.currentTarget;
										var f=dlg.backref[inpfield.get("name")];
										var validkey=true;
										if ( f )
										{
											//Y.log('keypress: '+f.name+' '+f.type);
											if ( f.keyrange )
											{
												var re=f.RE||new RegExp("["+f.keyrange+"]");
												if ( re&&!re.test(String.fromCharCode(e.keyCode)) )
													validkey=false
											}
										}
										if ( validkey && f && f.onkeypress )
										{
											if ( f.onkeypress && Y.Lang.isString(f.onkeypress) )
												f.onkeypress=new Function("event","dlg","config",f.onkeypress);
											if ( f.onkeypress && Y.Lang.isFunction(f.onkeypress)) 
												f.onkeypress.call(Y.Node.getDOMNode(inpfield),e,dlg,f);
										}
										if ( !validkey )
											e.preventDefault();
										return true;
									 },dlgobj.element,'input,textarea,select,button');
									Y.on('keydown',function(e){
										if ( e.altKey )
										{
											switch ( e.keyCode )
											{
											 case 76: //
												if ( dlg.lastconfig )
													cmslib.dialog.initfields(dlg.lastconfig,dlg,dlg.dlgobj.form);
												e.halt();
											 	break;
											  case 79: //
											  	vorlage_load(dlg);
												e.halt();
											  	break;
											  case 83: //
											  	vorlage_save(dlg);
												e.halt();
											  	break;
											}
										}
									 },dlgobj.element); 
								}
								if ( typeof dlg.oninit == 'string' && dlg.oninit!='' )
									dlg.oninit=new Function("config","dlg",dlg.oninit);
								if ( typeof dlg.oninit == 'function' )
									dlg.oninit.call(dlgobj.form,config,dlg);
								var keys=[];
								if ( dlg.ok_key===undefined || dlg.ok_key )
									keys.push(13);
								if ( /*dlg.esc_key===undefined ||*/ dlg.esc_key )
									keys.push(27);
								if ( keys.length>0 )
								{
									var k_ok_esc=new YAHOO.util.KeyListener(document,{keys:keys},function(e,ev){ 
										var tg=Event.getTarget(ev[1]);
										switch ( ev[0] )
										{
										 case 27: //
											Event.stopEvent(ev[1]);
											dlgobj.cancel();
											return false;
											break;
										 case 13: //
											//alert(Event.getTarget(ev[1]).tagName);
											switch(tg.tagName.toUpperCase())
											{
											 case "TEXTAREA": //
											 case "BUTTON": //
											 case "A": //
												return true;
												break;
											 case "INPUT": //
												if ( tg != dlg.dlgobj.lastFormElement )
												{
													if(ev[1].keyCode)
														ev[1].keyCode=9;
													else
														ev[1].charCode=9;
													return true;
												}
												else
												{
													dlg.ok();
													return false;
												}
											 default:
												// alert(ev[1].keyCode); // bzw. charCode
												// ev[1].keyCode=9;
												// return true;
												Event.stopEvent(ev[1]);
												dlg.ok();
												return false;
											}
											break;
										 default:
											 return true;
										}
									 });
									this.cfg.setProperty("keylisteners",(this.cfg.getProperty("keylisteners")||[]).concat([k_ok_esc]));
								}
							 });
						dlgobj.setHeader(dlg.title||"");
						if ( Lang.isString(dlg.yuimoduls) && dlg.yuimoduls!="" )
							dlg.yuimoduls=dlg.yuimoduls.split(/,/);
						if (Lang.isArray(dlg.yuimoduls) && dlg.yuimoduls.length>0)
						{
							//alert(typeof YUILoader);
							//new YAHOO.util.YUILoader({require:dlg.yuimoduls,onSuccess:function(){
							//	dlgobj.render();
							//	dialogstack.push_and_show(dlgobj);
							//	//dlgobj.show();
							// }}).insert();
							var tempY=Y;	// neue Tanz seit 2.9.0, ändert bei insert() die globale Zuordnung von Y
							YUILoader.require(dlg.yuimoduls);
							YUILoader.onSuccess=function(){
								Y=tempY;
								dlgobj.render();
								dialogstack.push_and_show(dlgobj);
								//dlgobj.show();
							 };
							YUILoader.insert();
						}
						else
						{
							dlgobj.render();
							dialogstack.push_and_show(dlgobj);
							//dlgobj.show();
						}
					 }
								
					function dialogok()
					 {
						var onok=dlg.onok;
						if ( typeof dlg.onsubmit == 'string' && dlg.onsubmit!='' )
							dlg.onsubmit = new Function("dlg",dlg.onsubmit);
						if ( typeof dlg.onsubmit == 'function' )
						{
							var config=dlg.onsubmit.call(dlgobj.form,dlg);
							dlg.lastconfig=config;
							if ( typeof config != 'boolean' || config!=false )
							{
								//dialogstack.pop(dlgobj);
								if ( typeof dlg.onupload == 'string' && dlg.onupload!='' )
									dlg.onupload = new Function("o","dlg",dlg.onupload);
								if ( typeof dlg.onupload == 'function' )
								{
									dlgobj.callback={upload: function(o){
										var uploadconfig=dlg.onupload.call(dlgobj.form,o,dlg);
										if ( typeof uploadconfig != 'boolean' || uploadconfig!=false )
											onok({submit:config,upload:uploadconfig})
									 } };
									dlgobj.submit()
								}
								else
									onok(config);
								//dlgobj.hide();
								dialogstack.hide_and_pop();
							}
						}
						else
						{
							//dialogstack.pop(dlgobj);
							onok(null);
							//dlgobj.hide();
							dialogstack.hide_and_pop();
						}
					 }
					
					
					if ( typeof onok!="function" )
						onok=function(){};
					//Y.use("node","event",function() {
						if ( dlg!=null ) // Dialog geladen und verfügbar?
						{
							var dlgobj=dlg.dlgobj;
							dlg.onok=onok;
							if(dlgobj==null)
							{
								if ( dlg.varandfun )
								{
									//function vaf(dlg)
									// {
										try
										{
											eval(dlg.varandfun);
											if ( dlg.oncreate && typeof dlg.oncreate == 'string' )
											{
												var oncreate=dlg.oncreate;
												dlg.oncreate=function(dlg) {var f=new Function("dlg",oncreate);return f.call(this,dlg);};
											}
											if ( dlg.oninit && typeof dlg.oninit == 'string' )
											{
												var oninit=dlg.oninit;
												dlg.oninit=function(config,dlg) {var f=new Function("config","dlg",oninit);return f.call(this,config,dlg);};
											}
											if ( dlg.onupload && typeof dlg.onupload == 'string' )
											{
												var onupload=dlg.onupload;
												dlg.onupload=function(o,dlg) {var f=new Function("o","dlg",onupload);return f.call(this,o,dlg);};
											}
											if ( dlg.onsubmit && typeof dlg.onsubmit == 'string' )
											{
												var onsubmit=dlg.onsubmit;
												dlg.onsubmit=function(dlg) {var f=new Function("dlg",onsubmit);return f.call(this,dlg);};
												//dlg.onsubmit=function(dlg) {return eval(onsubmit)};
											}
											if ( dlg.oncancel && typeof dlg.oncancel == 'string' )
											{
												var oncancel=dlg.oncancel;
												dlg.oncancel=function(dlg) {var f=new Function("dlg",oncancel);return f.call(this,dlg);};
											}
										}
										catch (ex)
										{ alert('CATCH: '+ex.description); }
									//	return dlg;
									// }
									
									//var faf=new Function(dlg.varandfun+"\nreturn "+o.responseText);
									//vaf(dlg);
								}
								if ( dlg.html!=null && dlg.html!="" )
								{
									var con=cmslib.asyncRequest('GET', (dlg.html.indexOf("/")<0 ? '../../DIALOGS/':'')+dlg.html+'?'+new Date(), {
										success: createdlg,
										failure: function(o){alert('Dialog konnte nicht initialisiert werden _ '+o.responseText);},
										timeout: 10000
									 });
								}
								else
									createdlg(null);
							}
							else
							{
								dlg.dlgobj.cfg.setProperty("buttons",dlg.butsobj);
								dialogstack.push_and_show(dlgobj);
								//dlgobj.show();
								if ( typeof dlg.oninit == 'string' && dlg.oninit!='' )
									dlg.oninit = new Function("config","dlg",dlg.oninit);
								if ( typeof dlg.oninit == 'function' )
									dlg.oninit.call(dlgobj.form,config,dlg);
							}
						}
						else
							onok(null);
					// });
				 }
			 }(),
			istop:function (dlgobj)
			 {
				return dialogstack.is_top_dialog(dlgobj);
			 },
			initfields:function(config,dlg,form,exceptions)
			 {
				dlg.elements=[];
				dlg.config=config;
				var tabindex=0,tableindex=0;
				if (!dlg.listeners)
					dlg.listeners={};
				if ( dlg.fields )	// Initialisierung aufgrund dlg.fields
				{
					var ftab=dlg.fields;
					if ( !config )
						config={};
					function dotab(tab)
					 {
						 var tabstack=[],tabinitialized=false;
						 if ( !tab )
							return;
						 for ( var i=0 ; i<tab.length ; ++i )
						 {
							if ( typeof tab[i] == 'string' )
							{
								if ( config[tab[i]] != null )
									form[tab[i]].value=config[tab[i]];
								dlg.elements.push(form[tab[i]]);
								dlg.backref[tab[i]]=tab[i];
							}
							else
							{
								if ( tab[i].name )
									dlg.backref[tab[i].name]=tab[i];
								var type=tab[i].type;
								if ( type==null )
									type="text";
								var subtype=subtypes[type] || type;
								var formfield=type=='editor' ? Y.one('#'+(tab[i].id||tab[i].name)+'-inp') : Y.one(form[tab[i].name]);
								switch ( subtype )
								{
								 case "text": //
								 case "password": //
								 case "textarea": //
									var value=config[tab[i].name]!=null?config[tab[i].name]:tab[i].defaultval || '';
									if ( tab[i].defaultval )
										formfield.set("defaultValue",tab[i].defaultval);
									if ( tab[i].maxlen )
										formfield.set("maxLength",tab[i].maxlen);
									dlg.elements.push(type=='editor' ? Y.Node.getDOMNode(Y.one('#'+(tab[i].id||tab[i].name)+'-inp')) : form[tab[i].name]);
									if ( tab[i].tabkey && !tab[i].tabkeyinitialized )
									{
										Event.addListener(form[tab[i].name],"keydown",cmslib.inserttab);
										tab[i].tabkeyinitialized=true;
									}
									switch ( type )
									{
									 case "int": //
										if ( !Y.Lang.isNumber(value) )
										{	
											var v=parseInt(value);
											value=isNaN(v) ? '' : v
										}
										tab[i].keyrange="-\\d";
										tab[i].validate=function(value,dlg,config){
											var v=parseInt(value);
											if ( !isNaN(v) )
												this.value=v;
											return !isNaN(v) && (!config.min||v>=config.min) && (!config.max||v<=config.max);
										 };
										tab[i].errormsg='Eingabe außerhalb des zulässigen Bereichs ['+tab[i].min+' - '+tab[i].max+']';
										break;
									 case "float": //
										if ( !Y.Lang.isNumber(value) )
										{	
											var v=parseFloat(value);
											value=isNaN(v) ? '' : v
										}
										tab[i].keyrange="-\\d\\.,";
										tab[i].validate=function(value,dlg,config){
											var v=parseFloat(value);
											if ( !isNaN(v) )
												this.value=v;
											return !isNaN(v) && (!config.min||v>=config.min) && (!config.max||v<=config.max);
										 };
										tab[i].errormsg='Eingabe außerhalb des zulässigen Bereichs ['+tab[i].min+' - '+tab[i].max+']';
										break;
									 case "text": //
										if ( tab[i].datasource )
										{
											if ( !tab[i]._AC )
											{
												var ff=function(form,tab_i) {
													Y.use("node","yui2-datasource","yui2-autocomplete","yui2-animation",function(){
														var ds;
														var YAHOO=Y.YUI2;
														try
														{
															if ( Y.Lang.isString(tab_i.datasource) )
																tab_i.datasource=new Function(tab_i.datasource);
															ds=tab_i.datasource.call(form[tab_i.name]);
															//if ( !(ds instanceof YAHOO.util.DataSource) )
															//	ds=null;
														}
														catch (ex)
														{
															Y.error('CATCH: Fehler bei Initialisierung der DataSource für Feld '+tab_i.name+': '+ex.description);
														}
														if ( ds )
														{
															var inp=Y.one(form[tab_i.name]);
															inp.insert('<div class="cms_autocomplete"></div>',inp.next());
															var acelem=inp.next();
															tab_i._AC=new YAHOO.widget.AutoComplete(form[tab_i.name],Y.Node.getDOMNode(acelem),ds, {
																applyLocalFilter:true,
																queryMatchContains:true
															 });
															cmslib.unload.register(tab_i._AC);
														}
													});
												}
												ff(form,tab[i]);
											}
											
										}
										break;
									 
									 case "x-editor": //
										if ( !dlg.ediobj )
											dlg.ediobj={};
										if ( !dlg.ediobj[tab[i].name] )
										{
											formfield.set("id",Dom.generateId(null,tab[i].name+'-'));
											var edreg=Dom.getRegion(form[tab[i].name]);
											var edi=dlg.ediobj[tab[i].name]=new YAHOO.widget.Editor(form[tab[i].name], {
												height:edreg.height,
												width:edreg.width
											 });
											cmslib.unload.register(edi);
											edi.render();
											dlg.dlgobj.showEvent.subscribe(edi.show, edi, true);
											dlg.dlgobj.hideEvent.subscribe(edi.hide, edi, true);
										}
										Lang.later(10,this,function(){edi.show();});
										break;
									 case "editor": //
									 	if ( !dlg.ediobj )
											dlg.ediobj={};
										if ( !dlg.ediobj[tab[i].name] )
										{
											Y.use('editor-base', function () {
												var edit=dlg.ediobj[tab[i].name]=new Y.EditorBase({
													//content: value
												});
												edit.on('frame:ready', function() {
													this.__frameready=true;
												 });
												edit.render('#'+(tab[i].id||tab[i].name)+'-inp div.ed-textarea');
											 })
											
										}
									 	break;
									 case "autocomplete": //
										listeners.autocomplete=true;
										break;
									 case "date": //
										if ( !dlg.cal && tab[i].popupcal )
										{
											dlg.cal=true;
											Y.use("yui2-calendar","yui2-dom","node","event",function(){
												var YAHOO=Y.YUI2;
												var formnode=Y.one(form);
												//formnode.setStyle("position","relative");
												var calcont=formnode.appendChild(Y.Node.create('<div style="position:absolute;display:none;"></div>'));
												//Y.on("click",function(e){e.halt();e.stopImmediatePropagation();Y.log('calcont click halted');return false;},calcont);
												//Y.stamp(calcont);
												dlg.cal=new YAHOO.widget.Calendar(Y.Node.getDOMNode(calcont));
												dlg.cal.selectEvent.subscribe(function(e,a){
													window.clearTimeout(dlg._blurtimer);
													dlg._blurtimer=null;
													dlg._aktfield.focus();
													var sd=a[0][0];
													dlg._aktfield.set("value",sd[2]+'.'+sd[1]+'.'+sd[0]);
													this.hide();
													dlg._onchange.call(dlg._aktfield);
												 },dlg.cal,true);
												dlg.cal.showEvent.subscribe(function(e,a){ this.__isvisible=true; },dlg.cal,true);
												dlg.cal.hideEvent.subscribe(function(e,a){ this.__isvisible=false; },dlg.cal,true);
												dlg.cal.render();
												dlg.cal.hide();
											 });
										}
										formfield.addClass("input-calendar");
										tab[i].keyrange="-\\d\\.\\/";
										tab[i].validate=function(value,dlg,config){
											return /^[0-3]?\d\D[01]?\d\D([12]\d)?\d\d$|^$/.test(value);
										 };
										tab[i].errormsg='falsches Datumformat: tt.mm.jjjj';
										if ( Y.Lang.isDate(value) )
											value=value.getDate()+'.'+(value.getMonth()+1)+'.'+value.getFullYear();
										break;
									}
									formfield.setValue(value,dlg);
									break;
								 case "select": //
									if ( tab[i].datasource )
									{
										try
										{
											if ( Y.Lang.isString(tab[i].datasource) )
												tab[i].datasource=new Function("dlg","config",tab[i].datasource);
											tab[i]._ds=tab[i].datasource.call(formfield,dlg,tab[i]);
											tab[i]._ds.sendRequest("", {
												success:function(oRequest,oParsedResponse,tab_i) {
													var tt=oParsedResponse.results;
													var options=form[tab_i.name].options;
													for ( var it=0 ; it<tt.length ; ++it )
													{
														var newopt=document.createElement("OPTION");
														newopt.value=tt[it][tab_i.valfield]||tt[it][0];
														newopt.text=tt[it][tab_i.textfield]||tt[it][1];
														options.add(newopt);
														//options.append('<option value="'+tt[it][tab_i.valfield]+'">'+tt[it][tab_i.textfield]+'</option>');
													}
												 },
												 argument:tab[i] 
											 });
										}
										catch (ex)
										{
										}
										
											
									}
									if ( config[tab[i].name] != null )
									{
										for ( var j=0 ; j<tab[i].options.length ; ++j )
										{
											if ( typeof tab[i].options[j] == 'string' )
											{
												if ( config[tab[i].name]==tab[i].options[j] )
												{
													formfield.set("selectedIndex",j);
													//break;
												}
											}
											else
											{
												if ( config[tab[i].name]==tab[i].options[j].value )
												{
													formfield.set("selectedIndex",j);
													//break;
												}
											}
											if ( tab[i].options[j].selected || tab[i].options[j].checked )
											{
												form[tab[i].name].options[j].defaultSelected=true;
												//break;
											}
										}
									}
									// workaround wegen nicht funktionierendem change event auf yui3 bei ie
									formfield.set("onchange",function(tabi){return function(e){
										if ( dlg._onchange )
											dlg._onchange.call(Y.one(this));
									 };}(tab[i]));
									dlg.elements.push(form[tab[i].name]);
									break;
								 case "radio": //
									if ( config[tab[i].name] != null )
									{
										for ( var j=0 ; j<tab[i].options.length ; ++j )
										{
											if ( typeof tab[i].options[j] == 'string' )
											{
												if ( config[tab[i].name]==tab[i].options[j] )
												{
													form[tab[i].name][j].checked=true;
													//break;
												}
											}
											else
											{
												if ( config[tab[i].name]==tab[i].options[j].value )
												{
													form[tab[i].name][j].checked=true;
													//break;
												}
											}
											if ( tab[i].options[j].selected || tab[i].options[j].checked )
											{
												form[tab[i].name][j].defaultCecked=true;
												//break;
											}
											dlg.elements.push(form[tab[i].name][j]);
										}
									}
									break;
								 case "checkbox": //
									if ( tab[i].options instanceof Array && tab[i].options.length>0 )
									{
										//var cbobj=config[tab[i].name]||{};
										for ( var j=0 ; j<tab[i].options.length ; ++j )
											form[tab[i].name][j].checked=config[tab[i].options[j].value]
											//form[tab[i].name][j].checked=cbobj[tab[i].options[j].value]
									}
									else
									{
										if ( config[tab[i].name] != null )
											formfield.set("checked",config[tab[i].name]);
										else // if ( tab[i].checked )
											formfield.set("checked",!!tab[i].checked);
										if ( tab[i].checked )
											formfield.set("defaultChecked",true);
										dlg.elements.push(form[tab[i].name]);
									}
									break;
								 case "tabs": //
									if ( !tab[i].tabobj )
									{
										// var tv=tab[i].tabobj=new cmslib.simpleTabView(dlg.id+"-tab"+(tabindex++));
										// cmslib.unload.register(tv);
										cmslib.patchtabview();
										var tv=tab[i].tabobj=new cmslib.TabView(dlg.id+"-tab"+(tabindex++));
										//var tv=tab[i].tabobj=new YAHOO.widget.TabView(dlg.id+"-tab"+(tabindex++));
										cmslib.unload.register(tv);
										if ( tab[i].orientation )
											tv.set("orientation",tab[i].orientation);
										
										if (tab[i].ref)
											tab[i].ref.tabview=tv;
										if ( !dlg.maintab )
										{
											dlg.maintab=tv;
											if ( dlg.showdefaultbuttons == "backnextokcancel" && dlg.butsobj.length>=4 )
											{
												tv.subscribe("activeTabChange",function(){
													var bts=dlg.dlgobj.getButtons();
													var bckbtn=bts[bts.length-4];
													var nxtbtn=bts[bts.length-3];
													var ai=this.get("activeIndex");
													var alen=this.get("tabs").length;
													bckbtn.set("disabled",ai==0);
													nxtbtn.set("disabled",ai>=alen-1);
												 });
											}
										}
										tv.fireEvent("activeTabChange");
										var ttabs=tv.get("tabs");
										for ( var itt=0 ; itt<ttabs.length ; ++itt )
										{
											var tt=ttabs[itt];
											
											if ( tab[i].tabs[itt].onactivate || tab[i].tabs[itt].ondeactivate )
											{
												tt.subscribe("activeChange",function(e,t){
													if(e.newValue)
													{
														if ( typeof t.onactivate == 'string' )
															t.onactivate=new Function("dlg","tab","tabconfig",t.onactivate);
														if ( typeof t.onactivate == 'function' )
															t.onactivate.call(dlg.dlgobj.form,dlg,this,t);
													}
													else
													{
														if ( typeof t.ondeactivate == 'string' )
															t.ondeactivate=new Function("dlg","tab","tabconfig",t.onactivate);
														if ( typeof t.ondeactivate == 'function' )
															t.ondeactivate.call(dlg.dlgobj.form,dlg,this,t);
													}
												 },tab[i].tabs[itt]);
											}
											if ( tab[i].tabs[itt].helpurl && dlg.helpiframe )
											{
												Event.addListener(tt.get("labelEl"),"click",function (e,t)
												 {
													if ( t.helpurl && dlg.helpiframe )
														dlg.helpiframe.src=t.helpurl;
												 },tab[i].tabs[itt]);											
											}
										}
										var actidx=parseInt(config[tab[i].name]!=null?config[tab[i].name]:tab[i].defaultval) || 0;
										tv.set("activeIndex",actidx);
									}
									for ( var j=0 ; j<tab[i].tabs.length ; ++j )
										dotab(tab[i].tabs[j].fields);
									break;
								 case "tabelem": //
									var isfirsttab=false,tvobj;
									var field=tab[i];
									if ( field.initialized )
									{
										var idx=config[field.name];
										if ( field.name && field.tabobj )
										{
											if ( !isNaN(idx) )
												field.tabobj.set("activeIndex",idx);
											else
											{
												for ( var it=0,t=field.tabobj.get("tabs") ; it<t.length && t[it].get("label")!=idx ; ++it )
													;
												if ( it<t.length )
													field.tabobj.set("activeIndex",it);
												else
													field.tabobj.set("activeIndex",0);
											}
										}	
										break;
									}
									field.initialized=true;
									if ( tabstack.length==0 || field.ebene=='tiefer' )
									{
										cmslib.patchtabview();
										tvobj={tv:field.tabobj=new cmslib.TabView(dlg.id+"-tab"+(tabindex++)),idx:0,name:field.name};
										cmslib.unload.register(tvobj.tv);
										if ( field.orientation )
											tvobj.tv.set("orientation",field.orientation);
										if (field.ref)
											field.ref.tabview=tvobj.tv;
										if ( !dlg.maintab )
										{
											dlg.maintab=tvobj.tv;
											if ( dlg.showdefaultbuttons == "backnextokcancel" && dlg.butsobj.length>=4 )
											{
												tvobj.tv.subscribe("activeTabChange",function(){
													var ai=this.get("activeIndex");
													var bts=dlg.dlgobj.getButtons();
													var bckbtn=bts[bts.length-4];
													var nxtbtn=bts[bts.length-3];
													var alen=this.get("tabs").length;
													bckbtn.set("disabled",ai==0);
													nxtbtn.set("disabled",ai>=alen-1);
												 });
											}
										}
										tvobj.tv.fireEvent("activeTabChange"/*,{newValue:0,oldValue:-1}*/);
										tabstack.push(tvobj);
										isfirsttab=true;
									}
									else if ( field.ebene=='höher' )
									{
										tabstack.pop();
										tvobj=tabstack[tabstack.length-1];
									}
									else
										tvobj=tabstack[tabstack.length-1];
									
									if ( field.ebene!='höher' || field.label&&field.label!='' )
									{
										// Eventhandler setzen
										var tt=tvobj.tv.getTab(tvobj.idx);
										if ( field.onactivate || field.ondeactivate )
										{
											tt.subscribe("activeChange",function(e,t){
												if(e.newValue)
												{
													if ( typeof t.onactivate == 'string' )
														t.onactivate=new Function("dlg","tab","tabconfig",t.onactivate);
													if ( typeof t.onactivate == 'function' )
														t.onactivate.call(dlg.dlgobj.form,dlg,this,t);
												}
												else
												{
													if ( typeof t.ondeactivate == 'string' )
														t.ondeactivate=new Function("dlg","tab","tabconfig",t.ondeactivate);
													if ( typeof t.ondeactivate == 'function' )
														t.ondeactivate.call(dlg.dlgobj.form,dlg,this,t);
												}
											 },field);
										}
										if ( field.helpurl )
										{
											Event.addListener(tt.get("labelEl"),"click",function (e,t)
											 {
												if ( t.helpurl && dlg.helpiframe )
													dlg.helpiframe.src=t.helpurl;
											 },field);											
										}
										if ( tvobj.name && (config[tvobj.name]==tvobj.idx || config[tvobj.name]==field.label) )
											tvobj.tv.set("activeIndex",tvobj.idx);
										tvobj.idx++;
									}
									break;
								 case "block": //
									dotab(tab[i].fields);
									break;
								 case "table": //
									// if ( tab[i].tableobj )
									// 	cmslib.unload.destroy(tab[i].tableobj);
									// delete tab[i].tableobj;
									if ( !dlg.tableobj )
										dlg.tableobj={};
									//if ( dlg.tableobj[tab[i].name] )
									//	cmslib.unload.destroy(dlg.tableobj[tab[i].name]);
									//delete dlg.tableobj[tab[i].name];
									
									if ( dlg.tableobj[tab[i].name] )
									{
										var table=dlg.tableobj[tab[i].name];
										cmslib.unload.destroy(table);
										delete dlg.tableobj[tab[i].name];
										 // 
										 // //table.deleteRows(0,table.getRecordSet().getLength());
										 // var ds=table.getDataSource();
										 // ds.flushCache();
										 // if ( type=="table" )
										 // 	ds.liveData=config[tab[i].name];
										 // else
										 // {
										 // 	var tabdefdata=[],configdata=config[tab[i].name];
										 // 	for( var kd in configdata )
										 // 		tabdefdata.push({_key:kd,_val:configdata[kd]});
										 // 	 /* {
										 // 		var cdata=configdata[kd];
										 // 		if ( Lang.isArray(cdata) )
										 // 			tabdefdata.push({_key:kd,_val:cdata});
										 // 		else if ( Lang.isObject(cdata) )
										 // 			tabdefdata.push(Lang.merge(cdata,{_key:kd}));
										 // 		else if ( Lang.isValue(cdata) )
										 // 			tabdefdata.push({_key:kd,_val:cdata});
										 // 	  }
										 // 	 */
										 // 	ds.liveData=tabdefdata;
										 // }
										 // if ( !ds.liveData || !ds.liveData.length )
										 // 	ds.liveData=tab[i].defaultval instanceof Array ? tab[i].defaultval : [];
										 // ds.sendRequest(table.get("generateRequest")(null,table),{success:table.onDataReturnInitializeTable,failure:table.onDataReturnInitializeTable,argument:null,scope:table});
									}
									//else
									{
										Dom.get(tab[i].id).innerHTML='';
										var tabdef=Lang.isFunction(tab[i].tabdef) ? tab[i].tabdef() : tab[i].tabdef;
										if ( type=="table" )
											tabdef.data=config[tab[i].name];
										else
										{
											var tabdefdata=[],configdata=config[tab[i].name];
											for( var kd in configdata )
												tabdefdata.push({_key:kd,_val:configdata[kd]});
											 /* {
												var cdata=configdata[kd];
												if ( Lang.isArray(cdata) )
													tabdefdata.push({_key:kd,_val:cdata});
												else if ( Lang.isObject(cdata) )
													tabdefdata.push(Lang.merge(cdata,{_key:kd}));
												else if ( Lang.isValue(cdata) )
													tabdefdata.push({_key:kd,_val:cdata});
											  }
											 */
											tabdef.data=tabdefdata;
										}
										if ( !tabdef.data || !tabdef.data.length )
											tabdef.data=tab[i].defaultval instanceof Array ? tab[i].defaultval : [];
										tabdef.dialog=dlg; //.dlgobj;
										tabdef.dialogconfig=config;
										
										//var table=tab[i].tableobj=cmslib.getdatatable(tab[i].id,tabdef);
										var table=dlg.tableobj[tab[i].name]=cmslib.getdatatable(tab[i].id,tabdef);
										table.on("initEvent",function(){dlg.dlgobj.doCenterOnDOMEvent();});
										// if(table._syncScroll)
										// 	table.subscribe("postRenderEvent",function(){
										// 		Lang.later(0,this,function(){ table._syncScroll(); });	  
										// 	 });
										cmslib.unload.register(table);
										if(table.focel)
											dlg.elements.push(table.focel);
									}
									break;
								 case "html": //
									if ( tab[i].istpl && tab[i].div )
									{
										var tplstr=tab[i].html || "";
										tab[i].div.innerHTML=Lang.substitute(tplstr,config);
									}
									break;
								 case "bild": //
									var value=config[tab[i].name]!=null?config[tab[i].name]:tab[i].defaultval || '';
									if ( tab[i].defaultval )
										formfield.set("defaultValue",tab[i].defaultval);
									dlg.elements.push(form[tab[i].name]);
									formfield.setValue(value,dlg);
								 	Event.removeListener(form[tab[i].name+'-but']);
									Event.addListener(form[tab[i].name+'-but'],'click',function(e,tabi) {
										//var sfd=o.subformdef;
										debugger
										cmslib.loaddialog("/s/DIALOGS/bildupload",function(obj){
											form[tabi.name].value=obj.submit.altfilename;
										 },{submit:{altfilename:form[tabi.name].value}});
										
									 },tab[i],false );
								 	break;
								 
								 case "button": //
									if ( type=='popup' )
									{
										if ( !dlg.popupobj )
											dlg.popupobj={};
										if ( !dlg.popupobj[tab[i].name] )
											dlg.popupobj[tab[i].name]=config[tab[i].name];
										Event.removeListener(form[tab[i].name],'click');
										Event.addListener(form[tab[i].name],'click',function(e,o) {
											var sfd=o.subformdef;
											if ( Lang.isString(sfd) )
												cmslib.loaddialog(sfd,function(obj){
													dlg.popupobj[o.name]=obj;
												 },dlg.popupobj[o.name],true);
											else
												cmslib.dialog.show(sfd,Dom.generateId(),function(obj){
													dlg.popupobj[o.name]=obj;
												 },dlg.popupobj[o.name]);
										 },tab[i],false );
									}
									else if ( Lang.isArray(tab[i].options) )
									{
										for ( var ib=0 ; ib<tab[i].options.length ; ++ib )
										{
											var fun=tab[i].options[ib].onclick;
											if ( typeof fun == 'string' )
												fun=new Function("dlg","ev","config",fun);
											if ( tab[i].name && form[tab[i].name] )
											{
												Event.removeListener(tab[i].options.length>1?form[tab[i].name][ib]:form[tab[i].name],'click');
												if ( typeof fun == 'function' )
												{
													Event.addListener((tab[i].options.length>1?form[tab[i].name][ib]:form[tab[i].name]),'click',function(fun) {
														return function(e) {
															fun.call(form,dlg,e,config);
														 }
													 }(fun));
												}
											}
										}
									}
									break;
								 default:
								}
							}
						 }
					 }
					dotab(ftab);
					if ( dlg.elements.length>0 )
					{
						dlg.firstelem=dlg.dlgobj.firstElement=dlg.elements[0];
						dlg.lastelem=dlg.dlgobj.lastElement=dlg.elements[dlg.elements.length-1];
						dlg.dlgobj.focussableElements=dlg.elements;
						window.setTimeout(function(){try{dlg.firstelem.focus();}catch(ex){}},20);
					}
				}
				else	// Initialisierung aufgrund der Formularfelder
				{
				
				}
			 },
			getfields:function(dlg,form,exceptions)
			 {
				var config=Y.merge(dlg.config)||{};
				if ( dlg.fields )
				{
					var ftab=dlg.fields;
					function dotab(tab)
					 {
						 if ( !tab )
						 	return;
						 for ( var i=0 ; i<tab.length ; ++i )
						 {
						 	if ( typeof tab[i] == 'string' )
							{
								config[tab[i]]=form[tab[i]].value;
							}
							else
							{
								var type=tab[i].type;
								var formfield=type=='editor' ? Y.one('#'+(tab[i].id||tab[i].name)+'-inp') : Y.one(form[tab[i].name]);
								if ( type==null )
									type="text";
								switch ( type )
								{
								 case "x-editor": //
									var edi=dlg.ediobj[tab[i].name];
									if ( edi )
										edi.saveHTML();
								 case "editor": //
								 	// var edivalue=Y.one('#'+tab[i].id+'-edi').get('innerHTML');
								 	// formfield.setValue(edivalue,dlg);
								 	// config[tab[i].name]=formfield.getValue(dlg);
								 	// break;
								 case "autocomplete": //
								 case "text": //
								 case "password": //
								 case "textarea": //
								 case "bild": //
									config[tab[i].name]=formfield.getValue(dlg,tab[i]);
								 	break;
								 case "int": //
									config[tab[i].name]=parseInt(formfield.getValue(dlg,tab[i]),10);
								 	break;
								 case "float": //
									config[tab[i].name]=parseFloat(formfield.getValue(dlg,tab[i]));
								 	break;
								 case "date": //
									var v=formfield.getValue(dlg,tab[i]);
									var d=v.match(/^(\d+)\D(\d+)\D(\d+)/);
									if ( d && d.length==4 )
									{
										var t=parseInt(d[1],10);
										var m=parseInt(d[2],10)-1;
										var j=parseInt(d[3],10);
										if ( j<100 )
											j+=2000;
										config[tab[i].name]=!isNaN(t)&&!isNaN(m)&&!isNaN(j)
											?new Date(j,m,t)||v
											:v;
									}
									else
										config[tab[i].name]=new Date(v)||v;
								 	break;
								 case "select": //
									 config[tab[i].name]=form[tab[i].name].options[form[tab[i].name].selectedIndex].value;
								 	break;
								 case "radio": //
									for ( var j=0 ; j<tab[i].options.length ; ++j )
									{
										if ( form[tab[i].name][j].checked )
										{
											config[tab[i].name]=form[tab[i].name][j].value;
											break;
										}
									}
									break;
								 case "checkbox": //
									if ( tab[i].options instanceof Array && tab[i].options.length>0 )
									{
										//config[tab[i].name]={};
										for ( var j=0 ; j<tab[i].options.length ; ++j )
											config[tab[i].options[j].value]=form[tab[i].name][j].checked;
											//config[tab[i].name][tab[i].options[j].value]=form[tab[i].name][j].checked;
									}
									else
										config[tab[i].name]=form[tab[i].name].checked;
								 	break;
								 case "tabs": //
									if ( tab[i].name )
										config[tab[i].name]=tab[i].tabobj.get("activeIndex");
									for ( var j=0 ; j<tab[i].tabs.length ; ++j )
										dotab(tab[i].tabs[j].fields);
								 	break;
								 case "tabelem": //
								 	if ( tab[i].name && tab[i].tabobj)
										config[tab[i].name]=tab[i].tabobj.get("activeTab").get("label");
										//config[tab[i].name]=tab[i].tabobj.get("activeIndex");
									
								 	break;
								 
								 case "block": //
									dotab(tab[i].fields);
								 	break;
								 case "properties": //
									 //var tabdata=tab[i].tableobj.getDataTabObject();
									 var tabdata=dlg.tableobj[tab[i].name].getDataTabObject();
									 var outdata={};
									 for ( var itd=0 ; itd<tabdata.length ; ++itd )
									 {
									 	var cdata=tabdata[itd];
										if ( false ) // !cdata._val )
										{
											var key=cdata._key;
											delete cdata._key;
											outdata[key]=cdata;
										}
										else
											outdata[cdata._key]=cdata._val;
									 }
								 	config[tab[i].name]=outdata;
									break;
								 case "table": //
								 	//config[tab[i].name]=tab[i].tableobj.getDataTabObject();
								 	config[tab[i].name]=dlg.tableobj[tab[i].name].getDataTabObject();
								 	break;
								 case "popup": //
								 	config[tab[i].name]=dlg.popupobj[tab[i].name];
								 	break;
								 
								 default:
								}
							}
						 }
					 }
					dotab(ftab);
				}
				else
				{
					
				}
				return config;
			 },
			wait:function(startInSec,dauerInSec,fun)
			 {
				var endtime,endivl=null;
				waitdlg={
					width:"300px",
					modal:true,
					title:"",
					id:"wait-dlg",
					fields:[{type:"html",html:'<h3>Bitte warten ...</h3><p id="dlg-wait-showsek"><small>(automatischer Abbruch in <span id="dlg-wait-sek">x</span> Sekunden)</small></p>'}],
					oninit:function(config,dlg) {
						if (config)
						{
							YAHOO.util.Dom.setStyle("dlg-wait-showsek","display","");
							YAHOO.util.Dom.get("dlg-wait-sek").innerHTML=config;
							endtime=new Date().getTime()+config*1000;
							endivl=window.setInterval(function(){ YAHOO.util.Dom.get("dlg-wait-sek").innerHTML=Math.ceil((endtime-new Date().getTime())/1000) },500);
						}
						else
							YAHOO.util.Dom.setStyle("dlg-wait-showsek","display","none")
					 },
					 oncancel:function() {
						 if (endivl)
						 {
							 window.clearInterval(endivl);
							 endivl=null;
						 }
					  }
				 }
				if (waitdlgtim)
				{
					window.clearTimeout(waitdlgtim);
					waitdlgtim=null;
				}
				if(isNaN(startInSec))
					startInSec=0;
				waitdlgtim=window.setTimeout(function(){ 
					cmslib.dialog.show(waitdlg,"wait-dlg",null,dauerInSec); 
					waitdlg.dlgobj.cfg.setProperty("buttons",[]);
					waitdlg.dlgobj.cfg.setProperty("close",false);
					if (!isNaN(dauerInSec))
						waitdlgtim=window.setTimeout(function(){ waitdlg.dlgobj.cancel(); if(YAHOO.lang.isFunction(fun)) fun(); },dauerInSec*1000);
				 },startInSec*1000)
			 },
			stopwait:function()
			 {
				if (waitdlgtim)
				{
					window.clearTimeout(waitdlgtim);
					waitdlgtim=null;
				}
				if (waitdlg.dlgobj)
					waitdlg.dlgobj.cancel();
			 },
			mkfields:function(form,dlg,meta)
			 {
				/* Beschreibung der Feldstruktur
					fields=[
						"feldname",
						{	type:"text"|"password"|"textarea"|"checkbox"|"button"|"hidden"
							name:
							label:
							perms:
							defaultval:
							checked:
							inpattr:
							id:
							cssclass:
						},
						{	type:"radio"|"select",
							options: [
							 ],
							...
						},
						{	type:"html",
							html:,
							istpl:
						},
						{	type:"block",
							id:
							merge:
							fields: [
								...
							 ]
						},
						{	type:"tabs"
							label:
							ref:	// Referenzvariable zum Speichern der Tabview
							tabs: [ {
									tab:
									helpurl:
									onactivate:
									ondeactivate:
									fields: [
										...
									 ]
								},
								...
							 ]
						},
						{	type:"table"
							name:
							tabdef: {...}
						}
						...
					]
				*/
				// if ( !meta || typeof )
				// 	meta={elements:[]};
				// else if ( !meta.elements )
				// 	meta.elements=[];
				var tabindex=0,tableindex=0;
				if ( !dlg.focusableelements )
					dlg.focusableelements=[];
				function mkfieldsrek(fields,elem)
				 {
					if ( fields )
					{
						var rekstack=[],tabstack=[];
						for ( var fi=0 ; fi<fields.length ; ++fi )
						{
							var bottomdiv=document.createElement("div");
							Dom.addClass(bottomdiv,"bottom");
							var field=typeof fields[fi] == "string" 
								? {
									label:fields[fi],
									name:fields[fi],
									type:"text"
								  }
								: fields[fi];
							if ( field.type==null )
								field.type="text";
							var subtype=subtypes[field.type] || field.type;
							switch ( subtype )
							{
							 case "button": //
							 case "checkbox": //
							 case "radio": //
								var div=document.createElement("DIV");
								var lbl=document.createElement("LABEL");
								div.appendChild(lbl);
								var rdiv=document.createElement("DIV");
								rdiv.className=subtype+"controls dlg"
								Dom.setStyle(rdiv,"display","inline-block");
								div.appendChild(rdiv);
								lbl["for"]=field.name;
								lbl.innerHTML=field.label!=null?field.label:field.name;
								lbl.className=(field.cssclass!=null ? field.cssclass+" ":"")+subtype+"group dlg dlg-label";
								var inp=null;
								if ( field.id!=null )
								{
									div.id=field.id+"-div";
									lbl.id=field.id+"-lbl";
									//inp.id=field.id+"-inp";
								}
								var fieldoptions=field.options;
								if ( !(fieldoptions instanceof Array) || fieldoptions.length==0 )
									fieldoptions=[{text:'',value:field.defaultval||(field.type=='popup'?field.subformdef.title:'')||field.label||field.name,lstyles:"display:none;"}]
								for ( var iopt=0 ; iopt<fieldoptions.length ; ++iopt )
								{
									var optdiv=document.createElement("DIV");
									if ( subtype!="button" )
									{
										var optlbl=document.createElement("LABEL");
										optlbl.className=subtype+' dlg dlg-sublabel';
									}
									var inp;
									if ( YAHOO.env.ua.ie>0 && YAHOO.env.ua.ie<9 )
										inp=document.createElement('<INPUT name="'+field.name+'">');
									else
										inp=document.createElement('INPUT');
									inp.type=subtype;
									inp.name=field.name;
									if ( typeof fieldoptions[iopt] == 'string' )
									{
										inp.value=fieldoptions[iopt];
										if ( subtype!="button" )
											optlbl.innerHTML=fieldoptions[iopt];
									}
									else
									{
										inp.value=fieldoptions[iopt].value;
										if ( subtype!="button" )
										{
											optlbl.innerHTML=fieldoptions[iopt].text;
											inp.selected=fieldoptions[iopt].checked==true;
										}
									}
									inp.className=(field.cssclass!=null ? field.cssclass+" ":"")+subtype+' dlg dlg-input';
									if ( field.inpattr!=null )
									{
										for ( var ka in field.inpattr )
											inp[ka]=field.inpattr[ka];
									}
									optdiv.appendChild(inp);
									if ( subtype!="button" )
										optdiv.appendChild(optlbl);
									rdiv.appendChild(optdiv);
									Dom.setStyle(optdiv,"float","left");

									if ( fieldoptions[iopt].floatleft )
										Dom.setStyle(optdiv,'float','left');
									setstyles(inp,fieldoptions[iopt].fstyles || field.fstyles);
									if ( subtype!='button' )
										setstyles(optlbl,fieldoptions[iopt].lstyles);
									setstyles(optdiv,fieldoptions[iopt].cstyles);

									if ( !dlg.firstelem )
										dlg.firstelem=inp;
									dlg.lastelem=inp;
									dlg.focusableelements.push(inp);
								}
								div.appendChild(bottomdiv);
								setstyles(div,field.cstyles);
								setstyles(lbl,field.lstyles);
								elem.appendChild(div);
								break;
							 case "select": //
								var div=document.createElement("DIV");
								var lbl=document.createElement("LABEL");
								lbl["for"]=field.name;
								lbl.innerHTML=field.label!=null?field.label:field.name;
								var inp=null;
								if ( YAHOO.env.ua.ie>0 && YAHOO.env.ua.ie<9 )
									inp=document.createElement('<SELECT name="'+field.name+'"></SELECT>');
								else
									inp=document.createElement('SELECT');
								inp.name=field.name;
								if ( field.id!=null )
								{
									div.id=field.id+"-div";
									lbl.id=field.id+"-lbl";
									inp.id=field.id+"-inp";
								}
								for ( var iopt=0 ; iopt<field.options.length ; ++iopt )
								{
									var opt=document.createElement('OPTION');
									if ( typeof field.options[iopt] == 'string' )
										opt.value=opt.text=field.options[iopt];
									else
									{
										opt.value=field.options[iopt].value;
										opt.text=field.options[iopt].text;
										opt.selected=field.options[iopt].selected==true;
									}
									inp.options.add(opt);	
								}
								inp.className=lbl.className=(field.cssclass!=null ? field.cssclass+" ":"")+"select dlg dlg-select";
								if ( field.inpattr!=null )
								{
									for ( var ka in field.inpattr )
										inp[ka]=field.inpattr[ka];
								}

								if ( field.floatleft )
									Dom.setStyle(div,'float','left');
								setstyles(inp,field.fstyles);
								setstyles(lbl,field.lstyles);
								setstyles(div,field.cstyles);

								div.appendChild(lbl);
								div.appendChild(inp);
								div.appendChild(bottomdiv);
								elem.appendChild(div);
								if ( !dlg.firstelem )
									dlg.firstelem=inp;
								dlg.lastelem=inp;
								dlg.focusableelements.push(inp);
								break;
							 case "html": //
								if ( field.istpl )
								{
									var hdiv=document.createElement("div");
									elem.appendChild(hdiv);
									field.div=hdiv;
								}
								else
									elem.innerHTML+=field.html;
								break;
							 case "block": //
								if ( field.fields )
								{
									var div=document.createElement("DIV");
									div.id=field.id;
									div.className=field.cssclass;
									setstyles(div,field.blockstyles);
									elem.appendChild(div);
									mkfieldsrek(field.fields,div);
								}
								else if ( Lang.isString(field.ebene) )
								{
									var newid=!field.name || Dom.get(field.name ) ? Dom.generateId(null,field.name) : field.name;
										
									switch ( field.ebene )
									{
									 case "": //
										var div=document.createElement("DIV");
										div.id=newid;
										div.className=field.cssclass;
										setstyles(div,field.blockstyles);
										var papa=rekstack.length>0 ? rekstack.pop() : elem;
										papa.appendChild(div);
										rekstack.push(papa);
										elem=div;
										 	break;
									 case "tiefer": //
										var div=document.createElement("DIV");
										div.id=newid;
										div.className=field.cssclass;
										setstyles(div,field.blockstyles);
										elem.appendChild(div);
										rekstack.push(elem);
										elem=div;
									 	break;
									 case "höher": //
										if ( rekstack.length>0 )
											elem=rekstack.pop();
										if ( field.name&&field.name!='' || field.blockstyles&&field.blockstyles!='' || field.cssclass&&field.cssclass!='' )
										{
											var div=document.createElement("DIV");
											div.id=newid;
											div.className=field.cssclass;
											setstyles(div,field.blockstyles);
											var papa=rekstack.length>0 ? rekstack.pop() : elem;
											papa.appendChild(div);
											rekstack.push(papa);
											elem=div;
										}
									 	break;
									 
									}
								}
								break;
							 case "tabelem": //
								var isfirsttab=false,tv;
								if ( tabstack.length==0 || field.ebene=='tiefer' )
								{
									if ( field.name )
									{
										var inp;
										if ( YAHOO.env.ua.ie>0 && YAHOO.env.ua.ie<9 )
											inp=document.createElement('<INPUT name="'+field.name+'" type="hidden">');
										else
										{
											inp=document.createElement('INPUT');
											inp.name=field.name;
											inp.type="hidden";
										}
										if ( field.defaultval!=null )
											inp.value=field.defaultval;
										elem.appendChild(inp);
									}
									var tabdiv=document.createElement("DIV");
									tabdiv.id=dlg.id+"-tab"+(tabindex++);
									if ( field.cssclass )
										tabdiv.className=field.cssclass;
									Dom.addClass(tabdiv,"yui-navset");
									elem.appendChild(tabdiv);
									var nav=document.createElement("UL");
									Dom.addClass(nav,"yui-nav");
									tabdiv.appendChild(nav);
									var content=document.createElement("DIV");
									Dom.addClass(content,"yui-content");
									tabdiv.appendChild(content);
									tabstack.push(tv={nav:nav,content:content,tabdiv:tabdiv,name:field.name});
									isfirsttab=true;
								}
								else if ( field.ebene=='höher' )
								{
									tabstack.pop();
									tv=tabstack[tabstack.length-1];
								}
								else
									tv=tabstack[tabstack.length-1];
								
								if ( field.ebene!='höher' || field.label&&field.label!='' )
								{
									var navelem=document.createElement("LI");
									tv.nav.appendChild(navelem);
									var navelema=document.createElement("A");
									navelema.href='#';
									navelem.appendChild(navelema);
									var navelemaem=document.createElement("EM");
									navelema.appendChild(navelemaem);
									navelemaem.innerHTML=field.label;
									var tabelem=document.createElement("DIV");
									//tabelem.id=div.id+'-tab'+itvtabs;
									tv.content.appendChild(tabelem);
									if ( field.cssclass )
										tabelem.className=field.cssclass;
									var tabstab=Dom.getChildren(tv.content);
									if ( tabstab.length>1 )
										Dom.addClass(tabelem,"yui-hidden");
									else
										Dom.addClass(navelem,"selected");
									setstyles(tabelem,field.tabstyles);
									elem=tabelem;
								}
								else
								{
									var tabstab=Dom.getChildren(tv.content);
									if ( tabstab.length>0 )
										elem=tabstab[tabstab.length-1];
									else
									{
										elem=document.createElement("DIV");
										tv.content.appendChild(elem);
									}
								}
								break;
							 case "tabs": //
								if ( field.name )
								{
									var inp;
									if ( YAHOO.env.ua.ie>0 && YAHOO.env.ua.ie<9 )
										inp=document.createElement('<INPUT name="'+field.name+'" type="hidden">');
									else
									{
										inp=document.createElement('INPUT');
										inp.name=field.name;
										inp.type="hidden";
									}
									if ( field.defaultval!=null )
										inp.value=field.defaultval;
									elem.appendChild(inp);
								}
								var div=document.createElement("DIV");
								div.id=dlg.id+"-tab"+(tabindex++);
								Dom.addClass(div,"yui-navset");
								elem.appendChild(div);
								var nav=document.createElement("UL");
								Dom.addClass(nav,"yui-nav");
								div.appendChild(nav);
								var content=document.createElement("DIV");
								Dom.addClass(content,"yui-content");
								div.appendChild(content);
								for ( var itvtabs=0 ; itvtabs<field.tabs.length ; ++itvtabs )
								{
									var navelem=document.createElement("LI");
									if ( itvtabs==0 )
										Dom.addClass(navelem,"selected");
									nav.appendChild(navelem);
									var navelema=document.createElement("A");
									navelema.href='#';
									navelem.appendChild(navelema);
									var navelemaem=document.createElement("EM");
									navelema.appendChild(navelemaem);
									navelemaem.innerHTML=field.tabs[itvtabs].tab;
									var tabelem=document.createElement("DIV");
									tabelem.id=div.id+'-tab'+itvtabs;
									if ( itvtabs>0 )
										Dom.addClass(tabelem,"yui-hidden");
									content.appendChild(tabelem);
									mkfieldsrek(field.tabs[itvtabs].fields,tabelem)
									setstyles(tabelem,field.tabs[itvtabs].tabstyles);
								}
								break;
							 case "hidden": //
								var inp;
								if ( YAHOO.env.ua.ie>0 && YAHOO.env.ua.ie<9 )
									inp=document.createElement('<INPUT name="'+field.name+'" type="hidden">');
								else
								{
									inp=document.createElement('INPUT');
									inp.name=field.name;
									inp.type="hidden";
								}
								if ( field.defaultval!=null )
									inp.value=field.defaultval;
								elem.appendChild(inp);
								break;
							 case "bild": //
							 	var div=document.createElement("DIV");
								var lbl=document.createElement("LABEL");
								lbl["for"]=field.name;
								lbl.innerHTML=field.label!=null?field.label:field.name;
								var inp=null;
								if ( YAHOO.env.ua.ie>0 && YAHOO.env.ua.ie<9 )
									inp=document.createElement('<INPUT name="'+field.name+'">');
								else
									inp=document.createElement('INPUT');
								inp.type="text";
								inp.name=field.name;
								var but=null;
								if ( YAHOO.env.ua.ie>0 && YAHOO.env.ua.ie<9 )
									but=document.createElement('<INPUT name="'+field.name+'">');
								else
									but=document.createElement('INPUT');
								but.type="button";
								but.name=field.name+"-but";
								if ( field.id!=null )
								{
									div.id=field.id+"-div";
									lbl.id=field.id+"-lbl";
									inp.id=field.id+"-inp";
									but.id=field.id+"-but";
								}
								if ( field.defaultval!=null )
									inp.value=field.defaultval;
								but.value=field.buttontext||"Bild hochladen";
								div.className=inp.className=lbl.className=but.className=(field.cssclass!=null ? field.cssclass+" ":"")+subtype+' dlg dlg-text';
								
								if ( field.inpattr!=null )
								{
									for ( var ka in field.inpattr )
										inp[ka]=field.inpattr[ka];
								}
								
								if ( field.floatleft )
									Dom.setStyle(div,'float','left');
								setstyles(inp,field.fstyles);
								setstyles(lbl,field.lstyles);
								setstyles(div,field.cstyles);
								setstyles(but,field.bstyles);

								div.appendChild(lbl);
								div.appendChild(inp);
								div.appendChild(but);
								div.appendChild(bottomdiv);
								elem.appendChild(div);
								if ( !dlg.firstelem )
									dlg.firstelem=inp;
								dlg.lastelem=inp;
								dlg.focusableelements.push(inp);
								break;
							 case "properties": //
							 case "table": //
								var div=document.createElement("DIV");
								if ( field.label )
								{
									var lbl=document.createElement("LABEL");
									lbl["for"]=field.name;
									lbl.innerHTML=field.label!=null?field.label:field.name;
									div.appendChild(lbl);
								}
								var tabdiv=document.createElement("DIV");
								if ( false ) //field.id )
									div.id=(tabdiv.id=field.id)+"-table";
								else
									div.id=(tabdiv.id=field.id=Dom.generateId(div,form.getAttributeNode('id').value+'-'+field.name))+"-table";
								Dom.setStyle(tabdiv,"display","inline-block");
								if ( field.tabdef.width )
									Dom.setStyle(tabdiv,"width",field.tabdef.width);
								if ( field.tabdef.height )
									Dom.setStyle(tabdiv,"height",parseInt(field.tabdef.height)+28+'px');
								
								div.appendChild(tabdiv);
								div.appendChild(bottomdiv);
								elem.appendChild(div);
							 	break;
							 //case "checkbox": //
							 case "password" : //
							 case "text": //
							 case "textarea": //
							 default:
								var div=document.createElement("DIV");
								var lbl=document.createElement("LABEL");
								lbl["for"]=field.name;
								lbl.innerHTML=field.label!=null?field.label:field.name;
								var inp=null;
								switch ( subtype )
								{
								 case "editor": //
								 	break;
								 case "textarea": //
								 	if ( field.type=="editor" )
									{
										var fieldid=field.id||field.name
										var inp=document.createElement('DIV');
										inp.id=fieldid+"-inp"
										// inp.contentEditable=true;
										// inp.innerHTML=field.defaultval;
										var ednavig=document.createElement('DIV');
										ednavig.className="ed-navig";
										ednavig.innerHTML=[
												'<button class=ed-fett type="button"><strong>F</strong></button>',
												'<button class="ed-kursiv" type="button"><em>K</em></button>',
												'<button class="ed-underline" type="button"><u>U</u></button>',
												'<button class="ed-h1" type="button">Ü1</button>',
												'<button class="ed-h2" type="button">Ü2</button>',
												'<button class="ed-h3" type="button">Ü3</button>',
												'<button class="ed-p" type="button">n</button>',
												'<button class="ed-ul" type="button">List</button>',
												'<button class="ed-ol" type="button">Aufz</button>'
										 ].join("");
										Y.delegate('click',function(ev,fieldname){
											debugger;
											var fieldeditor=dlg.ediobj[fieldname];
											if ( fieldeditor )
											{
												switch ( this.get("className") )
												{
												 case "ed-fett": //
													fieldeditor.execCommand("bold");
													break;
												 case "ed-kursiv": //
													fieldeditor.execCommand("italic");
													break;
												 case "ed-underline": //
													fieldeditor.execCommand("underline");
													break;
												 case "ed-h1": //
												 	if ( Y.UA.ie )
														fieldeditor.execCommand("FormatBlock","<h1>");
													else
														fieldeditor.execCommand("heading","h1");
													break;
												 case "ed-h2": //
												 	if ( Y.UA.ie )
														fieldeditor.execCommand("FormatBlock","<h2>");
													else
														fieldeditor.execCommand("heading","h2");
													break;
												 case "ed-h3": //
												 	if ( Y.UA.ie )
														fieldeditor.execCommand("FormatBlock","<h3>");
													else
														fieldeditor.execCommand("heading","h3");
													break;
												 case "ed-p": //
												 	if ( Y.UA.ie )
														fieldeditor.execCommand("FormatBlock","<p>");
													else
														fieldeditor.execCommand("heading","p");
													break;
												 case "ed-ul": //
													fieldeditor.execCommand("InsertUnorderedList");
													break;
												 case "ed-ol": //
													fieldeditor.execCommand("InsertOrderedList");
													break;
												}
											}
										 },ednavig,'button',null,field.name);
										var edtextarea=document.createElement('DIV');
										edtextarea.className="ed-textarea";
										var edhidden;
										if ( YAHOO.env.ua.ie>0 && YAHOO.env.ua.ie<9 )
											edhidden=document.createElement('<INPUT name="'+field.name+'" type="hidden">');
										else
										{
											edhidden=document.createElement('INPUT');
											edhidden.name=field.name;
											edhidden.type="hidden";
										}
										inp.appendChild(ednavig);
										inp.appendChild(edhidden);
										inp.appendChild(edtextarea);
									}
									else
									{
										if ( YAHOO.env.ua.ie>0 && YAHOO.env.ua.ie<9 )
											inp=document.createElement('<TEXTAREA name="'+field.name+'"></TEXTAREA>');
										else
											inp=document.createElement('TEXTAREA');
									}
									break;
								 default:
									if ( YAHOO.env.ua.ie>0 && YAHOO.env.ua.ie<9 )
										inp=document.createElement('<INPUT name="'+field.name+(subtype=="checkbox" && field.checked==true ? '" checked="true"' : '"')+'>');
									else
										inp=document.createElement('INPUT');
									inp.type=subtype;
									if ( subtype=="checkbox" && field.checked==true )
										inp.checked=true;
								}
								inp.name=field.name;
								if ( field.id )
								{
									div.id=field.id+"-div";
									lbl.id=field.id+"-lbl";
									inp.id=field.id+"-inp";
								}
								if ( field.defaultval!=null && field.type!='editor' )
									inp.value=field.defaultval;
								div.className=inp.className=lbl.className=(field.cssclass!=null ? field.cssclass+" ":"")+subtype+' '+field.type+' dlg dlg-text';
								
								if ( field.inpattr!=null )
								{
									for ( var ka in field.inpattr )
										inp[ka]=field.inpattr[ka];
								}
								
								if ( field.floatleft )
									Dom.setStyle(div,'float','left');
								setstyles(inp,field.fstyles);
								setstyles(lbl,field.lstyles);
								setstyles(div,field.cstyles);

								div.appendChild(lbl);
								div.appendChild(inp);
								div.appendChild(bottomdiv);
								elem.appendChild(div);
								if ( !dlg.firstelem )
									dlg.firstelem=inp;
								dlg.lastelem=inp;
								dlg.focusableelements.push(inp);
								break;
							}
						} 
						//alert(this.outerHTML)
					}
				 }
				Dom.addClass(form,"dialog");
				
				if(!dlg.id)
					dlg.id=Dom.generateId();
				form.id=dlg.id+'-form';
				dlg.firstelem=dlg.lastelem=null;
				dlg.focusableelements=[];
				
				var globcss=[];
				if ( dlg.labelstyles && dlg.labelstyles!=='' )
					globcss.push('label.dlg { '+dlg.labelstyles+' }');
				if ( dlg.textstyles && dlg.textstyles!=='' )
					globcss.push('input.text { '+dlg.textstyles+' }');
				if ( dlg.acstyles && dlg.acstyles!=='' )
					globcss.push('div.cms_autocomplete { '+dlg.acstyles+' }');
				if ( dlg.textareastyles && dlg.textareastyles!=='' )
				{
					globcss.push('textarea.dlg { '+dlg.textareastyles+' }');
					//globcss.push('div.textarea { '+dlg.textareastyles+' }');
					globcss.push('div.ed-textarea { '+dlg.textareastyles+' }');
				}
				if ( dlg.selectstyles && dlg.selectstyles!=='' )
					globcss.push('select.dlg { '+dlg.selectstyles+' }');
				if ( dlg.checkboxstyles && dlg.checkboxstyles!=='' )
					globcss.push('input.checkbox { '+dlg.checkboxstyles+'; float:left;}');
				if ( dlg.checkboxlabelstyles && dlg.checkboxlabelstyles!=='' )
				{
					globcss.push('div.checkbox {float:left; clear:none;}');
					globcss.push('label.checkbox { '+dlg.checkboxlabelstyles+' }');
				}
				else
				{
					globcss.push('div.checkbox {float:none;clear:left;}');
					globcss.push('label.checkbox {clear:none;}');
				}
				if ( dlg.radiostyles && dlg.radiostyles!=='' )
					globcss.push('input.radio { '+dlg.radiostyles+' }');
				if ( dlg.radiolabelstyles && dlg.radiolabelstyles!=='' )
				{
					globcss.push('div.radio {float:left; clear:none;}');
					globcss.push('label.radio { '+dlg.radiolabelstyles+' }');
				}
				else
				{
					globcss.push('div.radio {float:none;clear:left;}');
					globcss.push('label.radio {clear:none;}');
				}
				//globcss.push('div.radiocontrols {border:1px red dotted;}');
				if ( dlg.buttonstyles && dlg.buttonstyles!=='' )
					globcss.push('input.button { '+dlg.buttonstyles+' }');

				if ( dlg.otherstyles && dlg.otherstyles!=='' )
				{
					var rtab=dlg.otherstyles.match(/[^{]*\{[^}]*\}/gm);
					if ( rtab!=null )
						globcss=globcss.concat(rtab);
				}
				var fullcsstab=dlg.csstab ? globcss.concat(dlg.csstab) : globcss;
				if(document.createStyleSheet) 
				{
					if ( !cmslib.stylesheet )
						cmslib.stylesheet=document.createStyleSheet();
					var stylesheet=cmslib.stylesheet;
					//stylesheet.addRule("#"+dlg.id+" label","color:red");
					for ( var is=0 ; fullcsstab!=null && is<fullcsstab.length ; ++is )
					{
						var r=fullcsstab[is].split(/[\{\}]/);
						var r00=r[0].split(/,/);
						for ( var ir00=0 ; ir00<r00.length ; ++ir00 )
							stylesheet.addRule("#"+dlg.id+"-form "+r00[ir00],r[1]);
					}
				} 
				else 
				{
					styleobj=document.createElement("style");
					document.getElementsByTagName("head")[0].appendChild(styleobj);
					//styleobj.appendChild(document.createTextNode("#"+dlg.id+" label {color:red;}"));
					var rstrtab=[];
					for ( var is=0 ; fullcsstab!=null && is<fullcsstab.length ; ++is )
					{
						var r=fullcsstab[is].split(/[\{\}]/);
						rstrtab.push("#"+dlg.id+"-form "+fullcsstab[is]);
					}
					styleobj.appendChild(document.createTextNode(rstrtab.join("\n")));
				}

				mkfieldsrek(dlg.fields,form);
			 },
			buttons: {
				vorlage:function (dlg,ev)
				 {
				 	debugger;
					var but=Event.getTarget(ev);
					//var but=dlg.dlgobj.getButtons()[0];
				 	if ( !dlg.vorlage )
					{
						dlg.vorlage=new YAHOO.widget.Menu(dlg.id+'-but',{xcontext:[but,"tl","bl"]});
						var self=this;
						dlg.vorlage.addItems([
								{text:"letzte Eingabe", onclick:{fn:function(e,ev,dlg){
									if ( dlg.lastconfig )
										cmslib.dialog.initfields(dlg.lastconfig,dlg,dlg.dlgobj.form);
								 },obj:dlg,scope:this}},
								{text:"Eingabe laden", onclick:{fn:function(e,ev,dlg){
									 vorlage_load(dlg);
								 },obj:dlg,scope:this}},
								{text:"Eingabe speichern", onclick:{fn:function(e,ev,dlg){ 
									vorlage_save(dlg);
								 },obj:dlg,scope:this}}
						 ]);
						//dlg.vorlage.render(dlg.dlgobj.footer);
						dlg.vorlage.render(document.body);
					}
					var butreg=Dom.getRegion(but);
					dlg.vorlage.cfg.setProperty("xy",[butreg.left,butreg.bottom+2]);
					dlg.vorlage.cfg.setProperty("zIndex",dlg.dlgobj.cfg.getProperty("zIndex")+1);
					dlg.vorlage.show();
				 }
			 }
		 },
		ds: {
		 	access: {
				getds:function (c,obj)
				 {
					var fieldsobj={};
					if ( !c.fields && obj && obj.config && obj.config.fields )
					{
						var fields=[];
						for ( var iof=0 ; iof<obj.config.fields.length ; ++iof )
						{
							fields.push(obj.config.fields[iof].dbkey);
							fieldsobj[obj.config.fields[iof].dbkey]=true;
						}
						c.fields=fields.join(",");
					}
					else if ( c.fields )
					{
						var ftab=c.fields.split(/,/);
						for ( var iof=0 ; iof<ftab.length ; ++iof )
							fieldsobj[ftab[iof]]=true;
					}
					
					var fds = new YAHOO.util.FunctionDataSource(function (qry,onok,onerror) {
						var tab=[];
						if ( qry )
						{
							c.pgsize=qry.pagination.rowsPerPage;
							c.aktpg=qry.pagination.page;
							c.sort=(qry.sortedBy && (qry.sortedBy.key in fieldsobj) && qry.sortedBy.key) || null;
							c.sortdir=qry.sortedBy && qry.sortedBy.dir==YAHOO.widget.DataTable.CLASS_DESC ? "desc" : "asc";
							c.filter=qry.filter;
						}
						cmslib.update("/s/PLUGINS/db.jsn",c.type||"select",c,onok,onerror);
					 });
					fds.makeConnection=function (oRequest, oCallback, oCaller)
					 {
						var tId=YAHOO.util.DataSourceBase._nTransactionId++;
						var _this=this;
						this.fireEvent("requestEvent", {
							tId:tId,
							request:oRequest,
							callback:oCallback,
							caller:oCaller
						 });
						function onsuccess(o)
						 {
							var robj=eval('('+o+')');
							if ( c.fields==="*" )
							{
								var rtab=[];
								var data=(robj&&robj.result&&robj.result.data)||[];
								for ( var ir=0 ; ir<data.length ; ++ir )
								{
									var outobj={};
									var d=data[ir];
									for ( var k in d )
										outobj[cmslib.mkvalidname(k)]=d[k];
									rtab.push(outobj);
								}
								robj.result.data=rtab;
							}
							_this.handleResponse(oRequest, robj.result, oCallback, oCaller, tId);
						 }
						function onfailure(oResponse)
						 {
							YAHOO.util.DataSourceBase.issueCallback(oCallback, [oRequest, oResponse], true, oCaller);
						 }
						
						this.liveData(oRequest,onsuccess,onfailure)
						//cmslib.update("db","select",conf,onsuccess,onfailure);
						return tId;
					 }
					fds.responseSchema = {
					 	resultsList: "data",
						metaFields:{totalRecords:"total"}
					 }
					fds.__connect=c;
					if ( obj && obj instanceof YAHOO.widget.DataTable )
					{
						obj.handleDataReturnPayload=function (req,resp,payload) {
							payload.totalRecords=resp.meta.totalRecords;
							return payload;
						 };
					}
					return fds;
				 },
				getrecord:function (c,fn,err)
				 {
					if ( c.db && c.table )
					{
						var p = {
							fields:c.fields||'*',
							db:c.db,
							table:c.table,
							pgsize:1,
							filter:{}
						 }
						for ( var k in c.key )
							p.filter[k]={type:"equals",val:c.key[k]};
						cmslib.update("/s/PLUGINS/db.jsn","select",p,function(o){
							var obj=eval("("+o+")");
							if ( obj.result.error )
							{
								if ( Lang.isFunction(err) )
								fn.call(c.scope||this,obj.result.error)
							}
							else if ( Lang.isFunction(fn) )
								fn.call(c.scope||this,obj.result.data[0])
						 },err);
					}
				 },
				 
				upd:function (ds,data,key,callback)
				 {
				 	debugger;
					var p;
					if ( ds instanceof YAHOO.util.DataSourceBase )
					{
						p=cmslib.clone(ds.__connect)
						var dbdata={};
						var rschem=ds.responseSchema.fields;
						for ( var ir=0; ir<rschem.length; ++ir )
						{
							if ( data[rschem[ir].key]===undefined )
								continue;
							if ( data[rschem[ir].key] instanceof Date )
								dbdata[rschem[ir].dbkey||rschem[ir].key]=cmslib.formatdate(data[rschem[ir].key]);
							else
								dbdata[rschem[ir].dbkey||rschem[ir].key]=data[rschem[ir].key];
						}
						p.data=dbdata;
					}
					else
					{
						p=ds;
						p.data=data;
					}
					p.key=key;
					cmslib.update("/s/PLUGINS/db.jsn","upd",p,function (o) {
						var obj=eval('('+o+')');
						if ( ds instanceof YAHOO.util.DataSourceBase )
						{
							var dbdata={};
							var rschem=ds.responseSchema.fields;
							for ( var ir=0; ir<rschem.length; ++ir )
								dbdata[rschem[ir].key]=obj.result.data[rschem[ir].dbkey||rschem[ir].key];
							obj.result.data=dbdata;
						}
						if ( Lang.isFunction(callback) )
							callback(obj);
						else if ( callback && callback.fn && Lang.isFunction(callback.fn) )
							callback.fn.call(callback.scope||this,obj);
					 },onerror);
					 //alert('update:\n'+JSON.stringify(p,null,2));
				 },
				add:function (ds,data,key,callback)
				 {
				 	debugger;
					var p;
					if ( ds instanceof YAHOO.util.DataSourceBase )
					{
						p=cmslib.clone(ds.__connect)
						var dbdata={};
						var rschem=ds.responseSchema.fields;
						for ( var ir=0; ir<rschem.length; ++ir )
						{
							if ( data[rschem[ir].key]===undefined )
								continue;
							if ( data[rschem[ir].key] instanceof Date )
								dbdata[rschem[ir].dbkey||rschem[ir].key]=cmslib.formatdate(data[rschem[ir].key]);
							else
								dbdata[rschem[ir].dbkey||rschem[ir].key]=data[rschem[ir].key];
						}
						p.data=dbdata;
					}
					else
					{
						p=ds;
						p.data=data;
					}
					p.key=key;
					cmslib.update("/s/PLUGINS/db.jsn","ins",p,function (o) {
						var obj=eval('('+o+')');
						if ( ds instanceof YAHOO.util.DataSourceBase )
						{
							var dbdata={};
							var rschem=ds.responseSchema.fields;
							for ( var ir=0; ir<rschem.length; ++ir )
								dbdata[rschem[ir].key]=obj.result.data[rschem[ir].dbkey||rschem[ir].key];
							obj.result.data=dbdata;
						}
						if ( Lang.isFunction(callback) )
							callback(obj);
						else if ( callback && callback.fn && Lang.isFunction(callback.fn) )
							callback.fn.call(callback.scope||this,obj);
					 },onerror);
					 //alert('new:\n'+JSON.stringify(p,null,2));
				 },
				del:function (ds,key,callback)
				 {
					var p=ds instanceof YAHOO.util.DataSourceBase ? cmslib.clone(ds.__connect) : ds;
					p.key=key;
					cmslib.update("/s/PLUGINS/db.jsn","del",p,function (o) {
						if ( Lang.isFunction(callback) )
							callback(eval('('+o+')'));
						else if ( callback && callback.fn && Lang.isFunction(callback.fn) )
							callback.fn.call(callback.scope||this,eval('('+o+')'));
					 },onerror);
					 //alert('delete:\n'+JSON.stringify(p,null,2));
				 }
			 },
			geonames: {
				getcountryds:function (c)
				 {
					var ds = new YAHOO.util.ScriptNodeDataSource( "http://ws.geonames.org/countryInfoJSON?lang=de", {
						responseType:YAHOO.util.DataSource.TYPE_JSON,
						responseSchema: {
							resultsList:"geonames",
							fields:["countryName","countryCode"]
						 }
					 });
					ds.ac_config={
						filterResults:function(req,fullresp,parsedresp,callback)
						 {
							var res=[];
							var results=parsedresp.results;
							var reqstr=req.split(/=/)[1];
							if ( reqstr )
							{
								var RE=new RegExp("^"+reqstr,"i");
								for ( var ir=0 ; ir<results.length ; ++ir )
									if ( RE.test(results[ir].countryName) )
										res.push(results[ir]);
							}
							res.sort(function(a,b) {
								return a.countryName<b.countryName 
									? -1 
									: a.countryName>b.countryName 
										? 1 
										: 0;
							 });
							parsedresp.results=res;
							return parsedresp;
						 },
						//minQueryLength:0,
						applyLocalFilter:true,
						queryMatchCase:false
					 };
					return ds;
				 },
				getpostalcodeds:function (c)
				 {
					var ds = new YAHOO.util.ScriptNodeDataSource( "http://ws.geonames.org/postalCodeSearchJSON?", {
						responseType:YAHOO.util.DataSource.TYPE_JSON,
						responseSchema: {
							resultsList:"postalCodes",
							fields:["postalCode","countryCode","placeName","adminName1","adminName2","adminName3"]
						 }
					 });
					return ds;
				 },
				getplacenameds:function (c)
				 {
					var ds = new YAHOO.util.ScriptNodeDataSource( "http://ws.geonames.org/postalCodeSearchJSON?", {
						responseType:YAHOO.util.DataSource.TYPE_JSON,
						responseSchema: {
							resultsList:"postalCodes",
							fields:["placeName","postalCode","countryCode","adminName1","adminName2","adminName3"]
						 }
					 });
					return ds;
				 }
			 }
		 },
		foreachplugin:function (plugin,fn)
		 {
			if ( typeof cms_config != "object" )
				cms_config={pluginconfig:{}};
			var allplugs=Dom.getElementsByClassName(plugin,"div");
			for ( var ia=0 ; ia<allplugs.length ; ++ia )
			{
				var el=allplugs[ia];
				var cfg=cms_data[el.id]||(cms_config.pluginconfig["CONFIG/"+cms_basepage+".js"]&&cms_config.pluginconfig["CONFIG/"+cms_basepage+".js"][el.id])||(cms_config.pluginconfig["CONFIG/"+cms_template+".js"]&&cms_config.pluginconfig["CONFIG/"+cms_template+".js"][el.id]);
				fn(el,cfg);
			}
		 },
		formatdate:function(d)
		 {
			 return !isNaN(d) ? ("0"+d.getDate()).slice(-2)+'.'+("0"+(d.getMonth()+1)).slice(-2)+'.'+d.getFullYear() : '';
		 },
		getplugin:function (plugin,idx)
		 {
			var allplugs=Dom.getElementsByClassName(plugin,"div");
			if ( idx<allplugs.length )
			{
				var el=allplugs[idx];
				var cfg=cms_data[el.id]||(cms_config.pluginconfig["CONFIG/"+cms_basepage+".js"]&&cms_config.pluginconfig["CONFIG/"+cms_basepage+".js"][el.id])||(cms_config.pluginconfig["CONFIG/"+cms_template+".js"]&&cms_config.pluginconfig["CONFIG/"+cms_template+".js"][el.id]);
				return {el:el,cfg:cfg};
			}
			else
				return null;
		 },
		getdatatable:function (id,def)
		 {
			var dt=def.scrollable || !isNaN(parseInt(def.width)) || !isNaN(parseInt(def.height)) ? new YAHOO.cms.XScrollingDataTable(id,def) : new YAHOO.cms.XDataTable(id,def);
			cmslib.unload.register(dt);
			return dt;
		 },
		helpurl:function (pg)
		 {
			 var server="http://web.contentmanager.cc";
			 var dir="cm20help";
			 var page="page.asp";
			 var code="template=cms_dialog_help";
			 return /\//.test(pg)?pg:[server,dir,page,code,pg].join("/");
		 },
		inserttab:function(e)
		 {
			if (e.keyCode==9)
			{
				r=document.selection.createRange();
				if(r!=null)
					r.text="\t";
				Event.stopEvent(e);
				return false;
			}
			else
				return true;
		 },
		isEqual:function (a,b)
		 {
			if ( (typeof a == 'undefined' && typeof b != 'undefined') || (typeof a != 'undefined' && typeof b == 'undefined') )
				return false;
			else if ( typeof a == 'undefined' && typeof b == 'undefined' )
				return true;
			else if ( a instanceof Date )
				return ""+a == ""+b;
			else if ( a instanceof Array )
			{
				if ( b instanceof Array && a.length == b.length )
				{
					for ( var ai=0 ; ai<a.length && cmslib.isEqual(a[ai],b[ai]) ; ++ai )
						;
					return ai==a.length;
				}
				else
					return false;
			}
			else if ( a instanceof Object )
			{
				if ( b instanceof Object )
				{
					for ( var ak in a )
						if ( !(ak in b && cmslib.isEqual(a[ak],b[ak])) )
							return false;
					for ( var bk in b )
						if ( !(bk in a) )
							return false;
					return true;
				}
				else
					return false;
			}
			else
				return a===b;
		 },
		loaddialog:function(dlg,onok,config,reload)	// benötigt YUI: dom event container connection json
		 {
			var dlgid=typeof dlg == 'string' 
				?dlg.replace(/.*\//,'')+'-dlg'+(reload?Dom.generateId():'')
				:dlg.id ? dlg.id : 'dlg';
			if ( (typeof dlg == 'object' || dialoge[dlg]!=null) && !reload )
				this.dialog.show(typeof dlg == 'object' ? dlg : dialoge[dlg],dlgid,onok,config);
			else
			{	// Dialogobj aus xxx.js laden
				cmslib.dialog.wait(2,10);
				var prefix=window.cms?'DIALOGS/':'../../DIALOGS/';
				cmslib.asyncRequest('GET', (dlg.indexOf("/")<0 ? prefix:'')+dlg+".js?"+new Date().getTime(), {
					success: function(o){
						cmslib.dialog.stopwait();
						var dlgobj=eval("("+o.responseText+")");
						if ( dlgobj!=null )
						{
							if ( !reload )
								dialoge[dlg]=dlgobj;
							dlgobj.filename=(dlg.indexOf("/")<0 ? prefix:'')+dlg+".js";
							cmslib.dialog.show(dlgobj,dlgid,onok,config);
						}
					 },
					failure: function(o){cmslib.dialog.stopwait();alert('Dialog konnte nicht initialisiert werden -'+o);},
					timeout: 10000
				 });
			}
		 },
		loaddata:function (fn,page,onerror,defaultobj)	// benötigt YUI: connect,json
		 {
			if ( page==null )
				page=cms_basepage+".jsn";
			 	// page=location.pathname.replace(/.*\/([^\/]+)\.\w+$/,"$1.jsn");
			var pgadr=(page.indexOf("/")<0 ? /cms\.asp/.test(location.pathname) ? 'DATA/' : '../../DATA/':'')+page
			cmslib.asyncRequest('GET', pgadr, {
				success: function(o){
					try
					{
						fn(eval("("+o.responseText+")"));
					}
					catch (ex)
					{
						alert("FEHLER: "+ex.description);
					}
					
				 },
				failure: defaultobj ? function () {
					try
					{
						fn(defaultobj);
					}
					catch (ex)
					{
						alert("FEHLER: "+ex.description);
					}
				 } : onerror || function(){
				 	alert('Fehler beim Laden der Daten\nBitte drücken Sie F5 und versuchen Sie es noch einmal');
				 },
				timeout: 10000,
				cache:false
			 });
		 },
		loadconfig:function (fn,page)	// benötigt YUI: connect,json
		 {
			//alert('loadconfig');
			if ( page==null )
			 	 page=location.pathname.replace(/.*\/([^\/]+)\.\w+$/,"$1.js");
			var pgadr=(page.indexOf("/")<0 ? '../../CONFIG/':'')+page
			// cms_config.pluginconfig["CONFIG/2.js"]={...}
			if (typeof cms_config=="undefined" || !YAHOO.lang.isObject(cms_config))
				cms_config={pluginconfig:[]};
			if (!YAHOO.lang.isArray(cms_config.pluginconfig))
				cms_config.pluginconfig=[];
			if (YAHOO.lang.isObject(cms_config.pluginconfig["CONFIG/"+pgadr]))
				fn(cms_config.pluginconfig["CONFIG/"+pgadr]);
			else
			{
				cmslib.asyncRequest('GET', pgadr, {
					success: function(o){
						try
						{
							//alert('o.responseText:\n'+o.responseText);
							fn(eval("("+o.responseText+")"));
						}
						catch (ex)
						{
							alert("FEHLER: "+ex.description);
						}
					 },
					failure: function(){alert('Fehler beim Laden der Konfigurationsdaten\nBitte drücken Sie F5 und versuchen Sie es noch einmal');},
					timeout: 10000,
					cache:false
				 });
			}
		 },
		alert:function (str,time)
		 {
			Y.use("yui2-container",function() {
				var YAHOO=Y.YUI2;
				try
				{
					if ( !alertdlg )
					{
						alertdlg=new YAHOO.widget.SimpleDialog("imgdlg1", {
								fixedcenter: true,
								visible: false,
								modal: false,
								draggable:true,
								close:true,
								icon:YAHOO.widget.SimpleDialog.ICON_INFO,
								buttons:[
									{text:"ok",handler:function(){this.hide();},isDefault:true}
								 ]
								//text:'<img src="" id="galery-imgdlg"><div id="galery-imgdlg-alt"></div>'
						 });
						cmslib.unload.register(alertdlg);
						alertdlg.render(document.body);
						alertdlg.hideEvent.subscribe(function () {
							if ( alertdlgtim )
								window.clearTimeout(alertdlgtim);
							alertdlgtim=null;
						 });
					}
					alertdlg.cfg.setProperty("text",str);
					alertdlg.bringToTop();
					if ( !alertdlg.cfg.getProperty("visible") )
						alertdlg.show();
					if ( alertdlgtim )
						window.clearTimeout(alertdlgtim);
					if ( time )
						window.setTimeout(function(){alertdlg.hide();},time);
					cmslib.stopEvent=true;
				}
				catch(ex)
				{
					//alert('CATCH: '+ex.description);
					return null;
				}
			});
		 },
		mkvalidname:function (s)
		 {
			return s.replace(/\W/g,function(a){return '_'+a.charCodeAt(0).toString(16);});
		 },
		mkplugin:function(refelem,pos,typ,subtyp,config,postprocess)
		 {
			//alert('mkplugin("'+refelem.id+'","'+pos+'","'+typ+'","'+subtyp+'",'+JSON.stringify(config)+')');
			cms.send({ cmd:"new",
			     typ:typ,
			     page:cms.designmode?"TEMPLATE/"+cms_basetemplate+".asp":"PAGE/"+cms_basepage+".htm",
			     id:subtyp,	//elem.id,
			     config:config,
			     refid:refelem.id,
			     pos:pos
			 },"Element konnte nicht angelegt werden",function(str){
				//alert(str);
				var robj=eval("("+str+")");
				if ( robj.reload || robj.refreshcss || (robj.update.scripts&&robj.update.scripts.length>0) || (robj.update.yuimoduls&&robj.update.yuimoduls.length>0) )
					window.setTimeout(function(){
						var w=typeof cms=='object' && cms.cwin ? cms.cwin : window;
						w.location.reload(true);
					 },200);
				else
				{
					var cmsstrukturtree=cms.getStrukturtree();
					//alert(pos);
					try
					{
						switch (pos)
						{
						 case "prependChild": 
							refelem.innerHTML=robj.html+refelem.innerHTML;
							if ( cms.expand[refelem.id] && cms.expand[refelem.id].tvnode && cmsstrukturtree )
							{
								var knopf=cms.expand[refelem.id].tvnode;
								cmsstrukturtree.removeChildren(knopf);
								knopf.expand();
							}
							break;
						 case "appendChild": 
							refelem.innerHTML+=robj.html;
							if ( cms.expand[refelem.id] && cms.expand[refelem.id].tvnode && cmsstrukturtree )
							{
								var knopf=cms.expand[refelem.id].tvnode;
								cmsstrukturtree.removeChildren(knopf);
								knopf.expand();
							}
							break;
						 case "insertBefore": 
						 case "insertAfter": 
							var ne=(refelem.ownerDocument||document).createElement("div");
							ne.innerHTML=robj.html;
							var firstchild=Dom.getFirstChild(ne);
							var nextsibling=Dom.getNextSibling(firstchild);
							var nextafternextsibling=nextsibling!=null ? Dom.getNextSibling(nextsibling) : null;
							var insertednode=null;
							if ( pos=="insertBefore" )
								insertednode=Dom.insertBefore(firstchild,refelem);
							else
								insertednode=Dom.insertAfter(firstchild,refelem);
						
							//var aktsibling=nextsibling;
							while ( nextsibling!=null )
							{
								insertednode=Dom.insertAfter(nextsibling,insertednode);
								nextsibling=nextafternextsibling;
								nextafternextsibling=nextsibling!=null ? Dom.getNextSibling(nextsibling) : null;
							}
							if ( cms.expand[refelem.id] && cms.expand[refelem.id].tvnode && cmsstrukturtree )
							{
								var papa=cms.expand[refelem.id].tvnode.parent;
								cmsstrukturtree.removeChildren(papa);
								papa.expand();
							}
						}
					}
					catch (ex)
					{
						// workaround gegen Fehler in IE7
						window.setTimeout(function(){
							var w=typeof cms=='object' && cms.cwin ? cms.cwin : window;
							w.location.reload(true);
						 },0);
					}
					
				}
				var configfilename="CONFIG/"+(cms.designmode?cms_template:cms_basepage).toLowerCase()+".js";
				if(typeof cms_config.pluginconfig == "undefined")
					cms_config.pluginconfig={};
				if(typeof cms_config.pluginconfig[configfilename] == "undefined")
					cms_config.pluginconfig[configfilename]={};
				cms_config.pluginconfig[configfilename][robj.id]=config;
				/*
				 if(robj.refreshcss)
				 	refreshcss(cms.designer?"../../STYLES/"+cms_template+".css":"../../STYLES/"+cms_basepage+".css");
				 for ( var i=0 ; i<robj.update.css.length ; ++i )
				 	refreshcss("../../STYLES/"+robj.update.css[i]);
				 for ( i=0 ; i<robj.update.scripts.length ; ++i )
				 {
				 	//alert("loading: ../../SCRIPTS/"+robj.update.scripts[i]);
				 	YAHOO.util.Get.script("../../SCRIPTS/"+robj.update.scripts[i]);
				 }
				 YUILoader.require(robj.update.yuimoduls);
				 YUILoader.onSuccess=null;
				 YUILoader.insert();
				*/
				if ( typeof postprocess == 'function' )
					postprocess();
			  });
		 },
		savedata:function (dataobj,page)	// benötigt YUI: connect,json
		 {
			if ( page==null )
				page=cms_basepage+".jsn";
				//page=location.pathname.replace(/.*\/([^\/]+)\.\w+$/,"$1.jsn");
			var pgadr=(page.indexOf("/")<0 ? '../../DATA/':'')+page;
			send({cmd:"savetext",filename:pgadr.replace(/^(\.\.\/)+/,""),content:YAHOO.lang.JSON.stringify(dataobj,null,'\t')});
		 },
		patchtabview:function()
		 {	// Patch gegen Probleme mit Speicherverwaltung im IE
			if ( !cmslib.TabView && YUILoader.inserted.tabview )
			{
				var ACTIVE = 'active',
					ACTIVE_INDEX = 'activeIndex',
					ACTIVE_TAB = 'activeTab',
					CONTENT_EL = 'contentEl',
					ELEMENT = 'element',
					Y=YAHOO.util;
		
				var TV1=function(el,attr)
				 {
					TV1.superclass.constructor.call(this,el,attr);
				 }
				
				Lang.extend(TV1,YAHOO.widget.TabView, {
					initAttributes: function(attr) {
					    
						    YAHOO.widget.TabView.superclass.initAttributes.call(this, attr);
						    
						    if (!attr.orientation)
							attr.orientation = 'top';
						    
						    var el = this.get(ELEMENT);
					
						    if (!Dom.hasClass(el, this.CLASSNAME))
							Dom.addClass(el, this.CLASSNAME);        
						    
						    this.setAttributeConfig('tabs', {
							value: [],
							readOnly: true
						     });
					
						    this._tabParent = this.getElementsByClassName(this.TAB_PARENT_CLASSNAME, 'ul' )[0] || this._createTabParent();
						    this._contentParent = this.getElementsByClassName(this.CONTENT_PARENT_CLASSNAME, 'div')[0] ||  this._createContentParent();
						    
						    this.setAttributeConfig('orientation', {
							value: attr.orientation,
							method: function(value) {
							    var current = this.get('orientation');
							    this.addClass('yui-navset-' + value);
							    
							    if (current != value) {
								this.removeClass('yui-navset-' + current);
							    }
							    
							    if (value === 'bottom') {
								this.appendChild(this._tabParent);
							    }
							}
						     });
						    
						    this.setAttributeConfig(ACTIVE_INDEX, {
							value: attr.activeIndex,
							validator: function(value) {
							    var ret = true;
							    if (value && this.getTab(value).get('disabled')) { // cannot activate if disabled
								ret = false;
							    }
							    return ret;
							}
						     });
						    
						    this.setAttributeConfig(ACTIVE_TAB, {
							value: attr.activeTab,
							method: function(tab) {
							    var activeTab = this.get(ACTIVE_TAB);
							    
							    if (tab) {
								tab.set(ACTIVE, true);
							    }
							    
							    if (activeTab && activeTab !== tab) {
								activeTab.set(ACTIVE, false);
							    }
							    
							    if (activeTab && tab !== activeTab) { // no transition if only 1
								this.contentTransition(tab, activeTab);
							    } else if (tab) {
								tab.set('contentVisible', true);
							    }
							},
							validator: function(value) {
							    var ret = true;
							    if (value && value.get('disabled')) { // cannot activate if disabled
								ret = false;
							    }
							    return ret;
							}
						     });
					
						    this.on('activeTabChange', this._onActiveTabChange);
						    this.on('activeIndexChange', this._onActiveIndexChange);
					
						    YAHOO.log('attributes initialized', 'info', 'TabView');
						    if ( this._tabParent )
							this._initTabs();
						    
						    // Due to delegation we add all DOM_EVENTS to the TabView container
						    // but IE will leak when unsupported events are added, so remove these
						    this.DOM_EVENTS.submit = false;
						    this.DOM_EVENTS.focus = false;
						    this.DOM_EVENTS.blur = false;
						     this.DOM_EVENTS.mouseenter = false;
						     this.DOM_EVENTS.mouseleave = false;
						     this.DOM_EVENTS.mouseover = false;
						     this.DOM_EVENTS.mouseout = false;
						    this.DOM_EVENTS.change = false;
						     // this.DOM_EVENTS.mousemove = false;
						     // this.DOM_EVENTS.keydown = false;
						     // this.DOM_EVENTS.keypress = false;
						     // this.DOM_EVENTS.keyup = false;
						     // this.DOM_EVENTS.dblclick = false;
						    this.DOM_EVENTS.click = true;
						    this.DOM_EVENTS.mousedown = true;
						    this.DOM_EVENTS.mouseup = true;
						    
						    //for (var type in {click:true,mouseup:true,mousedown:true}) {
						    for (var type in this.DOM_EVENTS) 
						    {
							if ( YAHOO.lang.hasOwnProperty(this.DOM_EVENTS, type) && this.DOM_EVENTS[type] )
							    this.addListener.call(this, type, this.DOMEventHandler);
						    }
					 }
				 });
				
				cmslib.TabView=TV1;
				return true;
			}
			else
				return false;
		 },
		popupimg_aktlink:null,
		popupimg_linklist:null,
		popupimg:function(t,gtab,config)	// benötigt YUI: container,selector
		 {
			var noscale=Dom.getAncestorByClassName(t,"noscale")!=null;
			try
			{
				function showpicture(href,alt)
				 {
					var img=new Image();
					img.onload=function() {
						if (!noscale)
						{
							var maxheight=(Dom.getViewportHeight()-120);//*0.8;
							var maxwidth=(Dom.getViewportWidth()-40);//*0.9;
							imgdlg.hide();
							var h=this.height;
							var w=this.width;
							if ( h>maxheight )
							{
								w*=maxheight/h;
								h=maxheight;
							}
							if ( w>maxwidth )
							{
								h*=maxwidth/w;
								w=maxwidth;
							}
							imgdlgsrc.width=w;
							imgdlgsrc.height=h;
						}
						else
						{
							var maxheight=(Dom.getViewportHeight()-80);//*0.8;
							var maxwidth=(Dom.getViewportWidth()-40);//*0.9;
							Dom.setStyle(imgdlg.body,"width",Math.min(this.width,maxwidth)+'px');
							Dom.setStyle(imgdlg.body,"height",Math.min(this.height,maxheight)+'px');
							Dom.setStyle(imgdlg.body,"overflow",'scroll');
						}
						imgdlgsrc.src=this.src;
						//imgdlg.render(document.body); 
						if ( alt )
							imgdlgalt.innerHTML=alt;
						imgdlg.show();
					 };
					img.src=href;
				 }
				function checkgaleryandshowpicture()
				 {
					if ( gtab instanceof Array )
					{
						cmslib.popupimg_linklist=gtab;
						var href=typeof t == 'string' ?  t : t.tagName == 'A' ? t.href : t.src;
						for ( var ig=0 ; ig<cmslib.popupimg_linklist.length && href!=cmslib.popupimg_linklist[ig].src ; ++ig )
							;
						if ( ig==cmslib.popupimg_linklist.length )
						{
							cmslib.popupimg_aktlink=0;
							cmslib.popupimg_linklist.unshift({src:href,alt:''});
						}
						else
							cmslib.popupimg_aktlink=ig;
					}
					else
					{
						var gal=Dom.getAncestorByClassName(t,"bhv-image-galery");
						cmslib.popupimg_linklist=[];
						if ( gal!=null )
						{
							var imglist=YAHOO.util.Selector.query("a>img",gal);
							cmslib.popupimg_aktlink=null;
							for ( var ii=0 ; ii<imglist.length ; ++ii )
							{
								if ( imglist[ii].parentNode.href.search(/\.jpe?g$|\.gif$|\.png$|\.bmp$|\.tiff?$/i)>=0 )
									cmslib.popupimg_linklist.push({src:imglist[ii].parentNode.href,alt:imglist[ii].alt,elem:imglist[ii]});
								if ( imglist[ii].parentNode==t )
									cmslib.popupimg_aktlink=ii;
							}
						}
					}
					var buts=config && config.buttons instanceof Array ? config.buttons : [];
					if ( cmslib.popupimg_linklist.length>1 )
					{
						imgdlg.cfg.setProperty("buttons",[
							{text:"&lt;", handler:function(){
								if(cmslib.popupimg_aktlink>0)
								{
									--cmslib.popupimg_aktlink;
									showpicture(cmslib.popupimg_linklist[cmslib.popupimg_aktlink].src,cmslib.popupimg_linklist[cmslib.popupimg_aktlink].alt);
							 	}
								if(cmslib.popupimg_aktlink==0)
									Dom.setStyle(imgdlg.getButtons()[0].get("element"),"visibility","hidden");
							 	if(cmslib.popupimg_aktlink<cmslib.popupimg_linklist.length-1)
									Dom.setStyle(imgdlg.getButtons()[2].get("element"),"visibility","");
								
							 } }, 
							{text:"x", handler:function(){imgdlg.hide();} },
							{text:"&gt;", handler:function(){
								if(cmslib.popupimg_aktlink<cmslib.popupimg_linklist.length-1)
								{
									++cmslib.popupimg_aktlink
									showpicture(cmslib.popupimg_linklist[cmslib.popupimg_aktlink].src,cmslib.popupimg_linklist[cmslib.popupimg_aktlink].alt);
							 	}
								if(cmslib.popupimg_aktlink>0)
									Dom.setStyle(imgdlg.getButtons()[0].get("element"),"visibility","");
							 	if(cmslib.popupimg_aktlink==cmslib.popupimg_linklist.length-1)
									Dom.setStyle(imgdlg.getButtons()[2].get("element"),"visibility","hidden");
							 } } 
						 ].concat(buts));
						if(cmslib.popupimg_aktlink==0)
							Dom.setStyle(imgdlg.getButtons()[0].get("element"),"visibility","hidden");
						if(cmslib.popupimg_aktlink==cmslib.popupimg_linklist.length-1)
							Dom.setStyle(imgdlg.getButtons()[2].get("element"),"visibility","hidden");
					}
					else
						imgdlg.cfg.setProperty("buttons",buts);
					if ( typeof t == 'string' )
						showpicture(t,cmslib.popupimg_linklist[cmslib.popupimg_aktlink]?cmslib.popupimg_linklist[cmslib.popupimg_aktlink].alt:null);
					else
					{
						switch ( t.tagName )
						{
						 case "IMG": //
							showpicture(t.src,t.alt);
							break;
						 case "A": //
							showpicture(t.href,t.title);
							break;
						 default:
						}
					}
					
				 }
				if ( !imgdlg )
				{
					imgdlg=new YAHOO.widget.SimpleDialog("imgdlg1", {
							fixedcenter: true,
							visible: false,
							modal: true,
							draggable:false,
							close:true,
							text:'<img src="" id="galery-imgdlg"><div id="galery-imgdlg-alt"></div>',
							width:config&&config.width,
							height:config&&config.height
					});
					cmslib.unload.register(imgdlg);
					imgdlg.renderEvent.subscribe(function(){
						imgdlgsrc=Dom.get("galery-imgdlg");
						imgdlgalt=Dom.get("galery-imgdlg-alt");
						Event.on(imgdlgsrc,"click",function(ev){imgdlg.hide();});
						checkgaleryandshowpicture();
					 });
					imgdlg.render(document.body);
				}
				else
					checkgaleryandshowpicture()
				cmslib.stopEvent=true;
				return imgdlg;
			}
			catch(ex)
			{
				//alert('CATCH: '+ex.description);
				return null;
			}
		 },
		popupswf:function(t,f,ver,b,h,flv,par,att)
		 {
			function showswf()
			 {
				swfdlg.setBody('<div style="height: 20px;"></div><div id=swfdiv></div>');
				swfobject.embedSWF(f,"swfdiv",b,h,ver,null,flv,par,att);
				window.setTimeout(function(){swfdlg.center();swfdlg.show();},200);
			 }
			try
			{
				if (swfobject.hasFlashPlayerVersion(ver))
				{
					if ( !swfdlg )
					{
						swfdlg=new YAHOO.widget.SimpleDialog("swfdlg", {
								fixedcenter: true,
								visible: false,
								modal: true,
								draggable:false,
								close:true
						 });
						cmslib.unload.register(swfdlg);
						swfdlg.renderEvent.subscribe(function(){
							swfdlgsrc=Dom.get("swfdlg");
							Event.on(swfdlgsrc,"click",function(ev){swfdlg.hide();});
							showswf();
						 });
						swfdlg.hideEvent.subscribe(function(){
							swfdlg.setBody('');
						 });
						swfdlg.render(document.body);
					}
					else
						showswf()
					cmslib.stopEvent=true;
					return false;
				}
				else
					return this.popupimg(t);
			}
			catch(ex)
			{
				//alert('CATCH: '+ex.description);
				return true;
			}
		 },
		prompt:function(label,defaultvalue,fnok)
		 {
			cms.loaddialog("/s/DIALOGS/prompt",fnok,{defaulttext:defaultvalue,prompttext:label});
		 },
		TabView:null,
		update:function(modul,method,param,onok,onerror,config)	// benötigt YUI: connect,json
		 {
			send({cmd:"userdef",modul:modul,method:method,param:param},onerror,onok,config);
		 },
		sync: function()	// wait.notify(wid), wait.run(wid,fn)
		 {
			 var wref={};
			 return {
				notify: function(wid,obj)
				{
					//alert('notify');
					if (!wref[wid])
						wref[wid]={open: false, fntab:[], obj:obj};
					else if (wref[wid].open)
					{
						wref[wid].open=false;
						wref[wid].obj=obj;
						for(var ifn=0; ifn<wref[wid].fntab.length; ++ifn)
							wref[wid].fntab[ifn](obj);
					}
				},
				wait: function(wid,fn)
				{
					//alert('run');
					if (!wref[wid])
						wref[wid]={open: true, fntab:[fn]};
					else if (wref[wid].open)
						wref[wid].fntab.push(fn);
					else
						fn(wref[wid].obj);
				}
			}
		 }(),
		init:function ()
		 {
			if ( typeof YAHOO == 'object' )
			{
				Dom=YAHOO.util!=null ? YAHOO.util.Dom : null;
				Event=YAHOO.util!=null ? YAHOO.util.Event : null;
				Lang=YAHOO.lang;
				JSON=YAHOO.lang!=null ? YAHOO.lang.JSON : null;
				//cmslib.patchtabview();
			}
			Event.addListener(window,"unload",cmslib.unload.destroyall);
			if ( window.Y )
				Y.use("node","event");
			else if ( typeof YUI !=='undefined' )
			{
				YUI().use("node","event",function(YY) {
					window.Y=YY;
				 });
			}
			//YAHOO.util.Element.prototype.__init=YAHOO.util.Element.prototype.init;
			//YAHOO.util.Element.prototype.init=function() {cmslib.unload.register(this); this.__init.apply(this,arguments);}
			//YAHOO.widget.Module.prototype.__init=YAHOO.widget.Module.prototype.init;
			//YAHOO.widget.Module.prototype.init=function() {cmslib.unload.register(this); this.__init.apply(this,arguments);}
		 }
		
	 }
 }();
cms_inittab.push(cmslib.init);


