var SALIR = 'Salir';
var SALIR_DESC = "Pulsa ESC para salir";
var PROMOTE = "Esta web tiene heySilver";

(function(){
	jQuery.heySilver = function(){
		// Variable donde alojamos los items cargados
		var items = null;
		
		function _setSizes(){ // Indicamos los tamaños de los elementos
			jQuery("#oFondo").css({
				"width": jQuery(document).width(),
				"height": jQuery(document).height(),
				"display": ""});
			jQuery("#oMenu").css({
				"top": (jQuery(window).height()/2 - $("#oMenu").height()/2),
				"left": (jQuery(window).width()/2 - $("#oMenu").width()/2),
				"display": ""});
		}
		
		function _end(){ // Volvemos todo a la normalidad
			jQuery("#oFondo").remove();
			jQuery("#oMenu").remove();
			// Volvemos los objetos "delicados" de IE a su normalidad.
			jQuery('embed, object, select').css({ 'visibility' : 'visible' });
			_start(); 
		}
		
		function _start(){ // Indicamos que lanzar en el evento keyDown
			jQuery(document).keydown(function (e) {  // Capturamos el evento
				// Los ocultamos para evitar problemas con IE
				jQuery('embed, object, select').css({ 'visibility' : 'hidden' });
				_keyDown(e);
				return false;
	        });        
		}
		
		function _createItems(data){
				items = data;
        jQuery.each(data.items, function(i,item){
						jQuery("#oMenu").append('<li class="item '+ item.klass +'"><a id="heysilver-item' + i + '" href="#">' + item.name + '</a><span class="oDesc">'+item.desc+'</span></li>');
						if (item.file) {
							jQuery("#heysilver-item" + i).bind("click", function() {
									jQuery("#oMenu li.item").remove();
									jQuery.getJSON(item.file,{"rand": Math.random()},_createItems);
								});
						}
						jQuery("#heysilver-item" + i).bind("click", item.action);
	        });
			// Cerrar
			jQuery("#oMenu").append('<li class="salir"><a id="heysilver-end" href="#">' + SALIR +'</a><span class="oDesc">'+SALIR_DESC+'</span></li>');
			jQuery("#heysilver-end").bind("click", _end);
			
			// Evitamos autocomplete en el input
			jQuery("#oText").attr("autocomplete", "off");

			// Aplicamos los tamaños necesarios
			_setSizes();

			// Colocamos el puntero en el input
			jQuery("#oText").focus();

		}// _createItems();
		
		function _show(){ // Mostramos los elementos
			// Desactivamos temporalmente los eventos de teclado
			jQuery(document).unbind("keydown");
			
			// Eventos relacionados con window
			jQuery(window).resize(_setSizes);
			jQuery(window).scroll(_setSizes);
			
			// Creamos los elementos
			jQuery("body").append('<div id="oFondo" style="display:none;"></div><ul id="oMenu" style="display:none;"><li><form id="hs_form" method="get" action=""><input type="text" id="oText" /></form></li></ul>');
			// Eliminamos submit del formulario
			jQuery("#hs_form").submit(function(){return false;});
			
			// Cargamos los items del menú
			if (items != null) _createItems(items); // items ya cargados
		  else  jQuery.getJSON("plugins.js",{"rand": Math.random()},_createItems); // Cargamos desde el server
				
			// Controlamos las teclas que pulsamos desde el input
			jQuery("#oText").keyup(function(e){

				// Gestionamos teclas especiales
				if(e.which == 13 && jQuery("#oMenu li.selected a").size() == 1) 
					jQuery("#oMenu li.selected a:first").click(); 
				else if(e.which == 27) 
					_end();					

				// Marcamos los relacionados	
				jQuery("#oMenu li a").each(function(x,a){
					try {
						var exp = new RegExp(jQuery("#oText").attr("value"), "i");
					  	if (exp.test(jQuery(a).text())) $(a).parent().addClass("selected");
					    else jQuery(a).parent().removeClass("selected");
					} catch(e) { }
				}); //jQuery("#oMenu li a");	
			}); // jQuery("#oText").keyup();

	     return false;
		}//_show();
		
		function _keyDown(e){ // Gestionamos la ejecución de heySilver()
		   	if(e.which == 27) _end();
	        if(e.shiftKey && e.which == 32) _show();
		} //keyDown();

	_start();  // Iniciamos el sarao
				
	}//jQuery.fn.heySilver();
//Sin promote
jQuery(document).ready($.heySilver);	
})();



