// -- Funciones especiales de búsqueda de objetos V2.5
// Trabajan también con objetos Area e Icono de cualquier versión de los mismos compatible
// con los navegadores más modernos (IE5.5 y NS6.0 + Mozilla)
var debug=0 // Redefinir si se necesita

//- Busca un elemento de tipo t llamado n en TODOS los formularios de una página web.
// Devuelve dicho elemento o null si no es encontrado. Busca incluso en layers dentro de
// layers en Netscape 4.x. Funciona para navegadores desde la versión 2.0 de Netscape y la
// 3.0 de Explorer.
function BuscaElemento(t,n){
	var b=arguments.length>2?arguments[2]:document
	var i,j,d=b.forms,e
	for(i=0;i<d.length;i++){
		e=d[i].elements
		for(j=0;j<e.length;j++){
			if(e[j].name==n&&e[j].type==t)return e[j]
		}
	}
	if(b.layers){
		var k,l=b.layers
		for(i=0;i<l.length;i++){
			if(l[i].document){
				d=l[i].document.forms
				for(j=0;j<d.length;j++){
					e=d[j].elements
					for(k=0;k<e.length;k++){
						if(e[k].name==n&&e[k].type==t)return e[k]
					}
				}
				if(l[i].document.layers){
					var a=BuscaElemento(t,n,l[i].document)
					if(a) return a
				}
			}
		}
	}
	return null
}

//- Busca una imagen llamada n en TODA la página actual. Devuelve dicho elemento o null
// si no es encontrado. Busca incluso en layers dentro de layers en Netscape 4.x. Funciona
// para navegadores desde la versión 2.0 de Netscape y la 3.0 de Explorer.
function BuscaImagen(n){
	var b=arguments.length>1?arguments[1]:document
	var i,j,d=b.images,e
	for(i=0;i<d.length;i++){
		e=d[i]
		if(e.name==n)return e
	}
	if(b.layers){
		var l=b.layers
		for(i=0;i<l.length;i++){
			if(l[i].document){
				d=l[i].document.images
				for(j=0;j<d.length;j++){
					e=d[j]
					if(e.name==n)return e
				}
				if(l[i].document.layers){
					var a=BuscaImagen(n,l[i].document)
					if(a) return a
				}
			}
		}
	}
	return null
}
//- Busca un Icono llamado n en TODAS las áreas de una página web. Devuelve dicho icono
// o null si no es encontrado. Busca incluso en layers dentro de layers en Netscape 4+.
// Funciona para navegadores desde la versión 4.0 de Netscape y la 4.0 de Explorer.
// Requiere el uso de alguna versión compatible de areas.js e iconos.js
function BuscaIcono(n){
	if(Areas){
		var i,j,k,a=Areas
		for(i=0;i<a.length;i++){
			j=a[i].iconos
			if(j)for(k=0;k<j.length;k++)if(j[k].id==n)return j[k]
		}
	}
	return null
}
//- Busca un formulario llamado n en TODA la página web. Devuelve dicho formulario o null
// si no es encontrado. Busca incluso en layers dentro de layers en Netscape 4+. Funciona
// para navegadores desde la versión 2.0 de Netscape y la 3.0 de Explorer.
function BuscaFormulario(n){
	var b=arguments.length>1?arguments[1]:document
	var i,j,d=b.forms,e
	for(i=0;i<d.length;i++){
		e=d[i]
		if(e.name==n||e.id==n)return e
	}
	if(b.layers){
		var l=b.layers
		for(i=0;i<l.length;i++){
			if(l[i].document){
				d=l[i].document.forms
				for(j=0;j<d.length;j++){
					e=d[j]
					if(e.name==n||e.id==n)return e
				}
				if(l[i].document.layers){
					var a=BuscaFormulario(n,l[i].document)
					if(a)return a
				}
			}
		}
	}
	return null
}

