// 23/03/07
/**
 * EventMgr Class, by Martin Szyszlican.
 * Funcionalidades:
 * 
 *     * Evita perdidas (leaks) de memoria en Firefox (y tal vez algun otro navegador)
 *     * Permite ejecutar funciones una vez que el DOM está cargado sin esperar a cargar las imágenes (via DOMContentLoaded y defer para ie)
 *     * Es totalmente cross-browser: Engloba el manejo de eventos para no tener que preocuparse por las inconsistencias entre navegadores y versiones de javascript.
 *     * Si el usuario no tiene javascript, obviamente, nada se ejecuta. Si una un navegador con escaso soporte para eventos (solo eventos on* sin addListener) se ejecutará el último evento agregado al elemento.
 * 
 * Ejemplo de uso:
 * EventMgr.add(window,"load",init);

 * function init() {
 *		alert("Esta funcion se ejecutará antes de que se terminen de cargar las imágenes!");
 * }
 * 
 * Basado en el trabajo de ecmanaut:
 * http://ecmanaut.blogspot.com/2006/05/avoiding-javascript-leakage.html
 * La idea de usar comentarios condicionales y document.write para emular el defer 
 * es de Matthias Miller http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited
 * En colaboración con Dean Edwards: http://dean.edwards.name/weblog/2006/06/again
 *
 * Aquí hay otro método similar a esta clase, pero no evita leaks:
 * http://agileweb.org/articles/2006/07/28/onload-final-update
 */

var EventMgr = // avoid leaking event handlers, crossbrowser version
{
  _registry:null,
  initialize:function() {
    if(this._registry == null) {
      this._registry = [];
      EventMgr.add(window, "_unload", this.cleanup);
    }
  },
  add:function(o, t, fn, uc) {
    this.initialize();
    if(typeof o == "string")
      o = d.g(o);
    if(o == null || fn == null)
      return false;
    if(t == "unload") {
      // call later when cleanup is called. don't hook up
      this._registry.push({obj:o, type:t, fn:fn, useCapture:uc});
      return true;
    }
    var realType = t=="_unload"?"unload":t;

	this.realAdd(o,realType,fn,uc);

    this._registry[this._registry.length] = {obj:o, type:t, fn:fn, useCapture:uc};

    return true;
  },
  realAdd:function(o,realType,fn,uc) {
  	if (realType == "load") {
		fn = EventMgr.init;
  		this.realAdd(o,"error",fn,uc);
		this.realAdd(o,"DOMContentLoaded", fn, false);
		/* for Internet Explorer */
		/*@cc_on @*/
		/*@if (@_win32)
		if (document.getElementById) {
			script = document.getElementById("__ie_onload");
			if (script == window.undefined) {
				var proto = "javascript:void(0)";
				if (location.protocol == "https:") proto = "src=//0";
				document.write("<scr"+"ipt id=__ie_onload defer src=" + proto + "><\/scr"+"ipt>");

				var script = document.getElementById("__ie_onload");
				script.onreadystatechange = function() {
					if (this.readyState == "complete") {
						fn();
					}
				};
			}
		}
		/*@end @*/
		/* for Safari */
		if (/KHTML|WebKit/i.test(navigator.userAgent)) { // sniff
		    this._timer = setInterval(function() {
		        if (/loaded|complete/.test(document.readyState)) {
					clearInterval(this._timer);
					delete this._timer;
		            fn(); // call the onload handler
		        }
		    }, 10);
		}
	}
	if (o.addEventListener)
		o.addEventListener(realType,fn,uc);

    else if (o.attachEvent)
		o.attachEvent('on' + realType, fn);

	else {
		o["on"+realType] = fn;
		if (o["on"+realType] != fn) {
			alert("Error adding listener\nObject:"+o+" ID:"+o.id+" Name:"+o.name+" TagName:"+o.tagName+"\nEvent:"+realType);
		}
	}
  },
  init:function () {
	// quit if this function has already been called
	if (arguments.callee.done) return;
	// flag this function so we don't do the same thing twice
	arguments.callee.done = true;
	// execute each function in the stack in the order they were added
	for (var i=0;i < EventMgr._registry.length;i++) {
		if (EventMgr._registry[i].type=="load") {
			p=EventMgr._registry[i].fn();
		}
	}
  },
  remove:function (o,type,fn,uc) {
		if (o.removeEventListener)

			o.removeEventListener(type,fn,uc);
		else if (o.detachEvent)
			o.detachEvent("on" + type,fn);
		else {
			//TODO: Disabled 'cos it throws errors in IE4/Win
//			o["on"+type] = window.undefined;
//			if (o["on"+type]!=window.undefined) return false;
		}
		return true;
	},
  cleanup:function() {
    for(var i = 0; i < EventMgr._registry.length; i++)
      with(EventMgr._registry[i])
        if(type=="unload")
          fn();
        else {
          if(type == "_unload") type = "unload";
          EventMgr.remove(obj,type,fn,useCapture);
        }
    delete EventMgr._registry;
  }
};

