var Intima = (function(){
	var instantiated;
	
	function init() {

		var intima = {};

		intima.ie = jQuery('body').hasClass("ie");

/* ini: navbar configuration */
		intima.navbar = {};
		intima.navbar.timer = null;
		intima.navbar.$layer = null;
		intima.navbar.handlerIn = function(){

			var id = jQuery(this).attr("href");
			var el = jQuery(id);

			clearTimeout(intima.navbar.timer);

			intima.contents.$layers.not(id).hide();

			if ( intima.ie ) {
				el.show();
			}
			else {
				el
					.clearQueue()
					.fadeTo(300, 1);
			}
		};

		intima.navbar.handlerOut = function(){
			if ( intima.ie ) {
				intima.contents.$layers.hide();
			}
			else {
				intima.contents.$layers
					.clearQueue()
					.fadeTo(300, 0, function(){
						jQuery(this).hide();
					});
			}
		};

		intima.navbar.setEvent = function() {
			
			intima.navbar.$layer
				.bind("mouseleave", function(){
					intima.navbar.timer = setTimeout(function(){
						intima.navbar.handlerOut();
					}, 1000);
				});
			
			intima.navbar.$layer.find("a")
				.bind("mouseenter", intima.navbar.handlerIn);
		};
/* end: navbar configuration */


/* ini: logo configuration */
		intima.logo = {};
		intima.logo.$layer = null;
/* end: logo configuration */

/* ini: google maps configuration */
		intima.maps = {};
		intima.maps.map = null;
		intima.maps.locations = [];
		intima.maps.markers = [];
		intima.maps.$layer = null;
		intima.maps.$shops = null;
		intima.maps.$form = null;

		intima.maps.cpHandler = function() {
			intima.maps.printMarkers( jQuery("#cpMap").val() );
			return false;
		};
		
		intima.maps.cityHandler = function() {
			intima.maps.printMarkers( jQuery("#cityMap").val() );
			return false;
		};
		
		intima.maps.allHandler = function() {
			intima.maps.printMarkers("all");
			return false;
		};
		
		intima.maps.formHandler = function() {
			return false;
		};
		
		intima.maps.setEventForm = function(){
			intima.maps.$form.find("#findCP").bind("click", intima.maps.cpHandler);
			
			intima.maps.$form.find("#cpMap").bind("keypress", function(e){
				 var code = (e.keyCode ? e.keyCode : e.which);
				 if(code == 13) {
				 	intima.maps.$form.find("#findCP").click();
					return false;
				 }
				 
			});
			
			
			
			intima.maps.$form.find("#findCity").bind("click", intima.maps.cityHandler);
			
			intima.maps.$form.find("#cityMap").bind("keypress", function(e){
				 var code = (e.keyCode ? e.keyCode : e.which);
				 if(code == 13) {
				 	intima.maps.$form.find("#findCity").click();
					return false;
				 }
				 
			});
			
			intima.maps.$form.find("#findAll").bind("click", intima.maps.allHandler);
			
			
			intima.maps.$form.bind("submit", intima.maps.formHandler);
		};
		
		intima.maps.init = function() {
			
			try {
			
				var $shops = intima.maps.$shops;
				var locations = intima.maps.locations;
				$shops.each(function(){
					var id = jQuery(this).attr("id").split("#");
					
					locations.push({
						lat: id[0],
						lon: id[1]
					});
				});
				
				
				var latLng = new google.maps.LatLng(41.4029300, 2.1917018);
				
				var options = {
					zoom: 7,
					center: latLng,
					mapTypeId: google.maps.MapTypeId.ROADMAP,
					mapTypeControl: true,
					zoomControlOptions: {
		            	style: google.maps.ZoomControlStyle.LARGE,
		              	position: google.maps.ControlPosition.LEFT_BOTTOM
		          	},
		          	panControlOptions: {
		            	position: google.maps.ControlPosition.LEFT_BOTTOM
		         	}
				};
				
				intima.maps.map = new google.maps.Map(intima.maps.$layer[0], options);
				
				//intima.maps.printMarkers();
				
				intima.maps.setEventForm();
			}catch(e){}
		};

		intima.maps.printMarkers = function(str) {
			
			str = jQuery.trim(str.toUpperCase());
			
			if (str === "") {
				return false;
			}
			
			intima.maps.removeMarkers();
			
			jQuery.ajax({
				url:'/request/get.location.php',
				data:'where='+str,
				dataType:'xml',
				type:'post',
				success:function(xml){
					var $items = jQuery("item", xml);
					
					if ($items.length > 0) {
						$items.each(function(i) {
							
							var $this = jQuery(this);
							var lat = $this.find("lat").text();
							var lon = $this.find("lon").text();
							var texto = $this.find("address").text();
							
							var latLng = new google.maps.LatLng(lat, lon);
					
							var image = '/media/img/intima/marker.png';
							
							var marker = new google.maps.Marker({
					            position: latLng,
					            map: intima.maps.map,
					            icon: image
					        });
							intima.maps.markers.push(marker);
							
							google.maps.event.addListener(marker, "click", function(e) {
						       	var codigohtml = texto;
					        	
								var infowindow = new google.maps.InfoWindow({
							        content: codigohtml
							    });
			
								infowindow.open(intima.maps.map, marker);
					        });
							
							if (i==0) {
								intima.maps.map.panTo(new google.maps.LatLng(lat, lon));
								intima.maps.map.setZoom(10);
							}
						});
						
					}
				}
			});
			/*
			else if (str == "ALL") {
				$shops = intima.maps.$shops;
			}
			else {
				$shops = intima.maps.$shops.filter(":contains("+str+")");
			}

			intima.maps.removeMarkers();
			
			$shops.each(function(){
				
				var $this = jQuery(this);
				var html = $this.html();
				var points = $this.attr("id").split("#");
				
				var latLng = new google.maps.LatLng(points[0], points[1]);
				
				var image = '/media/img/intima/marker.png';
				
				var marker = new google.maps.Marker({
		            position: latLng,
		            map: intima.maps.map,
		            icon: image
		        });
				intima.maps.markers.push(marker);
				
				google.maps.event.addListener(marker, "click", function(e) {
			       	var codigohtml = html;
		        	
					var infowindow = new google.maps.InfoWindow({
				        content: codigohtml
				    });

					infowindow.open(intima.maps.map, marker);
		        });
			});

			if ( $shops.length > 0 ) {
				$shops.each(function() {
					var $this = jQuery(this);
					var points = $this.attr("id").split("#");
					
					if (points[0] != 0) {
						
						if (str == "ALL") {
							intima.maps.map.panTo(new google.maps.LatLng(40.4200236, -3.7058124));
							intima.maps.map.setZoom(5);
						}
						else {
							intima.maps.map.panTo(new google.maps.LatLng(points[0], points[1]));
							intima.maps.map.setZoom(13);
						}
						
						return;
					}
				});
			}
			*/
			
		};

		intima.maps.removeMarkers = function() {
			 if (intima.maps.markers) {
				for (i in intima.maps.markers) {
					intima.maps.markers[i].setMap(null);
				}
				intima.maps.markers.length = 0;
			}
		};
/* end: google maps configuration */

/* ini: logo configuration */
		intima.detail = {};
		intima.detail.timer = null;
		intima.detail.$layer = null;
		intima.detail.$slideShowItems = null;
		intima.detail.$switch = null;
		
		intima.detail.setSlideshow = function() {
			var items = intima.detail.$slideShowItems;
			var itemsTotal = intima.detail.$slideShowItems.length;
			
			var count = 1;
			var item = items.eq(0);
			var url = "";
			if (item.children("a").length > 0) {
				url = item.children("a").attr("href");	
			}

			var src = item.find("img").attr("src");

			jQuery.backstretch(src, { speed:600, url:url });
			
			
			if (itemsTotal <= 1) {
				return false;
			}
			
			setInterval(
				function(){
					var item = items.eq(count);

					var url = "";

					if (item.children("a").length > 0) {
						url = item.children("a").attr("href");	
					}

					var src= item.find("img").attr("src");

					jQuery.backstretch(src, { speed:600, url:url });

					count++;

					if (count >= itemsTotal) {
						count=0;
					}

				}, 
				6500);
			 
		};

		intima.detail.mainHandler = function() {
			clearTimeout(intima.detail.timer);
		};

		intima.detail.switchHandler = function() {
			var layer = intima.detail.$layer;
			
			clearTimeout(intima.detail.timer);
			
			if (layer.hasClass("close")) {
				layer
					.removeClass("close")
					.addClass("open")
					.animate({ right:0 });
			}
			else {
				layer
					.removeClass("open")
					.addClass("close")
					.animate({ right:layer.hasClass("litle") ? -397 : -457 });
			}
			return false;
		};

		intima.detail.setEvent = function() {
			intima.detail.$switch.bind("click", intima.detail.switchHandler);
			intima.detail.$layer.bind("mouseleave", intima.detail.mainHandler);
			intima.detail.$layer.bind("mousemove", intima.detail.mainHandler);
		};
/* end: logo configuration */


/* ini: main contents configuration */
		intima.contents = {};
		intima.contents.$layers = null;
		intima.contents.handlerIn = function() {
			clearTimeout(intima.navbar.timer);
			clearTimeout(intima.detail.timer);
		};
		intima.contents.setEvent = function() {
			intima.contents.$layers
				.bind("mouseenter", intima.contents.handlerIn)
				.bind("mouseleave", intima.navbar.handlerOut);
		};
/* end: main contents configuration */


/* ini: wrap configuration */
		intima.wrap = {};
		intima.wrap.$layer = null;
/* end: wrap configuration */
	

/* ini: footer configuration */
		intima.footer = {};
		intima.footer.$layer = null;
		intima.footer.setEvent = function(){
			intima.footer.$layer.find("#footerNews").bind("click", intima.footer.newsHandler)
		}
		intima.footer.newsHandler = function(){
			intima.navbar.$layer.find(".shop a").mouseenter();
			return false;
		}
/* end: footer configuration */

	
/* ini: forms configuration */
		intima.forms = {};
		intima.forms.newsletter = {};
		intima.forms.newsletter.$layer = null;
		intima.forms.newsletter.handler = function() {
			var emailinput = jQuery("input[name=email]");
			var info  = intima.forms.newsletter.$layer.find("p.info");
			
			emailinput.attr("disabled", true);
			
			jQuery.ajax({
				url:'/request/newsletter.php',
				type:'post',
				data:'email=' + emailinput.val(),
				dataType:'xml',
				success:function(xml){
					var error = jQuery("error", xml).text();
					
					if (error == "0") {
						info.text("Gracias por suscribirte!");
						emailinput.attr("disabled", false);
					}
					else if (error == "1") {
						info.text("A ocurido un error, inténtalo de nuevo más tarde.");
						emailinput.attr("disabled", false);
					}
					else if (error == "2") {
						info.text("El email no tiene el formato correcto.");
						emailinput.attr("disabled", false);
					}
					else {
						info.text("A ocurido un error, inténtalo de nuevo más tarde.");
						emailinput.attr("disabled", false);
					}
				},
				error:function(){
					info.text("A ocurido un error.");
					emailinput.attr("disabled", false);
				}
			});
			return false;
		};
		
		intima.forms.newsletter.setEvent = function() {
			intima.forms.newsletter.$layer.bind("submit", intima.forms.newsletter.handler);
		};
/* end: forms configuration */
	
	
/* ini: collection configuration */

		intima.colection = {};
		
	/* ini: headers collection */
		intima.colection.headers = {};
		intima.colection.headers.$layer = null;
		intima.colection.headers.handler = function() {
			var $layer = intima.colection.headers.$layer;
			var $nav = intima.colection.gallery.$nav;
			var $this = jQuery(this);
			var $ul = $this.next();
			var $select = $layer.filter(".select");
			var leftDif = parseInt($ul.find("li:first").css("left"), 10); 
			
			$layer.removeClass("select");
			$select.next().hide();
			
			$this.addClass("select");
			
			$nav.find(".prev").hide();
			$nav.find(".next").show();
			
			$ul.find("li").animate({
				left: '-=' + leftDif
			}, 100, function(){
				$ul.show();	
			});
			
			
			if ($ul.find("li").length > 12) {
				$nav.show();
			}
			else {
				$nav.hide();
			}
			
			return false;
		};
		
		intima.colection.headers.setEvent = function() {
			intima.colection.headers.$layer.bind("click", intima.colection.headers.handler);
		};
	/* end: headers collection */
		
		
	/* ini: collection gallery */
		intima.colection.gallery = {};
		intima.colection.gallery.$layer = null;
		intima.colection.gallery.$nav = null;
		
		intima.colection.gallery.navHandler = function(){
			var $nav = intima.colection.gallery.$nav;
			var $this = jQuery(this);
			var $ul = intima.colection.gallery.$layer.filter(":visible");
			var $ref = $ul.find("li:first");
			var last = $ul.find("li:last");
			var offset = $ref.offset();
			var position = $ref.position();
			var windowWidth = jQuery(window).width();
			
			if ( $this.hasClass("next") ) {
				
				$nav.find(".prev").show();
				
				if (20 + last.offset().left + last.width() >= windowWidth) {

					$ul.find("li").animate({
						left: '-=89'
					}, function() {
						
						if (20 + last.offset().left + last.width() <= windowWidth) {
							$nav.find(".next").hide();
						}
					});

				}
				
			}
			else {
				
				$nav.find(".next").show();
				
				if ( position.left < 0 ) {
					$ul.find("li").animate({
						left:'+=89'
					}, function() {
						if (position.left == -89) {
							$nav.find(".prev").hide();
						}	
					});	
				}
			}	
		};
		
		intima.colection.gallery.navSetEvent = function(){
			intima.colection.gallery.$nav.find("a").bind("click", intima.colection.gallery.navHandler);
		};
		
		intima.colection.gallery.setLayout = function() {

			var $nav = intima.colection.gallery.$nav;
			var $header = intima.colection.headers.$layer;
			var $gallery = intima.colection.gallery.$layer;
			
			intima.colection.gallery.$layer.each(function(i){
				
				var lis  = jQuery(this).find("li");
				var w    = 89;
				var h    = 87;
				var top  = 0;
				var left = 0;

				lis.each(function(o){
					
					
					if (o > 0 && (o) % 3 === 0) {
						left+=w;
						top=0;
						
					}
					
					jQuery(this).css({
						position:'absolute',
						top:top + 'px',
						left:left + 'px'
					});
					
					top+=h;	
					
				});
			});
			
			$header.eq(0).addClass("select");
			
			$gallery
				.hide()
				.eq(0)
					.show();
			
			if ($gallery.eq(0).find("li").length > 12) {
				$nav
					.show()
					.find(".prev")
						.hide();
			}
			else {
				$nav.hide();
			}
			
		};
	/* end: collection gallery */
		
/* end: collection configuration */
	

/* ini: get main objects */
		function _getMainElements() {
			intima.navbar.$layer 			= jQuery("#navbar");
			intima.wrap.$layer   			= jQuery("#wrap");
			intima.footer.$layer 			= jQuery("#footer");
			intima.footer.setEvent();
			
			
			intima.logo.$layer   			= jQuery("h1");
			intima.forms.newsletter.$layer 	= jQuery("#newsletter");
			intima.contents.$layers 		= jQuery('.mainContent');
			intima.detail.$slideShowItems 	= jQuery("#gallery li");
			
			if ( intima.detail.$slideShowItems.length == 0 ) {
				intima.detail.$slideShowItems = jQuery("#galeriaHome li");
			}
			
			intima.detail.$switch 			= jQuery('#detailswitch');
			intima.detail.$layer 			= jQuery('#detail');
			intima.colection.headers.$layer = jQuery('#detail .content > ul > li');
			intima.colection.gallery.$layer = jQuery('#detail .content ul ul');
			intima.colection.gallery.$nav 	= jQuery('#paginator');
			intima.maps.$layer 			    = jQuery('#tiendas');
			intima.maps.$shops 			    = jQuery('.tienda');
			intima.maps.$form				= jQuery("#mapForm");
		}
/* end: get main objects */

		function _get() {
			_getMainElements();
			return intima;
		}
		
		return {
			get: _get
		};
	}
	
	 return {
        getInstance :function(){
            if (!instantiated){
                instantiated = init();
            }
            return instantiated;
        }
    };
	
})();

var sys = Intima.getInstance();

jQuery("a[rel=external]").attr("target","_blank");