//- Busca un elemento de tipo t llamado n en TODOS los elementos que tienen tablas en
// una página web. Devuelve dicho elemento o null si no es encontrado. Busca incluso en
// layers dentro de layers en Netscape 4.x. Funciona para navegadores desde la versión 2.0
// de Netscape y la 3.0 de Explorer, aunque para objetos "layer", "area" e "icono", sólo
// funciona a partir de las versiones 4.0 de ambos navegadores y si se incluye también
// alguna versión compatible de areas.js e iconos.js. Para los elementos de tipo "plugin"
// sólo trabaja con Netscape 3+.
function Busca(t,n){
	var b=len(arguments)>2?arguments[2]:document
	var i,j,d=null,k,l,a,e
	switch(t){
		case "form":
			d=b.forms
			break
		case "icono":
			if(Areas){
				for(i=0;i<len(Areas);i++){
					j=Areas[i].iconos
					if(j){
						k=findobj(j,n,'id')
						if(i>-1)return j[k]
					}
				}
			}
			break
		case "area":
			if(Areas){
				i=findobj(Areas,n,'id')
				if(i>-1)return Areas[i]
			}
			break
		case "image":
			d=b.images
			break
		case "layer":
			// Mozilla, NS6+ e IE5.5+ tienen getElementsByTagName
			d=b.layers?b.layers:(b.all?b.all.tags("DIV"):(b.getElementsByTagName?b.getElementsByTagName("DIV"):null))
			break
		case "plugin":
			d=navigator.plugins
			if(d){
				i=findpartobj(d,n,'name')
				if(i>-1)return d[i]
				else d=null
			}
			break
		case "link":
			d=b.links
			break
		case "anchor":
			d=b.anchors
			break
		default:
			d=b.forms
			for(i=0;d&&i<len(d);i++){
				e=d[i].elements
				j=findobj(e,n,'name')
				k=findobj(e,t,'type')
				if(j==k)return e[k]
			}
			if(b.layers){
				l=b.layers
				for(i=0;i<len(l);i++){
					if(l[i].document){
						d=l[i].document.forms
						for(j=0;j<len(d);j++){
							e=d[j].elements
							k=findobj(e,n,'name')
							a=findobj(e,t,'type')
							if(k==a)return e[k]
						}
					}
					if(l[i].document.layers){
						a=Busca(t,n,l[i].document)
						if(a)return a
					}
				}
			}
			d=null
	}
	if(d){
		i=findobj(d,n,'name')
		if(i>-1)return d[i]
		i=findobj(d,n,'id')
		if(i>-1)return d[i]
		if(b.layers){
			l=b.layers
			for(i=0;i<len(l);i++){
				if(l[i].document){
					eval("d=l[i].document."+t+"s")
					j=findobj(d,n,'name')
					if(j>-1)return d[j]
					j=findobj(d,n,'id')
					if(j>-1)return d[j]
				}
				if(l[i].document.layers){
					a=Busca(t,n,l[i].document)
					if(a)return a
				}
			}
		}
	}
	return null
}
//- Vuelca todas las propiedades de un objeto o tabla cualquiera usando "alert"
// y separando cada propiedad de la anterior con un salto de línea. Funciona en
// todos los navegadores de versiones posteriores a la 4.
function VuelcaObjeto(t){
	var val='',lin=0
	if(typeof(t)=="object"||typeof(t)=="array"||typeof(t)=="function"){
		for(i in t){
			if(typeof(i)=="string")val+='Valor de '+i+'='+(eval('t.'+i))+'\n'
			else val+='Valor de '+i+'='+(eval('t['+i+']'))+'\n'
			if(val&&(++lin)==30){
				alert(val)
				val=''
				lin=0
			}
		}
		if(val)alert(val);
		else alert("Sin contenidos")
	}
}
/**/
function VuelcaObjeto2(t){
	var val='',lin=0
	if(typeof(t)=="object"||typeof(t)=="array"||typeof(t)=="function"){
		for(i in t){
			try{
				val+='Valor de '+i+'='+(eval('t.'+i))+'\n'
			}catch(e){
				val+='No se pudo evaluar '+i+'\n'
			}
			if(val&&(++lin)==20){
				alert(val)
				val=''
				lin=0
			}
		}
		if(val)alert(val);
		else alert("Sin contenidos")
	}else alert("Valor: "+t)
}
/**/