/* esta funcion prepara todos los enlaces que abren una ventana nueva
 * buscando en toda la pagina todos los enlaces que tengan la clase 'external'
 */
function prepareTargetBlank()
{
  document.getElementsByClassName('external').each(function(o) {
    if (o.tagName.toLowerCase() == 'a')
    {
      Event.observe(o, 'click', function (e) { window.open(o.getAttribute('href')); Event.stop(e); return false; }, true);
    }
  });
}

/**
* funcion para alternar las clases gris/blanco en las tablas
* Las lineas que se va a alternar deben tener la clase "nombre"
*/
function alterna(nombre)
{
  lineas = document.getElementsByClassName(nombre);
  for(var i=0;i<lineas.length;i+=2)
  {
    cambiaFondo(lineas[i],'blanco');
    if(lineas[i+1]) cambiaFondo(lineas[i+1],'gris');
  }
}
/**
 * funcion para poner el fondo blanco o gris
 * si ya tiene asignada una clase 'blanco' o 'gris', la cambia
 */
function cambiaFondo(rowObj,fondoClassName){
  Element.removeClassName(rowObj,'blanco');
  Element.removeClassName(rowObj,'gris');
  Element.addClassName(rowObj,fondoClassName);
}

/**
 * findParent
 * Encuentra el padre de "element" con etiqueta "tagName".
 * Copiado de Event.findElement(event, tagName) en prototype.js
 * @param element objeto o id desde el que se empieza a buscar.
 * @param tagName nombre del tag html que ha de tener el padre.
 * return objeto
 */
 /*
function findParent(element, tagName)
{
  element = $(element);
  tagName = tagName.toUpperCase();
  while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName)))
    element = element.parentNode;
  return element;
}
*/

// Una función estupenda para no hacer nada
function foo() { return; }

/**
 * Para acortar el aparecer y desaparecer elementos de forma simple
 */
function fadeIn(element)
{
  var t = arguments.length == 2 ? parseFloat(arguments[1]) : 0.3;
  element = $(element);
  Effect.Appear(element, { duration: t });
}

function fadeOut(element)
{
  var t = arguments.length == 2 ? parseFloat(arguments[1]) : 0.3;
  element = $(element);
  Effect.Fade(element, { duration: t });
}

function fade(element)
{
  var t = arguments.length == 2 ? parseFloat(arguments[1]) : 0.3;
  if (Element.visible(element))
  {
    fadeOut(element, t);
  }
  else
  {
    fadeIn(element, t);
  }
}

// Extension to Ajax allowing for classes of requests of which only one (the latest) is ever active at a time
// - stops queues of now-redundant requests building up / allows you to supercede one request with another easily.

// just pass in onlyLatestOfClass: 'classname' in the options of the request

Ajax.currentRequests = {};

Ajax.Responders.register({
  onCreate: function(request) {
    if (request.options.onlyLatestOfClass && Ajax.currentRequests[request.options.onlyLatestOfClass]) {
            // if a request of this class is already in progress, attempt to abort it before launching this new request
           try { Ajax.currentRequests[request.options.onlyLatestOfClass].transport.abort(); } catch(e) {}
        }
        // keep note of this request object so we can cancel it if superceded
        Ajax.currentRequests[request.options.onlyLatestOfClass] = request;
  },
    onComplete: function(request) {
    if (request.options.onlyLatestOfClass) {
            // remove the request from our cache once completed so it can be garbage collected
             Ajax.currentRequests[request.options.onlyLatestOfClass] = null;
        }
    }
});

/**
 *
 */
function registerRespondersToDisplay(element)
{
  var requestClassName = arguments.length >= 2 ? arguments[1] : false;
  if (requestClassName)
  {
    Ajax.Responders.register({
      onCreate: function(request) {
        if (request.options.onlyLatestOfClass && request.options.onlyLatestOfClass == requestClassName)
        {
          $(element).show();
        }
      },
      onComplete: function(request) {
        if (request.options.onlyLatestOfClass && request.options.onlyLatestOfClass == requestClassName)
        {
          $(element).hide();
        }
      }
    });
  }
  else
  {
    Ajax.Responders.register({
      onCreate: function(request) {
        $(element).show();
      },
      onComplete: function(request) {
        $(element).hide();
      }
    });
  }
}

/**
 * function como el isset de php
 *
 */
function isset(variable_name)
{
  try
    {
      if (typeof(eval(variable_name)) != 'undefined')
        if (eval(variable_name) != null)
          return true;
    } catch(e) { }

  return false;
}

/**
 * goToUrl
 * Cambia de página a la plantilla de url almacenada en un input hidden urlObj, sustituyendo el parámetro #{id}
 * por el que segundo parámetro.
 */

function goToUrl(urlObj, id)
{
  document.location.href = (new Template($(urlObj).value)).evaluate({ id: id });
}


function popup(URL,w,h,scroll)
{
  var barra = (scroll == false) ? 'no' : 'yes';

  var l = (screen.width-w)/2;
  var t = (screen.height-h)/2;

  lf = (l < 0) ? 0 : l;
  tf  = (t < 0) ? 0 : t;

  var ops = 'height='+h+',width='+w+',top='+tf+',left='+lf+',scrollbars='+barra;

  aux = window.open(URL, 'ventana', ops);
  aux.window.focus();
}
function parentGoTo(URL)
{
  parentDocument=window.opener;
  parentDocument.location=URL;
}

