//var scroller = new Fx.Scroll(window);

var Site = {
	
	start: function(){
		/*
		Site.setUpScrollAnchors();
		Site.liftmeup();
		
		*/
		//new SmoothScroll();
		new SmoothScroll({links: '.scroollers'});
		ReMooz.assign();
		// common
		/*
		$$('a.boxed img').each(function(element) {
			new ReMooz(element, {
				origin: element.getElement('img'),
				resizeOptions: {
					transition: Fx.Transitions.Back.easeOut,
					resizeLimit: {x: 600, y: 520},
					resizeOpacity: 0.4,
					hideSource: true
				}
			});
		});
		*/

		$$('a.boxed').each(function(element) {
			new ReMooz(element, {
				origin: element.getElement('img'),
				resizeOptions: {
					transition: Fx.Transitions.Back.easeOut,
					resizeLimit: {x: 600, y: 520},
					resizeOpacity: 0.4,
					hideSource: true
				}
			});
		});
		/* let's customize Remooz titles and alt display */
		/*
		ReMooz.prototype.options.generateTitle= function() {
			var title = this.options.title || this.element.getProperty('title');
			var text = this.options.alt || this.element.getProperty('alt');
			if (!title && !text) return false;
			//title = title.split(' :: ');
			if (title) 
				var ret = [new Element('h4').setHTML(title)];
			if(ret)
				 ret.push(new Element('p').setHTML(text));
			else 
				var ret = [new Element('p').setHTML(title)];
			return ret;
		}
		*/
		//Site.initMenu(); 
	},
	

	initMenu : function() {
		var menuitems = $$("#nav li");
		var slidefxs = [];
		//var colorfxs = [];
		
		menuitems.each(function(el, i){
			el.setStyle('opacity', '0');
			timer += 250;
			slidefxs[i] = new Fx.Style(el, 'opacity', {
				duration: 500,
				transition: Fx.Transitions.backOut,
				wait: false,
				onComplete: Site.createOver.pass([el, i])
			});
			slidefxs[i].start.delay(timer, slidefxs[i], 1);

		}, this);
	},
	createOver: function(el, i){
		var first = el.getFirst();
		var overfxs = new Fx.Styles(first, {'duration': 200, 'wait': false});
		var tocolor = 'ffffff';
		var fromcolor = '334664';
		el.addEvent('mouseover', function(){
			overfxs.start({
				'color': tocolor,
				'padding-right': 15
			});
		});
		el.addEvent('mouseout', function(){
			overfxs.start({
				'color': fromcolor,
				'padding-right': 5
			});
		});
	},

	/*
	setUpScrollAnchors: function(){
		$$('a.scroollers').each(function(lnk) {
			if(lnk.href.test("#")) {
				lnk.addEvent('click', function(){
					this.scrollTo(lnk.href.split('#')[1]);
				}.bind(this));
			}
		}, this);
	},
	
	scrollTo: function(element){
		if(this.scrollingTo != element) {
			this.scrollTries = 0;
			this.scrollingTo = element;
		} else this.scrollTries++;
		$clear(this.scrollTimer);
		if($(element)) scroller.toElement($(element));
		else
			if(this.scrollTries < 15) this.scrollTimer = this.scrollTo.pass(element, this).delay(100);
	},
	
	liftmeup : function() {

		var ScrollToTop = new Fx.Scroll(window);
		$$('a.totop').addEvent('click', function() { 
				ScrollToTop.toTop();
			});
		$$('a.skipcontent').addEvent('click', function() { 
				ScrollToTop.toElement('content');
			});
	
	}
	*/	
}



//window.addEvent('load', Site.start);
window.addEvent('domready', function() {
	Site.start();
	CheckForm.start();
	CheckComment.start();

});


sfHover = function() {
	var sfEls = document.getElementById("nav").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		}
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
		}
	}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);

