/*!
 * Ext JS Library 3.0.0
 * Copyright(c) 2006-2009 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.BLANK_IMAGE_URL = '/k3/css/blank.gif';

Ext.mbox = function(){
    var msgCt;

    function createBox(t, s){
        return ['<div class="msg">',
                '<div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>',
                '<div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc"><h3>', t, '</h3>', s, '</div></div></div>',
                '<div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>',
                '</div>'].join('');
    }
    return {
        msg : function(title, format){
            if(!msgCt){
                msgCt = Ext.DomHelper.insertFirst(document.body, {id:'msg-div'}, true);
            }
            msgCt.alignTo(document, 't-t');
            var s = String.format.apply(String, Array.prototype.slice.call(arguments, 1));
            var m = Ext.DomHelper.append(msgCt, {html:createBox(title, s)}, true);
            m.slideIn('t').pause(1).ghost("t", {remove:true});
        },

        init : function(){

            var lb = Ext.get('lib-bar');
            if(lb){
                lb.show();
            }
        }
    };
}();

Ext.onReady(Ext.mbox.init, Ext.mbox);

// old school cookie functions
var Cookies = {};
Cookies.set = function(name, value){
     var argv = arguments;
     var argc = arguments.length;
     var expires = (argc > 2) ? argv[2] : null;
     var path = (argc > 3) ? argv[3] : '/';
     var domain = (argc > 4) ? argv[4] : null;
     var secure = (argc > 5) ? argv[5] : false;
     document.cookie = name + "=" + escape (value) +
       ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
       ((path == null) ? "" : ("; path=" + path)) +
       ((domain == null) ? "" : ("; domain=" + domain)) +
       ((secure == true) ? "; secure" : "");
};

Cookies.get = function(name){
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	var j = 0;
	while(i < clen){
		j = i + alen;
		if (document.cookie.substring(i, j) == arg)
			return Cookies.getCookieVal(j);
		i = document.cookie.indexOf(" ", i) + 1;
		if(i == 0)
			break;
	}
	return null;
};

Cookies.clear = function(name) {
  if(Cookies.get(name)){
    document.cookie = name + "=" +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
};

Cookies.getCookieVal = function(offset){
   var endstr = document.cookie.indexOf(";", offset);
   if(endstr == -1){
       endstr = document.cookie.length;
   }
   return unescape(document.cookie.substring(offset, endstr));
};


// ================================ lancement des outils communs
Ext.onReady(function(){
	
	Ext.QuickTips.init();
	//Ext.state.Manager.setProvider(new Ext.state.SessionProvider({state: Ext.appState}));
      Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
   

})



function XtaskBar_addwin(win,text){
	if (!Ext.get(win.id+"_tb")) {
		var taskbutton = new Ext.Button({ 
			id:win.id+"_tb"
			,itemId:win.id+"_tb"
			,text:text
			,cls:"taskbar-win-active"
			,handler:function(){
				XtaskBar_click(win);
			}
		});
		XtaskBar.addButton(taskbutton);
		XtaskBar.doLayout(); 
		XtaskBar_active(win);
		taskbutton.getEl().on("dblclick",function(){
			win.toggleMaximize();
			XtaskBar_active(win);
		});
	}
}
function XtaskBar_click(win){
	if(!win.isVisible() || XtaskBar.activewin != win.id) {
		XtaskBar_active(win);
	}
	else {
		XtaskBar_hide(win);
	}
}
function XtaskBar_removewin(win){
	XtaskBar.remove(win.id+"_tb");
}
function XtaskBar_active(win){
	buttons = XtaskBar.findByType("button");
	for( var i =0; i <buttons.length; i++) {
		if (buttons[i].id==win.id+"_tb") {
			buttons[i].removeClass("taskbar-win-hide");
			buttons[i].removeClass("taskbar-win");
			buttons[i].addClass("taskbar-win-active");
		}
		else {
			buttons[i].removeClass("taskbar-win-active");
			buttons[i].addClass("taskbar-win");
		}
	};
	win.show();
	win.toFront();
	XtaskBar.activewin = win.id;
	
}
function XtaskBar_hide(win){
	buttons = XtaskBar.findByType("button");
	for( var i =0; i <buttons.length; i++) {
		if (buttons[i].id==win.id+"_tb") {
			buttons[i].removeClass("taskbar-win-active");
			buttons[i].removeClass("taskbar-win");
			buttons[i].addClass("taskbar-win-hide");
		}
	};
	win.hide();
}
// =================== fenetres =======================================
XtaskBar = false;
// ========= ouvrir une fenetre iframe
function XWinframe(url,width,height,title,params){
	
	wid = SHA1(url);
	if (!Ext.get("Xwin"+wid)) {
		
		var maximizable=true;
		var minimizable=true;
		var closable=true;
		var print = true;
		var wtools = true;
		var stateful = true;
		
		if (params!=undefined) {
			if(params.indexOf("nomax")>=0) maximizable=false;
			if(params.indexOf("nomin")>=0) minimizable=false;
			if(params.indexOf("noclose")>=0) closable=false;
			if(params.indexOf("noclose")>=0) closable=false;
			if(params.indexOf("noprint")>=0) print=false;
			if(params.indexOf("notools")>=0) wtools=false;
			if(params.indexOf("nostateful")>=0) stateful=false;
		}
		
		var tools = new Array();
		if (wtools) {
			
			if (print) tools.push({
			  id:'print',
			  handler: function(ev,tool,pan,conf){
				  pan.getFrame().print();
			  }	  
			});		
			tools.push({
			  id:'refresh',
			  handler: function(ev,tool,pan,conf){
				  pan.getFrame().setSrc();
			  }
			});
		}
		
		var Xwin = new Ext.ux.ManagedIFrame.Window({
		  id : "Xwin"+wid
		  ,layout:"fit"
		  ,stateful:stateful
		  ,border:false
		  ,constrain : true
		  ,bodyBorder:false
		  ,plain:true
		  ,width : width
		  ,height : height
		  ,maximizable:maximizable
		  ,minimizable:minimizable
		  ,closeAction : 'destroy'
		  ,loadMask : false
		  ,autoScroll : true
		  ,defaultSrc : url
		  ,listeners: {
			  documentloaded : function(iframe){
				var wintitle=title;
				if (wintitle==undefined && this.getFrameDocument()) {
				  wintitle=this.getFrameDocument().title;
				}
				this.setTitle(wintitle);
				if (XtaskBar) XtaskBar_addwin(Xwin,wintitle);
			  }
			  ,minimize: function(){
				  this.hide();
				  if (XtaskBar) XtaskBar_hide(this)
			  }
			  ,beforedestroy : function(){
				if (XtaskBar) XtaskBar_removewin(Xwin);
        	  }
			  ,activate : function(){
				this.toFront();
				if (XtaskBar) XtaskBar_active(this);
        	  }
			  ,focus: function(fram,ev){
				  fram.ownerCt.toFront();
				  if (XtaskBar) XtaskBar_active(fram.ownerCt);
			  }
		  }
		  ,tools:tools
		
		});
		if (Ext.getCmp("xmain")) Xwin.render("xmain");
		Xwin.show();
		if (width==0) Xwin.maximize();
	}
	else {
		Xwin = Ext.getCmp("Xwin"+wid);
		if (wid=="amewin") Ext.getCmp("Xwin"+wid).getFrame().setSrc();
		Xwin.show();
		Xwin.toFront();
	}
	
	return Xwin;

}
// === ouvrir une fenetre avec une iframe en pannel principal au niveau le plus haut possible
function XWinframetop(url,width,height,wid,params){
	var winparent = window;
	while (winparent.parent.XWinframe){
		winparent = winparent.parent;
	}
	winparent.XWinframe(url,width,height,wid,params);
}


function Xhelp(hwin){
	var id = hwin.id.substr(4);
	var help='';
	if(Ext.getCmp("Xgridframe"+id)) help = Ext.getCmp("Xgridframe"+id).getFrameWindow().Ext.get("k3help").dom.innerHTML;
	Xwin("aide "+hwin.title,help,300,300);
}
function Xwin(title,html,width,height){
	wid = SHA1(title);
	if (!Ext.getCmp("Xwin"+wid)) {
		var Xwin = new Ext.Window({
			layout:"fit"
			,bufferResize:true
			,hideMode:"visibility"
			,id:"Xwin"+wid
			,stateful:true
			,border:false
			,hideBorders:true
			,bodyBorder:false
			,constrain:true
			,plain:true
			,autoScroll:true
			,closable:true
			,maximizable:true
			,minimizable:true
			,width:width
			,height:height
			,title:title
			,padding:4
			,html:html
			,listeners: {
				minimize: function(){
					Xwin.hide();
					if (XtaskBar) XtaskBar_hide(Xwin);
				}
				,close: function(){
					if (XtaskBar) XtaskBar_removewin(Xwin);
				}
				,focus: function(){
					Xwin.toFront();
					if (XtaskBar) XtaskBar_active(Xwin);
				}
				,activate : function(){
					Xwin.toFront();
					if (XtaskBar) XtaskBar_active(Xwin);
				}
			}
			,tools: [{
			  id:'print',
			  handler: function(ev,tool,pan,conf){
				 Xprint(html,title);
			  }
			}]
		
		});
		if (Ext.get("xmain")) Xwin.render("xmain");
		else  Xwin.render(Ext.getBody());
		Xwin.show();
		if (XtaskBar) XtaskBar_addwin(Xwin,title);
		}
	else {
		Ext.getCmp("Xwin"+wid).toFront();
		Ext.getCmp("Xwin"+wid).show();
		if (XtaskBar) XtaskBar_active(Ext.getCmp("Xwin"+wid));
	}
	
	if (width==0) Ext.getCmp("Xwin"+wid).maximize();
}

function Xprint(html,title){
	
	var hframe = document.getElementById('hidden_iframe');
	hframe.src="/k3/css/blank.html";
	var hprint = (hframe.contentWindow || hframe.contentDocument);
	if (hprint.document) hprint = hprint.document;
	hprint.write("<head><title>"+title+"</title></head><body onload='this.focus(); this.print();'>"+html+"</body>");
	hprint.close();
}

// ========= ouvrir une fenetre grid / ame
function XWingridame(urlgrid,urlame,width,height,params,panelwidth){
	wid = SHA1(urlgrid);
	if (!Ext.getCmp("Xwin"+wid)) {
		
		var print = true;
		var help = true;
		var tools = new Array();
		
		var panwidth=600;
		if (panelwidth!=undefined) {
			panwidth = panelwidth;
		}
		
		if (print) tools.push({
		  id:'print',
		  handler: function(ev,tool,pan,conf){
			  Ext.getCmp("Xameframe"+Xwin.id.substr(4,40)).getFrame().print();
		  }	 
		  ,hidden:true
		});	
		if (help) tools.push({
		  id:'help',
		  handler: function(ev,tool,pan,conf){
			  Xhelp(Xwin);
		  }
		  ,hidden:true
		});
		tools.push({
		  id:'refresh',
		  on:{
			  click: function(ev,tool,pan){
				  Ext.getCmp("Xgridframe"+Xwin.id.substr(4,40)).getFrame().setSrc();
				  Ext.getCmp("Xameframe"+Xwin.id.substr(4,40)).getFrame().setSrc();
			  }
		  }
		});
		
		var Xwin = new Ext.Window({
			layout:"border"
			,bufferResize:true
			,hideMode:"visibility"
			,id:"Xwin"+wid
			,stateful:true
			,border:false
			,hideBorders:true
			,bodyBorder:false
			,constrain:true
			,plain:true
			,autoScroll:false
			,closable:true
			,maximizable:true
			,minimizable:true
			,width:width
			,height:height
			,items: [{
				region: 'center'
				,xtype : "iframepanel"
				,id:"Xgridframe"+wid
				,layout:"fit"
				,header:false
				,border:false
				,hideBorders:true
				,bodyBorder:false
				,collapsible: false
				,defaultSrc : urlgrid
				,listeners: {
					documentloaded : function(iframe){
						var wintitle = this.getFrameDocument().title;
						Xwin.setTitle(wintitle);
						if (XtaskBar) XtaskBar_addwin(Xwin,wintitle);
						if (this.getFrameWindow().Ext.get("k3help")) Xwin.tools.help.show();
					}
					,focus: function(){
						Xwin.toFront();
						if (XtaskBar) XtaskBar_active(Xwin);
					}
					,click: function(){
						Xwin.toFront();
						if (XtaskBar) XtaskBar_active(Xwin);
					}
				}
			},{
				region:"east"
				,xtype : "iframepanel"
				,id:"Xameframe"+wid
				,layout:"fit"
				,border:false
				,hideBorders:true
				,bodyBorder:false
				,header:false
				,split: true
				,width:panwidth
				,resizable:true
				,collapsible: true
				,collapseMode:"mini"
				,collapsed: true
				,animCollapse:false
				,defaultSrc : urlame
				,loadMask :{msg: '...'}
				,listeners: {
					focus: function(){
						Xwin.toFront();
						if (XtaskBar) XtaskBar_active(Xwin);
					}
					,click: function(){
						Xwin.toFront();
						if (XtaskBar) XtaskBar_active(Xwin);
					}
					,expand: function(){
						Xwin.tools.print.show();
					}
					,collapse: function(){
						Xwin.tools.print.hide();
					}
					
				}
			}]
			,tools:tools
			,listeners: {
				minimize: function(){
					Xwin.hide();
					if (XtaskBar) XtaskBar_hide(Xwin);
				}
				,close: function(){
					if (XtaskBar) XtaskBar_removewin(Xwin);
				}
				,focus: function(){
					Xwin.toFront();
					if (XtaskBar) XtaskBar_active(Xwin);
				}
				,activate : function(){
					Xwin.toFront();
					if (XtaskBar) XtaskBar_active(Xwin);
				}
			}

		});
		if (Ext.get("xmain")) Xwin.render("xmain");
		else  Xwin.render(Ext.getBody());
		
		Ext.getCmp("Xwin"+wid).show();
	}
	else {
		Ext.getCmp("Xwin"+wid).toFront();
		Ext.getCmp("Xwin"+wid).show();
		if (XtaskBar) XtaskBar_active(Ext.getCmp("Xwin"+wid));
	}
	if (width==0) Ext.getCmp("Xwin"+wid).maximize();
	
	
}
// === grids ===
function XgridDeleteSelection(grid){
	selections =  grid.getSelectionModel().getSelections();
	if (selections.length==0) return false;
	if (selections.length==1) var msg = "Confirmez vous la suppression de cette fiche ?";
	if (selections.length>1) var msg = "Confirmez vous la suppression de "+selections.length+" fiches ?";
	Ext.Msg.confirm("Suppression",msg,
		function(btn){
			if (btn == "yes") { 
				var store = grid.getStore();
				for($s=0;$s<selections.length;$s++) {
					record = selections[$s].get("id");
					var grid_wid = grid.id.substr(-40);
					var ame_id = "";
					if(parent.Ext.getCmp("Xameframe"+grid_wid)) {
						var ameframe = parent.Ext.getCmp("Xameframe"+grid_wid);
						ame_id = ameframe.getFrame().dom.src.substr(-40);
						
						if (ame_id==record) {
							ameframe.collapse();
							ameframe.getFrame().setSrc("/k3/css/blank.html");
						} 
					}
					
					Ext.Ajax.request({
						url:"/k3/functions/kdb_delete.php?table="+grid.tableName+"&id="+record,
						method:"GET",
						success:function(action) {
							if (action.responseText!="ok") {
								Ext.Msg.show({
								   title:"Erreur de suppression.",
								   buttons:Ext.Msg.OK,
								   msg:"La fiche semble ne pas avoir pas été supprimé.<br>"+action.responseText,
								   icon: Ext.MessageBox.WARNING,
								   minWidth:200
								})
							}
						},
						failure: function(action) {
							Ext.Msg.alert("Impossible de lancer la suppression.");
						}
					});
					store.remove(record); 
					
				}
				store.reload(); 
			}
		}
	);
}

// === files ===
// === annulation de l'envoi d'un fichier par upload
function XFileInput_reset(fld)
{
	Ext.getCmp(fld+'_text').reset();
	var parent = document.getElementById(fld+'_filediv');
	newFileInput = document.createElement('input');
	parent.removeChild(document.getElementById(fld));
	newFileInput.setAttribute('type', 'file');
	newFileInput.setAttribute('id', fld);
	newFileInput.setAttribute('title', 'Ajouter un fichier.');
	// ff only
	newFileInput.setAttribute('onChange', "XFileInput_updateid('"+fld+"');");
	parent.appendChild(newFileInput);
	
	var formulaire = document.getElementById(fld);
	//ff
	//if (formulaire.addEventListener) { 
	  //formulaire.addEventListener("onchange",updateFileInput,false); 
	//} 
	//ie
	if (formulaire.attachEvent) { 
		formulaire.attachEvent("onchange",XFileInput_updateevt); 
	}
	document.getElementById(fld+'_filereset').style.visibility="hidden";
}
function XFileInput_updateid(id){
	Ext.getCmp(id+'_text').setValue(document.getElementById(id).value);
	document.getElementById(id+'_filereset').style.visibility="visible";
	
}
function XFileInput_updateevt(evt){
	if (evt.target? e_out=evt.target.id : e_out=evt.srcElement.id);
	Ext.getCmp(e_out+'_text').setValue(document.getElementById(e_out).value);
	document.getElementById(e_out+'_filereset').style.visibility="visible";
	
}

// == suppression d'un fichier lié
function XFile_delete(fid)
{
	Ext.Msg.show({
	   title:'Effacer ce fichier ?',
	   msg: 'Confirmez vous la suppression de ce fichier ?<br>La suppression est définitive.',
	   buttons: Ext.Msg.YESNO,
	   fn: function(btn){
		   if(btn=='yes') {
			   Ext.Ajax.request({
				   url: '/k3/functions/kdb_delete.php?table=k_files&id='+fid,
				   success: function(){
					   Ext.get('f'+fid).remove();
					},
				   failure: function(){Ext.Msg.alert('Erreur', 'Erreur lors de la tentative de suppression.');},
				   method:"GET"
				});
			   
		   }
	   },
	   //animEl: 'elId',
	   icon: Ext.MessageBox.QUESTION
	});
}

function XFile_preview(fpath)
{   
	//var winparent = window;
	//while (winparent.parent.XWinframe){
	//	winparent = winparent.parent;
	//}
	top.XWinframe(fpath,300,300);

}
function XFile_edit(fid)
{   
	var winparent = window;
	//while (winparent.parent.XWinframe){
	//	winparent = winparent.parent;
	//}
	top.XWinframe('/k3/functions/file_edit.php?id='+fid,500,600,'filedit');

}
function XFile_download(fid)
{   
   document.getElementById('hidden_iframe').src="/k3/functions/file_download.php?id="+fid;

}

function XDeleteRecord(table,id){
		Ext.Msg.confirm("Suppression","Confirmez vous la suppression de cette fiche ?",
			function(btn){
				if (btn == "yes") { 
					Ext.Ajax.request({
						url:"/k3/functions/kdb_delete.php?table="+table+"&id="+id,
						method:"GET",
						success:function(action) {
							if (action.responseText!="ok") {
								Ext.Msg.show({
								   title:"Erreur de suppression.",
								   buttons:Ext.Msg.OK,
								   msg:"La fiche semble ne pas avoir pas été supprimé.<br>"+action.responseText,
								   icon: Ext.MessageBox.WARNING,
								   minWidth:200
								})
								return false;
							}
							else {
								return true;
							}
						},
						failure: function(action) {
							Ext.Msg.alert("Impossible de lancer la suppression.");
							return false;
						}
					});
				}
			}
		);
}

// =================== alertes

function Xconfirm(msg,fnc){
	Ext.MessageBox.buttonText.yes = "Oui";
	Ext.MessageBox.buttonText.no = "Non";
	Ext.Msg.show({
	   title:'Confirmation'
	   ,msg: msg
	   ,buttons: Ext.Msg.YESNO
	   ,icon: Ext.MessageBox.QUESTION
	   ,fn: function(btn){
			if(btn=='yes') {
				eval(fnc);
			}
		}
	});	

}
function Xalert(msg){
	Ext.Msg.show({
	   title:'Alerte'
	   ,msg: msg
	   ,icon: Ext.MessageBox.ALERT
	});	
}

function Xinfo(msg){
	Ext.Msg.show({
	   title:'Information'
	   ,msg: msg
	   ,icon: Ext.MessageBox.INFO
	});	
}

function Xwarning(msg){
	Ext.Msg.show({
	   title:'Attention'
	   ,msg: msg
	   ,icon: Ext.MessageBox.WARNING
	});	
}
function Xerror(msg){
	Ext.Msg.show({
	   title:'Erreur'
	   ,msg: msg
	});	
}

function XFormSubmit(formname,mask){
	var form = Ext.getCmp(formname);
	var msg = "Envoi des données...";
	if (form.getForm().isValid()) {
		if (mask) {
			if (Ext.get(formname+"_container")) var myMask = new Ext.LoadMask(Ext.get(formname+"_container"),{msg:msg});
			else var myMask = new Ext.LoadMask(Ext.getBody(), {msg:msg});
			myMask.show();
		}
		form.getForm().submit();  
	}
	else {
		Ext.mbox.msg("Erreur","Formulaire non valide.");
	}
}

Ext.override(Ext.form.TextField, {
	blankValid : true,
	validateValue : function(value){
		if(value.length < 1 || value === this.emptyText){ 
			if(!this.allowBlank){
				this.markInvalid(this.blankText);
				return false;
			}
			if(this.blankValid){
				this.clearInvalid();
				return true;
			}
		}
		if(Ext.isFunction(this.validator)){
			var msg = this.validator(value);
			if(msg !== true){
				this.markInvalid(msg);
				return false;
			}
		}
		if(this.vtype){
			var vt = Ext.form.VTypes;
			if(!vt[this.vtype](value, this)){
				this.markInvalid(this.vtypeText || vt[this.vtype +'Text']);
				return false;
			}
		}
		if(this.regex && !this.regex.test(value)){
			this.markInvalid(this.regexText);
			return false;
		}
		if(value.length < this.minLength){
			this.markInvalid(String.format(this.minLengthText, this.minLength));
			return false;
		}
		if(value.length > this.maxLength){
			this.markInvalid(String.format(this.maxLengthText, this.maxLength));
			return false;
		}
		return true;
	}
});

// Xcal
function XCal(start,mode,days,width,height,panel) {
	
	panel = true;
	var url = "/cal/cal_days.php?d="+start;
	if (mode=="month") url = "/cal/cal_month.php?d="+start;
	
	if (!Ext.get("XCal")) {
		
		var print = true;
		var help = true;
		var tools = new Array();
		
		if (print) tools.push({
		  id:'print',
		  handler: function(ev,tool,pan,conf){
			  Ext.getCmp("Xcal_frame").getFrame().print();
		  }	 
		  ,hidden:true
		});	
		if (help) tools.push({
		  id:'help',
		  handler: function(ev,tool,pan,conf){
			  //Xhelp(Xwin);
		  }
		  ,hidden:true
		});
		tools.push({
		  id:'refresh',
		  on:{
			  click: function(ev,tool,pan){
				  //Ext.getCmp("Xgridframe"+Xcal.id.substr(4,40)).getFrame().setSrc();
				 // Ext.getCmp("Xameframe"+Xcal.id.substr(4,40)).getFrame().setSrc();
			  }
		  }
		});
		var Xsdates = new Array();
		
		var XCalToolBar = new Ext.Toolbar({
			id:"XCalToolBar"
			,autoHeight:true
			,cls: "xcal_cal_selector"
			,items : {
				text:'Calendriers'
            	,menu: new Ext.menu.Menu({
					id: 'XCalSelector'
					,autoHeight: true
					,items: [
						{	
							text: "Gérer les calendriers"
							,icon : "/k3/css/icons/calendar.png"
							,handler: function() { XWingridame("/calendars/calendars.php","",600,400,"",400); }
							,hideOnClick : true
						}
					]
				})
			}
		});
		XCal_cals_selector_items();
		
		var XCalSelect = new Ext.ux.DatePickerPlus({
			id:"XCalSelect"								  
			,usePickerPlus	: true
			,allowMouseWheel:false
			,noOfMonth : 3
			,noOfMonthPerRow : 1
			,prevNextDaysView : false
			,strictRangeSelect : true
			,multiSelection: true
			,markWeekends : false
			,showActiveDate : false
			,renderOkUndoButtons : false
			,handler : function(dp, date){
				XcalDates=[];
				if (Ext.isDate(date)) {
					XcalDates.push(date.format('Y-m-j'));
				}
				else {
					Ext.each(date,function(c){
						XcalDates.push(c.format('Y-m-j'));
					},this);
				}
				this.handled=true;
				this.resumeEvents();
				XCal_days(XcalDates);
			}
			,listeners : {
				beforedateclick : function(cal,date,state) {
					if (this.handled) {
						this.handled=false;
						return false;
					}
				}
				,afterdateclick : function(cal,date,state) {
					if (!this.handled) {
						if (date.valueOf()==this.prevdate) XCal_days(new Array(date.format('Y-m-j')));
						this.prevdate = date.valueOf();
						(function(obj){
							obj.prevdate=0;
						}).defer(250,this,[this]);
					}
					this.handled=false;
				}
				,beforeyearchange: function(cal,oldyear,newyear){
					 this.year = newyear;
				}
				,
				aftermonthchange: function(cal,oldmonth,newmonth){
					this.month = newmonth;
					XCal_get_events(this);
				}
				,aftermonthclick: function(cal,month){
					XCal_month(month,this.year);
				}
				,afterweekclick: function(cal,day){
					XCal_week(day.format('Y-m-j'));
				}
			  }	
		});
		
		//settings
		XCalSelect.year = XCalSelect.value.getFullYear();
		XCalSelect.month = XCalSelect.value.getMonth();
		XCal_get_events(XCalSelect);

		var XCal = new Ext.Window({
			id:"XCal"			  
			,layout:"border"
			,bufferResize:true
			,hideMode:"visibility"
			,title:"calendrier"
			,stateful:true
			,border:false
			,hideBorders:true
			,bodyBorder:false
			,constrain:true
			,plain:true
			,autoScroll:false
			,closable:true
			,maximizable:true
			,minimizable:true
			,animCollapse : false
			,width:width
			,height:height
			,items: [
			{
				region:"west"
				,id:"XCal_select"
				,width:202
				,layout:"fit"
				,border:true
				,autoScroll:false
				,border:false
				,hideBorders:true
				,bodyBorder:false
				,header:false
				,resizable:false
				,collapsible: true
				,collapsed: true
				,collapseMode: "mini"
				,animCollapse : false
				,split: true
				,tbar : XCalToolBar
				,items : XCalSelect
				,listeners: {
					focus: function(){
						XCal.toFront();
						if (XtaskBar) XtaskBar_active(XCal);
					}
					,click: function(){
						XCal.toFront();
						if (XtaskBar) XtaskBar_active(XCal);
					}
					
				}
			}
			,{

				region:"center"
				,xtype : "iframepanel"
				,id:"XCal_frame"
				,layout:"fit"
				,border:false
				,hideBorders:true
				,bodyBorder:false
				,header:false
				,resizable:false
				,collapsible: false
				,defaultSrc : url
				,loadMask :{msg: '...'}
				,listeners: {
					documentloaded : function(iframe){
						XCal.toFront();
						if (XtaskBar) XtaskBar_addwin(XCal,"calendrier");
					}
					,focus: function(){
						XCal.toFront();
						if (XtaskBar) XtaskBar_active(XCal);
					}
					,click: function(){
						XCal.toFront();
						if (XtaskBar) XtaskBar_active(XCal);
					}
					
				}
			}]
			,tools:tools
			,listeners: {
				minimize: function(){
					this.hide();
					if (XtaskBar) XtaskBar_hide(this);
				}
				,close: function(){
					if (XtaskBar) XtaskBar_removewin(XCal);
				}
				,focus: function(){
					this.toFront();
					if (XtaskBar) XtaskBar_active(XCal);
				}
				,activate : function(){
					this.toFront();
					if (XtaskBar) XtaskBar_active(XCal);
				}
			}
	
		});
		if (Ext.get("xmain")) XCal.render("xmain");
		else  XCal.render(Ext.getBody());
		XCal.show();
		
	}

	else {
		Ext.getCmp("XCal").toFront();
		Ext.getCmp("XCal").show();
		if (XtaskBar) XtaskBar_active(Ext.getCmp("XCal"));
	}	
	
	
}
function XCal_cals_selector_items(){

	Ext.Ajax.request({
		url:"/k3/functions/_cal_calendars.php",
		method:"GET",
		success:function(action) {
			if (action.responseText!='') {
				eval(action.responseText);
				selector = window.top.Ext.getCmp("XCalSelector");
				
				selector.removeAll();
				selector.add({id:"def",text : "calendrier par défaut",checked:true,checkHandler: XCal_cals_selector_click,hideOnClick : false});
				for(i=0;i<citems.length;i++) {
					selector.add(citems[i]);
				}
				selector.add({text : "Gérer les calendriers",icon : "/k3/css/icons/calendar.png",handler: function(){XWingridame("/calendars/calendars.php","",600,400,"",400);},hideOnClick : true});
				
			}
		},
		failure: function(action) {
		}
	});

}
function XCal_cals_selector_click(cbox,cked){
	Ext.getCmp("XCal_frame").getFrameWindow().kcal_cals_selector_click(cbox,cked);
}

function XCal_week(start) {
	Ext.getCmp("XCal_frame").setLocation("/cal/cal_days.php?d="+start);
}
function XCal_month(month,year) {
	var month = month+1;
	month = "0"+month.toString();
	month = month.substr(-2,2);
	Ext.getCmp("XCal_frame").setLocation("/cal/cal_month.php?d="+year+"-"+month+"-01");
}
function XCal_days(days) {
	start = days[0];
	Ext.getCmp("XCal_frame").setLocation("/cal/cal_days.php?d="+start+"&ds="+days.length);
}
function XCal_todo(days) {
	start = days[0];
	Ext.getCmp("XCal_frame").setLocation("/cal/cal_todo.php?d="+start+"&ds="+days.length);
}
function XCal_todo(days) {
	start = days[0];
	Ext.getCmp("XCal_frame").setLocation("/cal/cal_todo.php?d="+start+"&ds="+days.length);
}
function XCal_get_events(cal) {

	var month = "0"+(cal.month+1);
	var start = cal.year+"-"+month.substr(-2,2)+"-01";
	var months = cal.noOfMonth;
	var end = cal.year+"-"+month.substr(-2,2)+"-31";
	Ext.Ajax.request({
		url:"/k3/functions/_cal_events.php?table=agenda&start="+start+"&end="+end,
		method:"GET",
		success:function(action) {
			if (action.responseText!='') {
				dates = action.responseText.split(",");
				if (dates.length>0) {
					date_arr = new Array();
					for(i=0;i<dates.length;i++) {
						date = dates[i];
						month = parseInt(date.substr(4,2))-1;
						date_arr.push(new Date(date.substr(0,4),month,date.substr(6,2)));
					}
					cal.setEventDates(date_arr);
				}
			}
		},
		failure: function(action) {
		}
	});
	
}
