function Imago(){

	function Model() {
		var IMG_FIELDS_NAMES;
		var IMAGO_ELMT = $(".block_imago .images-imago");
		var TIMER;
		var DELAY;
		var IMAGE_INDEX=0;
		var IMAGES;
		var CURRENT_IMAGO;
		

		function _extractFields(){		
			var selectors = "";
			var limit = IMG_FIELDS_NAMES.length -1;
			$.each(IMG_FIELDS_NAMES, function(i, val){
				var field = val.replace(/_/, "-");
				// var selector = ".field-"+field+", ."+field+"-fid";
				var selector = ".field-"+field+", ."+field+"-fid"+", .views-field-"+field+"-fid";
				selectors += i < limit ? selector+", " : selector;
			});
			//$.log("m // selectors = "+selectors);

			var title_html = '<div class="titre-imago"><div class="fond"></div><div class="inner"><p>titre</p></div></div>';
			
			$(selectors).addClass("imago_selectors child_imago").each(function(i, e){
				$(e).parents(".views-row, .node_content").addClass("prt_imago").attr('imago_num', i);
				$(e).addClass("child_imago_"+i).appendTo(IMAGO_ELMT).find("img").parent().append(title_html);
				if(i>0)
					$(e).hide();
			});
			//

			$(".child_imago img").each(function(i, e){
				var txt = $(e).attr("title");
				if(txt){
					$(e).parent().find("p:first").empty().text(txt);
				}else{
					$(e).parent().children(".titre-imago").remove();
				}
			});
			
			
			//v.fade($(".child_imago_0"), "in", 500);
			$(".child_imago_0").show();
			//
		};
		//extractFields
	
		
		function _showImago(field){
			clearTimeout(DELAY);
			if(field != CURRENT_IMAGO){
				CURRENT_IMAGO = field;
				if(field != ".child_imago_0" &&field){
					v.fade($(".child_imago_0"), "out", 500);
				
				}
				clearInterval(TIMER);
				
				v.fade($(field), "in", 500);
				// $.log("m // _showImago :: field = "+field);
				if(!$(field).hasClass("child_imago_0")){
					v.fade($(".child_imago_0"), "out", 400);
				}

				var items = $(field).children().children();
				IMAGE_INDEX = 0;
				if(items.length > 1){
					_animeImago(items);
				}else{
					clearInterval(TIMER);
				}
			}
		};
		// showImago
		
		function _hideImago(field){
			if(field != ".child_imago_0" &&field){
				v.fade($(field), "out", 500);
				DELAY = setTimeout('imago.getMVC("m").showImago(".child_imago_0")', 300);
				//_showImago(".child_imago_0");
			}
			//DELAY = setTimeout('imago.getMVC("v").fade($(".child_imago_0"), "in", 500)', 300);
			//clearInterval(TIMER);
		};
		// hideImago
		
		function _animeImago(items){
			items.hide();
			IMAGES = items;
			TIMER = setInterval('imago.getMVC("m").nextImage()', 2000);
			_nextImage();
		};
		// anime_imago
		
		function _nextImage(){
			var imgToShow = IMAGES[IMAGE_INDEX];
			// $.log("m // _nextImage :: IMAGE_INDEX = "+IMAGE_INDEX);
			// $.log("m // _nextImage :: imgToShow = "+imgToShow);
			
			v.fade($(imgToShow), 'in', 400);
			v.fade($(IMAGES[IMAGE_INDEX != 0 ? IMAGE_INDEX-1 : IMAGES.length-1]), "out", 400);
			IMAGE_INDEX = IMAGE_INDEX == IMAGES.length-1 ? 0 : IMAGE_INDEX+1;
		};
		// _nextImage

		if (typeof Model.initialized == "undefined"){
			//
			Model.prototype.init = function(){
				$.log("imago :: m // init");
				var settings = _imago_get_settings();
				$.log('settings',settings);
				IMG_FIELDS_NAMES = settings.img_fields;
				//
				_extractFields();
				c.loadEvents();
				//_showImago(".child_imago_0");
			};
			// init
			
			Model.prototype.windowLoad = function(){
				_showImago(".child_imago_0");
			};
			// windowLoad()
			
			Model.prototype.checkOver = function(e, hover){
				//$.log("m // checkOvere :: m = "+m+" / hover = "+hover);
				var field = ".child_imago_"+e.attr("imago_num");
				$.log("m // checkOvere :: field = "+field);
				if(hover){
					_showImago(field);
				}else{
					_hideImago(field);
				}
			};
			//
			
			Model.prototype.nextImage = function(){
				_nextImage();
			};
			
			Model.prototype.showImago = function(field){
				_showImago(field);
			};
			
			
			Model.initialized = true;
			//
		}
	};


	function View() {
		
		if (typeof View.initialized == "undefined"){
			
			View.prototype.fade = function(e, s, t){
				//_t("v // fade :: e = "+e+", s = "+s+", t = "+t);
				var s = s || "out";
				var t = t || 500;
				switch(s){
					case "in":
					$(e).fadeIn(t);
					break;
					case "out":
					$(e).fadeOut(t);
					break;
				}
			}
			// fade
			
			View.initialized = true;
		};
	};
	
	
	function Controler(){
		if (typeof Controler.initialized == "undefined"){
			//
			Controler.prototype.loadEvents = function(){
				$(".prt_imago").hover(function() {
						m.checkOver($(this), true);
					}, function() {
						m.checkOver($(this), false);
					});
					
			}
			// loadEvents
			
			//
			Controler.initialized = true;
		}
	};

	var m = new Model();
	var v = new View();
	var c = new Controler();
	//
	
	if (typeof Imago.initialized == "undefined"){

		Imago.prototype.getMVC = function(mvc){
			switch(mvc){
				case "m":
					return m;
					break;
				case "v":
					return v;
					break;
				case "c":
					return c;
					break;
			}
		}


		$(window).load(function(){
			m.windowLoad();
		});
		
		Imago.initialized = true;
	}
	
	m.init();
};