function fix_eolas(){
	var objects = document.getElementsByTagName("object");
	for (var i=0; i<objects.length; i++)
		objects[i].outerHTML = objects[i].outerHTML;
}

function resetText(el, valor)
{
	if (el.value == valor) {
		el.value = "";	
	}
}
function sel_album (f, el){
	if (el>0){
		f.action = f.action+"?id="+el;
		f.submit();
	}
}

function sel_imagen(img_id, img_src){
	document.getElementById('esp_imagen').value = img_id;
	document.getElementById('prev_imagen').src = img_src;
}



////////////////////////////////////////////////////////////////////////////////
// Esta funcion se utiliza para cargar los datos de la grilla de modificacion
// en el formulario que permite los cambios. Es una copia de los campos
// de form_a a form_b
// Daniel 09/04/2005
/////////////////////////////////////////////////////////////////////////////////

function set_modo(modo, f) {
// utilizando un solo formulario y un solo campo hidden "modo", cambiamos los modos de admin por aca
	f.elements["modo"].value = modo;
	validar(f)
}

function seleccion_modificar(form,id){

	var f_dest = document.f_modi;

	for (i=0; i<f_dest.elements.length;  i++){
			
		if(f_dest.elements[i].name!="") {

			fila = f_dest.elements[i].name;
			switch (f_dest.elements[fila].type){
				case "text":
					f_dest.elements[fila].value = form.elements[fila].value;
					break
				case "select-one":
					valor = form.elements[fila].value;
					if (form.elements[fila].value=="Si") {valor =1}
					f_dest.elements[fila].value = valor;
					break
			}
		}
	}
	f_dest.elements["enviar"].disabled = false;
}

//////////////////////////////////////////////////////////////////////





// mensajes de error - Validacion Formulario



var VALIDAR_MSG_VALIDAR1 = "El campo ";
var VALIDAR_MSG_VALIDAR2 = " es obligatorio. Por favor completelo antes de continuar";
var VALIDAR_MSG_EMAILINVALIDO = "La dirección de e-mail ingresada es inválida. Por favor, corroborela";
var VALIDAR_MSG_SINCURSO = "Es necesario seleccionar al menos un curso";
var VALIDAR_MSG_SINALUMNO = "Se debe seleccionar al menos un alumno para presenciar un curso";

function buscayselecciona_combo(combo,valor){
	for (i=0;i<combo.options.length;i++ )
	{
		if (combo.options[i].value == valor)
		{
			combo.options[i].selected = true;
		}
		
	}	

}




function convertirTxt_boolean(valor){
	// convierte los valores 'si' o 'no' o 'true' o 'false' en 1 y 0 respectivamente
	valor = valor.toLowerCase()
	switch (valor)
	{
	case 'si':
		return 1;
		break;
	case 'true':
		return 1;
		break;
	case 'no':
		return 0;
		break;
	case 'false':
		return 0;
		break;
	}
}

