var Modal = Class.create({
	/**
	 * Initialize
	 */
	initialize: function(){
		var self = this;

		// Elements DOM
		this.d = [];
		this.d.modalContainer = $('m_modalContainer');
		this.d.modalFade = $('m_modalFade');
		
		// On cache la modal
		this.d.modalContainer.hide();
		
		// Event click sur les liens
		$$('.m_toModal').each(function(element){
			element.observe('click', self.linkClick.bind(this));
		}.bind(this));
		
		// Event click sur fond modal
		this.d.modalFade.observe('click', self.hideModal.bind(this).bind(this));
	},

	/**
	 * LinkClick
	 * @param event
	 */
	linkClick: function(event) {
		event.stop();
		
		// <A> element
		var element = this.findElement(event, 'm_toModal')
		
		// Lecture HREF
		link = element.readAttribute('href');

		// Affiche une modal vide
		this.showModal();
		
		new Ajax.Request(link, {
			onSuccess: this.requestSuccess.bind(this)
		});
		
		return false;
	},
	
	/**
	 * RequestSuccess
	 * @param response
	 */
	requestSuccess: function(response) {
		this.d.modalContainer.update(response.responseText);
	    this.centerModal();
	    $$('#m_modalContainer .close').each(function(element){
	    	element.observe('click', this.hideModal.bind(this));
	    }.bind(this));
	},
	
	/**
	 * ShowModal
	 * @param content Contenu HTML
	 */
	showModal: function(content){
		this.posFade();
		this.d.modalFade.show();
		this.d.modalContainer.update();
		this.d.modalContainer.show();
		this.d.modalContainer.update(content);
	},

	/**
	 * Positionne le fond semi transparent
	 */
	posFade: function(){
		this.d.modalFade.style.height = document.documentElement.clientHeight+'px';
		this.d.modalFade.style.width = document.documentElement.clientWidth+'px';
	},
	
	/**
	 * Cache la modal
	 */
	hideModal: function(){
		this.d.modalContainer.update();
		this.d.modalContainer.hide();
		this.d.modalFade.hide();
	},
	
	/**
	 * CenterModal
	 * Centre la modal horizontalement et verticalement
	 */
	centerModal: function(){
		var top = 0;
		var left = 0;
		
		left = (document.documentElement.clientWidth-this.d.modalContainer.getDimensions().width)/2;
		if(left<0){left=0; }
		this.d.modalContainer.style.left = left+"px";
		top = document.documentElement.clientHeight;
		top = (document.documentElement.clientHeight-this.d.modalContainer.getDimensions().height)/2;
		if(top<0){top=0; }
		this.d.modalContainer.style.left = left+"px";
		this.d.modalContainer.style.top = top+"px";
	},
	
	/**
	 * FindElement
	 * Recherche le parent de event avec la classe className
	 * @param event
	 * @param className
	 */
	findElement: function(event, className){
		var eventElement;
		if (event.element == undefined)
			eventElement = event;
		else	
			eventElement = event.element();
		var lineElement = false;
		
		if(eventElement.hasClassName(className)){
			lineElement = eventElement;
		} else {
			eventElement.ancestors().each(function(e, i){
				if(e.hasClassName(className)){
					lineElement = e;
				}
			});
		}
		return lineElement;
	}
	
});

// Création d'un objet modal au chargement de la page
Event.observe(window, 'load', function(){
	new Modal();
});

