/* Scroller based on cursor moves */
var MScroll = new Class({
	options: {
		sx:0,
 		sy:0,
 		mouseX:0,
		mouseY:0,
		scSizeX:0,
		scSizeY:0,
		watcher:0,
		container:Element,
		speed:0

  },
	initialize: function(container, speed){

		if(!speed)this.options.speed = 100;
		else this.options.speed = speed;

		this.options.container = container;

		var size = this.options.container.getSize();
		var scSize = this.options.container.getScrollSize();

		this.options.scSizeY = scSize.y-size.y;
		this.options.scSizeX = scSize.x-size.x;

		this.options.container.addEvent('mouseenter', this.addListener.bind(this));
		this.options.container.addEvent('mouseleave', this.removeListener.bind(this));

	},

	addListener:function(e){
		this.options.mouseX = e.page.x;
		this.options.mouseY = e.page.y;

		this.options.watcher = this.moveit.periodical(1, this);
		this.options.container.addEvent('mousemove', this.compute.bind(this));


	},

	removeListener:function(){
		//$('log').set('text','');
		$clear(this.options.watcher);
		this.options.container.removeEvent('mousemove', this.compute);
	},

	moveit:function(){
		var currentPos = this.options.container.getScroll();
		var newPosX = currentPos.x + this.options.sx;
		var newPosY = currentPos.y + this.options.sy;

		if(newPosX > this.options.scSizeX){
			this.options.sx = 0;
			newPosX = this.options.scSizeX;
		}else if(newPosX < 0){
			newPosX = 0;
			this.options.sx = 0;
		}

		if(newPosY > this.options.scSizeY){
			newPosY = this.options.scSizeY;
			this.options.sy = 0;
		}else if(newPosY < 0){
			newPosY = 0;
			this.options.sy = 0;
		}



		this.options.container.scrollTo(newPosX, newPosY);

	},

	compute:function(e){

		var vx = e.page.x-this.options.mouseX;
		var vy = e.page.y-this.options.mouseY;

		vx = vx/this.options.scSizeX*this.options.speed;
		vy = vy/this.options.scSizeY*this.options.speed;

		this.options.mouseX = e.page.x;
		this.options.mouseY = e.page.y;

		if(vx < 0 && this.options.sx > 0 || vx > 0 && this.options.sx < 0)
			this.options.sx = 0;
		else
			this.options.sx += vx;

		if(vy < 0 && this.options.sy > 0 || vy > 0 && this.options.sy < 0)
			this.options.sy = 0;
		else
			this.options.sy += vy;

		//$('log').set('text',this.options.sx);
	}





});

