/** gcm.js
 *
 * Funciones javascript imprescindibles para el funcionamiento de gcm
 *
 */

/** Lanzar funciones al cargarse la página
 * Función que nos permite lanzar más de una función al
 * cargar la página.
 *
 * Forma de uso::
 *
 *    addLoadEvent(function(){
 *       pedirDatos('?m=imagenes&a=ajaxImg&s=<?=$d ?>','editarImagenesAdmin')
 *       });
 *
 * @ref http://www.danilat.com/weblog/2007/11/20/la-forma-correcta-de-usar-windowonload/
 *
 */

function addLoadEvent(func){
   var oldonload = window.onload;
   if (typeof window.onload != 'function')
   {
      window.onload = func;
   }else{
      window.onload = function(){
         if (oldonload)
         {
            oldonload();
         }
         func();
      }
   }
}

/** Ajax
 *
 * Funciones javascript para la administración de la aplización
 * 
 * @author Eduardo Magrané
 */

function newAjax() {
   var xmlhttp = false;
   try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e1) {
      try {
         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e2) {
         xmlhttp = false;
      }
   }
   if (!xmlhttp && (typeof XMLHttpRequest != 'undefined' || window.XMLHttpRequest)) {
      xmlhttp = new XMLHttpRequest();
   }
   return xmlhttp ;
}

/**
* pedirDatos
*/

var nSolicitud = 0;
var pedido;

/** pedirDatos()
 *
 * Solicitar una respuesta
 *
 * @param url url al servidor
 * @param accion funcion allamar al recibir los resultados
 * @param confirmacion Mensaje que se presenta para confirmar la acción
 *        si no hay no se pide.
 *
 * @autor Eduardo Magrané
 * @version 0.2
 *
 */

function pedirDatos(url , accion , confirmacion){

   var self = this;
   nSolicitud++ ;
   var indicador=false;
   var temporizador=false;

   if ( confirmacion ) {
      if ( ! confirm(confirmacion) ) {
         return FALSE;
      }
   }
   self.pedido = newAjax();
   if ( ! self.pedido ) {
      alert('ERROR::No se pudo crear una conexión con ajax');
      return FALSE;
   }
   self.pedido.open('GET',url, true);
   //pedido.open('GET',url, false);
   self.pedido.onreadystatechange=eval(accion) ;
   self.pedido.send(null);
}

/**
 * Con esta funcion podemos conmutar la visualización de una capa
 */

function visualizar( id ) {
	if (document.getElementById){
		var elemento = document.getElementById(id);
		if (elemento.style.display == "none") {
			//elemento.style.display = "";
			$(elemento).fadeIn(500);
		} else {
			//elemento.style.display = "none";
			$(elemento).fadeOut(100);
		}
	}
}


/**
* Crear una ventana con javascript con el contenido de un div existente
* centrarlo en la ventana y añadir un boton de cierre
*
* @param titulo Titulo a mostrar en la ventana
* @param contenido Contenido de la ventana
* @oaram identificador Id de la ventana
*
* @todo Hacer la ventana arrastrable y evitar que se repira una ventana con el mismo identifiador
*/

function ventana(titulo,contenido, identificador) {

   // centramos ventana
   var topp = 40 ;
   var leftt = 30 ;
   win = document.createElement('div');
   //document.getElementById('contenido').appendChild(win);
   if ( document.getElementById('editando') ) {
      document.getElementById('editando').appendChild(win);
   } else {
      document.getElementById('contenido').appendChild(win);
   }

   win.id = 'ventana_'+identificador;
   win.style.position = 'absolute';
   win.style.top = topp + '%';
   win.style.left = leftt + '%';
   win.style.border = '1px solid #fff';
   win.style.background = 'olive';
   win.style.color = 'white';
   win.style.width = '300px';
   // Transparencia
   if ( navigator.appName == 'Microsoft Internet Explorer' ) {
      win.style.filter = 'alpha(opacity="85")';
   } else {
      win.style.opacity = '0.85';
   }
   contenido = '<div style="text-align:right"><span style="float:left">'+titulo+'</span><span style="position:relative;left: 0px; " ><a href="javascript:this.cerrar(\''+win.id+'\')">X</a></span></div><div style="padding: 15px">' + contenido + '</div>';
   win.innerHTML = contenido;

   this.cerrar = function(id){
     cr = document.getElementById(id);
     cr.parentNode.removeChild(cr);

   }

}

