/**
* 
*  jQuery xuServer Framework
*  @requires jQuery v1.2.6 or greater
*
*  Copyright(c)  Gael JAUNIN 
*  Dual licensed under the MIT (MIT_LICENSE.txt)
*  and GPL (GPL_LICENSE.txt) licenses
*  http://www.opensource.org/licenses/mit-license.php
*    
*  Version: 1.2.2
*  http://www.xuserver.net/
*  
*/

function xuClient(options){
	var defaults = {
		screen:$('body')
	};
    var options = $.extend(defaults, options);
    
    var xuClient = this;
    xuClient.module="xam";
    xuClient.concept="user";
    xuClient.id="user_id";
    
    var dontSlide = false;
    xuClient.host = "http://"+window.location.host+XUSERVER_URL_XMLCOM;
	xuClient.tasks={};		  
	
	xuClient.xumls={};
	xuClient.obj = xuNew();
	
	xuClient.screen = options.screen;
    
    xuClient.ui = $( '<div id="xuclient-ui" style="margin:0px;padding:0px;border:0px" class="xuserver" ></div>' ).css('z-index','999').css('width','100%').css('top','0px').css('left','0px');//.css('position','absolute')
    xuClient.ui.body = $('<div id="xuclient-ui-body" style="display:none;border-bottom:0px" class="xuserverbutton ui-widget  ui-widget-content"></div>');
    xuClient.ui.taskbar = $('<div id="xuclient-ui-taskbar" style="padding:3px 0px 3px 2px;cursor:pointer" title="home" class="xuserverbutton ui-widget ui-state-default ui-widget-content ui-corner-bottom" ></div>');
    xuClient.ui.icon = $( '<img id="xuclient-ui-taskbar-icon"  style="margin:0px;width:24px;height:24px;" src="'+xuClient.host+'../modules/xam/images/sys/desktop.png" />' );
    xuClient.ui.search = $("<input id='xuclient-ui-taskbar-search' type='text' style='width:200px' />").attr("value","search ...").css("color","lightgrey").css("font-style","italic");
    xuClient.ui.spinner = $( '<img id="xuclient-ui-taskbar-spinner" style="display:none;margin:0px;width:16px;height:16px;" src="'+xuClient.host+'../modules/xam/images/sys/loading.gif" />' );
    
    xuClient.screenMenuButtonset = $( '<span id="xuclient-ui-taskbar-span" />' );
    xuClient.br= $('<div id="xuclient-ui-float-breaker" style="clear:both;height:1px;" />'); 
    
    xuClient.ui.taskbar.append(xuClient.ui.icon).append(xuClient.ui.search).append(xuClient.ui.spinner).append(xuClient.screenMenuButtonset);
    //$('body').prepend(xuClient.ui.append(xuClient.ui.body).append(xuClient.ui.taskbar));
    
    this.taskLoad = function(options){
    	var defaults = {
    			data:"",
    			newtask:true
    		};
    	var options = $.extend(defaults, options);
    	var testName = "";
    	if(typeof options.data=="string"){
    		testName = options.data;
    	}else{
    		testName = options.data.attr("module")+"_"+options.data.attr("concept")+"_"+options.data.attr("id");
    	}
    	
    	if(!xuClient.taskHas(testName)){
    		if(typeof options.data=="string"){
    			a=options.data.split("_");
        		xuClient.obj = xuNew();
        		xuClient.obj.load({module:a[0],concept:a[1],id:a[2], newtask:options.newtask});
        		return xuClient.obj;	
    		}else{
    			xuClient.obj = xuNew();
        		xuClient.obj.load({xuml:options.data, newtask:options.newtask});
        		return xuClient.obj;	
    		}
    		
    	}else{
    		return xuClient.tasks[testName];
    	}
  	};
	
  	this.taskAppend= function(object, ui){
  		
  		if(ui==undefined){
        	xuClient.tasks[object.objectId]=object;
    	}else{
    		object.newtask=true;
        	xuClient.tasks[object.objectId]=object;
        	xuClient.ui.body.append(ui).append(xuClient.br);
    	}
  		
  	};
  	
  	this.taskShow = function(){
  		var tShow= $("<div style='padding:5px' class='ui-widget ui-widget-content ui-corner-all'>") ;
  		var tasks= $("<h2>taches en cours</h2>") ;
  		tShow.prepend(tasks);
  		tShow.buttonset=$("<span></span>");
  		tShow.bKill=$("<span>kill</span>").click(function(){
  			tShow.find(".object-icon-checkbox:checked").each(function(){
  				var chk = $(this);
  				$.each(xuClient.tasks, function(key, prop) {
  					if(chk.parent().attr("objectId") == prop.objectId){
  						prop.kill();
  					}
  		  		});	
  			});
  		}).button({icons: {primary: 'ui-icon-trash'}});
  		
  		tShow.bSelect=$("<span class='check'>selection</span>").click(function(){
  			if(tShow.bSelect.hasClass("check")){
  				tShow.bSelect.removeClass("check");
  				tShow.find(".object-icon-checkbox").attr("checked","checked");
  				}else{
  				alert("uncheck");
  				tShow.bSelect.addClass("check");
  				tShow.find(".object-icon-checkbox:checked").click();
  			}
  			
  		}).button({icons: {primary: 'ui-icon-check'}});
  		
  		
  		$.each(xuClient.tasks, function(key, prop) {
  			tShow.append(prop._icon({checkbox:true}));
  		});
  		
  		
  		tShow.buttonset.append(tShow.bKill).append(tShow.bSelect).buttonset();
  		
  		tShow.append($("<br style='clear:both'>")).append(tShow.buttonset).css("min-width","400px").css("min-height","400px");
  	    $.buildOverlay({center:false,content:tShow, onClose:function(){dontSlide = false;}});
  	};
  	
  	this.taskLast= function(){
    	var retour="";
    	$.each(xuClient.tasks, function(key, prop) {
    		retour=prop;
		});
    	return retour;
    };
  	
    this.taskHas=function(name){
    	if( xuClient.tasks[name] ==undefined ){return false;}else{return true;}
    };
    
  	this.taskKill=function(obj){
  		if(typeof obj== "string" ){
  			obj = xuClient.tasks[obj];
  		}
		obj.ui=undefined;
    	$("."+obj.objectId+"-widget").remove();
    	delete xuClient.tasks[obj.objectId];
    	delete obj;
    };
    
  	this.logForm= function(){
    	$.ajax({
    		url:xuClient.urlBase()+'&method=myLogin',
    		beforeSend: function(){
    			$.removeOverlay();
    		},
    		success: function(html){
    			$.buildOverlay({zindex:"1000",color:"black",content:$(html)})
    		}
    	});
  	};
  	
  	this.menuReload= function(options){
    	var defaults = {
    			is_logged:false,
    			caption:'login'
    	};
    	var options = $.extend(defaults, options);
    	xLogg.caption(options.caption);
    	if(!options.is_logged){
    		//xUser.kill();
    	}else{
    		xUser.load({id:"user_id"});	
    	}
  	};
    
  	this.beforeSend= function(){
  		
  	}
  	this.success= function(){
  		
  	}
	this.error= function(){
		alert("ajax error");
	}

    xLogg = xuNew();
    xUser = xuNew();
    
    xLogg.load({id:"-1",container:xuserver.screen,load:false});
    xLogg.utf8Val="start";
    xLogg.instantiated=true;
    this.taskAppend(
    	xLogg,
    	xLogg._icon({
    		logo:this.host+"../modules/xam/images/permissions.png",
    		onClick:function(){
    			xuClient.logForm();
    		}	
    	})
    );   
    xLogg.instantiated=false;
    this.toggleBar = function (){
    	if(!xuClient.ui.body.is(":visible") ){
    		xuClient.ui.body.slideDown();
    	}else{
    		xuClient.ui.body.slideUp();
    	};
    }
    
    /*
    xuClient.screenMenuButtonset.mouseover(function(){
    	dontSlide = true
    });
    xuClient.screenMenuButtonset.mouseout(function(){
    	dontSlide = false
    });
    */
    xuClient.ui.taskbar.click(function(){
    	if(dontSlide){return false}
    	xuClient.toggleBar()
    });
    
    xuClient.ui.icon.click(function(){
    	dontSlide = true
    	xuClient.taskShow()
    });
    
    xuClient.ui.search.focus(function(){
    	dontSlide = true
    	xuClient.ui.search.attr("value","").css("color","black").css("font-style","normal")
    });
    xuClient.ui.search.blur(function(){
    	dontSlide = false;
    	xuClient.ui.search.attr("value","search ...").css("color","lightgrey").css("font-style","italic")
    });
    	    
    
    xuClient.ui.search.autocomplete({
    	search: function(event, ui) { 
    		xuClient.ui.spinner.show();
    		
	    },
	    open: function(event, ui) {
	    	xuClient.ui.spinner.hide();
	    },
    	source: xuClient.host+"jquery.autocomplete.php?jx=system_search" ,
		delay:400,
		minLength:2,
		select: function(event, ui) {
			if(ui.item.id != "error"){
				if(xuClient.taskHas(ui.item.id)){
					cTask = xuClient.tasks[ui.item.id];
					cTask.show();
				}else{
					xuClient.taskLoad({data:ui.item.id});
				}	
			}
  		}
	});
	
    
    
    this.build = function(options){
    	var defaults = {
    			success:null
    	}
    	xuClient.screenContainer = $('<div id="xuclient-screen" />');
    	xuClient.screenTitle = $('<h1>smartphone</h1>');
    	xuClient.screenMenu = $('<div id="xuclient-menu" class="xuclient-resized ui-widget ui-widget-header ui-corner-top" style="padding:3px;border-bottom:0px"/>');
    	xuClient.screenMenuButtonset=$('<span id="xuclient-menu-buttonset" />');
		xuClient.screen=$('<div id="xuclient-display" class="xuclient-resized ui-widget ui-widget-content ui-corner-bottom" style="padding:3px;" />');
		$('body').append(xuClient.screenContainer.append(xuClient.screenTitle).append(xuClient.screenMenu.append(xuClient.screenMenuButtonset)).append(xuClient.screen));
		if(options.success != null){
			options.success();
		}
    	
    };
    this.buildTaskbar = function(options){
    	$('body').prepend(xuClient.ui.append(xuClient.ui.body).append(xuClient.ui.taskbar));
    };
    
    this.urlBase = function (options){
		var defaults = {
				sid:'',
				module:xuClient.module,
				concept:xuClient.concept,
				id:xuClient.id
		  };
		var options = $.extend(defaults, options);
		return xuClient.host+'xsm.html.loader.php?client=xuclient&sid='+options.sid+'&module='+options.module+'&concept='+options.concept+'&id='+options.id;
	};
	
	return xuClient;
}



