/* *****************Explicacion de las funciones **************************
	Todos los parámetros que se recojen como id_capa, serán pasados como un
	String que contendrá el nombre de la capa sin el Div
	
	- init() 
		Será llamada preferiblemente después de la declaración de todas las capas
		Es la encargada de convertir las capas a objetos.
	
	- objeto generar(String id_capa)
		Esta funcion es de uso interno de la libreria, devuelve el objeto capa a
		partir de su nombre
	
	- objeto generardiv(String id_capa)
		Esta funcion es de uso interno de la libreria, devuelve el objeto capadiv
		a partir de su nombre, se utiliza en las funciones que modifica	propiedades
		que no pertenecen al Style.		
	
	- mostrar (String capa)
		Mostrará la capa que le pasemos como parámetro
		
	- ocultar (String capa)
		Ocultará la capa que le pasemos como parámetro
	
	- int posicionX(id_capa)
		devuelve la posicion X de la capa
	
	- int posicionY(id_capa)
		devuelve la posicion Y de la capa
	
	-int ancho(id_capa)
		devuelve el ancho real de la capa
		
	-int alto(id_capa)
		decuelve la altura real de la capa
	
	- mover(id_capa, left, top)
		Movera la capa a la posion left, top que son pasadas como parámetro
		
	- incrementar(id_capa, left, top)
		Incrementa o decrementa la capa x pixels determinados por left y top.
		
	- incrementarX(idCapa, left)
		Incrementa o decremnta la capa x pixels determinados por left
		
	- incrementarY(idCapa, top)
		Incrementa o decremnta la capa x pixels determinados por top
		
	- boolean mostrada(id_capa)
		Nos devuelve true si la capa pasada como parámetro está mostrada, false en caso
		de que este oculta
	
	- recortar(id_capa, posyi, posxi, posyf, posxf)
		todos los valores de recorte se tienen en cuenta desde el calor 0,0 de la capa			
	
	- aparecer(id_capa, direccion, tipo)
		Hace aparecer la capa en una dirección concreta.
			direccion = 1 la capa aparece de arriba a abajo
			direccion = 2 la capa aparece de abajo a arriba
			direccion = 3 la capa aparece de derecha a izquierda
			direccion = 4 la capa aparece de la izquierda a la derecha
		El parametro tipo es de uso interno de la funcion
		
	- desaparecer(id_capa, direccion, tipo)
		Hace desaparecer la capa en una dirección concreta.
			direccion = 1 la capa desaparece de abajo a arriba
			direccion = 2 la capa desaparece de arriba a abajo
			direccion = 3 la capa desaparece de izquierda a derecha
			direccion = 4 la capa desaparece de derecha y izquierda
		El parametro tipo es de uso interno de la funcion
	
	- escribir(id_capa, texto)
		texto: String que queremos que contenga
	
	- cargar (id_capa, url)		
		url: Direccion del fichero que queremos que contenga
		Cargara como contenido de la capa el fichero que le digamos.
		NO FUNCIONA EN VERSIONES INFERIORES A NETSCAPE 6.0

	- cargado()
		funcion de uso interno que será llamada desde la página que se carga en la capa
		onload="parent.cargado()"
	
	- Activar(id_capa)
		Activa la capa para que pueda realizar drag and drop
	
	- Desactivar()
		Desactiva la capa que podia realizar drag and drop
	
	- arrastrar()
		Moverá la capa que este activada para realizar el Drag and Drop
		
	- initMouse()
		Inicializa el mouse, deberá ser llamada junto con Init()
		
	- mouseDown()
		El contenido se ejecutará al hacer mouseDown en el documento
		
	- mouseMove()
		El contenido se ejecutará al mover el raton, contiene las funciones para hacer drag
	
	- mouseUp()
		El contenido se ejecutará al hacer mouseUp en el Documento
			
****************************************************************************/

/******************Definición de variables de la libreria ******************/