/* lazyload */
var LazyLoad = new Class({
	Implements: [Options,Events],
	/* additional options */
	options: {
		range: 200,
		image: 'images/blank.gif',
		resetDimensions: true,
		elements: 'img',
		container: window
	},

	/* initialize */
	initialize: function(options) {

		/* vars */
		this.setOptions(options);
		this.container = $(this.options.container);
		
		this.elements = $$(this.options.elements);
		this.containerHeight = this.container.getSize().y;
		this.containerWidth = this.container.getSize().x;
		this.start = -1;
		
		this.imagesDone = 0;
		/* find elements remember and hold on to */
		this.elements = this.elements.filter(function(el) {
			/* reset image src IF the image is below the fold and range */
			//if(el.getPosition(this.container).x > this.containerWidth + this.options.range) {
				el.store('oSRC',el.get('src')).set('src',this.options.image);
				if(this.options.resetDimensions) {
					el.store('oWidth',el.get('width')).store('oHeight',el.get('height')).set({'width':'','height':''});
				}
				return true;
			//}
		},this);
		//alert('Deferring loading of ' + this.elements.length + ' elements');
		/* listen for scroll */
		this.container.addEvent('scroll',this.action.bind(this));
		//alert(this.action);
		this.action();
	},
	
	/* create the action function */
	action: function() {
		this.elements = $$(this.options.elements);
		var images2Load = new Array();
		var el2Replace = new Array();
		var cpos = this.container.getScroll().x;
			
		if(cpos > this.start) {
			
			
			var i = 0;
			this.elements = this.elements.filter(function(el) {
				if((this.container.getScroll().x + this.options.range + this.containerWidth) >= el.getPosition(this.container).x) {
					
					if(el.retrieve('oSRC') && !el.retrieve('done')) {
						images2Load[i] = el.retrieve('oSRC');
						el2Replace[i] = el;
						el.store('done', true);
						i++;
						
					
						if(this.options.resetDimensions) {
							el.set({
								width: el.retrieve('oWidth'),
								height: el.retrieve('oHeight')
							});
						}
					}
					
					return false;
				}
				return true;
			},this);
			
			this.start = cpos;
		}
		
		this.load(images2Load, el2Replace);
		
		/* remove this event IF no elements */
		if(!this.elements.length) {
			this.container.removeEvent('scroll',this.action.bind(this));
			this.fireEvent('complete');
		}
	},
		
	load: function(images2Load, el2Replace){
		
		var loadedImages = new Array();
   	new Asset.images(images2Load, {
   		onProgress: function(i, index) {
				loadedImages[index] = this;
				
			},
			onComplete: function() {
				
				this.appear(0, loadedImages, el2Replace);
			}.bind(this)
   	});
		
	},
		
	appear: function(id, loadedImages, el2Replace){
		
		
		var currImage = loadedImages[id];
		var currEl = el2Replace[id];
		var data = currEl.retrieve('data', {});
		
		
		if(currEl.get('class')) currImage.set('class', currEl.get('class'));
		currImage.store('data', data);
		currImage.set('opacity', 0);
		currImage.cloneEvents(currEl);
		currImage.replaces(currEl);
		
		currImage.store('done', true);
		var myFx = new Fx.Tween(currImage,{
			duration: 200,
			onComplete: function(){
				if(loadedImages.length-1 > id){
					id++;
					this.appear(id, loadedImages, el2Replace);
				}
			}.bind(this)
			
		}).start('opacity',1);
		
	}
		



});


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

	new SmoothScroll({ duration:700 }, window);
	var lazyloader = new LazyLoad({
			 range: 0,
			 container:window,
			 elements:'#content img',
       resetDimensions: false
	});

	if($('ligne2')){
		var scroller = new MScroll($('ligne2'), 1);
	}








//#################BEGIN ROLLOVER SCRIPT
/*
	var preLoadArray = new Array();
	var preLoadNum = 0;
	$$('img.roll', 'input.roll').each(function(el){
		preLoadArray[preLoadNum] = new Image();
		preLoadArray[preLoadNum].src = el.src.replace(el.src.replace('_off.', '_on.'));
		preLoadNum++;
		el.addEvent('mouseover',function(){
			this.setAttribute('src',this.src.replace('_off.', '_on.'));
		});

		el.addEvent('mouseout',function(){
			this.setAttribute('src',this.src.replace('_on.','_off.'));
		});
	});
*/
$$('img.roll').each(function(el){
	el.addEvent('mouseover',function(){
			this.set('opacity',.5);
		});

		el.addEvent('mouseout',function(){
			this.set('opacity',1);
		});
});
//#################END ROLLOVER SCRIPT






