

	/**
	 * SqueezeBox - Expandable Lightbox
	 *
	 * Allows to open various content as modal,
	 * centered and animated box.
	 *
	 * Dependencies: MooTools 1.2 trunk (04/2008)
	 *
	 * Inspired by
	 *  ... Lokesh Dhakar	- The original Lightbox v2
	 *
	 * @version		1.1 rc2
	 *
	 * @license		MIT-style license
	 * @author		Harald Kirschner <mail [at] digitarald.de>
	 * @copyright	Author
	 */
	var SqueezeBox = {

		presets: {
			size: {x: 600, y: 450},
			sizeLoading: {x: 200, y: 150},
			marginInner: {x: 20, y: 20},
			marginImage: {x: 50, y: 75},
			handler: false,
			target: null,
			closable: true,
			closeBtn: true,
			zIndex: 65555,
			overlayOpacity: 0.7,
			classWindow: '',
			classOverlay: '',
			overlayFx: {},
			resizeFx: {},
			contentFx: {},
			parse: false, // 'rel'
			parseSecure: false,
			ajaxOptions: {},
			onOpen: $empty,
			onClose: $empty,
			onUpdate: $empty,
			onResize: $empty,
			onMove: $empty,
			onShow: $empty,
			onHide: $empty
		},

		initialize: function(presets) {
			if (this.options) return this;
			this.presets = $merge(this.presets, presets);
			this.options = {};
			this.setOptions(this.presets).build();
			this.bound = {
				window: this.reposition.bind(this, [null]),
				scroll: this.checkTarget.bind(this),
				close: this.close.bind(this),
				key: this.onKey.bind(this)
			};
			this.isOpen = this.isLoading = false;
			return this;
		},

		build: function() {
			this.overlay = new Element('div', {
				id: 'sbox-overlay',
				styles: {display: 'none', zIndex: this.options.zIndex}
			});
			this.content = new Element('div', {id: 'sbox-content'});
			this.closeBtn = new Element('a', {id: 'sbox-btn-close', href: '#'});
			this.win = new Element('div', {
				id: 'sbox-window',
				styles: {display: 'none', zIndex: this.options.zIndex + 2}
			}).adopt(this.closeBtn, this.content);
			this.fx = {
				overlay: new Fx.Tween(this.overlay, $merge({
					property: 'opacity',
					onStart: Events.prototype.clearChain,
					duration: 250,
					link: 'cancel'
				}, this.options.overlayFx)).set(0),
				win: new Fx.Morph(this.win, $merge({
					onStart: Events.prototype.clearChain,
					unit: 'px',
					duration: 750,
					transition: Fx.Transitions.Quint.easeOut,
					link: 'cancel'
				}, this.options.resizeFx)),
				content: new Fx.Tween(this.content, $merge({
					property: 'opacity',
					duration: 250,
					link: 'cancel'
				}, this.options.contentFx)).set(0)
			};
			$(document.body).adopt(this.overlay, this.win);
		},

		assign: function(to, options) {
			return to.addEvent('click', function() {
				return !SqueezeBox.fromElement(this, options);
			});
		},

		fromElement: function(from, options) {
			this.initialize();
			if (this.element) this.trash();
			this.element = $(from);
			this.setOptions($merge(this.presets, options || {}));
			if (this.element && this.options.parse) {
				var obj = this.element.getProperty(this.options.parse);
				if (obj && (obj = JSON.decode(obj, this.options.parseSecure))) this.setOptions(obj);
			}
			this.assignOptions();
			this.url = ((this.element) ? (this.options.url || this.element.get('href')) : from) || '';
			var handler = this.options.handler;
			if (handler) return this.setContent(handler, this.parsers[handler].call(this, true));
			var ret = false;
			this.parsers.some(function(parser, key) {
				var content = parser.call(this);
				if (content) {
					ret = this.setContent(key, content);
					return true;
				}
				return false;
			}, this);
			return ret;
		},

		assignOptions: function() {
			this.overlay.set('class', this.options.classOverlay);
			this.win.set('class', this.options.classWindow);
			if (Browser.Engine.trident4) this.win.addClass('sbox-window-ie6');
		},

		close: function(e) {
			var stoppable = ($type(e) == 'event');
			if (stoppable) e.stop();
			if (!this.isOpen || (stoppable && !$lambda(this.options.closable).call(this, e))) return this;
			this.fx.overlay.start(0).chain(this.toggleOverlay.bind(this));
			this.win.setStyle('display', 'none');
			this.trash();
			this.toggleListeners();
			this.isOpen = false;
			this.fireEvent('onClose', [this.content]);
			return this;
		},

		trash: function() {
			this.element = this.asset = null;
			this.options = {};
			this.removeEvents().setOptions(this.presets).callChain();
		},

		onError: function() {
			this.asset = null;
			this.setContent('string', 'Error during loading');
		},

		setContent: function(handler, content) {
			if (!this.handlers[handler]) return false;
			this.content.className = 'sbox-content-' + handler;
			this.applyTimer = this.applyContent.delay(this.fx.overlay.options.duration, this, this.handlers[handler].call(this, content));
			if (this.overlay.retrieve('opacity')) return this;
			this.toggleOverlay(true);
			this.fx.overlay.start(this.options.overlayOpacity);
			return this.reposition();
		},

		applyContent: function(content, size) {
			this.applyTimer = $clear(this.applyTimer);
			this.hideContent();
			if (!content) {
				this.toggleLoading(true);
			} else {
				if (this.isLoading) this.toggleLoading(false);
				this.fireEvent('onUpdate', [this.content], 20);
			}
			this.content.empty();
			if (['string', 'array', false].contains($type(content))) this.content.set('html', content || '');
			else this.content.adopt(content);
			this.callChain();
			if (!this.isOpen) {
				this.toggleListeners(true);
				this.resize(size, true);
				this.isOpen = true;
				this.fireEvent('onOpen', [this.content]);
			} else {
				this.resize(size);
			}
		},

		resize: function(size, instantly) {
			var box = document.getSize(), scroll = document.getScroll();
			this.size = $merge((this.isLoading) ? this.options.sizeLoading : this.options.size, size);
			var to = {
				width: this.size.x,
				height: this.size.y,
				left: (scroll.x + (box.x - this.size.x - this.options.marginInner.x) / 2).toInt(),
				top: (scroll.y + (box.y - this.size.y - this.options.marginInner.y) / 2).toInt()
			};
			$clear(this.showTimer || null);
			this.hideContent();
			if (!instantly) {
				this.fx.win.start(to).chain(this.showContent.bind(this));
			} else {
				this.win.setStyles(to).setStyle('display', '');
				this.showTimer = this.showContent.delay(50, this);
			}
			return this.reposition();
		},

		toggleListeners: function(state) {
			var fn = (state) ? 'addEvent' : 'removeEvent';
			this.closeBtn[fn]('click', this.bound.close);
			//this.overlay[fn]('click', this.bound.close);
			document[fn]('keydown', this.bound.key)[fn]('mousewheel', this.bound.scroll);
			window[fn]('resize', this.bound.window)[fn]('scroll', this.bound.window);
		},

		toggleLoading: function(state) {
			this.isLoading = state;
			this.win[(state) ? 'addClass' : 'removeClass']('sbox-loading');
			if (state) this.fireEvent('onLoading', [this.win]);
		},

		toggleOverlay: function(state) {
			this.overlay.setStyle('display', (state) ? '' : 'none');
			$(document.body)[(state) ? 'addClass' : 'removeClass']('body-overlayed');
		},

		showContent: function() {
			if (this.content.get('opacity')) this.fireEvent('onShow', [this.win]);
			this.fx.content.start(1);
		},

		hideContent: function() {
			if (!this.content.get('opacity')) this.fireEvent('onHide', [this.win]);
			this.fx.content.set(0);
		},

		onKey: function(e) {
			switch (e.key) {
				case 'esc': this.close(e);
				case 'up': case 'down': return false;
			}
		},

		checkTarget: function(e) {
			return this.content.hasChild(e.target);
		},

		reposition: function() {
			var size = document.getSize(), scroll = document.getScroll();
			this.overlay.setStyles({
				left: scroll.x + 'px',
				top: scroll.y + 'px',
				width: size.x + 'px',
				height: size.y + 'px'
			});
			this.win.setStyles({
				left: (scroll.x + (size.x - this.win.offsetWidth) / 2).toInt() + 'px',
				top: (scroll.y + (size.y - this.win.offsetHeight) / 2).toInt() + 'px'
			});
			return this.fireEvent('onMove', [this.overlay, this.win]);
		},

		removeEvents: function(type){
			if (!this.$events) return this;
			if (!type) this.$events = null;
			else if (this.$events[type]) this.$events[type] = null;
			return this;
		},

		extend: function(properties) {
			return $extend(this, properties);
		},

		handlers: new Hash(),

		parsers: new Hash()

	};

	SqueezeBox.extend(new Events($empty)).extend(new Options($empty)).extend(new Chain($empty));

	SqueezeBox.parsers.extend({

		image: function(preset) {
			return (preset || (/\.(?:jpg|png|gif)$/i).test(this.url)) ? this.url : false;
		},

		clone: function(preset) {
			if ($(this.options.target)) return $(this.options.target);
			if (this.element && !this.element.parentNode) return this.element;
			var bits = this.url.match(/#([\w-]+)$/);
			return (bits) ? $(bits[1]) : (preset ? this.element : false);
		},

		ajax: function(preset) {
			return (preset || (this.url && !(/^(?:javascript|#)/i).test(this.url))) ? this.url : false;
		},

		iframe: function(preset) {
			return (preset || this.url) ? this.url : false;
		},

		string: function(preset) {
			return true;
		}
	});

	SqueezeBox.handlers.extend({

		image: function(url) {
			var size, tmp = new Image();
			this.asset = null;
			tmp.onload = tmp.onabort = tmp.onerror = (function() {
				tmp.onload = tmp.onabort = tmp.onerror = null;
				if (!tmp.width) {
					this.onError.delay(10, this);
					return;
				}
				var box = document.getSize();
				box.x -= this.options.marginImage.x;
				box.y -= this.options.marginImage.y;
				size = {x: tmp.width, y: tmp.height};
				for (var i = 2; i--;) {
					if (size.x > box.x) {
						size.y *= box.x / size.x;
						size.x = box.x;
					} else if (size.y > box.y) {
						size.x *= box.y / size.y;
						size.y = box.y;
					}
				}
				size.x = size.x.toInt();
				size.y = size.y.toInt();
				this.asset = $(tmp);
				tmp = null;
				this.asset.setProperties({width: size.x, height: size.y});
				if (this.isOpen) this.applyContent(this.asset, size);
			}).bind(this);
			tmp.src = url;
			if (tmp && tmp.onload && tmp.complete) tmp.onload();
			return (this.asset) ? [this.asset, size] : null;
		},

		clone: function(el) {
			return el.clone();
		},

		adopt: $arguments(0),

		ajax: function(url) {
			this.asset = new Request.HTML($merge({
				method: 'get'
			}, this.options.ajaxOptions)).addEvents({
				onSuccess: function(resp) {
					this.applyContent(resp);
					this.asset = null;
				}.bind(this),
				onFailure: this.onError.bind(this)
			});
			this.asset.send.delay(10, this.asset, [{url: url}]);
		},

		iframe: function(url) {
			return new Element('iframe', $merge({
				src: url,
				frameBorder: 0,
				width: this.options.size.x,
				height: this.options.size.y
			}, this.options.iframeOptions));
		},

		string: function(str) {
			return str;
		}

	});

	SqueezeBox.handlers.url = SqueezeBox.handlers.ajax;
	SqueezeBox.parsers.url = SqueezeBox.parsers.ajax;
	SqueezeBox.parsers.adopt = SqueezeBox.parsers.clone;



window.addEvent('domready', function(){

	$(document.body).setStyle('background','#e4e4e4 url(/style/fond.jpg) no-repeat scroll 50% 0');
	/* 7enloc.js */

	SqueezeBox.initialize({
		size: {x: 890, y: 500}
	});

	SqueezeBox.assign($$('a[class=show_squeeze]'), {handler : 'iframe'});



	/* ariane.js */

	if ($('listing_ariane') || $('fiche_ariane'))
	{
		$$('.p_listbox').addEvent('click', function(e){
			var list = this.getElement('div').getNext();

			if (list.getStyle('display')=='none'){
				e.stop();
			}

			var i = list.getElement('ul').getElements('li').length;
			var height = i*20+10;

			if (height>300) height = 300;

			$$('.p_listbox_text').each(function(item){
				item.getNext().set('tween', {duration:500});
				if (item != this){
					item.getNext().get('tween').addEvent('complete', function(){
						item.getNext().setStyle('display', 'none');
						item.getNext().get('tween').removeEvents();
					}.bind(item));
					item.getNext().tween('height','0');
				}
			}.bind(this.getElement('div')));

			if (list.getStyle('height')=="0px"){
				list.setStyle('display', 'block');
				list.tween('height',height);
			}else{
				list.get('tween').addEvent('complete', function(){
					list.setStyle('display', 'none');
					list.get('tween').removeEvents();
				});
				list.tween('height','0');
			}
		});

		$$('.p_listbox_list').getElement('ul').getElements('li').each(function(item){
			item.addEvent('click', function(){
				window.location = this.getElement('a').get('href');
			});
		});

		document.addEvent('click', function(e){
			$$('.p_listbox_text').each(function(item){
				item.getNext().set('tween', {duration:500});
				item.getNext().get('tween').addEvent('complete', function(){
					item.getNext().setStyle('display', 'none');
					item.getNext().get('tween').removeEvents();
				}.bind(item));
				item.getNext().tween('height','0');
			});
		});
	}






	/* Ajouter/enlever de la sélection */

	var tag='';
	if ($('fiche')){
		tag = 'ul';
	}else{
		tag = '.annonce';
	}

    function add(el){
        new Request({
            url: '/selection.ajax',
            method: 'post',
            data: 'operation=add&id='+el.getParent(tag).get('id').replace('locref_', '').replace('tools_', ''),
            onComplete : function(ret){
                if($('span_nb_selection'))$('span_nb_selection').set('text', ret);
                el.removeClass('add_selection');
                el.addClass('rem_selection');
                if($('li_rem_selection'))$('li_rem_selection').removeClass('selection_hidden');  /* utiliser seulement dans la fiche */
                if($('li_add_selection'))$('li_add_selection').addClass('selection_hidden');/* utiliser seulement dans la fiche */
                el.removeEvents();
                add_remEvent(el);
                el.addEvent('update_add', function(){
                    rem(el);
                });
                SqueezeBox.fromElement('/selection', {handler : 'iframe'});
               if(!$('li_add_selection'))el.set('text', 'Retirer de ma sélection');  // Le If sert juste à vérifier que l'on est pas ds la fiche

            }.bind(el)
        }).send();
    }

    function rem(el){
        new Request({
            url: '/selection.ajax',
            method: 'post',
            data: 'operation=rem&id='+el.getParent(tag).get('id').replace('locref_', '').replace('tools_', ''),
            onComplete : function(ret){
                if($('span_nb_selection'))$('span_nb_selection').set('text', ret);
                el.removeClass('rem_selection');
                el.addClass('add_selection');
                if($('li_add_selection'))$('li_add_selection').removeClass('selection_hidden'); /* utiliser seulement dans la fiche */
                if($('li_rem_selection'))$('li_rem_selection').addClass('selection_hidden');/* utiliser seulement dans la fiche */
                el.removeEvents();
                add_addEvent(el);
                SqueezeBox.fromElement('/selection', {handler : 'iframe'});
                if(!$('li_rem_selection'))el.set('text', 'Ajouter à ma sélection');  // Le If sert juste à vérifier que l'on est pas ds la fiche
            }.bind(el)
        }).send();
    }

    function add_addEvent(element){
        element.addEvent('click', function(e){
            add(this);
            e.stop();
        });
    }

    function set_nb_in_selection(elem){
        new Request({
            url: '/selection.ajax',
            method: 'post',
            data: 'operation=rien',
            onComplete : function(ret){
                if(elem)elem.set('text', ret);

            }.bind(elem)
        }).send();
    }

    function nb_in_selection_init(){
        var elem = $('span_nb_selection');
        set_nb_in_selection(elem);

    }

    function add_remEvent(element){
        element.addEvent('click', function(e){
            rem(this);
            e.stop();
        });
    }

    function newletter_init(){
        var obj_newsletterForm = $('newsletterForm');
        var action = $(obj_newsletterForm).getProperty('action');

         /*$('newsletter_link').set('href', original_news_link+'&memnew_email='+this.get('value'));*/

        SqueezeBox.initialize({ size: {x: 650, y: 300} });

        $(obj_newsletterForm).addEvent('submit', function(el) {
            new Event(el).stop();
            action += '&memnew_email='+$('header_new_mail').get('value');
            SqueezeBox.fromElement(action, {handler : 'iframe'});

        });

        $('header_new_mail').addEvent('click', function(){
            if (this.get('value') == 'Entrez votre adresse email' ) {this.set('value', '');}
        });
    }

    add_addEvent($$('.add_selection'));

    add_remEvent($$('.rem_selection'));

    newletter_init();

    nb_in_selection_init();


});