navegador = navigator.appName														//Nombre del navegador
version = parseInt(navigator.appVersion)											//Version de navegador
var capas = new Array;																//Las capas como objeto style
var capasdiv = new Array;															//Las capas como objeto
var nombre_capas = new Array;														//Las capas como string
ns6 = ((navegador == "Netscape") && (version == 5)) ? true:false					//Variable que indica si es Netscape 6
ns4 = ((navegador == "Netscape") && (version < 5))? true:false						//Variable que indica si es Netscape 4
ie = ((navegador == "Microsoft Internet Explorer"))? true:false						//Variable que indica si es Internet Explorer
var capa_temp																		//Variable utilizada en la carga de ficheros para guardar la capa de contenido
var finalizado = 1																	//Variable que indica si ha finalizado el proceso de carga
var indice = 0;																		//Variable de posicionamiento de las capas dentro del array
/********************Fin de definición de variables **********************/

/**********************Funciones generales de capas **********************/
function init(padre)
{
	if (ns4){	
		if (!padre){
			for (contador = 0; contador < document.layers.length; contador ++){
				var capadiv = document.layers[contador].name;
				var index = capadiv.indexOf("Div");
				var capa = capadiv.substring(0,index);
				if (index > 0){
					capas[indice] = document.layers[contador];
					capasdiv[indice] = document.layers[contador];
					nombre_capas[indice] = capa;
					indice++;
				}
				if (document.layers[contador].layers.length > 0){
					init(document.layers[contador].layers)
				}
			}
		}else{
			for (contador2 = 0; contador2 < padre.length;contador2++){
				var capadiv = padre[contador2].name;
				var index = capadiv.indexOf("Div");
				var capa = capadiv.substring(0, index)
				if (index > 0){
					capas[indice] = padre[contador2]
					capasdiv[indice] = padre[contador2]
					nombre_capas[indice] = capa
					indice++;
				}
				if (padre[contador2].layers.length > 0){
					init(padre[contador2].layers)
				}
			}
		}
	}
	if (ns6){
		temp_capas = document.getElementsByTagName("DIV"); 
		for (contador = 0; contador < temp_capas.length; contador ++){
			capadiv = temp_capas[contador].id;
			var index = capadiv.indexOf("Div");
			var capa = capadiv.substring(0, index);
			if (index > 0){
				capas[indice] = temp_capas[contador].style;
				capasdiv[indice] = temp_capas[contador];
				nombre_capas[indice] = capa;
				indice++;
			}
		}
	}
	if (ie){
		for (contador = capas.length; contador <document.all.tags("DIV").length ; contador++){
			var capadiv = document.all.tags("DIV")[contador].id;
			var index = capadiv.indexOf("Div");
			var capa = capadiv.substring(0, index);
			if (index > 0){
				capas[indice] = document.all.tags("Div")[contador].style;
				capasdiv[indice] = document.all.tags("Div")[contador];
				nombre_capas[indice] = capa;
				indice++;
			}
		}
	}
}


function generar(id_capa){
	for (contador=0; contador< capas.length; contador++){
		if (id_capa == nombre_capas[contador]){
			return (capas[contador])
		}
	}
}

function generardiv(id_capa){
	for (contador = 0; contador < nombre_capas.length; contador ++){
		if (id_capa == nombre_capas[contador]){
			return (capasdiv[contador])
		}
	}
}

function mostrar(id_capa){
	capa = generar(id_capa)	
	if (ns4) capa.visibility = "show"
	if (ns6) capa.visibility = "visible"
	if (ie) capa.visibility = "visible"
}

function ocultar(id_capa){	
	capa = generar(id_capa)	
	if (ns4) capa.visibility = "hide"
	if (ns6) capa.visibility = "hidden"
	if (ie) capa.visibility = "hidden"
}

function posicionX(id_capa){
	capa = generar(id_capa)
	return capa.left
}