var CheckForm = {

	start : function(){
		if(document.id('messenger')) {
			document.id('submitter').addEvent('click', function(e){
				e.stop();
				CheckForm.CheckValue();
			});
		}

	},

	CheckValue : function() {

		var messenger = document.id('messenger').action;
		var contact = document.id('contact').value;
		var email = document.id('email').value;
		var emailmatch = document.id('emailmatch').value;
		var message = document.id('message').value;
		var lblcontact = document.id('lblcontact');
		var lblemail = document.id('lblemail');
		var lblemailmatch = document.id('lblemailmatch');
		var lblmessage = document.id('lblmessage');
		var contacte=true;
		var emaile=true;
		var emailmatche=true;
		var messagee=true;
		
		if(!contact) {
			contacte=false;
			lblcontact.addClass('warn');
			lblcontact.innerHTML = 'Veuillez indiquer votre nom';
		}
		else {
			contacte=true;
			lblcontact.removeClass('warn');
			lblcontact.innerHTML = 'Votre Nom';
		}
		if(!email) {
			emaile=false;
			lblemail.addClass('warn');
			lblemail.innerHTML = 'Veuillez indiquer votre Email';
		}
		else {
			if (!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email))) {
				emaile=false;
				lblemail.addClass('warn');
				lblemail.innerHTML = 'Votre Email n\'est pas valide';
			}
			else {
				emaile=true;
				lblemail.removeClass('warn');
				lblemail.innerHTML = 'Votre Email';
			}
		}
		if(!emailmatch) {
			emaile=false;
			lblemailmatch.addClass('warn');
			lblemailmatch.innerHTML = 'Veuillez confirmer votre Email';
		}
		else {
			if (emailmatch!=email) {
				emailmatche=false;
				lblemailmatch.addClass('warn');
				lblemailmatch.innerHTML = 'Vos Emails ne correspondent pas ';
			}
			else {
				emailmatche=true;
				lblemailmatch.removeClass('warn');
				lblemailmatch.innerHTML = 'Veuillez inidquer une nouvelle fois votre adresse Email';
			}
		}
		if(!message) {
			messagee=false;
			lblmessage.addClass('warn');
			lblmessage.innerHTML = 'Veuillez indiquer un message.';
		}
		else {
			messagee=true;
			lblmessage.removeClass('warn');
			lblmessage.innerHTML = 'Votre Message';
		}
		if(messagee==false || !emaile || !emailmatche || !contacte) {
			return false;
		}
		else {
			if (messenger.search('='))
				var messengeruri=messenger+'&ajax=true';
			else 
				var messengeruri=messenger+'?ajax=true';
			
			CheckForm.FrmSubmit(document.id('messenger'));
		}
	
	},

	/*
	loadUrl : function(theUri) {
		var Uri=theUri;
		// let's first fade content //
		var myPost=$('messenger').toQueryString();
		var FadeContentfx = new Fx.Style($('loader'), 'opacity', {
			wait: true,
			duration: 1000,
			onComplete: function() {
				new Ajax(Uri, {
					method: 'post',
					data: myPost,
					update: 'loader',
					evalScripts: true,
					onComplete: function() {
						var LiveContentFx = new Fx.Style($('loader'), 'opacity', {
									wait: true,
									duration: 1000
								}).start(0,1);
						}
				}).request();
			}
		}).start(1,0);
	}
	*/
	
	FrmSubmit : function(form) {
		var myPost=form.toQueryString();
		var formuri=form.get('action');
		if(formuri.contains('='))
			formuri+='&json=true';
		else 
			formuri+='?json=true';

		var responder=form.getFirst('div.responder');
		var blurry=form.getFirst('div.blurry');
		var fields=form.getChildren('input');
		var fsr = new Element('fieldset', {'class':'loading'});
		var fsrlegend = new Element('legend').set('text', 'Formulaire en cours de traitement...').inject(fsr);

		blurry.set('tween');

		var Postman=new Request.JSON({
			method: 'post', 
			url: formuri,
			data: myPost,
			//headers:{'Content-Type':'application/json charset=UTF-8'},
			evalScripts : true,
			evalResponse : true,
			onRequest:function() {
				responder.adopt(fsr);
				fields.setStyle('disable','true');
				blurry.tween('opacity',5); 
			},
			onSuccess:function(jsonObj) {
				blurry.tween('opacity',0); 
				fsr.removeClass('loading');
				blurry.empty();
				var message=new Element('h3').set('text', jsonObj.message).inject(fsr);
				fsrlegend.set('text', jsonObj.legend);
			}.bindWithEvent(this),
			onFailure:function() {
				fsr.removeClass('loading');
				fields.setStyle('disable','false');
				fsrlegend.set('text', 'Une erreur est survenue!');
				var message=new Element('h3').set('text', ' Veuillez cliquer une fois encore sur le bouton envoyer').inject(fsr);
				blurry.tween('opacity',1); 
			}
		}).send();
	}
	
	
};

