
/* 
 * Función para adaptar mootools 1.11 a  mootools 1.2 
 */

function $ES(class_selector, id_contenedor){
	var contenedor = $(document.body);
	if(id_contenedor){
		contenedor = $(id_contenedor);
	}
	return contenedor.getElements(class_selector);
}

/** function init(id_contenedor)
	Se ejecuta cuando se carga la pagina y también cuando se refresca alguna capa con ajax.
	Aquí se deben de programar todas las rutinas de carga oportunas.
	Cuando se carga la pagina completa init se ejecuta concretamente onDomReady
**/
var Sexy = null;

function init(id_contenedor) {
	// si no nos indican la capa en la que aplicar rutinas de inicio, tomamos '' y asi se aplicara a todo el body
	if( ! id_contenedor )	{ id_contenedor=''; }
	
	/* para que mozilla no marque los link como seleccionados al pinchar en ellos */
	$ES('a',id_contenedor).each( function(enlace) {
		
		if( ! Browser.Engine.trident ) { // si no es IE
			enlace.addEvent('click', function() { this.blur(); } );
		}
		if(enlace.hasClass('target_blank')) {
			enlace.setProperty('target','_blank');
		}
	} );

	if(id_contenedor==''){
		$try(function(){  Sexy = new SexyAlertBox(); });
	}

	$try(function(){ prepara_panel_activo(id_contenedor); });
	
 	$try(function(){ prepara_calendario(id_contenedor); });
 	
 	$try(function(){ prepara_scroll(id_contenedor); });
 	
 	$try(function(){ tooltips_undanet(id_contenedor); });
 	
 	$try(function(){ protect_inputs_on_enter(id_contenedor);});
 	
 	$try(function(){ start_menu(id_contenedor); });
 	
 	$try(function(){   prepara_tablas_redimensionables(id_contenedor); });
 	
 	$try(function(){   FancyForm.start($ES('input',id_contenedor)); });
 	$try(function(){   prepara_carrusel_undanet (id_contenedor); });
 	$try(function(){   prepara_scroll (id_contenedor); });
 	
	
 	
 	if(id_contenedor!='') { begin(id_contenedor); }
}



/** function begin(id_contenedor)
	Se ejecuta cuando se carga la pagina y también cuando se refresca alguna capa con ajax.
	Aquí se deben de programar aquellas rutinas de carga oportunas que necesiten que la web
	este cargada completamente (imagenes y demas componentes de carga pesados inclusive).
	Cuando se carga la pagina completa init se ejecuta concretamente onLoad
**/
function begin(id_contenedor) {
	// si no nos indican la capa en la que aplicar rutinas de inicio, tomamos '' y asi se aplicara a todo el body
	if( ! id_contenedor )	{ id_contenedor=''; }

	$try(function(){  prepara_textarea(id_contenedor);  });

	$try(function(){ prepara_carrusel_undanet(id_contenedor); });
 	
 	$try(function(){ prepara_separador_izq_der(); });
 	
 	$try(function(){
		if(window.self == window.top) { initLytebox(); }
	});
 	
}

/* domready se dispara cuando el navegador ya tiene cargado el arbol dom, es decir, cuando ha recibido todo el codigo html */
window.addEvent('domready',init);
/* load se dispara cuando el navegador ya tiene cargada toda la informacion, codigo html, imagenes, videos... */
window.addEvent('load', begin);
/* luego utilizaremos como funcion de arranque 'init' salvo que necesitemos que esten cargadas las imagenes en cuyo caso usariamos 'begin'.*/


/* ajustamos la altura minima de la web conforme a la altura de la ventana al cargar dicha ventana y al redimensionara */
window.addEvent('resize',set_altura_minima);
window.addEvent('load',set_altura_minima);
function set_altura_minima() {
	$ES('.altura_minima','').each( function(capa) { /* por cada capa con el className 'altura_minima' */
			capa.setStyle('height',window.getHeight()); /* establecemos el alto de la ventana */
	} );
}