function validar_clave(f){
	var requeridoArray = f.elements['requerido'].value;
	var elemento = f.elements;
	
	requeridoArray = requeridoArray.split(",");
	for (i = 0; i < requeridoArray.length; i++) {
		if (elemento[requeridoArray[i]].value == "")
		{
			alert( "el campo '" +elemento[requeridoArray[i]].alt+ "' es obligatorio"); 
			elemento[requeridoArray[i]].focus(); 
			return false;

		}
	}
	if (f.elements["pers_clave1"].value != f.elements["pers_clave2"].value){
		alert("la nueva contraseña no coincide");	
		return false;
	}
		
}

function validar(f,confirmar)
{
// compatible con mozilla. xhtml 1.0
// version 2.0 
	var requeridoArray = f.elements['requerido'].value;
	var elemento = f.elements;
	
	requeridoArray = requeridoArray.split(",");
	
	for (i = 0; i < requeridoArray.length; i++) {
						if (elemento[requeridoArray[i]].value == "")
						{
							alert( "el campo '" +elemento[requeridoArray[i]].alt+ "' es obligatorio"); 
							elemento[requeridoArray[i]].focus(); 
							return false;
	
						}
	// chequeo  de email
						var mail_check = requeridoArray[i].indexOf("mail"); 
						if (mail_check > -1 && (elemento[requeridoArray[i]].value.indexOf('@', 0) == -1 ||
					  elemento[requeridoArray[i]].value.indexOf('.', 0) == -1)) {
						alert("la dirección de e-mail indicada es inválida"); 
							elemento[requeridoArray[i]].focus(); 
						return false; 
	
						}
	}//for
	if (confirmar==1){
		valor = confirm ("Confirma que desea suscribirse al 1er Taller de Biotecnología?");

		if(valor==false){
			return false
		}

		
	}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function imagenHires(theURL,winName,features) { //v2.0
	url = "imagenhires.php?img="+theURL
  window.open(url,winName,features);
}


function ordenar(url, orden){
	document.location.href = url+"&orden=" + orden;

}







function changeKey (evt) {
  var keyCode = evt.keyCode ? evt.keyCode :
                evt.charCode ? evt.charCode :
		evt.which ? evt.which : void 0;

//alert(keyCode)
	if (charCode > 31 && (charCode < 48 || charCode > 57)){
	return true;
  }
else {
	return false;
	}
}

function enterEsSubmit (evt, f) {

  var keyCode = evt.keyCode ? evt.keyCode :
                evt.charCode ? evt.charCode :
		evt.which ? evt.which : void 0;

 if (keyCode ==13) {
	validar(f);
  }


}

// from Pampa Digital Developments
// http://www.pampadd.com.ar/
// clonacion de newsletter

function clonar_el(el, id){
el = document.getElementById(id);
el = el.getElementsByTagName("div")
el = el[0];
el_prime = el.cloneNode(true);
el.parentNode.appendChild(el_prime);
i = i + 1;

}

function remover_el(t,id){

	var t = document.getElementById(id);
	el = t.getElementsByTagName("div")
	for (i=el.length-1; i>0;i--){
		t.removeChild(el[el.length-1]);
		   i = i - 1;
		return
	}
}

function buscarEnNodo(nodo, nombreHijo){ // busca un hijo determinado, por su id y lo entrega
	for (i=0; i<nodo.childNodes.length;i++){
		if (nodo.childNodes[i].id == nombreHijo) {
			elemento = nodo.childNodes[i];
		}
	}

	return elemento;
}

function tipoEnNodo(nodo, tipoHijo){ // busca un hijo determinado, por su tipo y lo entrega
	for (i=0; i<nodo.childNodes.length;i++){
		if (nodo.childNodes[i].type == tipoHijo) {
			elemento = nodo.childNodes[i];
			return elemento
		}

	}

}