function posicionY(id_capa){
	capa = generar(id_capa)
	return capa.top
}

function alto(id_capa){
	capa = generar(id_capa)
	return capa.offsetHeight
}

function ancho(id_capa){
	capadiv = generardiv(id_capa)
	return capadiv.offsetWidth
}

function mover(id_capa, left, top){
	capa = generar(id_capa)	
	capa.xpos = left
	capa.left = capa.xpos
	capa.ypos = top
	capa.top = capa.ypos
}

function incrementar(id_capa, left, top){
	capa = generar(id_capa)	
	capa.left = parseInt(capa.left) + left
	capa.top = parseInt(capa.top) + top
}

function incrementarX(id_capa, left){
	capa = generar(id_capa)	
	capa.left = parseInt(capa.left) + left
}

function incrementarY(id_capa, top){
	capa = generar(id_capa)	
	capa.top = parseInt(capa.top) + top
}




function deslizarAux(id_capa, xIni, yIni, xFin, yFin, velocidad, paso){
	id_capaaux = id_capa;
	xFinAux = xFin;
	yFinAux = yFin;
	xIniAux = xIni;
	yIniAux = yIni;
	velaux = velocidad;
	pasoaux = paso + 1
	capa = generar(id_capa)	
	despla_X = xFin - xIni
	despla_Y = yFin - yIni
	vect = Math.sqrt(Math.pow(despla_X,2) + Math.pow(despla_Y,2)); 
	x = xIni + (despla_X * velocidad * paso) / vect ;
	y = yIni + (despla_Y * velocidad * paso) / vect ;
	finX = false;
	finY = false;
	if ((x <= xFin) && (xIni >= xFin)) finX = true;
	if ((x >= xFin) && (xIni <= xFin)) finX = true;
	if ((y <= yFin) && (yIni >= yFin)) finY = true;
	if ((y >= yFin) && (yIni <= yFin)) finY = true;
	if (!(finX && finY))
	{
		mover (id_capa, x ,y);
		setTimeout("deslizarAux(id_capaaux, xIniAux, yIniAux, xFinAux, yFinAux, velaux, pasoaux)",1)	
	}else{
		mover (id_capa, xFin ,yFin);
	}
}

function deslizar(id_capa, xFin, yFin, velocidad){
	id_capaaux = id_capa;
	xFinAux = xFin;
	yFinAux = yFin;
	velaux = velocidad;
	capa = generar(id_capa)	
	xIni = parseInt(capa.left)
	yIni = parseInt(capa.top)
	if (xIni != xFin || yIni != yFin){
		setTimeout("deslizarAux(id_capaaux, xIni, yIni, xFinAux, yFinAux, velaux, 0)",50)	
	}
}


function mostrada(id_capa){
	capa = generar(id_capa)	
	if (ns4){
		if (capa.visibility == "show"){
			return true
		}else{
			return false
		}
	}else{
		if (capa.visibility == "visible"){
			return true;
		}else{
			return false;
		}
	}
}

function recortar(id_capa, posyi, posxi, posyf, posxf){
	capa = generar(id_capa)	
	if (ns4){
		capa.clip.top = posyi
		capa.clip.left = posxi
		capa.clip.bottom = posyf
		capa.clip.bottom = posxf
	}else{
		capa.clip = "rect(" + posyi + "px "+ posxf + "px " + posyf + "px " + posxi + "px)"
	}
}

