;(function( $ ){
		// redim
		function resizeImg(resizeMod,hThis,wThis,hMax,wMax,hMin,wMin) {
			var newW,newH;
			var tab = new Array; 

			if (resizeMod == 1) { // Rétrécissement
				if ((hThis >= hMax) || (wThis >= wMax)) {
					if ((hThis >= hMax) && (wThis >= wMax)) {
						if (hThis > wThis) {
							newH = hMax;
							newW = parseInt((wThis * newH) / hThis, 10);
						} else {
							newW = wMax;
							newH = parseInt((hThis * newW) / wThis, 10);
						}
					} else if ((hThis >= hMax) && (wThis <= wMax)) {
						newH = hMax;
						newW = parseInt((wThis * newH) / hThis, 10);
					} else if ((hThis <= hMax) && (wThis >= wMax)) {
						newW = wMax;
						newH = parseInt((hThis * newW) / wThis, 10);
					}
					tab[0] = newH;
					tab[1] = newW;
					return tab;
				} else {
					tab[0] = hThis;
					tab[1] = wThis;
					return tab;
				}
			} else if (resizeMod == 2) { // Aggrandissement
				if ((hThis <= hMin) || (wThis <= wMin)) {
					if ((hThis <= hMin) && (wThis <= wMin)) {
						if (hThis < wThis) {
							newH = hMin;
							newW = parseInt((wThis * newH) / hThis, 10);
						} else {
							newW = wMin;
							newH = parseInt((hThis * newW) / wThis, 10);
						}
					} else if ((hThis <= hMin) && (wThis >= wMin)) {
						newH = hMin;
						newW = parseInt((wThis * newH) / hThis, 10);
					} else if ((hThis >= hMin) && (wThis <= wMin)) {
						newW = wMin;
						newH = parseInt((hThis * newW) / wThis, 10);
					}
					tab[0] = newH;
					tab[1] = newW;
					return tab;
				} else {
					tab[0] = hThis;
					tab[1] = wThis;
					return tab;	
				}
			} else if (resizeMod == 3) { // Rétrecissement et Aggrandissement
				if ((hThis >= hMax) || (wThis >= wMax)) {
					if ((hThis >= hMax) && (wThis >= wMax)) {
						if (hThis > wThis) {
							newH = hMax;
							newW = parseInt((wThis * newH) / hThis, 10);
						} else {
							newW = wMax;
							newH = parseInt((hThis * newW) / wThis, 10);
						}
					} else if ((hThis >= hMax) && (wThis <= wMax)) {
						newH = hMax;
						newW = parseInt((wThis * newH) / hThis, 10);
					} else if ((hThis <= hMax) && (wThis >= wMax)) {
						newW = wMax;
						newH = parseInt((hThis * newW) / wThis, 10);
					}
					tab[0] = newH;
					tab[1] = newW;
					return tab;
				} else if ((hThis <= hMin) || (wThis <= wMin)) {
					if ((hThis <= hMin) && (wThis <= wMin)) {
						if (hThis < wThis) {
							newH = hMin;
							newW = parseInt((wThis * newH) / hThis, 10);
						} else {
							newW = wMin;
							newH = parseInt((hThis * newW) / wThis, 10);
						}
					} else if ((hThis <= hMin) && (wThis >= wMin)) {
						newH = hMin;
						newW = parseInt((wThis * newH) / hThis, 10);
					} else if ((hThis >= hMin) && (wThis <= wMin)) {
						newW = wMin;
						newH = parseInt((hThis * newW) / wThis, 10);
					}
					tab[0] = newH;
					tab[1] = newW;
					return tab;
				}	
			}			
		}
	
	//preload
	var $preload = $.preload = function( original, settings ){
		
		if( original.split )//selector
			original = $(original);

		settings = $.extend( {}, $preload.defaults, settings );
		
		var sources = $.map( original, function( source ){
			if( !source ) 
				return;//skip
			if( source.split )//URL Mode
				return settings.base + source + settings.ext;
			var url = source.src || source.href;//save the original source
			if( typeof settings.placeholder == 'string' && source.src )//Placeholder Mode, if it's an image, set it.
				source.src = settings.placeholder;
			if( url && settings.find )//Rollover mode
				url = url.replace( settings.find, settings.replace );
			return url || null;//skip if empty string
		});
		
		var data = {
			loaded:0, //how many were loaded successfully
			failed:0, //how many urls failed
			next:0, //which one's the next image to load (index)
			done:0, //how many urls were tried
			//found:false,//whether the last one was successful
			total:sources.length //how many images are being preloaded overall
		};

		if( !data.total ) // Pas de pre-chargement
			return finish();
		
		var imgs = '<img/>',//ensure one
			thres = settings.threshold;//save a copy
		
		while( --thres > 0 )//it could be oddly negative
			imgs += '<img/>';
			imgs = $(imgs).load(handler).error(handler).bind('abort',handler).each(fetch);
		
		function handler( e ){
			data.found = e.type == 'load';
			data.image = this.src;

				//alert(settings.resizeMode);
			var orig = data.original = original[this.index];
			data[data.found?'loaded':'failed']++;
			data.done++;
			
			if(settings.placeholder && orig.src ){ // On interverti le placeHolder et l'image réelle // Début du pré-chargement
				orig.src = data.found ? data.image : settings.notFound || orig.src;
			}
			if( settings.onComplete ){// Après le pré-chargement
				data.mode = settings.resizeMode;
				data.hMax = settings.heightMax;
				data.wMax = settings.widthMax;
				data.hMin = settings.heightMin;
				data.wMin = settings.widthMin;				
				data.h = orig.height;
				data.w = orig.width;
				data.src = orig.src;
				data.obj  = orig;
				
				settings.onComplete(data,this);
			}
			if ( data.done < data.total ) {//Durant le pré-chargement
				fetch(0,this);
			} else {//we are finished
				if(imgs.unbind )//sometimes IE gets here before finishing line 84
					imgs.unbind('load').unbind('error').unbind('abort');//cleanup
				imgs = null;
				finish();
			}
		};
		function fetch( i, img, retry ){
			if( $.browser.msie && data.next && data.next % $preload.gap == 0 && !retry ){//IE problem, can't preload more than 15
				setTimeout(function(){ fetch( i, img, true ); }, 0);
				return false;
			}
			if( data.next == data.total ) return false; // On se place à la fin du pré-chargement
			img.index = data.next; //save it, we'll need it.
			img.src = sources[data.next++];
	
			if( settings.onRequest ){
				data.image = img.src;
				data.original = original[data.next-1];
				settings.onRequest( data );
			}
		};
		function finish(){
			if( settings.onFinish )
				settings.onFinish( data );
		};
	};
	// each time we load this amount and it's IE, we must rest for a while, make it lower if you get stack overflow.
	$preload.gap = 14; 
	$preload.defaults = {
		threshold:2,//how many images to load simultaneously
		base:'',// URL mode: a base url can be specified, it is prepended to all string urls
		ext:'',// URL mode:same as base, but it's appended after the original url.
		replace:'',// Rollover mode: replacement (can be left empty)
		resizeMode:1, // Mode de redimentionnement
		widthMax:110, // Largeur Maximale
		heightMax:110, // Hauteur Maximale
		widthMin:110, // Largeur Minimale
		heightMin:110, // Hauteur Minimale
		/*
			find:null,//Rollover mode: a string or regex for the replacement
			notFound:''//Placeholder Mode: Optional url of an image to use when the original wasn't found
			placeholder:'',//Placeholder Mode: url of an image to set while loading
			onRequest:function( data ){ ... },//callback called every time a new url is requested
		*/
		onComplete:function(data,cible){ 
				var hThis = data.h;
				var wThis = data.w;
				var hMin = data.hMin;
				var wMin = data.wMin;
				var hMax = data.hMax;
				var wMax = data.wMax;
				var mode = data.mode;
				var recupSize = resizeImg(mode,hThis,wThis,hMax,wMax,hMin,wMin);
				// on récupère les attributs avant de les changer
				var h8 = recupSize[0];
				var wii = recupSize[1];
				// on retaille les images avant l'affichage
				data.obj.height = h8;
				data.obj.width = wii;
		}
	};
	$.fn.preload = function( settings ){
		$preload( this, settings );
		return this;
	};
})( jQuery );

