// [W]eb [W]indows [M]anager
// 1.0
// Loïs PUIG @ kctus MULTIMEDIA
// lois.puig@kctus.fr

window.addEvent('domready', function() {
	var options = {
		WWZindex: 50,
		WWMargin: '20px',
	}
	WeWiM.init(options);
});

WeWiM = new Array;

WeWiM.init = function(options) {

	// Création de la liste des liens inline
	var aList = $(document.body).getElements('.WWInline]');

	// Déclaration des événements sur les liens
	aList.each(function(item, index) {
		// Désactivation des liens
		item.onclick = function() { return false; }
		item.addEvent(
			'click', function() {
				if ($('WeWiM-Window-'+item.id) == null) {
				}
			}
		);
	});


	// Création de la liste des liens
	//var aList = $(document.body).getElements('.WeWiM]', '.WWInline]');
	var aList = $$('.WeWiM', '.WWInline');

	// Déclaration des événements sur les liens
	aList.each(function(item, index) {

		// Désactivation des liens
		item.onclick = function() { return false; }
		item.addEvent(
			'click', function() {
				if ($('WeWiM-Window-'+item.id) == null) {
					// Création du div
					var WW = new Element('div', { 'id': 'WeWiM-Window-'+item.id, 'class': 'WeWiM-Window', 'styles': {	'opacity': 0 }, 'events': {
						'click': function(index) {
							$$('.WeWiM-Window').setStyle('z-index', options['WWZindex']);
							this.setStyle('z-index', options['WWZindex']+1);
						}
					}});
					// Création du div de contenu
					var WWContent = new Element('div', { 'id': 'WeWiM-Content-'+item.id, 'class': 'WeWiM-Content' });
					// Création du div de resultat de la requete
					var WWResult = new Element('div', { 'id': 'WeWiM-Result-'+item.id, 'class': 'WeWiM-Result', 'styles': { 'float': 'none'} });
					// Création du scroller vertical
					var WWVScrollBar = new Element('div', { 'id': 'WeWiM-VScrollBar-'+item.id, 'class': 'WeWiM-VScrollBar', 'styles': { 'float': 'left'} });
					var WWVHandle = new Element('div', { 'id': 'WeWiM-VHandle-'+item.id, 'class': 'WeWiM-VHandle' });
					// Création du scroller horizontal
					var WWHScrollBar = new Element('div', { 'id': 'WeWiM-HScrollBar-'+item.id, 'class': 'WeWiM-HScrollBar' });
					// Création du div d'erreurs
					var WWMessage = new Element('div', { 'id': 'WeWiM-Message-'+item.id, 'class': 'WeWiM-Message', 'styles': { 'display': 'none'} });
					// Création du div de chargement
					var WWLoader = new Element('div', { 'id': 'WeWiM-Loader-'+item.id, 'class': 'WeWiM-Loader', 'styles': { 'opacity': 0} });
					// Création du titre de la fenêtre
					var WWTitle = new Element('h2', { 'id': 'WeWiM-Title-'+item.id, 'class': 'WeWiM-Title', 'html': item.get('html') });
					// Création du lien de fermeture
					var WWCloseLink = new Element('a', { 'id': 'WeWiM-Close-'+item.id, 'html': '<span>Fermer</span>', 'class': 'WeWiM-Close', 'href': 'javascript:void(0);', 'events': {
						'click': function() {
							LoadFX.start({ opacity: 0 }).chain(function() { WW.dispose(); item.removeClass('active') });
						}
					}});
					// Création du lien de redimensionement
					var WWResizeLink = new Element('a', { 'id': 'WeWiM-Resize-'+item.id, 'html': '<span>Redimensioner</span>', 'href': 'javascript:void(0);' });
					WWResizeLink.addClass('WeWiM-Resize');
					// Création du div "CLEAR"
					var WWDivClear = new Element('div', { 'class': 'clear' });
					// Création du ghost
					var WWGhost = new Element('div', { 'id': 'WeWiM-Ghost', 'class': 'WeWiM-Ghost', 'styles': { 'display' : 'none', 'z-index': options['WWZindex']+2, 'position': 'absolute', 'top': 0, 'left': 0, 'min-width': '100px', 'min-height': '100px' } });

					// Assemblage des éléments de la fenêtre
					WWContent.grab(WWResult);
					WW.adopt([ WWTitle, WWMessage, WWContent, WWLoader, WWCloseLink, WWResizeLink ]);

					// Injection de la fenêtre
					$(document.body).adopt([ WW, WWGhost ]);

					// Définition de l'effet du div
					var LoadFX = new Fx.Morph($('WeWiM-Window-'+item.id), { duration: 'short', transition: Fx.Transitions.Sine.easeOut });		

					// Rend la fenêtre déplacable
					$('WeWiM-Ghost').makeDraggable({ snap: 0, handle: $('WeWiM-Title-'+item.id), container: $(document.body),
						onBeforeStart: function(el) {
							// Redimensionnement et repositionnement du ghost
							el.setStyles({ 'width': $('WeWiM-Window-'+item.id).getStyle('width'), 'height': $('WeWiM-Window-'+item.id).getStyle('height'), 'top': $('WeWiM-Window-'+item.id).getPosition().y, 'left': $('WeWiM-Window-'+item.id).getPosition().x });
						},
						onDrag: function(el) {
							el.setStyle('display', 'block');
							el.addClass('dragging');
						},						
						onComplete:function(el) {
							// Repositionne la fenêtre
							$('WeWiM-Window-'+item.id).setPosition(el.getPosition());
							// Cache le ghost
							el.setStyle('display', 'none');
							el.removeClass('dragging');
							// Ramène la fenêtre au premier plan
							$$('.WeWiM-Window').setStyle('z-index', options['WWZindex']);
							$('WeWiM-Window-'+item.id).setStyle('z-index', options['WWZindex']+1);
						}
					});

					// Rend la fenêtre redimensionable
					$('WeWiM-Ghost').makeResizable({ snap: 0, handle: $('WeWiM-Resize-'+item.id),
						onBeforeStart: function(el) {
							$('WeWiM-Ghost').setStyles({ 'display': 'block', 'width': $('WeWiM-Window-'+item.id).getStyle('width'), 'height': $('WeWiM-Window-'+item.id).getStyle('height'), 'top': $('WeWiM-Window-'+item.id).getPosition().y, 'left': $('WeWiM-Window-'+item.id).getPosition().x });
						},
						onDrag: function(el) {
							el.addClass('resizing');
						},
						onComplete: function(el) {
							// Disparition du ghost
							el.setStyles({ 'display': 'none' });
							el.removeClass('resizing');

							// Redimensionement de la fenêtre
							$('WeWiM-Result-'+item.id).setStyles({ 'width': el.getStyle('width'), 'height': el.getStyle('height') });
						}
					});

					if (item.hasClass('WeWiM')) {
						// Création de la requête
						var WWRequest = new Request.HTML({
							url: item.href,
							method: 'get',
							onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
								// Insertion du résultat de la requête dans la fenêtre
								$('WeWiM-Result-'+item.id).grab(responseElements[0]);
	
								// Limite la hauteur de la fenêtre à la taille de l'écran
								var maxResultHeight = $(document.body).getSize().y-($('WeWiM-Window-'+item.id).getSize().y-$('WeWiM-Result-'+item.id).getSize().y)-(options['WWMargin'].toInt()*4);
								if ($('WeWiM-Result-'+item.id).getSize().y > $(document.body).getSize().y) $('WeWiM-Result-'+item.id).setStyle('height', maxResultHeight);
	
								// Repositionnement du div au centre de la fenêtre
								$('WeWiM-Window-'+item.id).setPosition({ x: ($(document.body).getSize().x/2)-($('WeWiM-Window-'+item.id).getSize().x/2), y: ($(document.body).getSize().y/2)-($('WeWiM-Window-'+item.id).getSize().y/2) });
								// Ramène la fenêtre au premier plan
								$('WeWiM-Window-'+item.id).setStyle('z-index', options['WWZindex']+1);
	
								// Affiche la fenêtre en fondu 
								LoadFX.start({ opacity: 1 });
							},
							onFailure: function(responseTree, responseElements, responseHTML, responseJavaScript) {
								$('WeWiM-Message-'+item.id).set("html", "La requête n'a pu aboutir.");
							}
						});
						// Lancement de la requête
						WWRequest.send();
					}
					else if (item.hasClass('WWInline') && $(item.id+'-WWInline') != null) {
						// Insertion du résultat de la requête dans la fenêtre
						$('WeWiM-Result-'+item.id).set('html', $(item.id+'-WWInline').get('html'));

						// Limite la hauteur de la fenêtre à la taille de l'écran
						var maxResultHeight = $(document.body).getSize().y-($('WeWiM-Window-'+item.id).getSize().y-$('WeWiM-Result-'+item.id).getSize().y)-(options['WWMargin'].toInt()*4);
						if ($('WeWiM-Result-'+item.id).getSize().y > $(document.body).getSize().y) $('WeWiM-Result-'+item.id).setStyle('height', maxResultHeight);

						// Repositionnement du div au centre de la fenêtre
						$('WeWiM-Window-'+item.id).setPosition({ x: ($(document.body).getSize().x/2)-($('WeWiM-Window-'+item.id).getSize().x/2), y: ($(document.body).getSize().y/2)-($('WeWiM-Window-'+item.id).getSize().y/2) });
						// Ramène la fenêtre au premier plan
						$('WeWiM-Window-'+item.id).setStyle('z-index', options['WWZindex']+1);

						// Affiche la fenêtre en fondu 
						LoadFX.start({ opacity: 1 });
					}

					// Affiche du lien actif
					item.addClass('active');
				}
			}
		);
	});
};