function aparecer(id_capa, direccion, tipo){
	capa = generar(id_capa);
	capadiv = generardiv(id_capa);
	if (!tipo)
	{
		mostrar(id_capa);
		if (direccion == 1){recortar(id_capa, 0, 0,0, capadiv.offsetWidth)}
		if (direccion == 2){recortar(id_capa, capadiv.offsetHeight, 0, capadiv.offsetHeight, capadiv.offsetWidth)}
		if (direccion == 3){recortar(id_capa, 0, capadiv.offsetWidth, capadiv.offsetHeight, capadiv.offsetWidth)}
		if (direccion == 4){recortar(id_capa, 0, 0, capadiv.offsetHeight, 0)}
		intruccion = "aparecer('" + id_capa + "', "+direccion+", 1)"
		setTimeout(intruccion,1)
	}else{
		if (ns4)
		{
			clip_top = capa.clip.top
			clip_right = capa.clip.right
			clip_bottom = capa.clip.bottom
			clip_left = capa.clip.left
		}else{
			pos_i = capa.clip.indexOf("(",0)
			pos_f = capa.clip.indexOf("px", pos_i)
			clip_top = capa.clip.substring(pos_i+1, pos_f)
			pos_i = pos_f + 2
			pos_f = capa.clip.indexOf("px", pos_i)
			clip_right = capa.clip.substring(pos_i, pos_f)
			pos_i = pos_f + 2
			pos_f = capa.clip.indexOf("px", pos_i)
			clip_bottom = capa.clip.substring(pos_i, pos_f)
			pos_i = pos_f + 2
			pos_f = capa.clip.indexOf("px", pos_i)
			clip_left = capa.clip.substring(pos_i, pos_f)
		}
		if (clip_bottom < capadiv.offsetHeight && direccion == 1)
		{
			recortar(id_capa, 0, 0, clip_bottom*1 + 10*1, capadiv.offsetWidth)
			intruccion = "aparecer('" + id_capa + "',"+direccion+ ", 1)"
			setTimeout(intruccion,1)
		}
		if (clip_top > 0 && direccion == 2)
		{
			recortar(id_capa, clip_top*1 - 10*1, 0, capadiv.offsetHeight , capadiv.offsetWidth)
			intruccion = "aparecer('" + id_capa + "', "+direccion+ ", 1)"
			setTimeout(intruccion,1)
		}
		if (clip_left > 0 && direccion == 3)
		{
			recortar(id_capa, 0, clip_left*1 - 10*1, capadiv.offsetHeight, capadiv.offsetWidth)
			intruccion = "aparecer('" + id_capa + "', "+direccion+ ", 1)"
			setTimeout(intruccion,1)
		}
		if (clip_right < capadiv.offsetWidth && direccion == 4)
		{
			recortar(id_capa, 0, 0, capadiv.offsetHeight, clip_right*1 + 10*1)
			intruccion = "aparecer('" + id_capa + "', "+direccion+ ", 1)"
			setTimeout(intruccion,1)
		}
	}
}

function desaparecer(id_capa, direccion){
	capa = generar(id_capa);
	capadiv = generardiv(id_capa);
	if (ns4)
	{
		clip_top = capa.clip.top
		clip_right = capa.clip.right
		clip_bottom = capa.clip.bottom
		clip_left = capa.clip.left
	}else{
		pos_i = capa.clip.indexOf("(",0)
		pos_f = capa.clip.indexOf("px", pos_i)
		clip_top = capa.clip.substring(pos_i+1, pos_f)
		pos_i = pos_f + 2
		pos_f = capa.clip.indexOf("px", pos_i)
		clip_right = capa.clip.substring(pos_i, pos_f)
		pos_i = pos_f + 2
		pos_f = capa.clip.indexOf("px", pos_i)
		clip_bottom = capa.clip.substring(pos_i, pos_f)
		pos_i = pos_f + 2
		pos_f = capa.clip.indexOf("px", pos_i)
		clip_left = capa.clip.substring(pos_i, pos_f)
	}
	if (direccion == 1){
		if (clip_bottom > 0){
			recortar(id_capa, 0, 0, clip_bottom*1 - 10*1, capadiv.offsetWidth)
			intruccion = "desaparecer('" + id_capa + "',"+direccion+ ")"
			setTimeout(intruccion,1)
		}else{
			ocultar(id_capa);
		}
	}
	if (direccion == 2){
		if (clip_top < capadiv.offsetHeight){
			recortar(id_capa, clip_top*1 + 10*1, 0, capadiv.offsetHeight , capadiv.offsetWidth)
			intruccion = "desaparecer('" + id_capa + "', "+direccion+ ")"
			setTimeout(intruccion,1)		
		}else{
			ocultar(id_capa)
		}
	}
	if (direccion == 3){
		if (clip_left < capadiv.offsetWidth){
			recortar(id_capa, 0, clip_left*1 + 10*1, capadiv.offsetHeight, capadiv.offsetWidth)
			intruccion = "desaparecer('" + id_capa + "', "+direccion+ ")"
			setTimeout(intruccion,1)
		}else{
			ocultar(id_capa);
		}
	}
	if (direccion == 4){
		if (clip_right > 0){
			recortar(id_capa, 0, 0, capadiv.offsetHeight, clip_right*1 - 10*1)
			intruccion = "desaparecer('" + id_capa + "', "+direccion+ ")"
			setTimeout(intruccion,1)
		}else{
			ocultar(id_capa);
		}
	}
}