/** function ir_a(id_contenedor, url [,run_js=false])
	*	[id_contenedor] id de la capa que se va a refrescar.
	*	[url] url del servicio web que se desea solicitar mediante AJAX.
	*	[run_js] boolano que determina si se deben ejecutar los scripts que se encuentren
	*		en el resultado obtenido tras ejecutar ajax y tambien la funcion init.
			Por defecto su valor es false.
	*	Envia una peticion de servicio por get mediante la libreria mootools.js
**/
function ir_a(id_contenedor, url, run_js) {
	// si no especifican el parametro run_js tomamos false por defecto.
	if( ! run_js ) run_js = false;
	// dividimos la url en base al '?' para obtener la uri y los parametros
	var uri = url.split('?'); // ejemplo-> { 0: 'http://..../app/servicio/accion', 1: 'param1=val1&param2=val2' }
	
	if(uri[1]) { uri[1] += '&contenedor=' + id_contenedor; } else { uri[1] = 'contenedor=' + id_contenedor; }

	var miRequest = new Request.HTML( {
		method		:	'get',
		encoding	:	'utf-8',
		url       	:  	uri[0],
		update		:	$(id_contenedor),
		onRequest   :	function() { show_loadings(); },
		onSuccess   :	function(resultado) {  hide_loadings(); if(run_js) { init(id_contenedor); } },
		evalScripts	:	run_js
	} ).send(uri[1]);
}

/** function ir_a_formulario(id_contenedor, id_formulario [,run_js=true])
	* [id_contenedor] id de la capa que se va a refrescar.
	* [id_formulario] id del formulario que queremos enviar.
	* [run_js] boolano que determina si se deben ejecutar los scripts que se encuentren
	*		en el resultado obtenido tras ejecutar ajax y tambien la funcion init.
			Por defecto su valor es false.
	*	
	*	Envia el formulario mediante la funcion ir_a
	*	Si el formulario requiere subir objetos de tipo file mediante multi-part esta
	*	funcion no sirve, ya que utiliza Ajax que envia los datos mediante SOAP que al
	*	fin y al cabo es un xml. Luego en caso de necesitar subir ficheros es necesario
	*	hacerlo mediante el envio normal post de formularios.
**/
function ir_a_formulario(id_contenedor, id_formulario, run_js)
{
	var formulario = $(id_formulario);
	var url = formulario.get('action');
	var nexo = ( url.match(/\?/) ? '&' : '?' );
	for(var i=0 ; i < formulario.elements.length ; ++i) { /* recorremos los campos del formulario */
		url += nexo + formulario.elements[i].get('name') + '=' + formulario.elements[i].get('value');
		nexo = '&';
	}
	ir_a(id_contenedor, url, run_js);
}

/** function abrir_ventana(url [,alto='auto'] [,ancho='auto'] [,tiene_scroll='yes'] [,resizable='yes'])
	*	[url] es la url que se va a cargar en la nueva ventana.
	*	[alto] determina el alto (en pixeles) que tendra la ventana. Por defecto su valor es 'auto'.
	*	[ancho] determina el ancho (en pixeles) que tendra la ventana. Por defecto su valor es 'auto'.
	*	[tiene_scroll] determina si queremos que el navegador presente barras de scroll en la ventana.
	*		Por defecto su valor es 'yes'.
	*	[resizable] determina si el usuario podrá modificar las dimensiones de la ventana. Por defecto es 'yes'.
	*
	*	Envia una peticion por get que se realizara en una nueva ventana. Si ya se abrio previamente una ventana
	* mediante esta funcion para el mismo servicio utilizara nuevamente dicha ventana gracias a que tendra
	* el mismo target. Es decir, el target determina que ventana utilizar. Además fuerza a que la ventana tome
	*	el foco y refresque el contenido.
**/
function abrir_ventana(url, alto, ancho, tiene_scroll, resizable)
{
	if( ! alto ) alto = 'auto';
	if( ! ancho ) ancho = 'auto';
	if( ! tiene_scroll ) tiene_scroll = 'yes';
	if( ! resizable ) resizable = 'yes';
	
	// dividimos la url en base al '?' para obtener la uri y los parametros
	var uri = url.split('?'); // ejemplo-> { 0: 'http://..../app/servicio/accion', 1: 'param1=val1&param2=val2' }
	var dirs = uri[0].split('/'); // el target que identifica a la ventana sera el ultimo dir de la uri
	var target_ventana = dirs[ dirs.length - 1 ];

	if(uri[1]) { url += '&contenedor=contenedor_popup'; } else { url += '?contenedor=contenedor_popup'; }
	
	var opciones =	'channelmode=no'
				+	',directories=no'
				+	',fullscreen=no'
				+	',height=' + alto
				+	',left=50'
				+	',location=no'
				+	',menubar=no'
				+	',resizable=' + resizable
				+	',scrollbars=' + tiene_scroll
				+	',status=no'
				+	',toolbar=no'
				+	',top=150'
				+	',width=' + ancho;
	var refrescar = true; // fuerza a refrescar la ventana en caso de que ya estubiese abierta.
	var nueva_ventana = window.open(url,target_ventana,opciones,refrescar);
	if(nueva_ventana) { nueva_ventana.focus(); }
}

