/*
* Slides, A Slideshow Plugin for jQuery
* Intructions: http://slidesjs.com
* By: Nathan Searles, http://nathansearles.com
* Version: 1.0.9
* Updated: January 4th, 2011
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/


var originalCoord = { x: 0, y: 0 };
var finalCoord = { x: 0, y: 0 };

var is_mobile = false;
var navigateur = navigator.userAgent;
var navigateur=navigateur.toLowerCase();
var is_iphone = (navigateur.indexOf('iphone')!=-1);
var is_ipad = (navigateur.indexOf('ipad')!=-1);
var is_air = (navigateur.indexOf('adobeair')!=-1);

if (is_iphone || is_ipad || is_air) {
	is_mobile = true;
}


(function($){
	jQuery.fn.slides=function(option){
		option=jQuery.extend({},jQuery.fn.slides.option,option);
		return this.each(function(){
			jQuery('.'+option.container,jQuery(this)).children().wrapAll('<div class="slides_control"/>');
			var elem=jQuery(this),control=jQuery('.slides_control',elem),container_obj = jQuery('.'+option.container,jQuery(this)),
			total=control.children().size(),
			g_delay_object = "",
			width=control.children().outerWidth(),
			height=control.children().outerHeight(),
			start=option.start-1,
			effect=option.effect.indexOf(',')<0?option.effect:option.effect.replace(' ','').split(',')[0],
			paginationEffect=option.effect.indexOf(',')<0?effect:option.effect.replace(' ','').split(',')[1],
			next=0,prev=0,number=0,current=0,loaded,active,clicked,position,direction;
			elem.data('sliderStatus',true);
			if(total<1){return;}
			if(start<0){start=0;};
			if(start>total){start=total-1;};
			if(option.start){current=start;};
			if(option.randomize){control.randomize();}
			jQuery('.'+option.container,elem).css({overflow:'hidden',position:'relative'});
			control.css({position:'relative',width:(width*3),height:height,left:-width});
			control.children().css({position:'absolute',top:0,left:width,zIndex:0,display:'none'});
			if(option.autoHeight){control.animate({height:control.children(':eq('+start+')').outerHeight()},option.autoHeightSpeed);}
			
			if(option.preload&&control.children()[0].tagName=='IMG'){
				elem.css({background:'url('+option.preloadImage+') no-repeat 50% 50%'});
				var img=jQuery('img:eq('+start+')',elem).attr('src')+'?'+(new Date()).getTime();
				jQuery('img:eq('+start+')',elem).attr('src',img).load(
					function(){
						jQuery(this).fadeIn(option.fadeSpeed,function(){
							jQuery(this).css({zIndex:5});elem.css({background:''});
							loaded=true;
						});
					}
				);
			}else{
				control.children(':eq('+start+')').fadeIn(option.fadeSpeed,function(){
					loaded=true;
				});
			}
			
			if(option.bigTarget){
				control.children().css({cursor:'pointer'});
				control.children().click(function(){animate('next',effect);return false;});
			}
			
			jQuery(this).mousedown(function(e){
				if(total<2){
					if(jQuery('.slides_navigator',elem).attr('is_defined_action')=="true")return;
						jQuery('.slides_navigator a:eq(0)',elem).html('').attr('className','').unbind('click');
						jQuery('.slides_navigator a:eq(2)',elem).html('').attr('className','').unbind('click');
						jQuery('.slides_navigator a:eq(1)',elem).html('+').attr('className','').
							css({'font-size':'20px','font-weight':'bold'}).unbind('click');
						jQuery('.slides_navigator',elem).css({display:'block',opacity:'1'});
						jQuery('.slides_navigator',elem)
							.stop(true,true)
							.animate({opacity:'100'},500,function(){
								clearTimeout(elem.data('g_delay_timer'));
								g_delay_object = jQuery(this);
								var g_delay_timer = setTimeout(function(){
									if(g_delay_object=="")return;
									g_delay_object.hide();
									elem.attr('g_zoom_action_enable','disable');
									clearTimeout(elem.data('g_delay_timer'));
								},15000);
								elem.data('g_delay_timer',g_delay_timer);
						});
				}
			});
			
			jQuery(this).mouseover(function(e){
				if(total<2 || is_mobile)return;
				if (!e) var e = window.event;
				var relTarg = e.relatedTarget || e.toElement;
				if(option.afficher_button){
					if(jQuery.browser.msie){
						jQuery('.slides_navigator',elem).show();
						elem.attr('g_zoom_action_enable','enable');
					}else{
						jQuery('.slides_navigator',elem).css({display:'block',opacity:'1'});
						jQuery('.slides_navigator',elem)
							.stop(true,true)
							.animate({opacity:'100'},500,function(){
								clearTimeout(elem.data('g_delay_timer'));
								g_delay_object = jQuery(this);
								var g_delay_timer = setTimeout(function(){
									if(g_delay_object=="")return;
									g_delay_object.hide();
									elem.attr('g_zoom_action_enable','disable');
									clearTimeout(elem.data('g_delay_timer'));
								},15000);
								elem.data('g_delay_timer',g_delay_timer);
						});
					}
				}
				stop();
			});
			
			

			jQuery(this).bind('touchend',function(e){
				  if(originalCoord.x==0 || finalCoord.x==0)return;
				  e.preventDefault();
				   var changeX = originalCoord.x - finalCoord.x;

					if(changeX < -90){
						jQuery('.'+option.prev,elem).trigger('click');
						//alert('left-right');
					}else if(changeX>90){
						jQuery('.'+option.next,elem).trigger('click');
						//alert('right-left');
					}
					originalCoord.x = finalCoord.x = 0;
					elem.attr('g_zoom_action_enable','enable');
			});
			
			jQuery(this).bind("touchmove",function(e){
				finalCoord.x = e.originalEvent.touches[0].pageX; // Updated X,Y coordinates
			});
			
			jQuery(this).bind("touchstart",function(e){
				//alert(jQuery('.slides_navigator',elem).attr('is_defined_action'));
				if(jQuery('.slides_navigator',elem).attr('is_defined_action')=="true")return;
				if (!e) var e = window.event;
				originalCoord.x = e.originalEvent.touches[0].pageX;
				var relTarg = e.relatedTarget || e.toElement;
				if(option.afficher_button && total>1){
					jQuery('.slides_navigator',elem).css({display:'block',opacity:'1'});
					jQuery('.slides_navigator',elem)
						.stop(true,true)
						.animate({opacity:'100'},500,function(){
							clearTimeout(elem.data('g_delay_timer'));
							g_delay_object = jQuery(this);
							var g_delay_timer = setTimeout(function(){
								if(g_delay_object=="")return;
								g_delay_object.hide();
								elem.attr('g_zoom_action_enable','disable');
								clearTimeout(elem.data('g_delay_timer'));
							},15000);
							elem.data('g_delay_timer',g_delay_timer);
						});
						//stop();
				}
				
				if(total<2){
						jQuery('.slides_navigator a:eq(0)',elem).html('').attr('className','').unbind('click');
						jQuery('.slides_navigator a:eq(2)',elem).html('').attr('className','').unbind('click');
						jQuery('.slides_navigator a:eq(1)',elem).html('+').attr('className','').
							css({'font-size':'20px','font-weight':'bold'}).unbind('click');
						jQuery('.slides_navigator',elem).css({display:'block',opacity:'1'});
						jQuery('.slides_navigator',elem)
							.stop(true,true)
							.animate({opacity:'100'},500,function(){
								clearTimeout(elem.data('g_delay_timer'));
								g_delay_object = jQuery(this);
								var g_delay_timer = setTimeout(function(){
									if(g_delay_object=="")return;
									g_delay_object.hide();
									elem.attr('g_zoom_action_enable','disable');
									clearTimeout(elem.data('g_delay_timer'));
								},15000);
								elem.data('g_delay_timer',g_delay_timer);
						});
				}
				
				
				
			});
			
			jQuery(this).mouseout(function(e){
				if(total<2 || is_mobile)return;
				if (!e) var e = window.event;
				var relTarg = e.relatedTarget || e.toElement;
				if(option.afficher_button && !jQuery.contains(this,relTarg)){
					if(jQuery.browser.msie){
						jQuery('.slides_navigator',elem).hide();
					}else{
						jQuery('.slides_navigator',elem)
						.stop(true,true)
						.animate({opacity:'0'});
						
					}
					if(elem.data('sliderStatus'))pause();
				}
				//elem.attr('g_zoom_action_enable','disable');
			});

			
			jQuery('.'+option.pause_button,elem).click(function(e){
				if(total<2)return;
				e.preventDefault();
				var obj = jQuery(this).children('img');
				elem.data('sliderStatus',! elem.data('sliderStatus'));
				if(!elem.data('sliderStatus')){
					stop();
					jQuery(obj[0]).hide();jQuery(obj[1]).show();
					var current_image_obj = jQuery(control.children(':eq('+current+')',elem)).find('img');
					current_image_obj.stop(true,false);
				}else{
					pause();
					//animate('next',effect);
					jQuery(obj[1]).hide();jQuery(obj[0]).show();
				}
			});
			
			jQuery('.'+option.next,elem).click(function(e){
				if(total<2)return;
				e.preventDefault();
				
				if(option.play && elem.data('sliderStatus')){
					pause();
				};
				animate('next',effect);
			});
			
			jQuery('.'+option.prev,elem).click(function(e){
				if(total<2)return;
				e.preventDefault();
				if(option.play && elem.data('sliderStatus')){pause();};
				animate('prev',effect);});
				if(option.generatePagination && total>1){
					elem.append('<ul id="thumbnail_box" class='+option.paginationClass+'></ul>');
					control.children().each(function(){
						jQuery('.'+option.paginationClass,elem).append('<li><a href="#'+number+'">'+(number+1)+'</a></li>');
						number++;
					});
				}else{
					jQuery('.'+option.paginationClass+' li a',elem).each(function(){jQuery(this).attr('href','#'+number);number++;});}
					jQuery('.'+option.paginationClass+' li:eq('+start+')',elem).addClass('current');
					jQuery('.'+option.paginationClass+' li a',elem).click(function(){if(option.play && elem.data('sliderStatus')){pause();};
					clicked=jQuery(this).attr('href').match('[^#/]+$');
					if(current!=clicked){animate('pagination',paginationEffect,clicked);}
				return false;});
				jQuery('a.link',elem).click(function(){if(option.play){pause();};
				clicked=jQuery(this).attr('href').match('[^#/]+$')-1;
				if(current!=clicked){animate('pagination',paginationEffect,clicked);}
			return false;
		});
			
			if(option.play && total>1){
				setTimeout(function(){
					if(effect=='dezoom'){
						active = false;
						loaded = true;
						current = -1;
						animate('next',effect);
					}
					if(option.play){playInterval=setInterval(function(){
						animate('next',effect);},option.play);
						elem.data('interval',playInterval);
					};
				},500);
			}
			
			function stop(){clearInterval(elem.data('interval'));};
			function pause(){if(option.pause){
				clearTimeout(elem.data('pause'));
				clearInterval(elem.data('interval'));
				pauseTimeout=setTimeout(function(){
					clearTimeout(elem.data('pause'));
					playInterval=setInterval(function(){animate("next",effect);},option.play);
					elem.data('interval',playInterval);
				},option.pause);
				elem.data('pause',pauseTimeout);
			}else{stop();}
		};
		
		function animate_dezoom(){
			if(total<2)return;
				var obj = jQuery(control.children(':eq('+current+')',elem)).find("[id*='img_']");
				var prev_obj = jQuery(control.children(':eq('+prev+')',elem)).find("[id*='img_']");
				
				var zoom_rate = jQuery(elem).attr('zoom_rate');
				
				var pos = obj.position();

				var x0,y0,w0,h0;
				var x1,y1,w1,h1;
				
				

				x0 = obj.attr('x0');	y0 = obj.attr('y0');
				w0 = obj.attr('w0');	h0 = obj.attr('h0');


				x1 = obj.attr('x1');	y1 = obj.attr('y1');
				w1 = obj.attr('w1');	h1 = obj.attr('h1');
				
				
				obj.stop(true,true);
				if(obj.attr('tagName')=='IMG'){
					obj.css({
						left:obj.attr('x0')+'px',
						top :obj.attr('y0')+'px',
						width:obj.attr('w0')+'px',
						height:obj.attr('h0')+'px'
					});
					obj.animate({
						width	:w1+'px',
						height	:h1+'px',
						left	:x1+'px',
						top		:y1+'px'
					 },option.play+10000,function(){
						 active = false;
						 var obj = jQuery(this);
						var x0 = obj.attr('x0');	var y0 = obj.attr('y0');
						var w0 = obj.attr('w0');	var h0 = obj.attr('h0');
						obj.css({
							width	:w0+'px',
							height	:h0+'px',
							left	:x0+'px',
							top		:y0+'px'
						});
					});
				}else{
					obj.css({
						left:obj.attr('x1')+'px',
						top :obj.attr('y1')+'px',
						width:obj.attr('w1')+'px',
						height:obj.attr('h1')+'px'
					});
				}
				
						
			//}
			control.children(':eq('+prev+')',elem).css({display:'none',zIndex:0});
				
					prev_obj.css({
						left:obj.attr('x0')+'px',
						top :obj.attr('y0')+'px',
						width:obj.attr('w0')+'px',
						height:obj.attr('h0')+'px'
					});
				
		}
		
		function animate(direction,effect,clicked){
			if(total<2)return;
			if(!active&&loaded){
				active=true;
				switch(direction){
					case'next':
						prev=current;
						next=current+1;
						next=total===next?0:next;
						position=width*2;
						direction=-width*2;
						current=next;
					break;
					case'prev':
						prev=current;
						next=current-1;
						next=next===-1?total-1:next;
						position=0;
						direction=0;
						current=next;
					break;
					case'pagination':
						next=parseInt(clicked,10);
						prev=jQuery('.'+option.paginationClass+' li.current a',elem).attr('href').match('[^#/]+$');
						if(next>prev){position=width*2;direction=-width*2;}else{position=0;direction=0;}
						current=next;
					break;}

					if(effect==='alpha'){
						option.animationStart();
						if(option.crossfade){
							control.children(':eq('+next+')',elem).css({zIndex:10}).fadeIn(option.fadeSpeed,function(){
								if(option.autoHeight){
									control.animate({height:control.children(':eq('+next+')',elem).outerHeight()},
										option.autoHeightSpeed,
										function(){
											control.children(':eq('+prev+')',elem).css({display:'none',zIndex:0});
											control.children(':eq('+next+')',elem).css({zIndex:0});
											option.animationComplete(next+1);active=false;
										}
									);
								}else{
									
									control.children(':eq('+prev+')',elem).css({display:'none',zIndex:0});
									control.children(':eq('+next+')',elem).css({zIndex:0});
									option.animationComplete(next+1);active=false;
								}
							});
						}else{
							
							control.children(':eq('+prev+')',elem).fadeOut(option.fadeSpeed,function(){
								if(option.autoHeight){
									control.animate({height:control.children(':eq('+next+')',elem).outerHeight()},option.autoHeightSpeed,function(){
										control.children(':eq('+next+')',elem).fadeIn(option.fadeSpeed);
									});
								}else{
									control.children(':eq('+next+')',elem).fadeIn(option.fadeSpeed,function(){
										if(jQuery.browser.msie){jQuery(this).get(0).style.removeAttribute('filter');}
									});
								}
								option.animationComplete(next+1);active=false;
							});
						}
					}else if(effect==='dezoom'){
						option.animationStart();
						active = false;
						control.children(':eq('+prev+')',elem).css({display:'none',zIndex:0});
						control.children(':eq('+next+')',elem).css({zIndex:0});
						control.children(':eq('+current+')',elem).css({zIndex:10,display:'block'});
						animate_dezoom();
					}else if(effect==='droite'){
						control.children(':eq('+next+')').css({left:position,display:'block'});
						if(option.autoHeight){
							option.animationStart();
							control.animate({left:direction,height:control.children(':eq('+next+')').outerHeight()},
								option.slideSpeed,
								function(){
									control.css({left:-width});
									control.children(':eq('+next+')').css({left:width,zIndex:5});
									control.children(':eq('+prev+')').css({left:width,display:'none',zIndex:0});
									option.animationComplete(next+1);active=false;
								}
							);
						}else{
							option.animationStart();
							control.animate({left:direction},
								option.slideSpeed,
								function(){
									control.css({left:-width});
									control.children(':eq('+next+')').css({left:width,zIndex:5});
									control.children(':eq('+prev+')').css({left:width,display:'none',zIndex:0});
									option.animationComplete(next+1);active=false;
								}
							);
						}
					}else{
						option.animationStart();
						control.children(':eq('+next+')').css({left:position,display:'block'});
						setTimeout(function(){
							control.children(':eq('+next+')').css({left:width,zIndex:5});
							control.children(':eq('+prev+')').css({left:width,display:'none',zIndex:0});
							option.animationComplete(next+1);active=false;
						},option.slideSpeed);
					}
					if(option.pagination){
						jQuery('.'+option.paginationClass+' li.current',elem).removeClass('current');
						jQuery('.'+option.paginationClass+' li:eq('+next+')',elem).addClass('current');
					}
				}
			};
		});
	};
	jQuery.fn.slides.option={
		preload:false,
		preloadImage:'/img/loading.gif',
		container:'slides_container',
		generateNextPrev:true,
		next:'next',
		prev:'prev',
		pause_button:'pause_button',
		pagination:true,
		generatePagination:true,
		afficher_button:true,
		paginationClass:'pagination',
		fadeSpeed:350,
		slideSpeed:350,
		start:1,
		effect:'slide',
		crossfade:true,
		randomize:false,
		play:0,
		pause:0,
		hoverPause:false,
		autoHeight:false,
		autoHeightSpeed:350,
		bigTarget:false,
		deZoom:true,
		deZoomInterval:0,
		animationStart:function(){},
		animationComplete:function(){}
	};
	jQuery.fn.randomize=function(callback){
		function randomizeOrder(){return(Math.round(Math.random())-0.5);}
		return(jQuery(this).each(function(){
			var $this=jQuery(this);
			
			var $children=$this.children();
			var childCount=$children.length;
			
			if(childCount>1){
				$children.hide();
				var indices=[];
				for(i=0;i<childCount;i++){indices[indices.length]=i;}
				indices=indices.sort(randomizeOrder);
				jQuery.each(indices,function(j,k){
					var $child=$children.eq(k);
					var $clone=$child.clone(true);
					$clone.show().appendTo($this);
					if(callback!==undefined){callback($child,$clone);}
					$child.remove();
				});
			}
		}));
	};
})
(jQuery);