function opacidad(id_capa, valor){
	capa = generardiv(id_capa)
	capa.style.filter = "alpha(opacity="+valor+",enabled=1)"
}

function escribir(id_capa, texto){
	capa = generardiv(id_capa)
	if (ns4){
		capa.document.open()
		capa.document.write(texto)
		capa.document.close()
	}
	if (ns6){
		document.getElementById(id_capa + "Div").innerHTML = texto
	}
	if (ie){
		capa.innerHTML = texto
	}
}

function cargar(id_capa, url){
	if (finalizado==1){
		finalizado = 0;
		capa = generardiv(id_capa);
		temp_capa = capa;
		if (ns4){
			
		}
		if (ns6){
			document.getElementsByTagName("IFRAME")[0].src = url
		}
		if (ie){
			bufferFrame.document.location = url
		}
	}else{
		intruccion = "cargar('" + id_capa + "','" + url + "')"
		setTimeout(intruccion,500)
	}
}

function cargado(){
	if (ie){
		temp_capa.innerHTML = bufferFrame.document.body.innerHTML
		capaname = temp_capa.id.substring(0, temp_capa.id.length - 3)
		finalizado = 1;
		//bufferFrame.document.location = "";
	}
}

/********************** FUNCIONES DE ARRASTRAR Y SOLTAR ********************/
var capa_drag = 0;	
var margenX_drag																	//vaiable que indica el margen donde se ha hecho click en la capa;
var margenY_drag 

function activar(id_capa){
	capa_drag = id_capa
	capa_temp = generardiv(id_capa)
	margenX_drag = mouse_x - parseInt(capa_temp.style.left);
	margenY_drag = mouse_y - parseInt(capa_temp.style.top);
}

function desactivar(){
	capa_drag = 0
}

function arrastrar(){
	if (capa_drag != 0)
	{
		posx_temp = mouse_x - margenX_drag;
		posy_temp = mouse_y - margenY_drag;
		mover(capa_drag, posx_temp, posy_temp)
	}
}
/*********************************FUNCIONES DE RATON ******************************/
var mouse_x;
var mouse_y;

function initMouse()
{	
	document.onmousedown = mouseDown
	document.onmousemove = mouseMove
	document.onmouseup = mouseUp
	if (ns4) document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP)
}

function mouseDown(e) {
	
}
function mouseMove(e) {
	if (ns4) {
		mouse_x = e.pageX
		mouse_y = e.pageY
	}
	if (ie) {
		mouse_x = event.x
		mouse_y = event.y
	}
	if (capa_drag)
	{
		capa_drag.xpos = mouse_x
		capa_drag.left = capa_drag.xpos
		capa_drag.ypos = mouse_y
		capa_drag.top = capa_drag.ypos
	}
	
}
function mouseUp(e) {

}
