/****************************** * GnooCalendar 1.4 * calendrier dynamique en javascript * v1 27/04/2004 * v1.1 19/09/2004 + drag&drop * v1.2 03/10/2004 + bouton de fermeture + passage de l'année en paramètre + passage du mois en paramètre * v1.3 25/11/2004 + fermeture automatique à la sélection d'une date + correction bug lié au positionnement lors du masquage * v1.4 09/01/2005 + correction bug scrollbar des listes avec Mozilla * Auteur : zegnoo * Contact : gleroy@zegnoo.net ******************************/ function GnooCalendar(n, min, max, format) { this.target= null; this.format = new String("fr"); this.name = new String(n); this.tag = new String(); this.title = new String("GnooCalendar"); this.date=new Date(); this.moving = new Boolean(false); this.vis = new Boolean(false); this.free = new Boolean(false); this.curYear = new Number(this.date.getFullYear()); this.maxYear = new Number(this.curYear+max); this.minYear = new Number(this.curYear-min); this.curMonth= new Number(this.date.getMonth()); /* * GnooCalendar.setFormat(String format) * format de date : "fr"=français, "us"=englais */ this.setFormat=function(f) { this.format=f; return; } /* * GnooCalendar.setFree(Boolean vis) * affiche ou non des jours feries */ this.setFree=function(vis) { this.free=vis; if(this.vis==true) this.show(); return; } /* * GnooCalendar.IsDragable(Boolean drag) * active/desactive l'option drag&drop */ this.isDragable=function(drag) { if(drag==true && !document.layers) { document.onmousemove=this.getMouse; document.getElementById(this.div).root=this; document.getElementById(this.div).onmousedown=this.startMove; document.getElementById(this.div).onmouseup=this.endMove; } return; } /* * GnooCalendar.startMove() * initialise le drag & drop */ this.startMove=function(evt) { var event; var tmp; if(this.root.vis!=true) return; if(document.all) { event = window.event; tmp = event.srcElement; if(!tmp.form) { this.root.fixX = tmp.offsetLeft+event.offsetX; this.root.fixY = event.offsetY; while(tmp.parentElement!=document.getElementById(this.root.div) && tmp.parentElement!=null ) { this.root.fixX += tmp.parentElement.offsetLeft; this.root.fixY += tmp.parentElement.offsetTop; tmp = tmp.parentElement; } this.root.moving=true; self.movingCalendar = this.root; return false; } } else { event = evt; tmp = event.target; if( !tmp.form && tmp.tagName!="SELECT" && tmp.tagName!="OPTION" && tmp.tagName!="scrollbar" ) { this.root.fixX = event.layerX; this.root.fixY = event.layerY; this.root.moving=true; self.movingCalendar = this.root; return false; } } return evt; } /* * GnooCalendar.endMove() * termine le drag & drop */ this.endMove=function() { if(self.movingCalendar!=null) { self.movingCalendar.moving=false; } return false; } /* * GnooCalendar.getMouse(Event evt) * change la liste des jours feriés jours feries */ this.getMouse=function(evt) { var event; if(document.all) { event = window.event; var scrollObj = (document.documentElement) ? document.documentElement : document.body; this.posX = self.event.clientX+scrollObj.scrollLeft; this.posY = self.event.clientY+scrollObj.scrollTop; } else { event = evt; this.posX = evt.pageX ; this.posY = evt.pageY ; } if(self.movingCalendar!=null) { if(self.movingCalendar.moving==true && self.movingCalendar.vis==true ) self.movingCalendar.move(this.posY-self.movingCalendar.fixY, this.posX-self.movingCalendar.fixX); } return false; } /* * GnooCalendar.move(Number x, Number y) * déplace le calendrier */ this.move=function(x, y) { if(!document.layers) { document.getElementById(this.div).style.top = x+"px"; document.getElementById(this.div).style.left = y+"px"; } return false; } /* * GnooCalendar.setFreeDay(Array fd) * change la liste des jours feriés jours feries */ this.setFreeDay=function(fd) { this.freeday.length=0; for(var i=0; i"; tmp += "X"; tmp += ""; tmp += ""; } else { tmp += ""+this.title+""; tmp += ""; tmp += "X"; tmp += ""; } tmp += ""; tmp += ""; tmp += "\n"; tmp += this.yList(); tmp += ""; tmp += this.dList(); return tmp; } /* * GnooCalendar.yList() * retourne la liste des années */ this.yList=function() { var tmp = "\n"; return tmp; } this.dayCell=function(d,n) { var tmp = new String(""); var now = new Date(); if(this.isFreeDay(d,this.curMonth)) { tmp += ""); tmpDate.setDate(cur); tmpDate.setMonth(this.curMonth); tmpDate.setFullYear(this.curYear); tmp += "\n"; for(var i=1; i"+ this.day[i] +"\n"; tmp += ""+ this.day[0] +"\n"; tmp += "\n"; for(var j=0; j<6; j++) { tmp += "\n"; for(var i=1; i"+(c)+""; } else { tmp = (c); } return tmp; } /* * GnooCalendar.setMonth( Integer m ) * modifie le mois à afficher */ this.setMonth = function(m) { this.curMonth = m; this.show(); return; } /* * GnooCalendar.getYear( Integer y ) * modifie l'année à afficher */ this.getYear = function (y) { if(document.layers) { for(var i=0; i\n"; this.tag += this.mList(); this.tag += "\n"; if(document.layers) { with(document.layers[this.div]) { document.open("text/html"); document.write(this.tag); document.close(); visibility='show'; } } else { document.getElementById(this.div).innerHTML = ""+this.tag; document.getElementById(this.div).style.visibility = 'visible'; document.getElementById(this.div).style.display = 'block'; } return; } /* * GnooCalendar.init( String d ) * initialise le Calendrier à la date actuelle * paramêtres : * d : nom du calque d'affichage * obj : objet dont la propriété value va recevoir le String de la date */ this.init = function(d, obj) { this.div=d; this.target = obj; this.date=new Date(); this.date.setDate(1); this.curMonth = this.date.getMonth(); this.curYear = this.date.getFullYear(); if(!self.movingCalendar) self.movingCalendar=null; return; } /* * GnooCalendar.checkDate( Integer d ) * paramêtre : le jour d'une date */ this.checkDate = function(d) { if(parseInt(d)<=9) return "0"+parseInt(d); return parseInt(d); } /* * GnooCalendar.formatDate( Integer d, Integer m, Integer y ) ****très important ***** * paramêtre : le jour d'une date */ this.formatDate = function(c) { var tmp = ""; switch(this.format) { case "us": // englais tmp = this.curYear+"-"; tmp += this.checkDate(1+parseInt(this.curMonth))+"-"; tmp += this.checkDate(c); break; default: // français tmp = this.checkDate(1+parseInt(this.curMonth))+"-"; tmp += this.checkDate(c)+"-" ; tmp += this.curYear ; break; } return tmp; } return this; } /******************************/ GnooCalendar.prototype.day = ["D", "L", "M", "M", "J", "V", "S" ]; GnooCalendar.prototype.month = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"]; /* jours feriés français */ GnooCalendar.prototype.freeday= ["01/01","01/05","08/05","14/07","15/08","01/11","11/11","25/12"]; /******************************/