(function($){
     $.fn.extend({
          center: function (options) {
               var options =  $.extend({ // Default values
                    inside:window, // element, center into window
                    transition: 0, // millisecond, transition time
                    minX:0, // pixel, minimum left element value
                    minY:0, // pixel, minimum top element value
                    withScrolling:true, // booleen, take care of the scrollbar (scrollTop)
                    vertical:true, // booleen, center vertical
                    horizontal:true, // booleen, center horizontal
                    height:$(this).outerHeight(),
                    width:$(this).outerWidth(),
                    fade : 0,
                    zIndex: -1
               }, options);
               return this.each(function() {
                    var props = {position:'absolute'};
                    if (options.vertical) {
                         var top = ($(options.inside).height() - options.height) / 2;
                         if (options.withScrolling) top += $(options.inside).scrollTop() || 0;
                         top = (top > options.minY ? top : options.minY);
                         $.extend(props, {top: top+'px'});
                    }
                    if (options.horizontal) {
                          var left = ($(options.inside).width() - options.width) / 2;
                          if (options.withScrolling) left += $(options.inside).scrollLeft() || 0;
                          left = (left > options.minX ? left : options.minX);
                          $.extend(props, {left: left+'px'});
                    }
                    if (options.transition > 0) $(this).animate(props, options.transition);
                    else $(this).css(props);
                    if (options.zIndex != -1) $(this).css("zIndex", options.zIndex);
                    if (options.fade > 0) $(this).fadeIn(options.fade);
                    return $(this);
               });
          }
     });
})(jQuery);
      