function xuNew(){
	var obj = new Object();
	obj.pinned = false;
	obj.cloned = false;
	obj.optionsValidate = {
		errorElement:"div",
		invalidHandler: function(tform, validator) {
			$.jxNotify("erreur de saisie");
        },
        errorPlacement: function(error, element) {
        	element.parent().parent().append(error);
        	error.css("color","green").jxBlink();
        }
	};
	
	
	function urlBase(){
		return this.host+'xsm.html.loader.php?xuclient=xuclient&sid='+this.sid+'&module='+this.module+'&concept='+this.concept+'&id='+this.id;
	};
	obj.urlBase = urlBase;
	
	
	function hide(){
		if(obj.pinned){
			return obj;
		}else{
			obj.ui.hide();
		}
		return obj;
	}
	obj.hide= hide;
	
	
	function show(options){
		
		var defaults = {
	      unique:true,
	      panel:undefined
		};
		var options = $.extend(defaults, options);
		
		if(obj.cloned){
			
		}else{
			$(".object-ui:not('.pannel-pin')").hide();			
		}
		obj.ui.parents().show();
		obj.ui.show();

		if(options.panel=="no_slide"){
		}else if(options.panel!=undefined){
			obj.showPanel(options.panel);
		}else{
			obj.ui.slidePanel(obj.activePanel)
		}
		
		//xuserver.container.prepend(obj.ui) 
		return obj;
	}
	obj.show= show;
	
	function showPanel(options){
		var defaults = {
	      panel:"description",
	      refresh:false
		};
		var options = $.extend(defaults, options);
		if(options.panel.xuml != undefined){
			what=options.panel.xuml.attr("id");
		}else{
			what = options.panel;
		}
		found = obj.find(what);
		if(options.refresh){
			found.find(".buttonRefresh").click();	
		}
		obj.show({panel:"no_slide"});
		obj.ui.slidePanel(found);
		return obj;
	}
	obj.showPanel = showPanel;
	
	
	
	
	function print(){
		
		if( obj.activePanel.id!="description" ){
			var clone = obj.activePanel.clone();
		}else{
			obj.editMode=true;
			obj.printPreview();
			var clone = obj.description.clone();
		}
		var buttons=$("<div class='noPrint' style='z-index:999;position:fixed'/>");
		$("body").prepend(buttons);
		$(".design-panel").remove();
		clone.portrait=false;
		clone.attr("style","");
		clone.css("position","relative").css("width","210mm").css("height","297mm");
		clone.find("div.value-xhtml").attr("style","");
		clone.find("th>label.property_caption").css("width","");
		clone.find("label.property_caption[title!='']").each(function(){
				var label = $(this);
				var desc = $("<div class='small-description' style='font-size:xx-small;font-style:italic'>"+label.attr('title')+"</div>"); 
				label.parent().append(desc);
				desc.hide();
		});
		clone.find("div.lineForm-collection").css("page-break-inside","avoid");
		clone.find("div.lineForm").css("border-bottom","1px dashed");
		clone.find(".noprint").remove();
		xuserver.screenContainer.hide();
		xuserver.ui.hide();
		$("#ui-datepicker-div").hide();
		$("body").append(clone);
		
		bPrint=$("<a id='buttonPrintConfirm'>print</a>").button();
		bPrint.click(function(){
			window.print();
		});
		
		bPrintDetailed=$("<a id='buttonPrintDetailed'>details</a>").button();
		bPrintDetailed.click(function(){
			$("div.small-description",clone).toggle();
		});
		
		bPrintOrientation=$("<a id='buttonPrintDetailed'>orientation</a>").button();
		bPrintOrientation.click(function(){
			if(clone.portrait){
				clone.portrait=false;
				clone.css("position","relative").css("height","").css("width","297mm");
			}else{
				clone.portrait=true;			
				clone.css("position","relative").css("width","210mm").css("height","297mm");
			}
		});
		
		
		bPrintCancel=$("<a id='buttonPrintCancel'>cancel</a>").button();
		bPrintCancel.click(function(){
			clone.remove();
			buttons.remove();
			xuserver.screenContainer.show();
			xuserver.ui.show();
		});
		
		clone.find(".panel-buttonset").html("");
		
		buttons.append(bPrint).append(bPrintCancel)
			.append(bPrintDetailed)
			.append(bPrintOrientation)
			.buttonset();
		clone.find(".panel-body").sortable();
	}
	obj.print= print;
	
	function design(p){
		var nodeName = p.xuml.get(0).nodeName;
		oId = nodeName+"-"+p.xuml.attr("id");
		var propPanel = $("<div id='"+oId+"' class='design-panel ui-widget ui-widget-content ui-corner-all' style='padding:5px;position:absolute;width:400px' />");
		h2 = $("<h2>design "+nodeName+" </h2>");
		h3 = $("<h3>"+p.xuml.attr("id")+"</h3>");
		icon3=$('<img src="'+ICONS+nodeName+'.png" alt="icon3" style="margin:0px 10px 0px 10px;width:16px;height:16px" />');
		propPanel.append(h2.prepend(icon3)).append(h3);
		typeInput("label");
		typeInput("description");
		
		if(nodeName == "property"){
			typeInput("type");
			boolInput("list");
			
			if(p.xuml.parent().attr("insert")=="1"){
				boolInput("insert");
			}else{
				boolInput("insert","insert");
			}
			boolInput("search");
			boolInput("required");
			var autoComplete = boolInput("autocomplete");
			autoComplete.module = typeInput("module");
			autoComplete.concept = typeInput("concept");
			if(autoComplete.attr("checked")!="checked"){
				autoComplete.module.parent().hide();
				autoComplete.concept.parent().hide();
			}
			autoComplete.click(function(){
				autoComplete.module.parent().toggle();
				autoComplete.concept.parent().toggle();
				
				if(autoComplete.concept.parent().is(":visible")){
					autoComplete.module.attr("value",obj.module);
					p.xuml.attr("module", obj.module );
					autoComplete.concept.attr("value",obj.concept+"."+p.xuml.attr("id"));
					p.xuml.attr("concept", obj.concept+"."+p.xuml.attr("id"));
				}else{
					autoComplete.module.attr("value","undefined");
					p.xuml.attr("module", "");
					autoComplete.concept.attr("value","undefined");
					p.xuml.attr("concept", "");
				}
			});
			
		}else if(nodeName == "tab"){
			boolInput("list","tab");
			boolInput("insert","tab");
			
		}
		
		bClose = $("<a href='javascript:void(0)'>close</a>");
		bClose.click(function(){
			propPanel.remove();
		}).button();
		
		bApply = $("<a href='javascript:void(0)'>apply</a>");
		bApply.click(function(){
			var rr = ""
			obj.xuml.find("tab, property").each(function(){
				pp = $(this);
				rr += "&nodeName[]="+pp.get(0).nodeName+"&nodeId[]="+pp.attr("id")+"&attrName[]=label&attrValue[]="+pp.attr("label");
				rr += "&nodeName[]="+pp.get(0).nodeName+"&nodeId[]="+pp.attr("id")+"&attrName[]=description&attrValue[]="+pp.attr("description");
				rr += "&nodeName[]="+pp.get(0).nodeName+"&nodeId[]="+pp.attr("id")+"&attrName[]=list&attrValue[]="+pp.attr("list");
				rr += "&nodeName[]="+pp.get(0).nodeName+"&nodeId[]="+pp.attr("id")+"&attrName[]=insert&attrValue[]="+pp.attr("insert");
				
				if(pp.get(0).nodeName=="property"){
					rr += "&nodeName[]="+pp.get(0).nodeName+"&nodeId[]="+pp.attr("id")+"&attrName[]=type&attrValue[]="+pp.attr("type");
					rr += "&nodeName[]="+pp.get(0).nodeName+"&nodeId[]="+pp.attr("id")+"&attrName[]=search&attrValue[]="+pp.attr("search");
					rr += "&nodeName[]="+pp.get(0).nodeName+"&nodeId[]="+pp.attr("id")+"&attrName[]=required&attrValue[]="+pp.attr("required");
					rr += "&nodeName[]="+pp.get(0).nodeName+"&nodeId[]="+pp.attr("id")+"&attrName[]=autocomplete&attrValue[]="+pp.attr("autocomplete");
					rr += "&nodeName[]="+pp.get(0).nodeName+"&nodeId[]="+pp.attr("id")+"&attrName[]=module&attrValue[]="+pp.attr("module");
					rr += "&nodeName[]="+pp.get(0).nodeName+"&nodeId[]="+pp.attr("id")+"&attrName[]=concept&attrValue[]="+pp.attr("concept");	
				}
			});
			//$("body").append(rr)
			url = XUSERVER_URL_XMLCOM+"xuml.loader.php?module="+obj.module+ "&concept="+obj.concept+ "&method=xumlProperty_setAttributes&";
			
			$.ajax({
				type: 'POST', 
				url:url,
				data:rr,
				beforeSend:function(){
					
				},
				success:function(html){
					
					$.jxNotify("ok",{life:200})
				}
			});
			
		}).button();
		div = $("<div style='padding:5px;' />")
		propPanel.append(div.append(bClose).append(bApply).buttonset());
		
		$(".design-panel").remove();
		$("body").append(propPanel);
		propPanel.center()
		clearInput(p.xuml.attr("type"))
		
		function typeInput(a){
			if(a=="description"){
				var input = $("<textarea  >"+p.xuml.attr(a)+"</textarea>");
			}else{
				var input = $("<input type='text' value=\""+p.xuml.attr(a)+"\" />");
			}
			if(a=="type"){
				input.autocomplete({
          			source: obj.host+"jquery.autocomplete.php?jx=system_propertytype",
          			delay:100,minLength: 2,
          			select:function(event,ui){
    					p.xuml.attr("type", ui.item.id)
    					clearInput(ui.item.id)
    				}
				});
					
			}else{
				input.change(function(){
					p.xuml.attr(a, $(this).attr("value") );
				});
			}
			div = $("<div class='design-"+a+"' />");
			label = $("<div style='float:left;width:130px;' >"+a+"</div>");
			propPanel.append( div.append(label).append(input).append($("<br style='clear:both' />")));
			return input;
		}
		
		function boolInput(a,b){
			
			var input = $("<input type='checkbox' value='1' />");
			if(p.xuml.attr(a) == "1"){
				input.attr("checked","checked");	
			}
			input.click(function(){
				if($(this).attr("checked")=="checked"){
					var val="1";
					if(b=="insert"){
						p.xuml.parent().attr(a,"1");
					}
				}else{
					var val="0";
				}
				p.xuml.attr(a, val);
				if(b=="tab"){
					p.xuml.find("property").each(function(){
						$(this).attr(a,val);
					})	
				}
				
				
			})
			div = $("<div class='design-"+a+"' />");
			label = $("<div style='float:left;width:130px;' >"+a+"</div>");
			propPanel.append( div.append(label).append(input).append($("<br style='clear:both' />")))
			return input;	
		}
		function clearInput(type){
			switch(type){
			case"bool":
				$(".design-autocomplete",propPanel).hide();
				break;
			case"file":
				$(".design-autocomplete",propPanel).hide();
				break;
			case"obj":
				$(".design-autocomplete",propPanel).hide();
				$(".design-module",propPanel).show();
				$(".design-concept",propPanel).show();
				break;
			case"xhtml":
				$(".design-autocomplete",propPanel).hide();
				break;
			case"date":
				$(".design-autocomplete",propPanel).hide();
				break;
			default:
				$(".design-autocomplete",propPanel).show();
				break;
			}	
		}
		
		
		
	}
	obj.design=design;
	
	
	function printPreview(){
		/*
		if( obj.activePanel.id!="description" ){
			return obj.print();
		}
		*/
		if(obj.editMode){
			$(".jx-hide-button",obj.description).hide()
			obj.description.find(".lineForm").each(function(){
				line = $(this);
				if(line.hasClass("ui-state-default")){
					line.hide();
				}else{
					line.removeClass("ui-state-default")
				}
			});
			obj.editMode=false;
		}else{
			$(".jx-hide-button",obj.description).show();
			obj.description.find(".lineForm").each(function(){
				line = $(this);
				if(line.is(":visible")){
					line.removeClass("ui-state-default");
				}else{
					line.addClass("ui-state-default");
				}
				line.show();
			});

			obj.editMode=true;
		}
		//obj.description.body.sortable()
		return obj;
	}
	obj.printPreview= printPreview;
	
	
	
	/**
	 * kill obj task
	 */
	function kill(options){
		var defaults = {
			deleted:false
		};
		var options = $.extend(defaults, options);
		if(!options.deleted){
			obj.ui.find(".object-ui").appendTo(xuserver.screen); // dont remove collection objects
		}else{
			obj.ui.find(".object-ui").each(function(){
				xuserver.tasks[$(this).attr("objectId")].kill(options);
			});
		}
		$("."+obj.objectId+"-widget").remove();
		delete xuserver.tasks[obj.objectId];
		obj.ui=undefined;
		if(xuserver.taskLast().ui != undefined){xuserver.taskLast().show();}
	}
	obj.kill = kill;
	
	
	function reload(){
		obj.kill();
		obj.load({module:obj.module,concept:obj.concept,id:obj.id});
		return obj;
	}
	obj.reload = reload;
	
	function clone(){
		var clone = xuNew();
		clone.load({newtask:false,xuml:obj.xuml});
		clone.cloned=true;
		return clone;
	}
	obj.clone=clone;
	
	function refresh(){
		
		obj.ui.find(".form_input").each(function(){
			var inpt = $(this);
			obj.properties[inpt.attr("name")].xuml.text(inpt.attr("value"));
		})
		var where = obj.ui.parent();
		obj.ui.remove();
		obj.load({xuml:obj.xuml});
		obj._ui();
		where.append(obj.ui);
		obj.show();
		return obj;
		
	}
	obj.refresh = refresh;
	
	//obj.reset= reset;
	
	function caption(val){
		$("."+obj.objectId+"-caption", $("."+obj.objectId+"-widget")).text(val);
		obj.utf8Val = val;
	}
	obj.caption = caption;
	
	
	
	
	function load(options){
		var defaults = {
	      module:'xam',
	      concept:'user',
	      id:'1',
	      container:xuserver.screen,
	      load:true,
	      newtask:true,
	      xuml:null,
	      complete:null
		};
		var options = $.extend(defaults, options);
		
		
		obj.instantiated=false;
		obj.module = options.module;
		obj.concept = options.concept;
		obj.id = options.id;
		obj.container = options.container;
		obj.host = "http://"+window.location.host+XUSERVER_URL_XMLCOM;
		obj.fk_clxConcept =="";
		obj.properties = {};
		obj.forms = {};
		obj.methods = {};
		obj.collections = {};
		obj.newtask = options.newtask;
		obj.editMode=false;
		function onSuccess(xuml){
			obj.xuml = xuml;
			obj.logo = obj.xuml.attr("logo");
			obj.sid =obj.xuml.attr("sid");
			obj.id = obj.xuml.attr("id");
			obj.id_field = obj.xuml.attr("id_field");
			obj.label_field = obj.xuml.attr("label_field");
			obj.can_list = obj.xuml.attr("can_list");
			obj.can_view = obj.xuml.attr("can_view");
			obj.can_update = obj.xuml.attr("can_update");
			obj.can_insert = obj.xuml.attr("can_insert");
			obj.can_delete = obj.xuml.attr("can_delete");
			obj.utf8Val = obj.xuml.attr("utf8Val");
			obj.is_admin =obj.xuml.attr("is_admin");
			
			obj.xuml.find("method").each(function(){
				obj.methods[$(this).attr("id")]=obj.addMethod($(this));
			});
			obj.xuml.find("property").each(function(){
				obj.properties[$(this).attr("id")] = obj.addProperty($(this)); 
			});
			obj.xuml.find("tab").each(function(){
				obj.forms[$(this).attr("id")]=obj.addForm($(this));
			});
			obj.xuml.find("collection").each(function(){
				obj.collections[$(this).attr("id")]=obj.addCollection($(this));
			});
			if(obj.id>0){
				obj.instantiated=true;
			};
			
			if(obj.instantiated && obj.newtask){
    			xuserver.taskAppend(obj,obj._icon()); 
    		}else{
    			xuserver.taskAppend(obj);
    		};
    		
    		if(obj.ui == undefined){
    			obj._ui();
    		}
    		if(obj.newtask){
    			$(options.container).append(obj.ui);
    		}
    		
		}
		obj.onSuccess = onSuccess;

		
		if(!options.load){
			return false;
		}else if(options.xuml != null){
			obj.module = options.xuml.attr("module");
			obj.concept = options.xuml.attr("concept");
			obj.id = options.xuml.attr("id");
			obj.objectId= obj.module+"_"+obj.concept+"_"+obj.id;
			obj.onSuccess(options.xuml);
			
			if(options.complete!= null){
    			options.complete(obj); 	
    		}
		}else{
			obj.objectId= options.module+"_"+options.concept+"_"+options.id;
			if( $("#"+obj.objectId+"-icon").attr("id") != undefined ){
				obj.show();
				return obj;
			}
			$.ajax({
				url:obj.urlBase()+"&method=_xml",
				dataType:"xml",
				cache: true,
				beforeSend:function(){
				},
				success: function(xml){
					xuml=$(xml).find('class');
					obj.onSuccess(xuml);
		    	},	
		    	complete:function(){
		    		if(options.complete!= null){
		    			options.complete(obj); 	
		    		}else{
		    			if(options.container == "body"){
			    		}else{
			    			obj.show();
			    		}
		    		}
		    	}
			});
		}
		
				
		
	}
	obj.load = load;
	
	function _disk(){
		var jxPannel = obj.addPanel({xuml:obj.xuml,id:"disk"});
		jxPannel.body.html("loading");
		function refresh(){
			jxPannel.body.html("");
			jxPannel.load();
		}
		jxPannel.refresh =refresh;
		
		function load(options){
			defaults={
				scroll:true,
				complete:null
			};

			var options = $.extend(defaults, options);
			var tree=$("");
			
			$.ajax({
				url:obj.urlBase()+'&method=diskXml', 
				beforeSend:function(){
					//$.buildOverlay({color:"red"});
				},
				success: function(html){
					tree = $("#diskXml", $(html) );
					tree.treemenu = $("<a href='javascript:void(0)'></a>");
					
					var treemenuTitle=$("<span>"+obj.concept+"."+obj.id+"</span>");
					tree.treemenu.append(treemenuTitle)
					var bNewFolder= $("<span class='ui-icon ui-icon-folder-open' style='margin:0px 5px 5px 0px;float:left'>file</span>");
					var curTreeNode=tree.find("li:first");
					var curFolder="";
					tree.treemenu.click(function(){
						doClickFolder()
					});
					tree.treemenu.append(bNewFolder)
					
					tree.css("padding","0").css("clear","both")
					tree.find("li:first").addClass("open")
					tree.jxTreeview({
						unique:false,
						onOpen:function(elt){
								
						}
					});
					$("img",tree).error(function () {
						  $(this).unbind("error").attr("src", ICONS+"../mime/_unknown.png");
						  var span = $(this).parent()
						  span.html(span.html()+"."+  $(this).parent().parent().attr("mime"))
					});
					
					bindFolderClick(tree)
					function bindFolderClick(tree){
						$("li.disk-folder>span",tree).click(function () {
							curFolder = buildPath($(this).parent());
							curTreeNode = $(this).parent();
							treemenuTitle.text(curFolder);
						});	
					}
					
					
					bindFileClick(tree);
					function bindFileClick(tree){
						$("li.disk-file",tree).click(function () {
							doClickFile($(this))
						});
					}				
					
					
					
					function doClickFolder(li){
						li = curTreeNode
						curFolder= treemenuTitle.text()
						a = curFolder.split("/")
						a=a[a.length-1]
						var win = $("<div style='padding:5px;width:250px' class='ui-widget ui-widget-content ui-corner-all' />");
						h2=$("<h2>"+a+"</h2>");
						imgH2=$("<img style='padding-top:5px' src='"+ICONS+"folder.png' />");
						h2.prepend(imgH2);
						uploader= $("<input type='file' href='"+curFolder+"' />");
						var newFolder= $("<input type='text' />");
						var newFolderRename= $("<input type='text' />");
						function testinput(i){
							if(i.attr("value")==undefined){return false;}
							if(i.attr("value")==""){return false;}
							return true
						}
						
						var bNewFolder 	= $("<span class=''>new folder</span>").click(function(){
							if(!testinput(newFolder)){return false;}
							$.ajax({
								url:obj.urlBase()+'&method=diskNewFolder&nf='+curFolder+"/"+newFolder.attr("value"), 
								beforeSend:function(){
								},
								success: function(html){
									curTreeNode.children("ul").prepend($(html)).jxTreeview();
									bindFolderClick(curTreeNode);								
								}
							});
						}).button({text:false,icons: {primary: 'ui-icon-plus'}});
						
						var bRenameFolder= $("<span class=''>rename folder</span>").click(function(){
							if(!testinput(newFolderRename)){return false;}
							$.ajax({
								url:obj.urlBase()+'&method=diskRename&nf='+curFolder+"&nn="+newFolderRename.attr("value"), 
								beforeSend:function(){
								},
								success: function(html){
									var test = $("#diskRename", $(html) );
									if(test.text()=="1" ){
										li.children("span").children("span").text(newFolderRename.attr("value"))
										li.attr("basename",newFolderRename.attr("value"))									
										treemenuTitle.text(buildPath(li));
										$.removeOverlay()
									}else{
										
									}
																
								}
							});
						}).button({text:false,icons: {primary: 'ui-icon-pencil'}});
						
						var bCloseFolder= $("<span class=''>close window</span>").click(function(){
							$.removeOverlay();
						}).button({text:true,icons: {primary: 'ui-icon-close'}});
						
						var bKillFolder= $("<span class=''>destroy folder</span>").click(function(){
							$.ajax({
								url:obj.urlBase()+'&method=diskUnlink&nf='+curFolder, 
								beforeSend:function(){
								},
								success: function(html){
									win.append( $(html) );
									$.removeOverlay();
									li.remove();								
								}
							});
						}).button({text:false,icons: {primary: 'ui-icon-trash'}});
						
						
						win.prepend(h2).append($("<h3>télécharger un fichier</h3>"));
						uploader.jxUpload({
							iconMime:false,
							iconUpload:"upload",
							success:function(html){
								curTreeNode.children("ul").append($(html)).jxTreeview();
								bindFileClick(curTreeNode);
							},
							iconSize:30,
							target:win,
							objectId:obj.objectId,
							debug:true
						});
						win.append($("<br style='clear:both'/>"))
						.append($("<h3>renommer</h3>"))
						.append(newFolderRename).append(bRenameFolder)
						.append($("<h3>ajouter un sous dossier</h3>"))
						.append(newFolder).append(bNewFolder)
						.append($("<h3>supprimer le dossier</h3>"))
						.append($("<span></span>").append(bKillFolder).append(bCloseFolder).buttonset() )
						
						
						
						$.buildOverlay({content:win, onClose:function(){
							uploader.parent().remove();
						}})
					}
					
					function doClickFile(li){
						curFolder = buildPath(li);
					    url = XUSERVER_DATA+obj.module+"/"+obj.concept+"/"+ curFolder;
						if(isImage(li.attr('basename') )){
							var image = $("<img src='"+url+"' />")
							image.load(function(){
								image.appendTo($("body")).jxResize({factor:70});
								openWin()
							});
							
						}else{
							var image = $("<iframe src='"+url+"' />")
							image.appendTo($("body"))
							image.css("border","0px").css("margin","0px").css("padding","0px").width(500).height(500);
							openWin();
					    }
				    	function openWin(){
				    		var win = $("<div />");
				    		buttons =$("<div style='padding:5px' class='ui-widget ui-widget-header ui-corner-top' />");
				    		imgTitle= $("<div />");
				    		
				    		imgTitleInput= $("<input type='text' style='width:99%;border:0px' value=\""+li.attr("filename")+"\" />");
				    		photo =$("<div style='padding:5px' class='ui-widget ui-widget-content ui-corner-bottom' />");
							photo.append(image).append(imgTitle.append(imgTitleInput));
							bClose=$("<span>close</span>").button().click(function(){
								$.removeOverlay();
							});
							bRename=$("<span>rename</span>").button().click(function(){
								$.ajax({
									url:obj.urlBase()+'&method=diskRename&nf='+curFolder+"&nn="+imgTitleInput.attr("value"), 
									beforeSend:function(){
									},
									success: function(html){
										var test = $("#diskRename", $(html) );
										if(test.text()=="1" ){
											li.children("span").children("span").text(test.attr("filename"))
											li.attr("filename",test.attr("filename")).attr("basename",test.attr("basename"))									
											$.jxNotify("fichier renommé",{life:1000})
										}else{
											$.jxNotify("erreur",{life:1000})
										}
										
									}
								});
							});
							bRemove=$("<span>remove</span>").button().click(function(){
								$.ajax({
									url:obj.urlBase()+'&method=diskUnlink&nf='+curFolder, 
									beforeSend:function(){
									},
									success: function(html){
										win.append( $(html) );
										$.removeOverlay();
										li.remove();
									}
								});
							});
							win.prepend(buttons.append(bClose).append(bRename).append(bRemove)).append(photo);						
							$.buildOverlay({color:"black",opacity:80,content: win});
							
				    	}			    	
					}
					
					function buildPath(from){
						var rightArrowParents = [];
						from.parents("li").each(function() {
					        var entry = $(this).attr("basename")
					        rightArrowParents.push(entry);
					    });
					    rightArrowParents.reverse();
					    if(rightArrowParents.length == 0){
					    	url =  from.attr('basename').toLowerCase();
					    }else{
					    	url = rightArrowParents.join("/") + "/"+ from.attr('basename').toLowerCase();
					    }
					    return url; 
					}

					 
					
					if(options.scroll){
						//obj.disk.body.css("max-height","300px").css("min-height","150px").css("overflow","auto")
					}
					obj.explorer.tree = tree;
					obj.explorer.body.html("").prepend(tree.treemenu).append(tree);
				},
				complete: function(){
					if(options.complete!=null){
						options.complete();
					}
				}	
			});
			
		}
		jxPannel.load = load;
		return jxPannel;
	}
	obj._disk= _disk;
	
	function _row(type){
		if(type==undefined){type="line";}
		var line=$("<tr dbid='"+obj.id+"' class='"+obj.objectId+"-widget '></tr>");
		i=0;
		if(type=="options"){
			var cellOptions=$("<td></td>");
			var buttonOptions=$("<a href='javascript:void(0)'>options</a>");
			var options=$("<div style='position:absolute;z-index:555;min-width:200px;' class='ui-widget ui-widget-content ui-corner-all'></div>")
			line.addClass("noprint");
			cellOptions.append(buttonOptions).append(options)
			buttonOptions.click(function(){
				options.toggle();
			});
			
			$.each(obj.properties, function(key, prop) {
				if(prop.xuml.attr("type")=="obj" || prop.xuml.attr("type")=="fkey" || prop.xuml.attr("list")=="1"){defClass="ui-state-error";}else{defClass="";}
				
				var column=$("<div class='ui-widget ui-widget-content ui-corner-all "+defClass+"' style='cursor:pointer;margin:1px 1px 1px 1px'>"+prop.xuml.attr("label")+"</div>")
				column.attr("xumlId",prop.xuml.attr("id"));
				options.append(column);
				column.click(function(){
					$(this).toggleClass("ui-state-error")
					$(".td-column-"+$(this).attr("xumlId")).toggle()
				});
			});
			options.hide();
			line.append(cellOptions);
			line.options = options;
			return line;
		}
		$.each(obj.properties, function(key, prop) {
			cellType = prop.xuml.attr("type");
			var classXuml = prop.xuml.parent().parent().parent();
			var objectId=classXuml.attr("module")+"_"+classXuml.attr("concept")+"_"+classXuml.attr("id");
			
			if(type=="header"){
				cell=$("<th></th>");
				cell.append( prop.label() );
			}else{	
				cell=$("<td class='object-icon-label' objectId='"+objectId+"'></td>");	
				
			}
			cell.attr("xumlId",prop.xuml.attr("id")).addClass("td-column-"+prop.xuml.attr("id"));
			
			if(type!="header"){
				if(prop.xuml.attr("id")==obj.label_field){
					line.label_field=obj._icon({inline:true,onClick:function(){
						xuserver.tasks[objectId].show();
					}});
					//var image = $("<img style='width:20px;height:20px;'  src='"+obj.logo+"' alt='"+obj.logo+"' />");
					cell.prepend(line.label_field);//.css("text-decoration","underline").css("cursor","pointer");
					
				}else{
					cell.append( prop.value() );
					cell.click(function(){
						
					});	
				}
				if(cellType=="obj" || cellType=="fkey"){
					cell.click(function(){
						xuserver.tasks[prop.xuml.attr("module")+"_"+prop.xuml.attr("concept")+"_"+prop.xuml.text()].show();
						
					});
				}	
			}
			
			if(cellType=="number" || cellType=="date"){
				cell.attr("align","right")
			}else if(cellType=="bool" || cellType=="url" || cellType=="camera" || cellType=="file"){
				cell.attr("align","center")
			}
			
			if(cellType=="obj" || cellType=="fkey" || prop.xuml.attr("list")=="1"){
				line.append(cell.addClass("td-list") );
			}else if(prop.xuml.attr("insert")=="1"){
				line.append(cell.addClass("td-insert") );
				cell.hide();
			}else{
				line.append(cell);
				cell.hide();
			}
			
		});
		return line;
	}
	obj._row = _row;
	
	function _icon(options){
		var defaults = {
	      size:"24",
	      logo:obj.logo,
	      checkbox:false,
	      inline:false,
	      onClick:null
		};
		
		
		if(!obj.instantiated){
			return false;
		}
		
		var options = $.extend(defaults, options);		
		var br = $("<br style='clear:both;' />");
		var br1 = $("<br style='clear:both;' />");
		var icon = $("<div id='"+obj.objectId+"-icon'  objectId='"+obj.objectId+"' dbid='"+obj.id+"' class='"+obj.objectId+"-widget ui-corner-all object-icon' style='margin:0px 2px 0px 2px;padding:1px;cursor:pointer;float:left;overflow:hidden;'/>");
		icon.checkbox = $("<input type='checkbox' class='object-icon-checkbox' />");
		if(!options.checkbox){icon.checkbox.hide();}
		var image = $("<img src='"+options.logo+"' style='width:"+options.size+"px;height:"+options.size+"px;' alt='"+options.logo+"' />");
		
		if(options.size*4<96){options.size=96;}else{options.size=4*options.size;}
		if(!options.inline){
			var centered= $("<center title=\""+obj.utf8Val+"\"  />");
			icon.label = $("<div style='overflow:hidden;padding:0px 2px 0px 2px;white-space:nowrap; width:"+options.size+"px;' class='object-icon-label ui-widget ui-widget-content ui-corner-all "+obj.objectId+"-caption'>"+obj.utf8Val+"</div>");
			icon.append(icon.checkbox).append(centered.append(image).append(br).append(icon.label)).append(br1);
		}else{
			var centered= $("<span title=\""+obj.utf8Val+"\" />");
			icon.label = $("<div style='overflow:hidden;padding:2px 2px 0px 2px;white-space:nowrap; max-width:"+options.size+"px;' class='object-icon-label "+obj.objectId+"-caption'>"+obj.utf8Val+"</div>");
			icon.append(icon.checkbox).append(centered.append(image.css("float","left")).append(icon.label.css("float","left")));
		}
		//$(".object-icon-label").removeClass("ui-state-highlight");
		icon.click(function(){
			if(options.onClick!=null){
				options.onClick(icon);
			}else{
				//$(".object-icon-label").removeClass("ui-state-highlight");
				obj.show();
			}
			if(!options.inline){
				icon.label.toggleClass("ui-state-highlight");
			}
		});
		return icon;
	}
	obj._icon = _icon;
	
	/*rename html()*/
	function _ui(options){
		defaults={
			container:obj.container,
			onLoaded:"description"
		};
		var options = $.extend(defaults, options);
		br = $("<br style='clear:both;' />");
		obj.ui = $("<div id='"+obj.objectId+"-ui' objectId='"+obj.objectId+"' class='object-ui "+obj.objectId+"-widget' ></div>");
		obj.ui.menu 	= $('<div style="position:absolute;z-index:555;min-width:150px;padding:2px;margin:2px;" class="ui-widget ui-widget-content ui-corner-all menu xuclient-menu"></div>');
		obj.ui.panels 	= $('<div style="float:left;" class="panels" ></div>');
		obj.ui.screenScript = $("<span></span>");
		
		obj.description=obj._description();
		obj.explorer=obj._disk();
		
		obj.activePanel=obj.description;
		obj.ui.panels.append(obj.description);
		obj.ui.panels.append(obj.explorer);
		obj.ui.menu.hide();
		
		
		obj.ui.append(obj.ui.menu)
			.append(obj.ui.panels)
			.append(obj.ui.screenScript)
			.append(br);
		
		
		function resetDescription(options){
			var defaults = {
					hide:false
			};
			var options = $.extend(defaults, options);	
			obj.description.remove();
			delete obj.description ;
			obj.description = obj._description();
			obj.ui.panels.append(obj.description);
			if(options.hide){obj.description.hide()}else{obj.ui.slidePanel(obj.description)}
			
		}
		obj.ui.resetDescription = resetDescription;
		
		function slidePanel(panel){
			document.title = obj.concept + "." +obj.id +"." +obj.utf8Val ;
			if(panel==undefined){
				obj.ui.panels.children().hide();
				obj.ui.panels.hide();
				obj.ui.menu.effect( "slide", {}, 250);
				return false;
			}
			obj.ui.menu.hide();
			obj.ui.panels.show();
			obj.ui.panels.children().hide();
			panel.effect( "slide", {}, 250);
			obj.activePanel = panel;
			
			return true;
		}
		obj.ui.slidePanel = slidePanel;
		
		obj.xuml.find("method").each(function(){
			obj.ui.panels.append(obj.methods[$(this).attr("id")]);	
		});
		
		
		if(obj.xuml.find("tab").length >0){
			formTitle = $("<h3><span class='"+obj.objectId+"-caption'>"+obj.xuml.attr("utf8Val")+"</span></h3>");
			formDiv = $("<div></div>");
			obj.ui.menu.append(formTitle).append(formDiv);
		}
		
		obj.xuml.find("tab").each(function(){
			tab = $(this);
			if(tab.attr("description")!=undefined){ desc = 'title="'+tab.attr("description")+'"';}else{desc="";}
			link = $('<a href="javascript:void(0)" class="jxAccordionMenu" '+desc+' >'+tab.attr("label")+'</a>');
			formDiv.append(link);
			var newForm = obj.forms[tab.attr("id")];
			obj.ui.panels.append(newForm);
			link.click(function(){
				obj.showPanel({panel:newForm})
			});
		});
		//formDiv.append(obj.ui.menu.fileTitle).append(obj.ui.menu.file)
		
		if(obj.xuml.find("method").length >0){
			formTitle = $("<h3>methods</h3>");
			formDiv = $("<div></div>");
			obj.ui.menu.append(formTitle).append(formDiv);
		}
		
		obj.xuml.find("method").each(function(){
			meth = $(this);
			var link1 = obj.methods[meth.attr("id")].menuButton();
			formDiv.append(link1)
		});
		
		obj.xuml.find("methods > method").each(function(){
			meth = $(this);
			var link = obj.methods[meth.attr("id")].menuButton();
			obj.description.buttonset.append(link.button());
		});
		
		if(obj.xuml.find("collection").length >0){
			formTitle = $("<h3>collections</h3>");
			formDiv = $("<div></div>");
			obj.ui.menu.append(formTitle).append(formDiv);
			obj.xuml.find("collection").each(function(){
				var clx = $(this);
				obj.fk_field=clx.attr("fk_clxConcept");
				link = obj.collections[clx.attr("id")].menuButton();
				formDiv.append(link);
				obj.ui.panels.append(obj.collections[clx.attr("id")]);
			});	
		};
		
		
		obj.ui.menu.jxAccordion({
			onCollapse:function(acc){
				obj.ui.menu.hide();
				acc.children().first().css('margin-bottom','0px').removeClass('ui-corner-all').addClass('ui-corner-top');
				acc.children().first().next().show();
			}
		});

		return obj.ui;
		
	};
	obj._ui = _ui;
	
	function find(what){
		var retour = obj.description;
		
		var found = false;
		if(what=="ui"){
			return obj.ui;
		}else if(what=="menu"){
			return obj.ui.menu;
		}else if(what=="description"  || what=="" ){
			return obj.description;
		}else{
			obj.xuml.find('tab, collection, method').each(function(){
				key=$(this).attr("id");
				if(key!=undefined){
					check=key.match(eval("/"+what+"/"));
					//if($(this).get(0).nodeName == "collection"){alert(key+" " +what+ " match " + check)}
					if(check!=null){
						if(!found){found=true;retour=key;}
					}	
				}
			});
			if($("#"+obj.objectId+"_"+retour, obj.ui).attr("id") == undefined){
				alert("#"+obj.objectId+"_"+retour)
				//obj.show()
				return obj.description;
			}
			return $("#"+obj.objectId+"_"+retour, obj.ui);
		}	
	}
	obj.find = find;
	
	
	
	function addPanel(options){
		var defaults = {
			xuml:obj.xuml,
			id:"",
			h2:obj.utf8Val,
			h3:"",
			contextual:true
		};
		var options = $.extend(defaults, options);
		
		if(options.id==""){
			options.id=options.xuml.attr('id');
		}
		if(options.h3==""){
			options.h3= options.xuml.attr("label");
		}
		
		var newPanel = $('<div id="'+obj.objectId+'_'+options.id+'" class="panel ui-widget ui-widget-content ui-corner-all" style="min-width:350px;padding:3px;margin:3px;"></div>');
		newPanel.xuml = options.xuml;
		newPanel.id=options.id;
		
		newPanel.body = $('<div class="panel-body" ></div>');
		newPanel.buttonset = $('<div class="panel-buttonset" ></div>');
		newPanel.methodset = $('<div style="margin:5px 0px 5px 0px;" class="panel-methodset" ></div>');
		newPanel.form = $('<form id="'+options.xuml.attr('id')+'"></form>');
		
		icon2=$('<img src="'+obj.logo+'" alt="icon2" style="width:28px;height:28px;cursor:pointer;padding:0px 0px 0px 0px;margin:0px 0px 0px 0px;" />');
		icon3=$('<img src="'+ICONS+options.xuml.get(0).nodeName+'.png" alt="icon3" style="margin:0px 10px 0px 10px;width:16px;height:16px" />');
		newPanel.h2 =$('<h2 style="margin:0px;"></h2>');
		newPanel.h3= $('<h3 style="cursor:pointer">'+options.h3+'</h3>');
		newPanel.contextual =$('<div style="margin:0px"></div>');
		
				
		if(options.contextual){
			if(options.id=="disk"){context="disk";}else{context=options.xuml.get(0).nodeName;}
			var contextualMenu = obj._contextual(newPanel,context);
			newPanel.contextual.append(contextualMenu);	
		} 
		h2span = $('<span style="cursor:pointer" class="'+obj.objectId+'-caption" >'+options.h2+'</span>');
		
		if(options.id=="description"){
			newPanel.h3.text(newPanel.h3.text()+ " n°" + options.xuml.attr('id'));
		}
		h2span.click(function(){
			obj.showPanel({panel:"description"});
		});
		newPanel.body.click(function(){
			obj.ui.menu.hide();
		});
		
		icon2.click(function(){
			obj.ui.menu.show();
		});
		
		newPanel.h3.click(function(){
			if(obj.editMode){
				obj.design(newPanel);
			}
			obj.ui.menu.hide();
			newPanel.methodset.toggle();
		});
		
		
		newPanel
			.append(newPanel.h2.append(h2span).prepend(icon2))
			.append(newPanel.h3.prepend(icon3)).append(newPanel.methodset.hide())
			.append(newPanel.contextual)		
			.append(newPanel.body)
			.append(newPanel.buttonset)
			;
		newPanel.body.append(newPanel.form);
		
		
		if(options.id!="description"){
			newPanel.hide();
		}
		return newPanel;
	}
	obj.addPanel = addPanel;
	
	
	function addCollection(methNode){
		var jxPannel = obj.addPanel({xuml:methNode});
		var defPres = "table";
		jxPannel.body.iconDiv = $("<div>iconDiv</div>");
		jxPannel.body.uiDiv = $("<div>uiDiv</div>");
		jxPannel.body.table =$("<table></table>");
		jxPannel.body.tableHead =$("<thead></thead>");
		jxPannel.body.tableBody =$("<tbody></tbody>");
		jxPannel.body.table.append(jxPannel.body.tableHead).append(jxPannel.body.tableBody);
		jxPannel.lineNumber=0;
		jxPannel.pageNumber=0;
		jxPannel.linesPerPage=2;
		
		
		jxPannel.loaded=false;
		
		jxPannel.body
		.append(jxPannel.body.iconDiv)
		.append("<br style='clear:both' />")
		.append(jxPannel.body.table)
		.append("<br style='clear:both' />")
		.append(jxPannel.body.uiDiv)
		;
		
		function toggle(){
			if(defPres=="table"){
				defPres="icon";
			}else{
				defPres="table";
			}
			jxPannel.draw(defPres);
		}
		jxPannel.toggle=toggle;
		
		buttonRestore = $("<a>fields</a>");
		buttonRestore.button({icons: {primary: 'ui-icon-search'}}).click(function(){
			jxPannel.body.table.find("td,th").toggle()
			jxPannel.body.table.find(".td-label").show()
		});
		jxPannel.methodset.prepend(buttonRestore);
		
		
		methNode.find("method").each(function(){
			meth = $(this);
			link = obj.methods[meth.attr("id")].menuButton();
			jxPannel.methodset.append(link);
		});
		jxPannel.methodset.buttonset();
		jxPannel.buttonset.buttonset();
		
		function menuButton(){
			var mButton = $("<a href='javascript:void(0)' class='buttonShow jxAccordionMenu'>"+methNode.attr("label")+"</a>");
			mButton.click(function(){
				jxPannel.navigate();
			});
			return mButton;
		}
		jxPannel.menuButton = menuButton;
		
		function navigate(){
			if(!jxPannel.loaded){
				jxPannel.load({complete:function(){
					obj.showPanel({panel:jxPannel});
					jxPannel.draw(defPres);
				}});
			}else{
				obj.showPanel({panel:jxPannel});
			}
		}
		jxPannel.navigate = navigate;
		
		
		function lineForm(){
			var nline = $("<div class='property_line lineForm lineForm-collection'></div>");
			var desc=methNode.attr('description');
			if(desc==undefined){desc='';}
			
			var label=$('<label title="'+desc+'" class="property_caption">'+methNode.attr('label')+'</label>');
			var caption= $("<span />");
			var image = $("<img src='"+obj.host+"../modules/xam/images/sys/collection.png' style='width:18px;height:18px' alt='ddd' />");
			caption.append(image);
			label.css("cursor","pointer").css("font-style","italic").css("float","left").css("width","130px").css("overflow","hidden").css("white-space","nowrap").css("margin-right","5px");
			nline.append(caption).append(label).css("border-bottom","1px dotted black");
			label.click(function(){
				jxPannel.navigate();
			});
			nline.label = label
			nline.caption = caption
			return nline;
		}
		jxPannel.lineForm = lineForm;
		
		function draw(type){
			if(jxPannel.pageNumber<1){
				jxPannel.body.tableHead.html("");
				jxPannel.body.tableBody.html("");
				jxPannel.nTd=$("<td></td>");
				jxPannel.nButton=$("<span style='cursor:pointer;'>more ...</span>");
				jxPannel.nTd.append(jxPannel.nButton);
				jxPannel.nButton.click(function(){jxPannel.draw("table");});
				jxPannel.body.iconDiv.html("");					
			}else{
			}
			/*
			jxPannel.lineNumber=0;
			jxPannel.pageNumber=1;
			*/
			
			jxPannel.linesPerPage=3;
			var lineInPage=0;
			jxPannel.pageNumber++;
			var breakEach=false;
			
			var lineRemaining = jxPannel.clxXml.find("class::not(.tabled)").length;
			
			
			jxPannel.clxXml.find("class").each(function(){
				var oxuml=$(this);
				
				if(breakEach){return true;}
				if(oxuml.hasClass("tabled")){
				}else{
					lineInPage++;
					oxuml.addClass("tabled");
					var clxo =xuserver.taskLoad({data:oxuml,newtask:false});

					if(jxPannel.once){
						var headRow = clxo._row("header");
						jxPannel.body.tableHead.append(headRow);
						//jxPannel.body.tableHead.append(jxPannel.nTr);
						var rowOptions = clxo._row("options");
						jxPannel.body.tableHead.append(rowOptions.prepend(jxPannel.nTd));
						
						jxPannel.once=false;
					}
					var row = clxo._row();
					jxPannel.body.uiDiv.prepend(clxo.ui);
					clxo.ui.hide();
					jxPannel.body.tableBody.append(row);
					if(lineInPage<jxPannel.linesPerPage){	
					}else{
						breakEach=true;
					}
				}
				if(lineRemaining<1){
					jxPannel.nTd.remove();
				}else{
					
				};
				return true;
				
				var oxuml=$(this);
				var clxo =xuserver.taskLoad({data:oxuml,newtask:false});
				if(type=="icon"){
					jxPannel.body.iconDiv.append(clxo._icon({onClick:function(){
						clxo.ui.find("div.panels").each(function(){
							$(this).css("width","100%").css("margin","3px 0px 3px 0px");
						});
						jxPannel.body.uiDiv.prepend(clxo.ui);
						clxo.show();
					}}));
					jxPannel.body.uiDiv.prepend(clxo.ui);
					clxo.hide();
				}else{
					if(jxPannel.once){
						var rowOptions = clxo._row("options");
						jxPannel.body.tableHead.append(rowOptions);
						jxPannel.body.tableHead.append(clxo._row("header"));
						jxPannel.once=false;
					}
						jxPannel.body.uiDiv.prepend(clxo.ui);
						clxo.ui.hide();
						jxPannel.body.tableBody.append(clxo._row());
				}
			});
			if(type=="table"){
				jxPannel.body.table.tablesorter();
				return jxPannel.body.table;
			}else{
				return jxPannel.body;
			}
		}
		jxPannel.draw=draw;
		
		function refresh(){
			jxPannel.pageNumber=0;
			jxPannel.clxXml.find("class").removeClass("tabled");
			jxPannel.load();
		}
		jxPannel.refresh=refresh;
		
		function load(options){
			defaults={
				complete:null
			};
			jxPannel.once=true;
			var options = $.extend(defaults, options);
			$.ajax({
				url:obj.urlBase()+'&header=xml&method=_collection&clxModule='+jxPannel.xuml.attr("module")+'&clxConcept='+jxPannel.xuml.attr("concept")+'&clxMethod=clxXml',
				dataType:"xml",
				cache:false,
				beforeSend:function(){
					jxPannel.loaded=false;
					jxPannel.body.iconDiv.find(".object-icon").remove();
				},
				success: function(xml){
					jxPannel.clxXml = $(xml);
				},
				complete: function(){
					jxPannel.loaded=true;
					if(options.complete!=null){
						options.complete();
					}else{
						jxPannel.draw(defPres);
					}
				}
			});
		}
		jxPannel.load = load;
		
		
		jxPannel.parent=obj;
		return jxPannel;
	
	}
	obj.addCollection = addCollection;
	
	function addMethod(methNode){
		var jxPannel = obj.addPanel({xuml:methNode});
		var buttonBack = $("<a href='javascript:void(0)' class='buttonBack'>back</a>");
		
		function menuButton(){
			var mButton = $("<a href='javascript:void(0)' class='buttonShow jxAccordionMenu'>"+methNode.attr("label")+"</a>");
			mButton.click(function(){
				if(jxPannel.body.text() ==""){
					jxPannel.load({complete:function(){obj.showPanel( {panel:jxPannel} );}});
				}else{
					obj.showPanel({panel:jxPannel});
				}
			});
			return mButton;
		}
		jxPannel.menuButton = menuButton;
		
		function refresh(){
			jxPannel.load();
		}
		jxPannel.refresh=refresh;
		
		
		function load(options){
			defaults={
				complete:null
			}
			var options = $.extend(defaults, options);
			$.ajax({
				url:obj.urlBase()+'&method='+methNode.attr("id"), 
				beforeSend:function(){
					//$.buildOverlay({color:"red"});
				},
				success: function(html){
					//$.removeOverlay();
					jxPannel.body.html($(html));
				},
				complete: function(){
					if(options.complete!=null){
						options.complete();
					}
				}	
			});
		}
		jxPannel.load = load;
		
		jxPannel.parent=obj;
		return jxPannel;
		
	}
	obj.addMethod = addMethod;
	
	function _contextual(newPanel,context){
		var contextBar = $("<span class='"+obj.objectId+"-widget' />");
		xuml = newPanel.xuml;
		var image = $("<img  src='"+obj.logo+"' style='padding:4px 4px 0px 0px;width:22px;height:22px' />");
		
		function button(a){
			var ret;
			switch(a){
			case 'home':
				ret = $("<a href='javascript:void(0)'>home</a>");
				if(context=="class"){
					ret.button({text:false,icons: {primary: 'ui-icon-triangle-1-s'}});
				}else if(context=="method"){
					if(newPanel.xuml.parent().get(0).nodeName =="methods"){
						ret.button({text:false,icons: {primary: 'ui-icon-home'}});	
					}else{
						ret.button({text:false,icons: {primary: 'ui-icon-triangle-1-w'}});
					}
				}else{
					ret.button({text:false,icons: {primary: 'ui-icon-home'}});
				}
				ret.click(function(){
					if(context=="class"){
						obj.ui.menu.show();
						ret.button({text:false,icons: {primary: 'ui-icon-triangle-1-s'}});
					}else if(context=="method"){
						if(newPanel.xuml.parent().get(0).nodeName =="methods"){
							obj.showPanel({panel:"description"});
						}else{
							obj.showPanel({panel:newPanel.xuml.parent().attr('id')});
						}
					}else{
						obj.showPanel({panel:"description"});
					}
				});
				
				break;
			case 'refresh':
				ret = $("<a href='javascript:void(0)' class='jxAccordionMenu'>refresh</a>");
				ret.click(function(){
					newPanel.refresh();
				}).button({text:false,icons: {primary: 'ui-icon-refresh'}});
				break;
			case 'kill':
				ret = $("<a href='javascript:void(0)' class='jxAccordionMenu'>close</a>");
				ret.click(function(){
					obj.kill();
				}).button({text:false,icons: {primary: 'ui-icon-close'}});				
				break;
			case 'delete':
				ret = $("<a href='javascript:void(0)' class='jxAccordionMenu'>delete</a>");
				ret.click(function(){
					obj.formDeleteOpen();
				}).button({text:false,icons: {primary: 'ui-icon-trash'}});				
				if(obj.can_delete=="0"){ret.hide();}
				break;
			case 'insert':
				ret = $("<a href='javascript:void(0)' class='jxAccordionMenu'>insert</a>");
				ret.click(function(){
					obj.formInsertOpen();
				}).button({text:false,icons: {primary: 'ui-icon-plus'}});				
				if(obj.can_insert=="0"){ret.hide();}
				
				break;
			case 'print':
				ret = $("<a href='javascript:void(0)' class='jxAccordionMenu'>print</a>");
				ret.click(function(){
					obj.print();
				}).button({text:false,icons: {primary: 'ui-icon-print'}});				
				break;
			case 'disk':
				ret = $("<a href='javascript:void(0)' class='jxAccordionMenu'>disk</a>");
				ret.click(function(){
					obj.ui.slidePanel(obj.explorer);
					if(obj.explorer.body.html()=="loading"){
						obj.explorer.load();
					}
				}).button({text:false,icons: {primary: 'ui-icon-disk'}});				
				if(obj.can_update=="0"){ret.hide();}
				break;
			case 'folder':
				ret = $("<a href='javascript:void(0)' class='jxAccordionMenu'>folder actions</a>");
				ret.click(function(){
					obj.explorer.tree.treemenu.click();
				}).button({text:false,icons: {primary: 'ui-icon-folder-open'}});				
				break;
			case 'design':
				
				ret = $("<a href='javascript:void(0)' class='jxAccordionMenu'>design</a>");
				if(obj.editMode){
					ret.addClass("ui-state-highlight")
				}
				ret.click(function(){
					//obj.ui.slidePanel(obj.description)
					obj.printPreview();
					ret.toggleClass("ui-state-highlight");
					if(!ret.hasClass("ui-state-highlight")){
						$(".design-panel").remove();
					}
				}).button({text:false,icons: {primary: 'ui-icon-gear'}});				
				break;
			case 'logas':
				ret = $("<a href='javascript:void(0)' class='logAs jxAccordionMenu'>log back</a>");
				ret.click(function(){
					$.ajax({
						url:xuserver.urlBase()+'&method=_log_as',
						beforeSend:function(){
						},
						success:function(html){
							script = $(html)
							obj.ui.screenScript.append(script);
						}
					});

				}).button({text:false,icons: {primary: 'ui-icon-person'}});				
				//if(obj.can_delete=="0"){ret.hide();}
				break;	
			case'link':
				ret = $("<a href='javascript:void(0)'>"+xuml.attr("concept")+"</a>");
				ret.click(function(){
					obj.formInsertOpen({
						xuml:newPanel.xuml,
						onInsert:function(newobj){
							newPanel.load();
							return true;
						}
					});
				}).button({text:false,icons: {primary: 'ui-icon-plus'}});
				break; 
			case'unlink':
				ret = $("<a href='javascript:void(0)'>unlink</a>");
				ret.click(function(){
					
					
					var winDelete = $("<div style='padding:3px;' class='ui-widget ui-widget-content ui-corner-all'><h2>object selector dialog</h2></div>");
					winDelete.body =$("<div>selected items : <br/></div>");
					winDelete.append(winDelete.body);
					winDelete.buttonset = $("<span></span>");
					winDelete.buttonCancel = $("<a>close</a>");
					winDelete.buttonConfirm = $("<a>delete</a>");
					winDelete.buttonDetach = $("<a>detach</a>");
					winDelete.buttonset.append(winDelete.buttonCancel);
					winDelete.append("<br style='clear:both' />").append(winDelete.buttonset);
					winDelete.buttonset.buttonset();
					
					winDelete.buttonCancel.click(function(){
						$.removeOverlay();
					}).button({icons: {primary: 'ui-icon-close'}});
					
					if(newPanel.xuml.attr("can_unlink")=="1" ){
						winDelete.buttonDetach.click(function(){
							var clxId="";
							$("div.object-icon-label", newPanel.body).each(function(){
								if(!$(this).hasClass("ui-state-highlight")){
									clxId += '&clxId[]='+$(this).parent().parent().attr('dbid');	
								}
								
							});
							$.ajax({
								url:obj.urlBase()+'&method=_collection&clxModule='+newPanel.xuml.attr("module")+'&clxConcept='+newPanel.xuml.attr("concept")+'&clxMethod=clxLink'+'&clxId='+clxId,
								beforeSend:function(){
									//alert(obj.urlBase()+'&method=_collection&clxModule='+newPanel.xuml.attr("module")+'&clxConcept='+newPanel.xuml.attr("concept")+'&clxMethod=clxLink'+'&clxId='+clxId)
								},
								success:function(html){
									script = $(html)
									$("div.object-icon-label", winDelete.body).each(function(){
										objectId=$(this).parent().parent().attr('objectId');
										//$("."+objectId+"-widget").remove()
										xuserver.taskKill(objectId)
									});
									obj.ui.screenScript.append(script);
									$.removeOverlay();
								}
							});
							
						}).button({icons: {primary: 'ui-icon-link'}});
						winDelete.buttonset.append(winDelete.buttonDetach);
					}
					
					if(newPanel.xuml.attr("can_delete")=="1" ){
						winDelete.buttonConfirm.click(function(){
							var clxId="";
							$("div.object-icon-label", winDelete.body).each(function(){
								dbid=$(this).parent().parent().attr('dbid');
								clxId += '&clxId[]='+dbid;
							});
							$.ajax({
								url:obj.urlBase()+'&method=_deleteSelection&clxModule='+newPanel.xuml.attr("module")+'&clxConcept='+newPanel.xuml.attr("concept")+'&clxMethod='+'&clxId='+clxId,
								beforeSend:function(){
								},
								success:function(html){
									script = $(html);
									$("div.object-icon-label", winDelete.body).each(function(){
										objectId=$(this).parent().parent().attr('objectId');
										xuserver.taskKill(objectId)
									});
									obj.ui.screenScript.append(script);
									$.removeOverlay();
								}
							});
							
						}).button({icons: {primary: 'ui-icon-trash'}});
						winDelete.buttonset.append(winDelete.buttonConfirm)
					}
					var clxId="";
					$(".object-icon-label", newPanel.body.iconDiv).each(function(){
						if( $(this).hasClass("ui-state-highlight") ){
							clxId += '&clxId[]='+$(this).attr('dbid');
							winDelete.body.append($(this).parent().parent().clone());
						}
					});
					if(clxId==""){
						$.jxNotify("la selection est vide",{life:1000})
					}else{
						winDelete.show()
						$.buildOverlay({
							content:winDelete,
							onClose:function(){
								$("div.object-icon",winDelete.body).remove()
								winDelete.removeClass("overlay-window-class").appendTo($("body")).hide();
							}
						});
					}
				}).button({text:false,icons: {primary: 'ui-icon-trash'}});
				break; 
			case 'load':
				ret = $("<a href='javascript:void(0)' class='buttonRefresh' >refresh</a>");
				ret.click(function(){
					newPanel.load();
				}).button({text:false,icons: {primary: 'ui-icon-refresh'}});
				break;
			case 'toggle':
				ret = $("<a>table</a>");
				ret.click(function(){
					newPanel.draw("table");
					newPanel.toggle()
				}).button({text:false,icons: {primary: 'ui-icon-shuffle'}});
				break;
			}
			return ret;
		}
		contextBar.button = button;
		
		function refresh(){
			switch(context){
			case'tab':
				contextBar.append(contextBar.button("home"));
				contextBar.append(contextBar.button("refresh"));
				if(obj.can_update=="1")	{contextBar.append(contextBar.button("disk"));}
				if(obj.is_admin=="1")	{contextBar.append(contextBar.button("design"));}
				break;
			case'disk':
				contextBar.append(contextBar.button("home"));
				contextBar.append(contextBar.button("refresh"));
				contextBar.append(contextBar.button("folder"));
				break;
			case'method':
				contextBar.append(contextBar.button("home"));
				contextBar.append(contextBar.button("refresh"));
				if(obj.can_update=="1")	{contextBar.append(contextBar.button("disk"));}
				break;
			case'collection':
				contextBar.append(contextBar.button("home"));
				contextBar.append(contextBar.button("refresh"));
				contextBar.append(contextBar.button("toggle"));
				if(newPanel.xuml.attr("can_link")=="1" && newPanel.xuml.attr("can_insert")=="1"){
					bLink = contextBar.button("link");
					contextBar.append(bLink);
				};
				if(newPanel.xuml.attr("can_unlink")=="1" || newPanel.xuml.attr("can_delete")=="1" ){
					bUnlink = contextBar.button("unlink");
					contextBar.append(bUnlink);
				};
				if(obj.is_admin=="1")	{
					contextBar.append(contextBar.button("design"));
				}
				break;
			default :
				contextBar.append(contextBar.button("home"));
				contextBar.append(contextBar.button("refresh"));
				//bLogas = contextBar.button("logas");
				if(obj.can_update=="1")	{contextBar.append(contextBar.button("print"));}
				if(obj.can_update=="1")	{contextBar.append(contextBar.button("disk"));}
				if(obj.is_admin=="1")	{contextBar.append(contextBar.button("design"));}
				if(obj.can_insert=="1")	{contextBar.append(contextBar.button("insert"));}
				if(obj.can_delete=="1")	{contextBar.append(contextBar.button("delete"));}
				contextBar.append(contextBar.button("kill"));
			}
			contextBar.buttonset();
			
		}
		contextBar.refresh= refresh;
		contextBar.refresh();
		return contextBar;
	}
	obj._contextual = _contextual;
	
	
	function _description(){
		var jxPannel = obj.addPanel({xuml:obj.xuml,id:"description"});
		var prop = obj.properties[obj.label_field] ;
		var labelLine = prop.lineForm(prop.label({linkTab:true,formular:true}),prop.value());
		
		$.each(obj.properties, function(key, prop) {
			if(prop.xuml.attr("id")== obj.label_field){
				
			}else if(prop.xuml.attr("type")=="obj" || prop.xuml.attr("type")=="fkey"){
				jxPannel.body.prepend(prop.lineForm(prop.label({linkTab:true,formular:true}), prop.value()));
			}else{
				var line = prop.lineForm(prop.label({linkTab:true,formular:true}),prop.value());
				var hideButton=$("<span style='cursor:pointer;position:absolute;right:10px;top:3px;' class='jx-hide-button jx-inline ui-icon ui-icon-close'>close</span>");
				hideButton.click(function(){
					line.toggleClass("ui-state-default");
				}).hide();
				line.caption.append(hideButton)
				jxPannel.body.append(line);
				if(prop.xuml.attr("list")=="1"){
					line.addClass("line-list");
				}else{
					line.addClass("line-insert");
					line.hide()
				}	
			}
		});
		jxPannel.body.prepend(labelLine);
		
		function refresh(){
			obj.reload();
		}
		jxPannel.refresh = refresh;
		
		$.each(obj.collections, function(key, clx) {
			var line = clx.lineForm();
			line.addClass("line-collection");
			var loadButton=$("<span style='cursor:pointer;position:absolute;right:25px;top:3px;' class='jx-load-button jx-inline ui-icon ui-icon-disk'>load</span>");
			loadButton.click(function(){
				clx.load({complete:function(){
					line.append(clx.draw("table"));
					//obj._contextual();
				}});
				
			});
			
			var hideButton=$("<span style='cursor:pointer;position:absolute;right:10px;top:3px;' class='jx-hide-button jx-inline ui-icon ui-icon-close'>close</span>");
			hideButton.click(function(){
				line.toggleClass("ui-state-default");				
			}).hide();
			
			
			line.caption.append(loadButton).append(hideButton);
			jxPannel.body.append(line);
		});
		

		jxPannel.pinDiv= $("<div style='float:right;right:0px;top:0px' />");
		jxPannel.pin= $("<a href='javascript:void(0)'  class=''>pin</a>");
		jxPannel.pinDiv.append(jxPannel.pin);
		jxPannel.pin.click(function(){
			t =$(this);
			if(!obj.ui.hasClass("pannel-pin")){
				obj.ui.addClass("pannel-pin");
				t.button({text:false,icons: {primary: 'ui-icon-pin-s'}});
				obj.pinned=true;
			}else{
				obj.ui.removeClass("pannel-pin");
				t.button({text:false,icons: {primary: 'ui-icon-pin-w'}});
				obj.pinned=false;
			}

		}).button({text:false,icons: {primary: 'ui-icon-pin-w'}});
		jxPannel.prepend(jxPannel.pinDiv);
		
		jxPannel.methodset.buttonset()
		return jxPannel;
	}
	obj._description = _description;
	
	
	function addProperty(propNode){
		var p = new Object(); 
		
		function lineForm(label, caption){
			nline = $("<div class='property_line lineForm lineForm-property'></div>");
			if(label==undefined){label=p.label();}
			if(caption==undefined){caption=p.value();}
			
			if(caption.hasClass("property_value")){
				nline.css("border-bottom","1px dotted black");
				 if(propNode.attr("type")=="url"){
					 if(isImage(caption.attr("utf8Val") ) ){
						 br =$("<br style='clear:both' />");
						 nline.append(label.css("width","")).append(br).append(caption);
					 }else{
						 nline.append(label).append(caption);	 
					 }
				}else if(propNode.attr("type")=="xhtml"){
					br =$("<br style='clear:both' />");
					nline.append(label).append(br).append(caption.css("padding","0px 0px 5px 5px"));
				}else{
					nline.append(label).append(caption);
				}
			}else{
				nline.append(label).append(caption);
			}
			nline.label = label;
			nline.caption = caption;
			nline.click(function(){
				
				if(obj.editMode){
					if(obj.activePanel.id !="description"){
						obj.design(p);
					}else{
						$(this).toggleClass("ui-state-default")	
					}
					
					
				}
			});
			
			return nline;
		}
		p.lineForm=lineForm;
		
		function value(){
			var span = $('<span class="property_value" utf8Val="'+propNode.text()+'" />');
			
			if(propNode.attr("id")==obj.label_field){
				span.addClass(obj.objectId+"-caption");
			}
			if(propNode.attr("type")=="hidden"){
				
			}else if(propNode.attr("type")=="bool"){
				var v="0";
				if(propNode.text()=="1"){v="1";}
				if(propNode.text()=="0"){v="0";}
				span.html("<img alt='bb' src='"+obj.host+"../modules/xam/images/sys/chkbox-active-"+v+".png'/>");
			}else if(propNode.attr("type")=="camera" || propNode.attr("type")=="file"){
				if(isImage(propNode.text().toLowerCase() ) ){
					var photo =$("<div  class='ui-widget ui-widget-content ui-corner-all' />");
					var thumb=$("<img style='width:50px;'src='"+propNode.text()+"' title='"+propNode.text()+"' alt='file not found' />");
					thumb.click(function(){
						var img=$("<img style='padding:5px' src='"+propNode.text()+"' title='"+propNode.text()+"' alt='file not found' />");
						$("body").append(img);
						img.jxResize();
						photo.html("").append(img );
						$.buildOverlay({content:photo})
					});
					thumb.load(function(){
						span.html($(this));
						$(this).jxResize({max_size:75})
					});
					
					
					thumb.css("cursor","pointer");
					thumb.error(function(){
						$(this).unbind("error").attr("src", ICONS+"../mime/_unknown.png").css("width","").css("height","");	
					});
					
				}else{
					mime = mimeIcon(propNode.text());
					if(mime=="_newfile"){
						span.html("<a href='javascript:void(0)' ><img src='"+obj.host+"../modules/xam/images/mime/"+mime+".png' alt='[visit]'  /></a>");
					}else{
						span.html("<a href='"+propNode.text()+"' target='_blank'><img src='"+obj.host+"../modules/xam/images/mime/"+mime+".png' alt='[visit]' /></a>");
					}
						
				}
				
			}else if(propNode.attr("type")=="obj" || propNode.attr("type")=="fkey"){
				var setValue = "";
				if(propNode.text()=="0"){
					setValue = "<img style='width:22px;height:22px;' src='"+XUSERVER_FOLDERNAME+"/modules/"+propNode.attr("module")+"/images/"+propNode.attr("concept")+".png' />";
				}else{
					setValue = propNode.attr("utf8Val");
				}
				span.css("text-decoration","underline").css("cursor","pointer")
				span.html(setValue);
				span.click(function(){
					if(propNode.text()=="0"){
						obj.formInsertOpen({module:propNode.attr("module"), concept:propNode.attr("concept"),onInsert:function(){
							propNode.text("dd")
						}});
					}else{
						testId = propNode.attr("module")+"_"+propNode.attr("concept")+"_"+propNode.text();
						if(xuserver.taskHas(testId)){
							xuserver.tasks[testId].show();
						}else{
							var clxobj = xuserver.taskLoad({data:testId})
							clxob.showPanel({panel:obj.concept,refresh:true});
						}	
					}
					
				});
				
				
				
			}else if(propNode.attr("type")=="xhtml"){
				var div = $("<div class='value-xhtml' />");
				span.append(div.html(propNode.text()))
				div.css("font-size","9px").css("cursor","pointer");
				div.find("h1 , h2 , h3").css("font-size","9px");
				div.css("width","400px").css("overflow","hidden");
				
				var clone = $("<div class='ui-widget ui-widget-content ui-corner-all'/>");
				clone.append(div.clone()).css("margin","80px 3px 80px 3px").css("padding","5px")
				
				div.click(function(){
					if(obj.editMode){
					}else{
						$.buildOverlay({content:clone})	
					}
				});
				div.css("max-height","100px");
			}else if(propNode.attr("type")=="url" ){
				span.html("<a href='javascript:void(0)' ><img src='"+obj.host+"../modules/xam/images/mime/html.png' alt='[visit]'  /></a>");
				span.click(function(){
					window.open(propNode.text())
				})
			}else{
				if(propNode.text() == ""){
					span.html("&nbsp;")
				}else{
					span.html(propNode.text())	
				}
				
			}

			span.addClass( "value-"+propNode.attr("type") );
			
			return span; 
		}
		p.value=value;
		
		function label(options){
			defaults={
				linkTab:false,
				formular:false
			}
			var options = $.extend(defaults, options);
			
			if(propNode.attr("type")=="hidden"){
				label = $('<label />');
			}else{
				var desc=propNode.attr('description');
				if(desc==undefined){desc='';}
				if(! options.linkTab){forAttr='for="'+propNode.attr('id')+'"'; }else{forAttr='';}
				label=$('<label '+forAttr+' title="'+desc+'" class="property_caption">'+propNode.attr('label')+'</label>');
				if(options.formular){
					label.css("white-space","nowrap").css("margin-right","5px")
						.css("float","left").css("width","130px").css("overflow","hidden");
				}
			}
			if(propNode.attr("id")==obj.label_field){
				label.css("font-weight","bold");
			}else if(propNode.attr("required")=="1"){
				if(options.formular){
					label.text(label.text() + " (*)");
				}
			}
			if(options.linkTab){
				label.css("font-style","italic").css("cursor","pointer").click(function(){
					if(obj.editMode){
					}else{
						obj.showPanel({panel:propNode.parent().attr("id")});	
					}
				});	
			}else{
				label.css("cursor","pointer");
			}
			return label; 
		}
		p.label = label;
		
		
		function input(){
			
			var retour = $('<span></span>');
			var inptdual= $('<span></span>');
			
			
			if(propNode.attr("type")=="id"){
				var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-key" /></span>');
				var inpt = $('<input class="form_input" type="hidden" name="'+propNode.attr("id")+'" value="'+propNode.text()+'" />');
			
			}else if(propNode.attr("type")=="hidden"){
				var inptinfo = $('<span></span>');
				var inpt = $('<input class="form_input" type="hidden" name="'+propNode.attr("id")+'" value="'+propNode.text()+'" />');
			
			}else if(propNode.attr("type")=="bool"){
				var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-check" /></span>');
				var chk="";
				if(propNode.text()=="1"){chk = 'checked="checked"';}else{chk="";}
				var inpt = $('<input class="form_input" type="checkbox" name="'+propNode.attr("id")+'" '+chk+' value="1" />');
			
			}else if(propNode.attr("type")=="obj" || propNode.attr("type")=="fkey"){
				if(propNode.text()=="0"){
					propNode.attr("utf8Val","")
				}else{
				}
				
				if(propNode.text() == ""){ic = '<span class="jx-inline ui-icon ui-icon-key" />';}else{ic = propNode.text();}
				var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-key" title="'+propNode.text()+'" /></span>');
				var inpt = $('<input class="form_input" type="hidden" name="'+propNode.attr("id")+'"  value="'+propNode.text()+'" />');
				var inptdual = $('<input  type="autocomplete" value="'+propNode.attr("utf8Val")+'" />');
				
				inptdual.autocomplete({
          			source: obj.host+"jquery.autocomplete.php?jx="+propNode.attr("module")+"_"+propNode.attr("concept") ,
          			delay:100,minLength: 2,
          			select: function(event, ui) {
          				inpt.val(ui.item.id);
          				//inptinfo.text(ui.item.id);
          				inpt.attr('title',ui.item.id);
          				propNode.text(ui.item.id);
          			},
          			change:function(event, ui) {
          				if(ui.item == null){
              				//var retour = $(this).prev();
              				if( $(this).val() =="" ){
              				}else if( confirm("ajouter "+propNode.attr("concept")+" : " + $(this).val()) ){
              					$.ajax({
	              					url:obj.host+'xsm.html.loader.php?xuclient=xuclient&sid='+obj.sid+'&module='+propNode.attr("module")+'&concept='+propNode.attr("concept")+'&id=0&tab=_insert&method=_insert&value='+$(this).val(),
	              					beforeSend:function(){},
									success: function(data){
										$("body").append(data);
										db_id = $(data).find('span#db_id').attr('db_id');
										if(db_id =="auto_increment"){
										}else{
											inpt.val( db_id );
											//inptinfo.text(db_id);
											inpt.attr('title',db_id);
											propNode.text(db_id);
										}
									}
								});
              				}else{
              					$(this).val(propNode.attr("utf8Val")).select();
              				}
          				}
          			}
				})
				;
				
				
			}else if(propNode.attr("type")=="textarea"){
				var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-clipboard" /></span>');
				var inpt = $('<textarea class="form_input" name="'+propNode.attr("id")+'" >'+propNode.text()+'</textarea>');
				
			}else if(propNode.attr("type")=="xhtml"){
				var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-clipboard" /></span>');
				var inpt = $('<textarea class="form_input" name="'+propNode.attr("id")+'" >'+propNode.text()+'</textarea>');
				
			}else if(propNode.attr("type")=="date"){
				var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-calendar" /></span>');
				if(propNode.text()=="" || propNode.text()=="0000-00-00"){
					/*
					d = new Date();if(d.getDay() <10){day="0"+d.getDay();}else{day=d.getDay();}if(d.getMonth() <10){month="0"+d.getMonth();}else{month=d.getMonth();}
					formatDate = day+"/"+month+"/"+d.getFullYear();
					*/
					formatDate = obj.xuml.attr("today")
					
				}else{
					if(propNode.text().indexOf("-")!==-1){
						d = propNode.text().split("-");
						formatDate = d[2]+"/"+d[1]+"/"+d[0];
						
					}else{
						formatDate=propNode.text()
						
					}
					
				}
				propNode.text(formatDate);
				var inpt = $('<input class="form_input" type="text" id="'+obj.objectId+"-"+propNode.attr("id")+'" name="'+propNode.attr("id")+'" value="'+propNode.text()+'" />');
				inpt.datepicker({
					dateFormat:"dd/mm/yy",
		            showAnim: "fadeIn",
		            firstDay: 1,
		            dayNamesMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'],
		            monthNamesShort: ['Jan','Fev','Mar','Avr','Mai','Juin','Jul','Aou','Sept','Oct','Nov','Dec'],
		            monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre','Octobre','Novembre','Decembre'],
		            showButtonPanel: true 
		          });
				
			}else if(propNode.attr("type")=="number"){
				if(isNaN(propNode.text()) ||  propNode.text() ==""){propNode.text("0")}
				var inpt =  $('<input class="form_input" type="number" name="'+propNode.attr("id")+'" value="'+parseInt(propNode.text())+'" />');
				if(propNode.attr("unit")=="percent"){
					var inptinfo = $('<span>%</span>');
					inptdual = $('<div style="width:120px;float:left"></div>');
					inptdual.slider({
             			value:propNode.text(),
             			max:100,animate:true,
             			slide: function(event, ui) {
             				$(this).prev().val(parseInt(ui.value));
						}
             		});
					inpt.css("width","2em").css("border","0px");
				}else{
					var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-calculator" /></span>');
					inpt.mathparser();
				}
				inptinfo.css("float","left")
				inpt.css("float","left")
			
			}else if(propNode.attr("type")=="text"){
				var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-document-b" /></span>');
				var inpt = $('<input class="form_input" type="text" name="'+propNode.attr("id")+'" value="'+propNode.text()+'" />');
				if(propNode.attr("autocomplete")=="1"){
					var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-search" /></span>');
					inpt.autocomplete({
	          			source: obj.host+"jquery.autocomplete.php?jx="+propNode.attr("module")+"_"+propNode.attr("concept") ,
	          			delay:100,minLength: 2
					});
				}else{
					var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-document-b" /></span>');
				}
				
			}else if(propNode.attr("type")=="email"){
				var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-mail-closed" /></span>');
				var inpt =  $('<input class="form_input" type="email" name="'+propNode.attr("id")+'" value="'+propNode.text()+'" />');
			}else if(propNode.attr("type")=="url"){
				var inptinfo = $('<span><span class="jx-inline ui-icon ui-icon-link" /></span>');
				var inpt =  $('<input class="form_input" type="url" name="'+propNode.attr("id")+'" value="'+propNode.text()+'" />');
			
			}else if(propNode.attr("type")=="file"){
				var inptinfo = $('<span style="float:left"><span class="jx-inline ui-icon ui-icon-disk" /></span>');
				var inpt =  $('<input class="form_input" type="file" name="'+propNode.attr("id")+'" href="'+propNode.text()+'" />');
				
			}else if(propNode.attr("type")=="camera"){
				var inptinfo = $('<span style="float:left"><span class="jx-inline ui-icon ui-icon-image" /></span>');
				var inpt =  $('<input class="form_input" type="file" accept="image/*" capture="camera"  name="'+propNode.attr("id")+'" href="'+propNode.text()+'" />');

			}else if(propNode.attr("type")=="camcorder"){
				var inptinfo = $('<span style="float:left"><span class="jx-inline ui-icon ui-icon-video" /></span>');
				var inpt =  $('<input class="form_input" type="file" accept="video/*" capture="camcorder"  name="'+propNode.attr("id")+'" href="'+propNode.text()+'" />');
			}else if(propNode.attr("type")=="microphone"){
				var inptinfo = $('<span style="float:left"><span class="jx-inline ui-icon ui-icon-volume-on" /></span>');
				var inpt =  $('<input class="form_input" type="file" accept="video/*" capture="microphone"  name="'+propNode.attr("id")+'" href="'+propNode.text()+'" />');
			
			}else{
				var inptinfo = $('<span ><span class="jx-inline ui-icon ui-icon-document-b" /></span>');
				var inpt =  $('<input class="form_input" type="'+propNode.attr("type")+'" class="'+propNode.attr("type")+'" name="'+propNode.attr("id")+'" value="'+propNode.text()+'" />');
			}
			
			// validation rules
			if(propNode.attr("type")!="date"){
				inpt.attr("id", propNode.attr("id") );
				inpt.addClass( propNode.attr("type") );
			}else{
				inpt.addClass( "dateFR" );
			}
			
			if(propNode.attr("id")==obj.label_field){
				inpt.addClass("required");
				inptdual.addClass("required");
			}else if(propNode.attr("required")=="1"){
				inpt.addClass("required");
				inptdual.addClass("required");
			}
			inptdual.css("width","18px;")
			retour.append(inptinfo).append(inpt).append(inptdual);
			$("input[type='file']",retour).each(function(){
				var ii = $(this);
				ii.jxUpload({
					target:retour,
					objectId:obj.objectId,
					onClick:function(){ii.click();},
					success:function(html, url){
						//ii.iconMime.attr("value",url)
						var iconMime = $("#jx-upload-iconMime-"+obj.objectId+"-"+ii.attr("id"))
						iconMime.attr("href",url)
						propNode.text(url)
					}
				});
			});
			return retour;
		}
		p.input = input;
		
		p.xuml = propNode;
		return p;
	}
	obj.addProperty = addProperty;
	
	function inputId(){
		retour = $('<input class="form_input" type="hidden" name="'+obj.id_field+'" value="'+obj.id+'" />');
		return retour; 
	}
	obj.inputId = inputId;
	
	
	function addForm(tab){
		var jxPannel = obj.addPanel({xuml:tab});
		
		function refresh(){
			br = $("<br style='clear:both;' />");
			jxPannel.form.html("");
			
			tab.find("property[id!='"+obj.id_field+"']").each(function(){
				var p = obj.properties[$(this).attr("id")];
				jxPannel.form.append(p.lineForm(p.label({formular:true}), p.input() ));
			});
			input = obj.inputId();
			
			buttonUpdate = $("<a href='javascript:void(0)'>update</a>");
			line = $("<div class='method_line' style='margin:10px 0px 0px 0px;'></div>");
			line.append(buttonUpdate);
			line.buttonset();
			
			tab.find("method").each(function(){
				meth = $(this);
				jxPannel.methodset.append(obj.methods[meth.attr("id")].menuButton());	
			});
			jxPannel.methodset.buttonset()
			
			if(tab.attr("can_update")!="1"){
				buttonUpdate.button({disabled:true,icons: {primary: 'ui-icon-key'}});
			}else{
				buttonUpdate.click(function(){
					if(jxPannel.form.valid()){
						postData = '';
						chk='';
						jxPannel.form.find('input[type="checkbox"]:not(:checked)').each(function(){chk+= $(this).attr("name")+"=&";});
						postData = jxPannel.form.serialize() + '&'+chk;
						$.ajax({
							type: 'POST',
							url:obj.urlBase()+'&tab='+tab.attr("id")+'&method=_update',
							data: postData,
							beforeSend:function(){
								//$.buildOverlay({color:"green"})
							},
							success: function(html){
								ohtml = $(html);sticky = ohtml.find("span").attr("sticky");
								if(sticky!="1"){
									$.jxNotify(html,{sticky:true});
									jxPannel.xumlUpdate();
								}else{
									$.jxNotify(html,{life:500});
									jxPannel.xumlUpdate();
								}
								//$.removeOverlay()
							},
							complete: function(html){
								new_caption= $("input[name='"+obj.label_field+"']", $("#"+obj.objectId+"-ui")).val();
								//$("."+obj.objectId+"-caption", $("."+obj.objectId+"-widget")).text(new_caption);
								obj.caption(new_caption);
								obj.ui.resetDescription({hide:true});
							},
							error: function(html){
								alert("error");
							}
						});
					}else{
					}
					
				}).button({icons: {primary: 'ui-icon-check'}});
			}
			jxPannel.form.append(br);
			jxPannel.form.append(input).append(line);
			jxPannel.form.validate(obj.optionsValidate);
		}
		jxPannel.refresh=refresh;
		jxPannel.refresh();
		
		function xumlUpdate(){
			jxPannel.form.find(".form_input").each(function(){
				var inpt = $(this);
				var prop = obj.properties[inpt.attr("name")];
				
				if(prop.xuml.attr("type")=="bool"){
					if(inpt.is(":checked")){prop.xuml.text("1")	}else{prop.xuml.text("0")}
				}else if(prop.xuml.attr("type")=="obj" || prop.xuml.attr("type")=="fkey"){
					prop.xuml.attr("utf8Val",inpt.next().attr("value"))
					prop.xuml.text(inpt.attr("value"))
				}else if(prop.xuml.attr("type")=="camera" || prop.xuml.attr("type")=="file"){
					alert(inpt.attr("value"))
				}else{
					prop.xuml.text(inpt.attr("value"));
					//alert(prop.xuml.attr("utf8Val"));
					prop.xuml.attr("utf8Val",inpt.attr("value"));
					//alert(prop.xuml.attr("utf8Val"));
				}
			});
		}
		jxPannel.xumlUpdate = xumlUpdate;
		
			
		
		
		jxPannel.hide();
		
		return jxPannel;
	}
	obj.addForm = addForm;
	
	

	function formDelete(options){
		var defaults = {
	      parent:obj,
	      onDelete:null
		};
		var options = $.extend(defaults, options);
		//obj.utf8Val = "delete";
		var jxPannel = obj.addPanel({contextual:false,xuml:obj.xuml});
		jxPannel.show();
		
		
		var icon2=$('<img src="'+ICONS+'class.png" alt="icon3" style="margin:0px 10px 0px 10px;width:16px;height:16px" />');
		var icon3=$('<img src="'+ICONS+'collection.png" alt="icon3" style="margin:0px 10px 0px 10px;width:16px;height:16px" />');

		treeDelete = $("<ul style='padding:0px;margin-bottom:35px;'></ul>");
		liObject = $("<li class='open'><label>object</label></li>")
		liObject.find("label").prepend(icon2)
		ulObject = $("<ul></ul>")
		liObjectInput = $("<li><label><input type='checkbox' value='1' name='chk_object' /> destroy object</label></li>")
		liObject.append(ulObject.append(liObjectInput))
		
		
		jxPannel.form.append(treeDelete);
		//liObject.prepend(icon2)
		treeDelete.append(liObject);
		
		obj.xuml.find("collection").each(function(){
			var clx = $(this);
			var li3 = $("<li class='open' style='list-style:none'><label>collection "+clx.attr("label")+"</label></li>");
			li3.find("label").prepend(icon3.clone())
			var ul3 = $("<ul style='list-style:none'></ul>");
			
			var unlink = $("<li><label><input type='checkbox' value='1' name='unlink_"+clx.attr("module")+"_"+clx.attr("concept")+"' /> detach "+clx.attr("concept")+"</label></li>")
			var chk = $("<li><label><input type='checkbox' value='1' name='chk_"+clx.attr("module")+"_"+clx.attr("concept")+"' /> destroy "+clx.attr("concept")+"</label></li>")
			
			li3.append(ul3)
			ul3.append(unlink);
			ul3.append(chk)
			ulObject.append(li3)
		});
		treeDelete.jxTreeview({unique:false});
		
		buttonClose= $("<a href='javascript:void(0)'>close</a>");
		buttonClose.click(function(){
			$.removeOverlay();
		});
		
		buttonDelete= $("<a href='javascript:void(0)'>delete</a>");
		buttonDelete.click(function(){
			postData = "";chk="";
			jxPannel.form.find('input[type="checkbox"]:not(:checked)').each(function(){chk+= $(this).attr("name")+"=&";});
			postData = jxPannel.form.serialize() + '&'+chk;
			$.ajax({
				type: 'POST', 
				url:obj.urlBase()+"&method=_delete",
				data: postData,
				beforeSend:function(){
					$.buildOverlay({color:"green"});
				},
				success:function(html){
					script = $(html)
					$.removeOverlay();
					$("body").append(script);
				},
				complete:function(){
					if(options.onDelete!= null){
		    			options.onDelete(obj); 	
		    		}
				}
			});	
			
		});
		
		jxPannel.buttonset.append(buttonClose).append(buttonDelete).buttonset();
		buttonDelete.button({icons: {primary: 'ui-icon-trash'}});
		buttonClose.button({icons: {primary: 'ui-icon-close'}});
		return jxPannel;
		
	}
	obj.formDelete= formDelete;

	function formDeleteOpen(options){
		var defaults = {
	      xuml:obj.xuml,
	      onInsert:null
		};
		var options = $.extend(defaults, options);
		
		deleteForm = obj.formDelete();
		$.buildOverlay({color:"black",content:deleteForm});
	}
	obj.formDeleteOpen = formDeleteOpen;
	
	
	function formInsert(options){
		var defaults = {
	      parent:obj,
	      onInsert:null
		};
		var options = $.extend(defaults, options);
		obj.utf8Val = "insert";
		var jxPannel = obj.addPanel({contextual:false,xuml:obj.xuml});
		jxPannel.show();
		
		obj.xuml.find("property").each(function(){
			prop = $(this);
			p = obj.properties[prop.attr("id")];
			force = false;
			if(prop.attr("fk_field") == options.parent.fk_field){
				obj.properties[prop.attr("id")].xuml.text(options.parent.id);
				obj.properties[prop.attr("id")].xuml.attr("utf8Val",options.parent.utf8Val);
				force = true;
			}else if(prop.attr("id")==obj.label_field){
				obj.properties[prop.attr("id")].xuml.text("");
				force = true;
			}else if(prop.attr("type")=="date"){
				obj.properties[prop.attr("id")].xuml.text(obj.xuml.attr("today"));
			}else if(prop.attr("type")=="file" || prop.attr("type")=="url"){
				prop.attr("insert","0");
			}else{
				if(obj.properties[prop.attr("id")].xuml.attr("utf8Val")==""){
					obj.properties[prop.attr("id")].xuml.attr("utf8Val","choose ...");	
				}
			}
			if(force == true  || (prop.attr("insert") == "1" && prop.parent().attr("insert") == "1") ){
				jxPannel.form.append(p.lineForm(p.label({formular:true}), p.input()));	
			}
		});
		
		//line = $("<div class='property_line'></div>");
		
		buttonClose= $("<a href='javascript:void(0)'>close</a>");
		buttonClose.click(function(){
			$.removeOverlay();
		});
		
		buttonInsert = $("<a href='javascript:void(0)'>insert</a>");
		buttonInsert.click(function(){
			if(jxPannel.form.valid()){
				postData = "";chk="";
				jxPannel.form.find('input[type="checkbox"]:not(:checked)').each(function(){chk+= $(this).attr("name")+"=&";});
				postData = jxPannel.form.serialize() + '&'+chk;
				
				$.ajax({
					type: 'POST', 
					url:obj.urlBase()+"&value="+ jxPannel.form.find("input[name='"+obj.label_field+"']").val() +"&method=_insert",
					data: postData,
					beforeSend:function(){
						$.buildOverlay({color:"green"});
					},
					success:function(html){
						script = $(html)
						$.removeOverlay();
						$("body").append(script);
					},
					complete:function(){
						if(options.onInsert!= null){
			    			options.onInsert(obj); 	
			    		}
					}
				});	
			}else{
				
			}
		});
		jxPannel.buttonset.append(buttonClose).append(buttonInsert).buttonset();
		buttonInsert.button({icons: {primary: 'ui-icon-plus'}});
		buttonClose.button({icons: {primary: 'ui-icon-close'}});
		
		jxPannel.form.validate(obj.optionsValidate);
		//setTimeout(function(){form.find("input.form_input:first").select();},50)
		
		return jxPannel;
		
	}
	obj.formInsert= formInsert;
	
	function formInsertOpen(options){
		var defaults = {
				xuml:obj.xuml,
				module:undefined,
				concept:undefined,
				onInsert:null
		};
		var options = $.extend(defaults, options);
		if(options.module!=undefined){
			var xModule = options.module;
			var xConcept = options.concept;
    	}else{
    		var xModule = options.xuml.attr("module");
    		var xConcept = options.xuml.attr("concept")
    	}
		newElement = xuNew();
		newElement.load({
			container:obj.container,
			module:xModule,
			concept:xConcept,
			id:0,
			complete:function(newObj){
				newObj.ui.remove();
				insertForm =newObj.formInsert({parent:obj, onInsert:options.onInsert});
				$.removeOverlay();
				$.buildOverlay({color:"black",content:insertForm});
				//obj._contextual();
			}
		});
		
	}
	obj.formInsertOpen = formInsertOpen;
	
	
	
		
	return obj;
}






