ModalSearch = 
{
	//Valida que se tengan las variables necesarias para ejecutar
	check:function()
	{
		var ready = true;
		var requiredVariables =
		[
			'Prototype',
			'Modalbox',
			'dictionary_url_modalbox_search',
			'dictionary_url_poi',
			'dictionary_amazon_photo_70x70',
			'dictionary_search',
			'dictionary_amazon_base_domain',
			'dictionary_close',
			'dictionary_edit_search',
			'dictionary_modalseach_results_title',
			'dictionary_modalseach_results_no_results',
			'dictionary_modalseach_results_no_more_results',
			'dictionary_modalseach_results_next_page',
			'dictionary_modalseach_results_prev_page',
			'dictionary_modalseach_results_poi_link_alt',
			'dictionary_modalseach_results_poi_in_cat',
			'dictionary_modalseach_search_error',
			'dictionary_modalseach_results_default_pic'
		];
		
		requiredVariables.each(function(variable){
			try{ eval(variable); }
			catch(ex){ready = false; if(console && console.log){console.log(ex);}}
		});
		
		return ready;
	}
	
	//Asigna event listeners para todos los elementos proporcionados, en el evento proporcionado
	//Elements = array de elementos a observar
	//Events = eventos a observar
	//Callbacks = funciones a llamar
	,massObserver:function(elements, events, callbacks)
	{
		try{
		if(elements.length == events.length && events.length == callbacks.length)
		{
			for(var x=0; x<elements.length; x++)
			{	Event.observe(elements[x],events[x],callbacks[x]);	}
		}
		}catch(ex){if(console && console.log) console.log(ex);}
	}
	
	,poi:function(keywords,callback_string,callback,search_page)
	{
		if(this.check() && !keywords.blank())
		{
			if(typeof search_page == "undefined")
			{	search_page = 1;	}
			
			if(document.location.host == "localhost")
			{	target_url = "/minube/"+dictionary_url_modalbox_search;	}
			else
			{	target_url = "/"+dictionary_url_modalbox_search;	}
			
			new Ajax.Request
			(
				target_url,
				{
					method:"get"
					,parameters:
					{
						search:keywords,
						page:search_page
					}
					,onLoading:function()
					{
						/*
						var pars = new Object();
						pars['title']='Rincones relacionados con '+keywords;
						pars['closeValue']="cerrar [&times;]";
						if($('MB_frame') != null)	pars['height']=$('MB_content').getHeight()+$('MB_header').getHeight();
						else								pars['height']=Modalbox._options.height;	//Default value, for autoresize
						
						//Modalbox.show("",{title:'Rincones relacionados con "'+keywords+'"', closeValue:"cerrar [&times;]"});
						Modalbox.show("",pars);
						*/
					}
					,onFailure:function(response)
					{
						Modalbox.show(new Element('span').update(dictionary_modalseach_search_error));
					}
					,onSuccess:function(response)
					{
						try{
						//var random = String(Math.random()).replace("0.","");
						var random = "";
						response.responseJSON = eval(response.responseText);
						var events = [];
						var elements= [];
						var callbacks= [];
						
						results = response.responseJSON;
						var results_container = new Element('div');
						
						//Search Again
						//results_container.insert(new Element('a',{'id':random+'_search_again'}).update(dictionary_edit_search));
						elements.push(random+"_search_again");
						events.push('click');
						callbacks.push(function(keywords,callback_string,callback,random){
							$(random+"_search_again").remove();
							//Actualizando el innerHTML. Si queremos reemplazar el <span> completo, podemos hacer un .insert{after:elemento} seguido de un .remove
							$('modalsearch_keywords').update
							(
								new Element('form',{'id':'modalsearch_search_again_form','class':'MS_searchForm'}).update
								(
									'<input class="MS_searchFormInput" type="text" value="'+keywords.replace('"','&quot;','g')+'" id="modalsearch_search_again_keywords"/>'+
									'<input class="MS_searchFormButton" type="submit" id="modalsearch_search_again_submit" value="'+dictionary_search+'"/>'
								)
							);
							function repeat_search(e,str,callback,rnd){e.stop();ModalSearch.poi($('modalsearch_search_again_keywords').value,str,callback);}
							Event.observe('modalsearch_search_again_form','submit',repeat_search.bindAsEventListener(ModalSearch,callback_string,callback));
						}.bind(this,keywords,callback_string,callback,random));
						
						//Prev Page
						if(search_page > 1)
						{
							results_container.insert('<div id="'+random+'_link_prev_page" class="MS_linkPrev">'+dictionary_modalseach_results_prev_page+'</div>');
							elements.push(random+"_link_prev_page");
							events.push('click');
							callbacks.push(ModalSearch.poi.bind(ModalSearch,keywords,callback_string,callback,search_page-1));
						}
						
						//Results
						if(results.length > 0)
						{
							results.each(function(result){
								var link_id = random+'_result_link_'+result.Poi.id;
								var html = '<div class="MS_result">';
								html += '<div class="MS_resultPic">';
								if(typeof result.Picture != "undefined")
								{html += '<img src="http://'+dictionary_amazon_photo_70x70+dictionary_amazon_base_domain+'/'+result.Picture.hashcode+'"/>';}
								else
								{html += '<img src="'+dictionary_modalseach_results_default_pic+'"/>';}
								html += '</div>';
								html += '<div class="MS_resultData">';
								html += '<a class="MS_resultLink" target="_blank" href="/'+dictionary_url_poi+'/'+result.Poi.id+'" title="'+dictionary_modalseach_results_poi_link_alt+'">'+result.Poi.name+'</a>'+"<br/>";
								html += '<span class="MS_resultDescription">' + result.Subcategory.name + dictionary_modalseach_results_poi_in_cat + result.City.name + "</span><br/>";
								if(typeof callback_string == "string" && typeof callback == "function")
								{	html += '<a id="'+link_id+'" class="MS_resultCallback" >'+callback_string+'</a>';	}
								html += "</div>";
								html += "</div>";
								html += "</div>";
								results_container.insert(html);
								elements.push(link_id);
								events.push('click');
								callbacks.push(callback.bind(this,result));
							});
							
							//Next page
							if(results.length >= 5)	//If we didn't get at least 5 results, then this is the last page.
							{
								results_container.insert('<div id="'+random+'_link_next_page" class="MS_linkNext">'+dictionary_modalseach_results_next_page+'</div>');
								elements.push(random+"_link_next_page");
								events.push('click');
								callbacks.push(ModalSearch.poi.bind(ModalSearch,keywords,callback_string,callback,search_page+1));
							}
						}
						else if(search_page > 1)
						{	results_container.insert(dictionary_modalseach_results_no_more_results+'<br/>');	}
						else
						{	results_container.insert(dictionary_modalseach_results_no_results+'<br/>');	}
						
						var modal_title =	'<b>'+dictionary_modalseach_results_title+'</b>';
						modal_title +=		' <span id="modalsearch_keywords">'+keywords+'</span>';
						modal_title +=		' <a id="'+random+'_search_again">'+dictionary_edit_search+'</a>';
						//Modalbox.show(results_container.innerHTML,{height:Modalbox._options.height,resizeDuration:0,title:modal_title,closeValue:dictionary_close+" [&times;]",afterLoad:ModalSearch.massObserver.bind(this,elements,events,callbacks)});
						Modalbox.show(results_container.innerHTML,{height:90,resizeDuration:0,title:modal_title,closeValue:dictionary_close+" [&times;]",afterLoad:ModalSearch.massObserver.bind(this,elements,events,callbacks)});
						}catch(ex){if(console && console.log)console.log(ex);}
					}
				}
			);
		}
	}
}