//#################BEGIN GALERY SCRIPT
	function showImages(imageCol, refItem, el){
		var ref = refItem.split('.');
		var table = ref[0];
		var id = ref[1];
		var colWidth = 0;
		new Request.JSON({
			url : 'json/loadImages.php',
    	onSuccess   : function(data){
    		var loadedImages = [];
    		new Asset.images(data, {
    			onProgress: function(i) {
						loadedImages[i] = this;
					},
					onComplete: function() {
						appear(imageCol, loadedImages, 0, colWidth, el);
					}
    		});
    	}

  	}).post({'id': id, 'table':table});
	}
	function appear(imageCol, loadedImages, index, colWidth, el){
		var myImage = loadedImages[index];
    var data = el.retrieve('data', {});
			
    if(data.curr == false) return;

    columnWidth += myImage.width;
    colWidth += myImage.width;
    $$('.widecontent').setStyle('width', columnWidth);
    imageCol.setStyle('width', colWidth);
    myImage.inject(imageCol);
    myImage.set('opacity',0);

    var myFx = new Fx.Tween(myImage,{
			duration:200,
			onComplete: function(){
				if(loadedImages.length-1 > index){
					index++;
					appear(imageCol, loadedImages, index, colWidth, el);
				}
			}
		}).start('opacity',1);



	}
	function showImage(imageCol, imageSrc){

		var ImageGalery = imageCol.getElement('img');

		var myImage = new Asset.image(imageSrc, {
			'class': 'newImage',
			onload: function(){
			if(ImageGalery)columnWidth -= ImageGalery.width;
			columnWidth += myImage.width;
			imageCol.setStyle('width', myImage.width);
			$$('.widecontent').setStyle('width', columnWidth);
			myImage.inject(imageCol,'top');
			myImage.set('opacity',1);

			if(ImageGalery){
			var myFx = new Fx.Tween(ImageGalery,{

				duration: 200,
				onComplete: function(){
				ImageGalery.dispose();
				myImage.removeClass('newImage');
				myImage.addClass('oldImage');
				if(!imageCol.hasClass('noClose')){
					myImage.setStyle('cursor','pointer');
					myImage.addEvent('click',function(){
						closeCol(imageCol);
					});
				}
			}}).start('opacity',0);
			}
			else{

				myImage.set('opacity',0);
				var myFx = new Fx.Tween(myImage,{
					duration:200,
					onComplete:function(){
						myImage.removeClass('newImage');
						myImage.addClass('oldImage');
						if(!imageCol.hasClass('noClose')){
							myImage.setStyle('cursor','pointer');
							myImage.addEvent('click',function(){
								closeCol(imageCol);
							});
						}
					}}).start('opacity',1);
			}

		}});


	}

	function showDetail(imageCol, detail){
		if(imageCol.getElement('.legende'))
			imageCol.getElement('.legende').dispose();
		var content = detail.get('html');
		var legende = new Element('div', {
    'class':'legende',
    'html':content,
    'styles': {
    		'position': 'absolute',
        'top': '470px'

    }
  	});
  	legende.inject(imageCol);
		initSendButtons();


	}

	function resetOpacity(imageCol){


		imageCol.getParent('.group').getElements('img.thumb').each(function(el){
			el.set('opacity',1);
			var data = el.retrieve('data', {});
			data.curr = false;
		});
	}
	function closeCol(imageCol){

		if(imageCol.getSize().x > 0){
			columnWidth -= imageCol.getSize().x;

			$$('.widecontent').setStyle('width', columnWidth);
		}
		imageCol.empty();
		resetOpacity(imageCol);

		imageCol.removeClass('deployed');
		imageCol.setStyle('display', 'none');


	}

	$$('img.thumb').each(function(el){
		var data = el.retrieve('data', {});
		data.curr = false;
		var thumbSrc = el.src;
		if(el.retrieve('oSRC'))var imageSrc = el.retrieve('oSRC').replace('_m.', '_l.');
		else var imageSrc = el.src.replace('_m.', '_l.');
		var imageCol = el.getParent('.group').getFirst('.imageCol');
		if(el.getNext('.detail')) var detail = el.getNext('.detail');
		else var detail = false;
		el.addEvents({
			'click': function(e){
			e.stop();

			if(multGallery){
				
				if(!data.curr){

					closeCol(imageCol);
					data.curr = true;
					this.set('opacity', .1);
					imageCol.setStyle('width', 200);
					$$('.widecontent').setStyle('width', columnWidth + 200);
					imageCol.setStyle('display', 'block');
					imageCol.addClass('deployed');
					if(detail!=false) showDetail(imageCol, detail);
					showImages(imageCol, el.id, el);
				}else{
					closeCol(imageCol);
				}
			}
			else if(!imageCol.hasClass('deployed')){
				data.curr = true;
				this.set('opacity', .1);

				imageCol.setStyle('width', 0);
				imageCol.addClass('deployed');
				imageCol.setStyle('display', 'block');

				showImage(imageCol, imageSrc);
				if(detail!=false) showDetail(imageCol, detail);
			}else{
				var currentImage = imageCol.getElement('img');
				
				if(data.curr==true){
					
					closeCol(imageCol);

				}
				else{
					resetOpacity(imageCol);
					this.set('opacity', .1);
					data.curr = true;
					
					showImage(imageCol, imageSrc);
					if(detail!=false) showDetail(imageCol, detail);
				}
			}
		},
		'mouseover': function(){
			
			if(!data.curr){
				
				this.fade(.1);
				
			}
		},
		'mouseout': function(){
			
			if(!data.curr){
				this.fade(1);
				
			}
		}



		});




	});