var CheckComment = {

	start : function() {
		if(document.id('commentor')) {
			document.id('submitter').addEvent('click', function(e){
				e.stop();
				CheckComment.CheckValue();
			});
		}
	},

	CheckValue : function() {
		
		var commentor = document.id('commentor').action;
		var uri = document.id('uri').value;
		var comment = document.id('comment').value;
		var lblcomment = document.id('lblcomment');

		// two cases logged_in or not ?
		var userid = document.id('userid');
		if(userid) {
			if(!comment) {
				commente=false;
				lblcomment.addClass('warn');
				lblcomment.innerHTML = 'Veuillez remplir le champ commentaire.';
			}
			else {
				commente=true;
				lblcomment.removeClass('warn');
				lblcomment.innerHTML = 'Commentaire';
			}
			if(commente==false) {
				return false;
			}
			else {
				/*
				var commenturi=uri+'?ajax=true&topic=comment#commentor';
				CheckComment.loadUrl(commenturi);
				*/
				CheckComment.FrmSubmit(document.id('commentor'));
			}
		
		}
		else {
			var username = document.id('username').value;
			var email = document.id('email').value;
			var lblusername = document.id('lblusername');
			var lblemail = document.id('lblemail');
			var usernamee=true;
			var emaile=true;
			var commente=true;
			
			if(!username) {
				usernamee=false;
				lblusername.addClass('warn');
				lblusername.innerHTML = 'Veuillez choisir un nom';
			}
			else {
				usernamee=true;
				lblusername.removeClass('warn');
				lblusername.innerHTML = 'Nom';
			}
			if(!email) {
				emaile=false;
				lblemail.addClass('warn');
				lblemail.innerHTML = 'Veuillez indiquer votre Email';
			}
			else {
				if (!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email))) {
					emaile=false;
					lblemail.addClass('warn');
					lblemail.innerHTML = 'Votre Email n\'est pas valide';
				}
				else {
					emaile=true;
					lblemail.removeClass('warn');
					lblemail.innerHTML = 'Votre Email';
				}
			}
			if(!comment) {
				commente=false;
				lblcomment.addClass('warn');
				lblcomment.innerHTML = 'Veuillez remplir le champ commentaire.';
			}
			else {
				commente=true;
				lblcomment.removeClass('warn');
				lblcomment.innerHTML = 'Commentaire';
			}
			if(commente==false || emaile==false  || usernamee==false) {
				return false;
			}
			else {
				CheckComment.FrmSubmit(document.id('commentor'));
			}
		}
	
	},

	FrmSubmit : function(form) {
		var myPost=form.toQueryString();
		var formuri=form.get('action');
		if(formuri.contains('='))
			formuri+='&json=true#commentor';
		else 
			formuri+='?json=true#commentor';

		var responder=form.getFirst('div.responder');
		var blurry=form.getFirst('div.blurry');
		var fields=form.getChildren('input');
		var fsr = new Element('fieldset', {'class':'loading'});
		var fsrlegend = new Element('legend').set('text', 'Commentaire en cours de traitement...').inject(fsr);
		var newcomment=document.id('commentx');
		newcomment.setStyle('opacity',0); 
		newcomment.addClass('comments'); 

		blurry.set('tween');

		var Postman=new Request.JSON({
			method: 'post', 
			url: formuri,
			data: myPost,
			//headers:{'Content-Type':'application/json charset=UTF-8'},
			evalScripts : true,
			evalResponse : true,
			onRequest:function() {
				responder.adopt(fsr);
				fields.setStyle('disable','true');
				blurry.tween('opacity',5); 
			},
			onSuccess:function(jsonObj) {
				blurry.tween('opacity',0); 
				fsr.removeClass('loading');
				blurry.empty();
				var comcontent= new Element('div', { 'class':'comments-content', 'text':jsonObj.content});
				var cominfo= new Element('div', { 'class':'comments-info', 'text': jsonObj.info });
				newcomment.adopt(comcontent, cominfo).tween('opacity',1);
				var message=new Element('h3').set('text', jsonObj.message).inject(fsr);
				fsrlegend.set('text', jsonObj.legend);
			}.bindWithEvent(this),
			onFailure:function() {
				fsr.removeClass('loading');
				fields.setStyle('disable','false');
				fsrlegend.set('text', 'Une erreur est survenue!');
				var message=new Element('h3').set('text', ' Veuillez cliquer une fois encore sur le bouton envoyer').inject(fsr);
				blurry.tween('opacity',1); 
			}
		}).send();
	}
};
/**
 * ReMooz - Zoomer
 *
 * Inspired by so many boxes and zooms
 *
 * @version		1.0
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */

