calendar = Class.create({
	initialize: function(url) {
		this.divRetour = document.getElementById('divCalendrier');
		if(this.divRetour == undefined) {
			var obj = document.createElement("div");
			obj.setAttribute("id", "divCalendrier");
			document.getElementsByTagName("body").item(0).insertBefore(obj, document.getElementsByTagName("body").item(0).firstChild);
			this.divRetour = obj;
			var moi = this;
			$(obj).observe('click', function(ev) {
				if(ev.element().tagName == "A" && !ev.element().hasClassName("calendarControl")) {
					$(moi.id_dest).value = ev.element().getAttribute("href").substr(ev.element().getAttribute("href").length-10, 10);
					moi.finir();
					ev.stop();
				} else if(ev.element().tagName == "A") {
					moi.changermois(ev.element().getAttribute("href").substr(ev.element().getAttribute("href").length-10, 10));
					ev.stop();
				}
			});
		}
		var datetmp = new Date();
		this.ajd = datetmp.getFullYear()+"-"+((datetmp.getMonth()+1<10) ? "0" + (datetmp.getMonth()+1) : (datetmp.getMonth()+1))+"-"+((datetmp.getDate()<10) ? "0" + datetmp.getDate() : datetmp.getDate());
		this.showed = false;
		this.url = url;
		
		this.boundFermer = this.fermer.bindAsEventListener(this);
		
		
	},
	
	centrer: function() {
		if(this.relativeTo == undefined || this.relativeTo == null) {
			if (window.innerHeight) { 
				//Navigateurs sauf Explorer
				var fenHeight	= window.innerHeight;
				var fenWidth	= window.innerWidth;
				var yScroll		= window.pageYOffset;
				var xScroll		= window.pageXOffset;
			} else if (document.documentElement && document.documentElement.clientHeight) {
				//Internet Explorer mode Strict
				var fenHeight	= document.documentElement.clientHeight;
				var fenWidth	= document.documentElement.clientWidth;
				var yScroll		= document.documentElement.scrollTop;
				var xScroll		= document.documentElement.scrollLeft;
			} else if (document.body && document.body.clientHeight) {
				//Autres Internet Explorer
				var fenHeight	= document.body.clientHeight;
				var fenWidth	= document.body.clientWidth;
				var yScroll		= document.body.scrollTop;
				var xScroll		= document.body.scrollLeft;
			}
			
			this.divRetour.style.top = (fenHeight - this.divRetour.offsetHeight)/2 + yScroll + 'px';
			this.divRetour.style.left = (fenWidth - this.divRetour.offsetWidth)/2 + xScroll + 'px';
		} else {
			this.divRetour.style.top = $(this.relativeTo).cumulativeOffset()['top'] + $(this.relativeTo).getHeight() + 'px';
			this.divRetour.style.left = $(this.relativeTo).cumulativeOffset()['left'] + 'px';
		}
	},
	
	datemin: function(a, b) {
		var regd = new RegExp("^[0-9]{4}-[0-9]{2}-[0-9]{2}$", "g");
		if(!a.match(regd)) {
			a = this.ajd;
		}
		if(!b.match(regd)) {
			b = this.ajd;
		}
		reg = new RegExp("-", "g");
		regdate = new RegExp("^([0-9]{4})([0-9]{2})([0-9]{2})$", "g");
		var mydate = Math.min(parseInt(a.replace(reg, "")), parseInt(b.replace(reg, ""))).toString();
		return mydate.replace(regdate, "$1-$2-$3");
	}, 
	
	datemax: function(a, b) {
		var regd = new RegExp("^[0-9]{4}-[0-9]{2}-[0-9]{2}$", "g");
		if(!a.match(regd)) {
			a = this.ajd;
		}
		if(!b.match(regd)) {
			b = this.ajd;
		}
		reg = new RegExp("-", "g");
		regdate = new RegExp("^([0-9]{4})([0-9]{2})([0-9]{2})$", "g");
		var mydate = Math.max(parseInt(a.replace(reg, "")), parseInt(b.replace(reg, ""))).toString();
		return mydate.replace(regdate, "$1-$2-$3");
	},
	
	show: function(id_dest) {
		if(arguments[1]) {
			date = arguments[1];
		} else {
			date = this.ajd;
		}
		
		this.relativeTo = arguments[2];
		
		if(this.showed == false) {
			this.id_dest = id_dest;
			this.showed = true;
			$(document.getElementsByTagName('body').item(0)).observe('click', this.boundFermer);
			this.changermois(date);
		}
	},
	
	changermois: function(d) {
		var obj = this;
		new Ajax.Request(this.url, 
			{
				parameters: {date: d, dest: this.id_dest},
				onSuccess: function(retour) {
					$(obj.divRetour).update(retour.responseXML.getElementsByTagName('commun').item(0).firstChild.data);
					obj.divRetour.style.display="block";
					obj.centrer();
					
				}
			}
		);
	},
	
	finir: function() {
		this.divRetour.style.display = "none";
		this.showed = false;
	},
	
	fermer: function(ev) {
		if(!ev.element().descendantOf(this.divRetour)) {
			$(document.getElementsByTagName('body').item(0)).stopObserving('click', this.boundFermer);
			$(document.getElementsByTagName('body').item(0)).stopObserving('scroll', this.centrer);
			this.divRetour.style.display = "none";
			this.showed = false;
		}
	}
});
