	Validation.add('validar-duracion', null, 
		function (v,e) {
			
			var duracion = $('duracion').value;
			
			if(Validation.get('IsEmpty').test(duracion) || duracion==0) {
			
				$('messages').update('<div class="info"><p>Tienes que especificar más el tipo de servicio.</p></div>');
			
				return false;	
			}

			return true;
		}
	);

	
	Validation.add('validar-fecha-reserva', null, function (v,e) {
		if(Validation.get('IsEmpty').test(v)) return true;
			
				var regex = new RegExp ('^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/([12][0-9]{3})$','gi');
				
				var f = $('_fecha').value;
				var h = $('horas').value;
				
				/*
				if(!regex.test(f)) {
					this.error='El formato de la fecha no es correcto. Utiliza el formato siguiente dd/mm/aaaa.';
					return false;
				}
				*/
				
			 	var sd = f.split('/');
			 	var sh = h.split(':');
			 	
				// year, month, day, hours, minutes, seconds, milliseconds

				var d = new Date(sd[2],sd[1]-1, sd[0], sh[0], sh[1], 0, 0);
				var n = new Date();

								
				/*
				switch (n.getDay()) {
					case 5:
						j = (n.getHours() >= 17 && n.getMinutes()>0 )?5:2;
						break;
					case 6:
						j = 5;
					case 7:
					case 0:
						j = 4;
						break;
					default:
						j = (n.getHours() >= 17 && n.getMinutes()>0)?3:2;
				}
								
				
				n.setDate(n.getDate()+j);	
				n.setHours(0);
				n.setMinutes(0);

				*/

				if (d.getDay() == n.getDay() && d.getMonth() == n.getMonth() && d.getYear() == n.getYear() ) {
					//n.setSeconds(Math.round ( ((n.getHours()+4)*3600 + n.getMinutes()*60)  / 1800) * 1800);
					//console.log(  ((n.getHours()+4) * 3600  + n.getMinutes()*60) / 1800) * 1800));
					//n.setTime(n.getTime()+(Math.round(14400 / 1800* 1800) *1000));
				
					n.setTime ( Math.round ( (n.getTime() +  4 * 3600000) / 1800000  ) * 1800000 );
				}
				
				n.setMinutes( Math.round(n.getMinutes() / 30 ) * 30); 
				n.setSeconds(0);
				n.setMilliseconds(0);


				if (n.getHours() < 7) {
					n.setHours(7);
					n.setMinutes(0);
				} 
				
				/*
				console.log(n);
				console.log(d);
				d.setMinutes(n.getMinutes());
				d.setSeconds(n.getSeconds());
				d.setMilliseconds(n.getMilliseconds());
				*/
				
				var n45 = new Date();
				n45.setDate(n.getDate()+45);

				$('messages').update('');
				
				if (d<n) {
			
					$('_fecha').value = Eyou.Number.paddzero(n.getDate(),2) + '/' + Eyou.Number.paddzero((n.getMonth()+1),2) + '/' + n.getFullYear();
					$('horas').value = Eyou.Number.paddzero(n.getHours(),2) + ':' + Eyou.Number.paddzero(n.getMinutes(),2);

					Eyou.Search.date.setValue(n);
					
					$('messages').update('<div class="info"><strong>El plazo mínimo para realizar una reserva es de unas 4 horas desde el momento actual. Hemos seleccionado por ti la fecha/hora más próxima posible. Si prefieres otra fecha/hora puedes seleccionarla tú mismo.</strong></div>');
					
					return true;
					
				}

				

	/*			
				Has seleccionado una fecha u hora imposible de reservar.
Hemos seleccionado por ti la fecha/hora más próxima disponible.
Recuerda que las reservas se realizan con 2 días de antelación si son aún no son las 5 de la tarde, y con 3 días a partir de dicha hora.
*/
				
				if (d>n45) {
					$('messages').update('<div class="info"><p><strong>Sólo es posible reservar con 45 días de antelación.</strong></p><p>Por favor, elige otra fecha.</p></div>');
					this.error='';
					return false;
				}
				
				/*
				$('message').innerHTML = '';
				$('message').className = '';
				*/
				
				return true;


		}
	);

	Eyou.Search	= {
		setValue : function(elt, value) {
			elt = $(elt);
			if (!elt) return;
			
			switch (elt.type.toLowerCase()) {
				case 'select-one':
					if (elt.selectedIndex>-1 && elt.options[elt.selectedIndex].value == value) return false;
					for (var i=0; i < elt.options.length; i++) {
						var opt = elt.options[i];
						if (opt.value==value) {
							opt.selected=true;
							return true;
						}
					}
					return false;
					break;		
				case 'text':
				case 'hidden':
				case 'textarea':
				case 'password':
					if (elt.value==value) return false;
					elt.value=value;
					break;
			}
			return true;
			
		},
		getValue : function(elt) {
			elt = $(elt);
			//if (!elt) return;
			
			switch (elt.type.toLowerCase()) {
				case 'select-one':
					return  elt.options[elt.selectedIndex].value;
					break;		
				case 'text':
				case 'hidden':
				case 'password':
					return elt.value;
					break;
											
			}
		},
		
		load : function () {
			var _self = Eyou.Search;

			if (!cookieEnabled()) {
				return false;
			}
			
			_self.jar = new CookieJar({  
				expires:3600,   // seconds   
				path: '/'  
			});
			
			//_self.fillSelect{target:'centro',href:'/es/json/getcenters/p/267'});
			//_self.fillSelect({target:'ciudad',href:'/es/json/getcities/p/267'});
			_self.fillSelect({target:'_s0',href:'/es/json/getservices/s/1'});
			
			var n = new Date();
			var j;
	
			switch (n.getDay()) {
					case 5:
						j = (n.getHours() >= 17 && n.getMinutes()>0 )?5:2;
						break;
					case 6:
						j = 5;
					case 7:
					case 0:
						j = 4;
						break;
					default:
						j = (n.getHours() >= 17 && n.getMinutes()>0)?3:2;
			}			
	
			n.setDate(n.getDate()+j);	
			
			_self.date = new DatePicker($('_fecha'),$('fecha'), n);
			_self.validation = new Validation('searchfrm',{stopOnFirst:true,immediate : true,onSubmit:false});
			
			var _searchfrm =  Form.getElements('searchfrm');
			var _o = _self.jar.get('searchfrm');

			overlay = Overlay.getInstance();
			overlay.show();

			Element.observe($('_fecha'),'focus', function() { _self.validation.validate(); }, false);
			
			if (_o) {
				_searchfrm.each(function(e) {
					_self.setValue(e, _o[e.id]);
				});
				setTimeout("overlay.hide()",3000);
			} else {
				setTimeout("overlay.hide()",2000);
			}
			
		},
	
		submit: function () {
			var _self = Eyou.Search;
			
			if ($('duracion').value=='') {
				$('messages').update ('<div class="info">Tienes que especificar más el tipo de servicio.</div>');
				return;	
			} else {
				$('messages').update('');
			}
			
			
			if (_self.validation.validate()) {
				
				var elts = Form.serialize('searchfrm',true)
				
				_self.jar.put('searchfrm',elts);    
				
				var url = '/es/horarios/buscar';
 				var regex = new RegExp('^_');
				
				for (var i in elts) {
					var v = elts[i];
					if (regex.test(i) || v=='') continue;
					url+= '/' + i;
					url+= '/' + v;
				}

				
				//url+='/orderby/pve/sort/asc';
				window.location = url;
				
			}
			
		},
		
		getZonas: function() {
			var _self = Eyou.Search;
			
		 	var p = _self.getValue('provincia');
			var c = _self.getValue('ciudad');
			
			_self.fillSelect({'target':'zona','href':'/es/json/getareas/p/'+p+'/c/'+c});
		},
		
		getCenters: function(pelt) {
			var _self = Eyou.Search;
			
		 	var p = _self.getValue('provincia');
			var c = _self.getValue('ciudad');
			var z = _self.getValue('zona');
			var s = _self.getValue('servicio');
			
			//_self.fillSelect({'target':'centro','href':'/es/json/getcenters/p/'+p+'/c/'+c+'/z/'+z+'/s/'+s});
		},
		
		getServiceInfo: function(evt) {
		
				var info = $('info');
	   			info.innerHTML = unescape($('_nota').value);
	   			Effect.Appear(info, { duration: 0.3});
	   			Event.stop(evt);
		},
		
		fillDuration: function(elt) {


			var _self = Eyou.Search;
			var _value = eval('('+_self.getValue(elt)+')');
			var _info = $('info');
			Effect.Fade(_info, { duration: 0.3} ); 

			if ($('quees')) {
				Element.remove('quees');
			}
					
			$('duracion').value = _value.duracion;
			$('servicio').value = _value.id;
			$('_nota').value = _value.descripcion;
			
			if (_value.descripcion) {
				Element.insert(elt,{after: '<a href="#" id="quees" title="¿Qué es?"><span>+ info</span></a>' });
				Event.observe($('quees'),'click', _self.getServiceInfo.bind(_self));
			}
			
			//_self.getCenters();			
		},
		
		fillSelect: function (options) {
			var _self = Eyou.Search;
			
			if ($('quees')) {
				Element.remove('quees');
			}
			
			if (!options) return false;
			
 			var elt = $(options.target);
 			if (!elt) return false;
			 			
			var depends = options.depends;
 			if (depends && depends.constructor==Array) {
				for (var i=0;i<depends.length;i++) {
					$(depends[i]).options.length=0;
 					$(depends[i]).hide();
 				}
 			}
 			
 			var parent = options.parent;
 			
 			if (parent)  {
 				 var value = parent.options[parent.options.selectedIndex].value;				 
 				 var json = eval('('+value+')');
 				 
 			} else {
 				json = {id: ''};
 			}
 			
 			var callback = options.callback;
 			
			
			
			new Ajax.Request(options.href+json.id,
	  			{
	    			method:'get',
	   				onSuccess: function(transport){
	   					
	   					var json = transport.responseText.evalJSON();
						
	   					if(json.message) {
	   						$('messages').update('<div class"'+json.classname+'">'+json.message+'</div>');
	   						return json;
	   					} else {
			 				$('messages').update('');
	   					}
	     			
			 			if (parent) {
	
			 				if (typeof callback =='function') {
			 					callback(parent);
				 			}
			 				/*	
			 				if (parent.options.selectedIndex==0) {
			 					elt.hide();
	
			 					value = value.split('/');
	
			 					$('duracion').value='';
			 					$('servicio').value='';
			 					return;
			 				}
			 				
			 				options.href+=v[0];
			 				*/
			 				//_self.getCenters();
			
			 			}
	   					
	   					
	   					if (json.length>0) {
	   						
	   						//elt.show();
	   						Effect.Appear(elt, { duration: 0.3});
	   						elt.options.length = 0;
	   						
		   					$A(json).each ( function (a) {
			   					elt.options[elt.options.length] = new Option(a.label, '{id:'+a.id+',duracion:'+a.duracion+',nombre:"'+a.label+'",descripcion:"'+escape(a.descripcion)+'"}');
		 					});
				
	 						var _searchfrm = _self.jar.get('searchfrm');
	 						if(_self.setValue(elt, _searchfrm[elt.id])) elt.onchange();
	   					}		
					 					
	   				}.bind(this)
	  			});
 			
 		}	
	}
	
	Event.observe(window, 'load', Eyou.Search.load, false);