//#################END GALERY SCRIPT

//#################BEGIN SCROLLBAR SCRIPT
function makeScrollbar(content,scrollbar,handle,horizontal,handleResize, ignoreMouse){

  /*If scrollbar is needed, formating the scrollbar*/

  if(horizontal){
    if(content.getScrollSize().x/content.getSize().x<=1)return;
    else if(handleResize){
      scrollbar.setStyles({'width':content.getSize().x+'px'});
      handle.setStyles({'width':content.getSize().x/content.getScrollSize().x*content.getSize().x+'px'});
    }
  }else{
    if(content.getScrollSize().y/content.getSize().y<=1)return;
    else if(handleResize){
      scrollbar.setStyles({'height':content.getSize().y+'px'});
      handle.setStyles({'height':content.getSize().y/content.getScrollSize().y*content.getSize().y+'px'});
    }
  }
  scrollbar.setStyles({'display': 'block', 'visibility':'visible'});
  handle.setStyles({'display': 'block', 'visibility':'visible', 'cursor':'pointer'});
  /*End of formating the scrollbar*/
  content.addClass('withScroll');

	var steps = (horizontal?(content.getScrollSize().x - content.getSize().x):(content.getScrollSize().y - content.getSize().y));



	var slider = new Slider(scrollbar, handle, {
		steps: steps,
		mode: (horizontal?'horizontal':'vertical'),
		onChange: function(step){

			var x = (horizontal?step:0);
			var y = (horizontal?0:step);
			content.scrollTo(x,y);
		}
	}).set(0);
	if( !(ignoreMouse) ){

		$$(content, scrollbar).addEvent('mousewheel', function(e){
			e = new Event(e).stop();
			var step = slider.step - e.wheel * 30;
			slider.set(step);
		});
	}

}



$$('div.texte').each(function(el){
	if(el.getNext('.track')){
	var track = el.getNext('.track');
	var thumb = track.getElement('.trackThumb');
	makeScrollbar(el, track, thumb);
	}

});

//#################END SCROLLBAR SCRIPT

