function trim (str) {
  str = this != window? this : str;
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function esEmail(s){
  var email_pattern = /^(\w|-|.|ñ|Ñ)+\@([a-zA-Z0-9]|-)+\.(\w|\.)+/;
  var email_result;
  email_result = email_pattern.exec(s);
  return email_result;
}


/*funciones para subir y bajar el telon*/

var CLASE_PANEL_CONTENIDO = 'panelcontenido';
var panel_actual=null;

function abrir_cerrar(panelId) {
	if (panel_actual == null){
		animar(panelId, true, 10, 20);
		panel_actual = panelId;
	}else if (panel_actual == panelId){
		animar(panel_actual, false, 10, 20);
		panel_actual = null;
	}else{
		animar(panel_actual, false, 10, 20);
		panel_actual = null;
		animar(panelId, true, 10, 20);
		panel_actual = panelId;
	}
}

function animar(panelId, expandir, pasos, retraso) {
    //obtenemos el panel, si no existe no seguimos
    var panel = document.getElementById(panelId);
	if (!panel) return;	
    //obtenemos el contenido, si no existe no seguimos
	var elements = panel.getElementsByTagName("div");
	var panelContenido = null;
	for (var i=0; i<elements.length; i++){
		if (elements[i].className == CLASE_PANEL_CONTENIDO){
			panelContenido = elements[i];
			break;
		}
	}
	if (!panelContenido) return;
    //cambiamos los parametros del bloque contenedor
	panel.style.display = "block";
	if (expandir) panel.style.height = "0px";
    //lanzamos el primer paso
	setTimeout(function(){animacion(panel, 1, panelContenido.offsetHeight / pasos, expandir, pasos, retraso)}, retraso);
}

function animacion(panel, iteracion, altoPaso, expandir, pasos, retraso){
	if (iteracion<=pasos){
		panel.style.height = Math.round( (expandir ? iteracion : pasos - iteracion) * altoPaso) +"px";
		setTimeout(function(){animacion(panel,++iteracion,altoPaso,expandir,pasos,retraso)}, retraso);
	}else{
	    panel.style.display = expandir ? "block" : "none";
	}
}