/*
* Enviar email oculto
*/

function enviarEmail(nom,dominio){

   window.open('mailto:'+nom+'@'+dominio,'_self');

}

/*
* Presentamos los constantes para poder ser insertados en el formulario
* de tiny.
*/

function presentaConstantes(){

   if (pedido.readyState == 4 ) {
      if ( pedido.status == 200 ) {
         var container = document.getElementById('panelConstantes');
         var salida = '<br />' ;
         var datos = eval('['+pedido.responseText+']');
         if ( datos ) {
            for ( var elemento in datos ) {
               for ( var subelemento in datos[elemento] ) {
                  //salida += '<p class="subpanel" style="text-align:left">';
                  salida += '<p class="subpanel" >';
                  salida += '<a href="javascript:;" onmousedown="tinyMCE.execCommand(\'mceInsertContent\',false,\'{C{' + subelemento + '}}\');" ';
                  salida += 'title="' + datos[elemento][subelemento][0] + ' | ' + datos[elemento][subelemento][1] + '" >';
                  salida += subelemento + '</a>';
                  salida += '</p>';
               }
            }
            container.innerHTML = salida ;
         }

      }
   }

   }
/** paneles()
 * Construimos botones para controlar la visibilidad o no
 * sobre los div con class panel que tengan un tituloPanel dentro
 * y una subcaja con la clase subpanel_oculto o subpanel_visible.
 *
 * los nombre de clases de los subpaneles hacen referencia a si de entrada
 * están ocultos o no.
 *
 * Si no se dan todas estas circustancias no hacemos nada.
 */

function paneles() {

   var paneles = $('.panel .tituloPanel');

   paneles.each( function(i) { // i va desde 0 hasta divs.length-1

      var titulo = $(this);
      var enlace = $('a:lt(1)', titulo).attr('href');
      var contenido = $(this).html(); // alert(contenido);
      var caja = $(this).parent().find('div');
      var estado = caja.attr('class'); // alert('Estado: '+estado);

      if ( estado == 'subpanel_oculto' ) {
         $(this).wrap('<div class="barraTitulo"><span style="float:left;"></span><span class="controles"><a class="bp_on" href="'+enlace+'">[+]</a></span></div>');
         caja.removeClass('subpanel_oculto');
         caja.addClass('subpanel_visible');

      } else if ( estado == 'subpanel_visible' ) {

         $(this).wrap('<div class="barraTitulo"><span style="float:left;"></span><span class="controles"><a class="bp_off" href="'+enlace+'">[-]</a></span></div>');
         caja.removeClass('subpanel_visible');
         caja.addClass('subpanel_oculto');
         }
      });

   $('.bp_on , .bp_off').click(function(){

      if ( $(this).attr('class') == 'bp_on' )  {

         var on = $(this);
         on.html('[-]');
         on.removeClass('bp_on');
         on.addClass('bp_off');

      } else {
      
         var off = $(this);
         off.html('[+]');
         off.removeClass('bp_off');
         off.addClass('bp_on');

         }
      });

   $('.panel .tituloPanel').click(function(){

      var on = $(this).parent().parent().find('.bp_on');
      var off = $(this).parent().parent().find('.bp_off');

      on.html('[-]');
      on.removeClass('bp_on');
      on.addClass('bp_off');

      off.html('[+]');
      off.removeClass('bp_off');
      off.addClass('bp_on');
      });
   }


// Event.observe(window, "load", linksImgView, false); // prototype
//$(document).ready(function() {                         // jquery
//      });

/** Funciones que se inician al cargar la pagina
 *
 * @todo Anulamos galeria de imagenes hasta resolver los problemas
 */

addLoadEvent(function(){
   // linksImgView();
   paneles();
   $(this).pngFix();
   });

function is_array(obj) {

   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}