function initSendButtons(){

	$$('a.send').each(function(el){
		el.addEvent('click', function(){
			var formu = el.getParent('form');
			var ready2Send = true;
			if(el.hasClass('checkMandatory')){
				formu.getElements('input[type=text]').each(function(field){
					field.fieldok = true;

					if(field.hasClass('mandatory')){
						if(field.hasClass('mail')){
							if(!field.value.match("^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$")){
								field.setStyle('border-color','#FF0000');
								field.getPrevious('.label').setStyle('color','#FF0000');
								ready2Send = false;
								field.fieldok = false;
								field.addEvent('keyup', function(e){

									if(field.value.match("^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$")){
										field.setStyle('border-color','#000');
										field.getPrevious('.label').setStyle('color','#000');
										field.fieldok = true;
									}else{
										field.setStyle('border-color','#FF0000');
										field.getPrevious('.label').setStyle('color','#FF0000');
										field.fieldok = false;
									}
								});
							}
						}else{
							if(!field.value.match("^[a-zA-Z0-9._-]+")){
								field.setStyle('border-color','#FF0000');
								field.getPrevious('.label').setStyle('color','#FF0000');
								ready2Send = false;
								field.fieldok = false;
								field.addEvent('keyup', function(e){
									if(field.value.match("^[a-zA-Z0-9._-]+")){
										field.setStyle('border-color','#000');
										field.getPrevious('.label').setStyle('color','#000');
										field.fieldok = true;
									}else{
										field.setStyle('border-color','#FF0000');
										field.getPrevious('.label').setStyle('color','#FF0000');
										field.fieldok = false;
									}
								});
							}
						}
					}
					var allClass = field.get('class');
					if(allClass.test('link')){

						var classLink = allClass.replace(/.*?(link\d+).*/, '$1');
						$$('.'+classLink).each(function(linkField){
							if(linkField.value != field.value){

								$$('.'+classLink).setStyle('border-color','#FF0000');
								$$('.'+classLink).each(function(linkField3){
									linkField3.getPrevious('.label').setStyle('color', '#FF0000');
								});
								ready2Send = false;
								field.addEvent('keyup', function(e){
									e.stop();
									$$('.'+classLink).each(function(linkField2){
										if(linkField2!=field && linkField2.value == field.value && field.fieldok){
											$$('.'+classLink).setStyle('border-color','#000');
											$$('.'+classLink).each(function(linkField3){
												linkField3.getPrevious('.label').setStyle('color', '#000');
											});

										}else if(linkField2!=field && linkField2.value != field.value){
											$$('.'+classLink).setStyle('border-color','#FF0000');
											field.getPrevious('.label').setStyle('color', '#FF0000');
											$$('.'+classLink).each(function(linkField3){
												linkField3.getPrevious('label').setStyle('color', '#FF0000');
											});
											return;
										}
									});
								});
								return;
							}
						});

					}
				});
			}
			if(ready2Send){
				var arrHref = el.href.split('#');
				if(arrHref.length > 1){
					arrInputs = arrHref[1].split('&');
					arrInputs.each(function(inp){
						var arrAction = inp.split('=');
						var field = arrAction[0];
						var action = arrAction[1];
						new Element('input', {'type':'hidden', 'name':field, 'value':action}).inject(formu);
					});
				}
				formu.submit();
			}
		});
	});
}
initSendButtons();

//##################BEGIN INSTANT SESSION SCRIPT
$$('.instantSession').each(function(el){
	el.addEvent('blur', function(){
		var val = '';
		var action = '';


		if(el.tagName.toLowerCase()=='select'){
			val = el.getSelectedValue();
			action = 'add';

		}

		else if(el.type == 'checkbox'){
			if(el.checked){
				val = '1';
				action = 'add';
			}else{
				action = 'remove';
			}
		}else if(el.type == 'text' || el.type == 'radio'){
			if(el.value != ''){
				val = el.value;
				action = 'add';
			}
			else{
				action = 'remove';
			}
		}


		new Request.JSON({
			 url : 'json/instantSession.php'
  	}).post({'field': el.name, 'value':val, 'action':action});
	});

});




Element.implement({

	getSelectedValue: function() {
		if(this.tagName.toLowerCase()!='select')
			return null;
		var options = this.getElements('option');
		return $splat($A(options).filter(function(option) {
			return option.get('selected');
		}).map(function(opt) {
			return opt.value.clean();
		}));
	},

	getSelectedIndex: function() {
		if(this.tagName.toLowerCase()!='select')
			return null;
		return $splat(new Elements($A(this.options).filter(function(option) {
			return option.selected;
		})).map(function(opt) {
			return opt.index;
		}));
	},

	getSelectedFull: function() {
		if(this.tagName.toLowerCase()!='select')
			return null;
		return $splat(new Elements($A(this.options).filter(function(option) {
			return option.selected;
		})).map(function(opt) {
			return {
				'index': opt.index,
				'value': opt.value.clean()
			};
		}));
	},

	setSelected: function(data, add) {

		if(this.tagName.toLowerCase()!='select')
			return null;
		if(!add)
			this.clearSelect();
		var data = $splat(data);
		var options = this.getElements('option');
		options.each(function(option, i) {
			if(data.contains(option.getProperty('value')) || data.contains(i)){

				option.set('selected', 'selected');
			}
		});
		return;
	},

	clearSelect: function(ds) {
		if(this.tagName.toLowerCase()!='select')
			return null;
		var ls = this.getSelectedFull();
		var options = this.getElements('option');
		options.each(function(option) {
			option.set('selected', (option.defaultSelected && ds) ? 'selected' : '');
		});
		return ls;
	}
});







});