var ReMooz = new Class({

	Implements: [Events, Options, Chain],

	options: {
		link: null,
		type: 'image',
		container: null,
		className: null,
		centered: false,
		dragging: true,
		closeOnClick: true,
		shadow: (Browser.Engine.trident) ? 'onOpenEnd' : 'onOpen', // performance
		resize: true,
		margin: 20,
		resizeFactor: 0.95,
		resizeLimit: false, // {x: 640, y: 640}
		fixedSize: false,
		cutOut: true,
		addClick: true,
		opacityLoad: 0.6,
		opacityResize: 1,
		opacityTitle: 0.9,
		resizeOptions: {},
		fxOptions: {},
		closer: true,
		parse: false, // 'rel'
		parseSecure: false,
		temporary: false,
		onBuild: $empty,
		onLoad: $empty,
		onOpen: $empty,
		onOpenEnd: $empty,
		onClose: $empty,
		onCloseEnd: $empty,
		generateTitle: function(el) {
			var text = el.get('title');
			if (!text) return false;
			var title = text.split(' :: ');
			var head = new Element('h6', {'html': title[0]});
			return (title[1]) ? [head, new Element('p', {'html': title[1]})] : head;
		}
	},

	initialize: function(element, options) {
		this.element = $(element);
		this.setOptions(options);
		if (this.options.parse) {
			var obj = this.element.getProperty(this.options.parse);
			if (obj && (obj = JSON.decode(obj, this.options.parseSecure))) this.setOptions(obj);
		}
		var origin = this.options.origin;
		this.origin = ((origin) ? $(origin) || this.element.getElement(origin) : null) || this.element;
		this.link = this.options.link || this.element.get('href') || this.element.get('src');
		this.container = $(this.options.container) || this.element.getDocument();
		this.bound = {
			'click': function(e) {
				this.open.delay(1, this);
				return false;
			}.bind(this),
			'close': this.close.bind(this),
			'dragClose': function(e) {
				if (e.rightClick) return;
				this.close();
			}.bind(this)
		};
		if (this.options.addClick) this.bindToElement();
	},

	destroy: function() {
		if (this.box) this.box.destroy();
		this.box = this.tweens = this.body = this.content = null;
	},

	bindToElement: function(element) {
		($(element) || this.element).addClass('remooz-element').addEvent('click', this.bound.click);
		return this;
	},

	getOriginCoordinates: function() {
		var coords = this.origin.getCoordinates();
		delete coords.right;
		delete coords.bottom;
		return coords;
	},

	open: function(e) {
		if (this.opened) return (e) ? this.close() : this;
		this.opened = this.loading = true;
		if (!this.box) this.build();
		this.coords = this.getOriginCoordinates();
		this.coords.opacity = this.options.opacityLoad;
		this.coords.display = '';
		this.tweens.box.set(this.coords);
		this.box.addClass('remooz-loading');
		ReMooz.open(this.fireEvent('onLoad'));
		this['open' + this.options.type.capitalize()]();
		return this;
	},

	finishOpen: function() {
		this.tweens.fade.start(0, 1);
		this.drag.attach();
		this.fireEvent('onOpenEnd').callChain();
	},

	close: function() {
		if (!this.opened) return this;
		this.opened = false;
		ReMooz.close(this.fireEvent('onClose'));
		if (this.loading) {
			this.box.setStyle('display', 'none');
			return this;
		}
		this.drag.detach();
		this.tweens.fade.cancel().set(0).fireEvent('onComplete');
		if (this.tweens.box.timer) this.tweens.box.clearChain();
		var vars = this.getOriginCoordinates();
		if (this.options.opacityResize != 1) vars.opacity = this.options.opacityResize;
		this.tweens.box.start(vars).chain(this.closeEnd.bind(this));
		return this;
	},

	closeEnd: function() {
		if (this.options.cutOut) this.element.setStyle('visibility', 'visible');
		this.box.setStyle('display', 'none');
		this.fireEvent('onCloseEnd').callChain();
		if (this.options.temporary) this.destroy();
	},

	openImage: function() {
		var tmp = new Image();
		tmp.onload = tmp.onabort = tmp.onerror = function(fast) {
			this.loading = tmp.onload = tmp.onabort = tmp.onerror = null;
			if (!tmp.width || !this.opened) {
				this.fireEvent('onError').close();
				return;
			}
			var to = {x: tmp.width, y: tmp.height};
			if (!this.content) this.content = $(tmp).inject(this.body);
			else tmp = null;
			this[(this.options.resize) ? 'zoomRelativeTo' : 'zoomTo'].create({
				'delay': (tmp && fast !== true) ? 1 : null,
				'arguments': [to],
				'bind': this
			})();
		}.bind(this);
		tmp.src = this.link;
		if (tmp && tmp.complete && tmp.onload) tmp.onload(true);
	},

	/**
	 * @todo Test implementation
	 */
	openElement: function() {
		this.content = this.content || $(this.link) || $E(this.link);
		if (!this.content) {
			this.fireEvent('onError').close();
			return;
		}
		this.content.inject(this.body);
		this.zoomTo({x: this.content.scrollWidth, y: this.content.scrollHeight});
	},

	zoomRelativeTo: function(to) {
		var scale = this.options.resizeLimit;
		if (!scale) {
			scale = this.container.getSize();
			scale.x *= this.options.resizeFactor;
			scale.y *= this.options.resizeFactor;
		}
		for (var i = 2; i--;) {
			if (to.x > scale.x) {
				to.y *= scale.x / to.x;
				to.x = scale.x;
			} else if (to.y > scale.y) {
				to.x *= scale.y / to.y;
				to.y = scale.y;
			}
		}
		return this.zoomTo({x: to.x.toInt(), y: to.y.toInt()});
	},

	zoomTo: function(to) {
		to = this.options.fixedSize || to;
		var box = this.container.getSize(), scroll = this.container.getScroll();
		var pos = (!this.options.centered) ? {
			x: (this.coords.left + (this.coords.width / 2) - to.x / 2).toInt()
				.limit(scroll.x + this.options.margin, scroll.x + box.x - this.options.margin - to.x),
			y: (this.coords.top + (this.coords.height / 2) - to.y / 2).toInt()
				.limit(scroll.y + this.options.margin, scroll.y + box.y - this.options.margin - to.y)
		} :  {
			x: scroll.x + ((box.x - to.x) / 2).toInt(),
			y: scroll.y + ((box.y - to.y) / 2).toInt()
		};
		if (this.options.cutOut) this.element.setStyle('visibility', 'hidden');
		this.box.removeClass('remooz-loading');
		var vars = {left: pos.x, top: pos.y, width: to.x, height: to.y};
		if (this.options.opacityResize != 1) vars.opacity = [this.options.opacityResize, 1];
		else this.box.set('opacity', 1);
		this.tweens.box.start(vars).chain(this.finishOpen.bind(this));
		this.fireEvent('onOpen');
	},

	build: function() {
		this.addEvent('onBlur', function() {
			this.focused = false;
			this.box.removeClass('remooz-box-focus').setStyle('z-index', ReMooz.options.zIndex);
		}, true);
		this.addEvent('onFocus', function() {
			this.focused = true;
			this.box.addClass('remooz-box-focus').setStyle('z-index', ReMooz.options.zIndexFocus);
		}, true);

		var classes = ['remooz-box', 'remooz-type-' + this.options.type, 'remooz-engine-' + Browser.Engine.name + Browser.Engine.version];
		if (this.options.className) classes.push(this.options.className);
		this.box = new Element('div', {
			'class': classes.join(' '),
			'styles': {
				'display': 'none',
				'top': 0,
				'left': 0,
				'zIndex': ReMooz.options.zIndex
			}
		});

		this.tweens = {
			'box': new Fx.Morph(this.box, $merge({
					'duration': 400,
					'unit': 'px',
					'transition': Fx.Transitions.Quart.easeOut,
					'chain': 'cancel'
				}, this.options.resizeOptions)
			),
			'fade': new Fx.Tween(null, $merge({
					'property': 'opacity',
					'duration': (Browser.Engine.trident) ? 0 : 300,
					'chain': 'cancel'
				}, this.options.fxOptions)).addEvents({
					'onComplete': function() {
						if (!this.element.get('opacity')) this.element.setStyle('display', 'none');
					},
					'onStart': function() {
						if (!this.element.get('opacity')) this.element.setStyle('display', '');
					}
				}
			)
		};
		this.tweens.fade.element = $$();

		if (this.options.shadow) {
			if (Browser.Engine.webkit420) {
				this.box.setStyle('-webkit-box-shadow', '0 0 10px rgba(0, 0, 0, 0.7)');
			} else if (!Browser.Engine.trident4) {
				var shadow = new Element('div', {'class': 'remooz-bg-wrap'}).inject(this.box);
				['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'].each(function(dir) {
					new Element('div', {'class': 'remooz-bg remooz-bg-' + dir}).inject(shadow);
				});
				this.tweens.bg = new Fx.Tween(shadow, {
					'property': 'opacity',
					'chain': 'cancel'
				}).set(0);
				this.addEvent(this.options.shadow, this.tweens.bg.set.bind(this.tweens.bg, 1), true);
				this.addEvent('onClose', this.tweens.bg.set.bind(this.tweens.bg, 0), true);
			}
		}

		if (this.options.closer) {
			var closer = new Element('a', {
				'class': 'remooz-btn-close',
				'events': {'click': this.bound.close}
			}).inject(this.box);
			this.tweens.fade.element.push(closer);
		}
		this.body = new Element('div', {'class': 'remooz-body'}).inject(this.box);

		var title = this.options.title || this.options.generateTitle.call(this, this.element);
		if (title) { // thx ie6
			var title = new Element('div', {'class': 'remooz-title'}).adopt(
				new Element('div', {'class': 'remooz-title-bg', 'opacity': this.options.opacityTitle}),
				new Element('div', {'class': 'remooz-title-content'}).adopt(title)
			).inject(this.box);
			this.tweens.fade.element.push(title);
		}
		this.tweens.fade.set(0).fireEvent('onComplete');

		this.drag = new Drag.Move(this.box, {
			'snap': 15,
			'preventDefault': true,
			'onBeforeStart': function() {
				if (!this.focused && !this.loading) ReMooz.focus(this);
				else if (this.loading || this.options.closeOnClick) this.box.addEvent('mouseup', this.bound.dragClose);
			}.bind(this),
			'onSnap': function() {
				this.box.removeEvent('mouseup', this.bound.dragClose);
				if (!this.options.dragging) this.drag.stop();
				else this.box.addClass('remooz-box-dragging');
			}.bind(this),
			'onComplete': function() {
				this.box.removeClass('remooz-box-dragging');
			}.bind(this)
		});
		this.drag.detach();

		this.fireEvent('onBuild', this.box, this.element);
		this.box.inject(this.element.getDocument().body);
	}

});

ReMooz.factory = function(extended) {
	return $extend(this, extended);
};

ReMooz.factory(new Options).factory({

	options: {
		zIndex: 41,
		zIndexFocus: 42,
		query: 'a.remooz',
		modal: false
	},

	assign: function(elements, options) {
		return $$(elements).map(function(element) {
			return new ReMooz(element, options);
		}, this);
	},

	stack: [],

	open: function(obj) {
		var last = this.stack.getLast();
		this.focus(obj);
		if (last && this.options.modal) last.close();
	},

	close: function(obj) {
		var length = this.stack.length - 1;
		if (length > 1 && this.stack[length] == obj) this.focus(this.stack[length - 1]);
		this.stack.erase(obj);
	},

	focus: function(obj) {
		var last = this.stack.getLast();
		obj.fireEvent('onFocus', [obj]);
		if (last == obj) return;
		if (last) last.fireEvent('onBlur', [last]);
		this.stack.erase(obj).push(obj);
	}

});