/** function ir_a_desde_popup(id_contenedor, url, run_js)
		utiliza la funcion ir_a pero para invocarla
		desde un popup a la ventana padre. Además cierra el popup.
**/
function ir_a_desde_popup(id_contenedor, url, run_js) {
	if(window.opener) { // si aun esta abierta la ventana padre le pedimos que ejecute
		if( ! run_js ) run_js = false;
		// la sentencia ir_a.
		window.opener.setTimeout('ir_a("'+id_contenedor+'","'+url+'",'+run_js+');',1);
		window.close(); // cerramos el popup
	} else {
		show_error('No se encontró la ventana principal.');
	}
}

/**
  * hide_loadings()
  * oculta la capa con id 'capa_cargando'
  * Pone a 'default' el cursor del ratón
 **/
function hide_loadings(){
	if($('capa_cargando')) { $('capa_cargando').setStyle('visibility','hidden'); }
	$ES('.capa_cargando').each( function(capa_cargando) {
		capa_cargando.setStyle('visibility','hidden');
	} );
	$$('body').setStyle('cursor','default');
	$$('a').setStyle('cursor','pointer');
}

/**
  * show_loadings()
  * muestra la capa con id 'capa_cargando'
  * Pone a 'wait' el cursor del ratón
 **/
function show_loadings(){
	if($('capa_cargando')) { $('capa_cargando').setStyle('visibility','visible'); }
	$ES('.capa_cargando').each( function(capa_cargando) {
		capa_cargando.setStyle('visibility','visible');
	} );
	$$('body').setStyle('cursor','wait');
	$$('a').setStyle('cursor','wait');
}

/** show_error(msg_err_general,tipo)
	[msg_err_general] determina el mensaje de error a visualizar.
	[tipo] determina el tipo del mensaje de error a visualizar (por defecto es 'error').
	Los errores que queramos mostrar al usuario deben mostrarse siempre mediante esta
	función, dado que así, en caso de que quisieramos cambiar en algún momento el
	formato visual de todos los mensajes de error solo habria que modificar esta
	función.
**/
function comprobar_youtube(){
    if($('link_youtube_film')){
        $('link_youtube_film').setStyle('display','block');
    }
}
function show_error(msg_err_general,tipo) {

    tipo = (typeof tipo == 'undefined') ? 'error' : tipo;

	var tipo_alerta = tipo.toLowerCase();
    
    if($('link_youtube_film')){
        $('link_youtube_film').setStyle('display','none');
    }
    
    if(!Sexy){
        Sexy = new SexyAlertBox();
    }

	switch(tipo_alerta){
	    case 'error':
	        Sexy.error(msg_err_general);
	        break;
		case 'informacion':
		    Sexy.info(msg_err_general);
			break;
        case 'alerta':
		    Sexy.alert(msg_err_general);
			break;
        case 'ok':
		    Sexy.ok(msg_err_general);
			break;
        case 'carrito_ok':
		    Sexy.carrito_ok(msg_err_general);
			break;
        case 'carrito_ko':
		    Sexy.carrito_ko(msg_err_general);
			break;
		default:
		    Sexy.error(msg_err_general);
	}
}

/** seguro_eliminar(url [,id_contenedor] [,run_js])
	[url] determina la url de acceso al servicio de eliminación.
	[id_contenedor] parametro opcional que implicará el contenedor de refresco ajax.
	[run_js] parametro opcional que determina si debe ejecutar los js en caso de usar ajax.
	Pregunta al usuario se desea realmente eliminar el elemnto. En caso afirmativo
	navega hacia la url especificada. Si se especifica un id_contenedor la navegación
	se realizará por 'ajax'. En caso contrario se realizará por navegación 'natural'.
**/
/*function seguro_eliminar(url,id_contenedor,run_js) {
	Sexy.confirm('¿Delete this element?', {
			onComplete: function(returnvalue) {
					if(returnvalue){
						if(id_contenedor) {
							ir_a(id_contenedor,url,run_js);
						} else {
							window.location.href = url;
						}
					}
			}
	} );
}*/

function seguro_eliminar(url,id_contenedor,run_js) {
 if(confirm('¿Delete this element?')){
        if(id_contenedor) {
        	ir_a(id_contenedor,url,run_js);
		} else {
			window.location.href = url;
		}
   }

}

