function iniVentanas(){
	ventanas = new Ventanas();
}

var Ventanas = function(){
	this.ventana = new Array();
	this.cantidad = 0;

	this.nueva = nuevaVentana;
	this.getVentanaById = getVentanaById;
	this.estaAbierta = estaAbierta;
}

function nuevaVentana(idNuevo){
	//si la ventana no existe, la creo
	var existe = false;
	this.cantidad = this.ventana.length;
	for(nn = 0; nn < this.cantidad; nn++){
		if(this.ventana[nn].id == idNuevo){
			var existe = true;
			break;
		}
	}
	if(!existe){
		for(nn = 0; nn < this.cantidad; nn++){//aumento número de orden de cada ventana
			this.ventana[nn].ordenPila ++;
		}
		this.ventana.unshift(new Ventana());//agrego ventana a la colección
		this.ventana[0].id = idNuevo;
		this.ventana[0].ordenPila = 0;//ordenPila = al índice
		this.cantidad = this.ventana.length;
	}
}

function getVentanaById(id){
	var nroVentanas = this.ventana.length;
	for(var nn = 0; nn < nroVentanas; nn++){
		if(this.ventana[nn].id == id){
			return this.ventana[nn];
		}
	}
}

function estaAbierta(idVentana){
	var existe = false;
	var nroVentanas = this.ventana.length;
	var ventanaAbierta = false;
	for(nn = 0; nn < nroVentanas; nn++){
		if(this.ventana[nn].id == idVentana && this.ventana[nn].abierta){
			ventanaAbierta = true;
			break;
		}
	}
	return ventanaAbierta;
}
//=========================================================================
var Ventana = function(){
	this.id = '';
	this.ordenPila = 0;
	this.foco = false;
	this.abierta = false;
	this.titulo = '';
	this.fileContenido = '';
	this.posTop = false;
	this.posLeft = false;
	this.ancho = 200;
	this.alto = 100;
	this.esperandoAjax = false;
	this.colorFondo = '#ffffff';
	this.colorBloqueo = '#000000';
	this.colorBarraTitulo = '#234f73';
	this.colorBarraTituloSinFoco = '#999999';
	this.altoBarraTitulo = 32;
	this.colorBorde = '#234F73';
	this.colorBordeSinFoco = '#777777';
	this.anchoBorde = 3;
	this.imagenCerrar = 'img/cerrar_ventana.png';
	this.imagenEsperaAjax = 'img/espera_ajax.gif';
	this.altoImgEspera = 64;
	this.anchoImgEspera = 64;

	this.divVentana = document.createElement('div');
		this.divVentana.style.position = 'absolute';
		this.divVentana.style.overflow = 'hidden';
		this.divVentana.style.opacity = 1;
		this.divVentana.style.MozOpacity = 1;
		this.divVentana.style.KhtmlOpacity = 1;
		this.divVentana.style.filter = 'alpha(opacity=100)';

	this.divBloqueoVentana = document.createElement('div');
		this.divBloqueoVentana.style.position = 'absolute';
		this.divBloqueoVentana.style.opacity = 0.1;//w3c
		this.divBloqueoVentana.style.filter = 'alpha(opacity=10)';//ie
		this.divBloqueoVentana.style.display = 'none';

	this.divEsperaAjax = document.createElement('div');
		this.divEsperaAjax.style.position = 'absolute';
		this.divEsperaAjax.style.opacity = 0.1;//w3c
		this.divEsperaAjax.style.filter = 'alpha(opacity=10)';//ie
		this.divEsperaAjax.style.display = 'none';

	this.imgEsperaAjax = document.createElement('img');
		this.imgEsperaAjax.style.position = 'absolute';
		this.imgEsperaAjax.style.display = 'none';
		this.imgEsperaAjax.style.filter = 'alpha(opacity=100)';
		
	this.divVentanaInterna = document.createElement('div');
		this.divVentanaInterna.style.position = 'absolute';
		this.divVentanaInterna.style.overflowX = 'hidden';
		this.divVentanaInterna.style.overflowY = 'auto';
		this.divVentanaInterna.style.filter = 'alpha(opacity=100)';

	this.divBarraTitulo = document.createElement('div');
		this.divBarraTitulo.style.position = 'absolute';
		this.divBarraTitulo.style.overflow = 'hidden';
		this.divBarraTitulo.style.top = '0px';
		this.divBarraTitulo.style.left = '0px';
		this.divBarraTitulo.style.width = '100%';

	this.divTitulo = document.createElement('div');
		this.divTitulo.style.position = 'absolute';

	this.divMensaje = document.createElement('div');
		this.divMensaje.style.position = 'absolute';
		this.divMensaje.style.overflow = 'hidden';
		this.divMensaje.style.opacity = 1;
		this.divMensaje.style.MozOpacity = 1;
		this.divMensaje.style.KhtmlOpacity = 1;



		this.divMensaje.style.filter = 'alpha(opacity=100)';
		this.divMensaje.style.border = '2px solid #444444';
		this.divMensaje.style.background = '#fff9bd';

	this.divCuerpoMensaje = document.createElement('div');
		this.divCuerpoMensaje.style.padding = '0px 10px 10px 15px';

	this.imgCierroMensaje = document.createElement('img');
		this.imgCierroMensaje.src = urlBase + 'img/quitar.png';
		this.imgCierroMensaje.style.height = '10px';
		this.imgCierroMensaje.style.width = '10px';
		this.imgCierroMensaje.style.margin = '1px 0 0 0px';

	this.divBotonCerrar = document.createElement('div');
		this.divBotonCerrar.style.position = 'absolute';

	//variables para muestroMensajeVentana
	this.suboMensajeHasta = 0;
	this.posTopMensaje = 0;
	this.idTimer = false;

	this.abrir = abrirVentana;
	this.cerrar = cerrarVentana;
	this.setFoco = setFocoVentana;
	this.esperaAjax = esperaAjaxVentana;
	this.recargar = recargarVentana;
	this.muestroMensaje = muestroMensajeVentana;
	this.suboMensaje = suboMensajeVentana;
	this.bajoMensaje = bajoMensajeVentana;
	this.eliminoMensaje = eliminoMensajeVentana;

	this.muevo = muevoVentana;
	this.posComienzoX = 0;
	this.posComienzoY = 0;

	this.cuandoCierro = cuandoCierroVentana;
	this.cuandoAbro = cuandoAbroVentana;
}

function abrirVentana(){
	if(this.abierta){
		this.setFoco();
		return;
	}
	var obj = this;
	var reqContenido = objAjax();
	if(reqContenido){
		this.esperaAjax(true);
		reqContenido.onreadystatechange = function(){
			if(reqContenido.readyState == 4 && reqContenido.status == 200){
				obj.divVentanaInterna.innerHTML = reqContenido.responseText;
				obj.esperaAjax(false);
				obj.cuandoAbro();//ejecuto función del evento
			}
		}
		reqContenido.open('GET', this.fileContenido, true);
		reqContenido.send(null);
	}
	//dimensiono ventana
	this.divVentana.style.width = this.ancho + 'px';
	this.divVentana.style.height = this.alto + 'px';
	//posiciono ventana
	if(this.posTop === false && this.posLeft === false){//si no seteo posición
		if(window.innerHeight){//moz
			var altoNavegador = window.innerHeight;
			var anchoNavegador = window.innerWidth;
		}else{//ie
			var altoNavegador = document.documentElement.clientHeight;
			var anchoNavegador = document.documentElement.clientWidth;
		}
		//si entra en el navegador la centro
		if(anchoNavegador > this.ancho){
			this.posLeft = ((anchoNavegador - this.ancho) / 2);
		}else{
			this.posLeft = 0;
		}
		if(altoNavegador > this.alto){
			if(typeof(window.pageYOffset) == 'number'){//moz
				this.posTop = ((altoNavegador - this.alto) / 2) + window.pageYOffset;
			}else{//ie
				this.posTop = ((altoNavegador - this.alto) / 2) + document.documentElement.scrollTop;
			}
		}else{
			this.posTop = 0;
		}
	}else{//si solo seteo top o solo seteo left asigno cero al no seteado
		this.posTop = (this.posTop === false) ? 0 : this.posTop;
		this.posLeft = (this.posLeft === false) ? 0 : this.posLeft;
	}
	//si ya tengo una ventana en esta posicion, la pongo en cascada
	var nroVentanas = ventanas.ventana.length;
	for(nnn = 0; nnn < nroVentanas; nnn++){
		for(nn = 0; nn < nroVentanas; nn++){
			if(ventanas.ventana[nn].abierta && ventanas.ventana[nn].posTop == this.posTop){
				this.posTop += this.altoBarraTitulo + this.anchoBorde + 5;
			}
			if(ventanas.ventana[nn].abierta && ventanas.ventana[nn].posLeft == this.posLeft){
				this.posLeft += this.anchoBorde + 20;
			}
		}
	}
	this.divVentana.style.left = this.posLeft + 'px';
	this.divVentana.style.top = this.posTop + 'px';
	//asigno funciones a los eventos
	if(this.divBotonCerrar.attachEvent){//ie
		this.divBotonCerrar.attachEvent('onclick',function(e){ obj.cerrar() });
		this.divBotonCerrar.attachEvent('onmouseover',function(e){ obj.divBotonCerrar.style.cursor = 'pointer' });
		this.divBotonCerrar.attachEvent('onmouseout',function(e){ obj.divBotonCerrar.style.cursor = 'auto' });
	}else{//moz
		this.divBotonCerrar.addEventListener('click',function(e){ obj.cerrar() }, false);
		this.divBotonCerrar.addEventListener('mouseover',function(e){ this.style.cursor = 'pointer' }, false);
		this.divBotonCerrar.addEventListener('mouseout',function(e){ this.style.cursor = 'auto' }, false);
	}
	if(this.divBarraTitulo.attachEvent){//ie
		this.divBarraTitulo.attachEvent('onmousedown',function(e){ obj.setFoco(); obj.muevo(); });
		this.divBarraTitulo.attachEvent('onmouseover',function(e){ obj.divBarraTitulo.style.cursor="move"; });
	}else{//moz
		this.divBarraTitulo.addEventListener('mousedown',function(e){ obj.setFoco(); obj.muevo(e); }, false);
		this.divBarraTitulo.addEventListener('mouseover',function(e){ this.style.cursor="move"; }, false);
	}
	this.divBloqueoVentana.onclick = function(e){ obj.setFoco() }

	this.imgCierroMensaje.onclick = function(e){ obj.bajoMensaje() }

	//seteo apariencia, colores...
	this.divVentanaInterna.style.background = this.colorFondo;
	this.divEsperaAjax.style.background = this.colorBloqueo;
	this.divBloqueoVentana.style.background = this.colorBloqueo;
	this.divBarraTitulo.style.background = this.colorBarraTitulo;
	this.divBarraTitulo.style.height = this.altoBarraTitulo + 'px';
	this.divVentanaInterna.style.top = this.altoBarraTitulo + 'px';
	this.divVentana.style.border = this.anchoBorde + 'px solid ' + this.colorBorde;
	this.imgEsperaAjax.src = urlBase + this.imagenEsperaAjax;
	this.divVentanaInterna.style.width = this.ancho + 'px';
	this.divVentanaInterna.style.height = (this.alto - this.altoBarraTitulo) + 'px';
	this.divMensaje.style.top = this.alto + 'px';
	this.divMensaje.style.right = '0px';
	this.divMensaje.style.maxWidth = this.ancho / 3 + 'px';
	this.divBloqueoVentana.style.width = this.ancho + 'px';
	this.divBloqueoVentana.style.height = this.alto - this.altoBarraTitulo + 'px';
	this.divBloqueoVentana.style.top = this.altoBarraTitulo + 'px';
	this.divBotonCerrar.innerHTML = '<img src="' + urlBase + this.imagenCerrar + '" alt="X" />';//urlBase está en objDesplegable
	this.imgEsperaAjax.style.top = ((this.alto - this.altoImgEspera) / 2) + 'px';
	this.imgEsperaAjax.style.left = ((this.ancho - this.anchoImgEspera) / 2) + 'px';
	this.divTitulo.innerHTML = this.titulo;
	this.divTitulo.style.left = '18px';
	var divIconoVentana = document.createElement('div');
	divIconoVentana.innerHTML = '<img src="' + urlBase + 'img/favicon.png" style="width:20px; height:20px;" alt="" />';//urlBase está en objDesplegable
	divIconoVentana.style.position = 'absolute';

	this.divBarraTitulo.appendChild(divIconoVentana);
	this.divBarraTitulo.appendChild(this.divTitulo);
	this.divBarraTitulo.appendChild(this.divBotonCerrar);
	this.divVentana.appendChild(this.divBarraTitulo);
	this.divVentana.appendChild(this.divVentanaInterna);
	this.divMensaje.appendChild(this.imgCierroMensaje);
	this.divMensaje.appendChild(this.divCuerpoMensaje);
	this.divVentana.appendChild(this.divMensaje);
	this.divVentana.appendChild(this.divBloqueoVentana);
	this.divVentana.appendChild(this.imgEsperaAjax);

	this.setFoco();
	document.body.appendChild(this.divVentana);
	this.divTitulo.style.top = (this.altoBarraTitulo - this.divTitulo.clientHeight) / 2 + 'px';//centro título en la barra
	this.divTitulo.style.left = ((this.altoBarraTitulo - divIconoVentana.clientHeight) / 2) + 30 + 'px';
	this.divBotonCerrar.style.top = (this.altoBarraTitulo - this.divBotonCerrar.clientHeight) / 2 + 'px';//centro botón cerrar en la barra
	this.divBotonCerrar.style.right = (this.altoBarraTitulo - this.divBotonCerrar.clientHeight) / 2 + 'px';//centro botón cerrar en la barra
	divIconoVentana.style.top = (this.altoBarraTitulo - divIconoVentana.clientHeight) / 2 + 'px';//centro el ícono de la ventana en la barra
	divIconoVentana.style.left = (this.altoBarraTitulo - divIconoVentana.clientHeight) / 2 + 'px';//centro el ícono de la ventana en la barra
	this.abierta = true;
}

function esperaAjaxVentana(muestro){
	this.esperandoAjax = muestro;
	if(muestro){
		this.divEsperaAjax.style.display = 'block';
		this.imgEsperaAjax.style.display = 'block';
	}else{
		this.divEsperaAjax.style.display = 'none';
		this.imgEsperaAjax.style.display = 'none';
	}
}

function recargarVentana(){
	this.eliminoMensaje();
	var obj = this;
	var reqContenido = objAjax();
	if(reqContenido){
		this.esperaAjax(true);
		reqContenido.onreadystatechange = function(){
			if(reqContenido.readyState == 4 && reqContenido.status == 200){
				obj.divVentanaInterna.innerHTML = reqContenido.responseText;
				obj.esperaAjax(false);
			}
		}
		reqContenido.open('GET', this.fileContenido, true);
		reqContenido.send(null);
	}
}

function cerrarVentana(){
	document.body.removeChild(this.divVentana);
	//decremento los ordenPila posteriores
	for(var nn = this.ordenPila + 1; nn < ventanas.cantidad; nn++){
		ventanas.ventana[nn].ordenPila --;
	}
	//elimino ventana de ventanas.ventana
	for(nn = 0; nn < ventanas.cantidad; nn++){
		if(ventanas.ventana[nn].id == this.id){
			ventanas.ventana.splice(nn, 1);
			break;
		}
	}
	ventanas.cantidad = ventanas.ventana.length;//actualizo
	ventanas.ventana.sort(ordenarPila);//reordeno array
	//enfoco la primera ventana del array
	if(ventanas.ventana.length > 0){//si hay alguna
		ventanas.ventana[0].setFoco();
	}
	this.cuandoCierro();
}

//---------------------------------------------------------------------------------------------------
function setFocoVentana(){
	//seteo estilos, etc de ventana desenfocada a la que esté en foco
	var nroVentanas = ventanas.ventana.length;
	for(var nn = 0; nn < nroVentanas; nn++){
		if(ventanas.ventana[nn].foco){//si foco desenfoco
			ventanas.ventana[nn].divBarraTitulo.style.background = this.colorBarraTituloSinFoco;
			ventanas.ventana[nn].divVentana.style.borderColor = this.colorBordeSinFoco;
			ventanas.ventana[nn].eliminoMensaje();
			ventanas.ventana[nn].divBloqueoVentana.style.display = 'block';
			ventanas.ventana[nn].foco = false;
			break;
		}
	}
	//mover this a posición 0 de ventanas.ventana
	for(nn = 0; nn < this.ordenPila; nn++){//incremento los ordenPila menores que this.ordenPila
		ventanas.ventana[nn].ordenPila ++;
	}
	this.ordenPila = 0;//y me pongo primero
	ventanas.ventana.sort(ordenarPila);//emparejo ordenPila con los índices del array
	//reapilo ventanas desde zIndex 302 hacia abajo
	for(var nn = 0; nn < nroVentanas; nn++){
		var indiceZ = 300 - ((nn * 3) + 3);
		ventanas.ventana[nn].divVentana.style.zIndex = indiceZ;
		ventanas.ventana[nn].divMensaje.style.zIndex = indiceZ++;
		ventanas.ventana[nn].divBloqueoVentana.style.zIndex = indiceZ++;
		ventanas.ventana[nn].imgEsperaAjax.style.zIndex = indiceZ++;
	}
	//me seteo los estilos, etc de ventana en foco
	if(!this.esperandoAjax){
		this.divBloqueoVentana.style.display = 'none';
	}
	this.divBarraTitulo.style.background = this.colorBarraTitulo;
	this.divVentana.style.borderColor = this.colorBorde;
	this.foco = true;
}

function ordenarPila(a, b){
	return a.ordenPila - b.ordenPila;
}

//---------------------------------------------------------------------------------------------------
function muevoVentana(e){
	if(!e) var e = window.event;
	var obj = this;
	if(typeof(window.scrollY) == 'number'){//moz
		cursorComienzoX = e.clientX + window.scrollX;
		cursorComienzoY = e.clientY + window.scrollY;
	}else{
		cursorComienzoX = e.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
		cursorComienzoY = e.clientY + document.documentElement.scrollTop + document.body.scrollTop;
	}
	this.divVentana.style.opacity = 0.8;//w3c
	this.divVentana.style.filter = 'alpha(opacity=80)';//ie

	document.onmousemove = function(e) {
		if(!e) var e = window.event;
		var xActual, yActual;
		if(typeof(window.scrollY) == 'number'){//moz
			xActual = e.clientX + window.scrollX;
			yActual = e.clientY + window.scrollY;
		}else{//ie
			xActual = e.clientX + document.documentElement.scrollLeft;
			yActual = e.clientY + document.documentElement.scrollTop;
		}
		obj.divVentana.style.left = posComienzoX + xActual - cursorComienzoX + 'px';
		obj.divVentana.style.top = posComienzoY + yActual - cursorComienzoY + 'px';
		evitaEventos(e);
	}
	document.onmouseup = function() {
		document.onmousemove = null;
		document.onmouseup = null;
		obj.divVentana.style.opacity = 1;//w3c
		obj.divVentana.style.filter = 'alpha(opacity=100)';//ie
		obj.posTop = parseInt(obj.divVentana.style.top, 10);
		obj.posLeft = parseInt(obj.divVentana.style.left, 10);
	}
	
	posComienzoX = parseInt(this.divVentana.style.left, 10);
	posComienzoY = parseInt(this.divVentana.style.top, 10);
	
	evitaEventos(e);
}

function evitaEventos(e){
	if(!e) var e = window.event;
	if(!e.preventDefault()){//			BORRIQUETA		ie
		e.cancelBubble=true;
		e.returnValue=false;
	}

//	e.preventDefault();
}

//---------------------------------------------------------------------------------------------------
function muestroMensajeVentana(mensaje, segundos){
	this.eliminoMensaje();
	this.divMensaje.style.top = this.alto + 'px';//escondo el mensaje
	this.divCuerpoMensaje.innerHTML = mensaje;
	var obj = this;
	this.suboMensajeHasta = this.alto - this.divMensaje.clientHeight;
	this.posTopMensaje = this.alto;
	this.suboMensaje(segundos);
}

function suboMensajeVentana(segundos){
	var cuantoSubo = 3;
	this.posTopMensaje -= cuantoSubo;
	this.divMensaje.style.top = this.posTopMensaje + 'px';
	obj = this;
	if(this.posTopMensaje > this.suboMensajeHasta){
		this.idTimer = setTimeout('obj.suboMensaje(' + segundos + ')', 40);
	}else{
		if(segundos > 0){
			var milisegs = segundos * 1000;
			this.idTimer = setTimeout('obj.bajoMensaje()', milisegs);
		}
	}
}

function bajoMensajeVentana(){
	if(this.idTimer){//limpio el timer para cuando cierro el mensaje con un click antes que baje
		clearTimeout(this.idTimer);
		this.idTimer = false;
	}
	var cuantoBajo = 3;
	this.posTopMensaje += cuantoBajo;
	this.divMensaje.style.top = this.posTopMensaje + 'px';
	obj = this;
	if(this.posTopMensaje < this.alto){
		this.idTimer = setTimeout('obj.bajoMensaje()', 40);
	}else{
		this.idTimer = false;
	}
}

function eliminoMensajeVentana(){
	if(this.idTimer){
		clearTimeout(this.idTimer);
		this.idTimer = false;
	}
	this.divMensaje.style.top = this.alto + 'px';
	this.divCuerpoMensaje.innerHTML = '';
}

//---------------------------------------------------------------------------------------------------
function cuandoCierroVentana(){}

function cuandoAbroVentana(){}

//____________________________________________________________________________

function infoV(){
	nroVentanas = ventanas.ventana.length;
	var cadenaIndice = 'Indice<br />';
	var cadenaPila = 'Pila<br />';
	var cadenaId = 'Id<br />';
	var cadenaPosTop = 'Top<br />';
	var cadenaPosLeft = 'Left<br />';
	var cadenaFile = 'Contenido<br />';
	var cadenaFoco = 'Foco<br />';
	var cadenaTitulo = 'Titulo<br />';
	var cadenaAbierta = 'Abierta<br />';
	var cadenaAlto = 'Alto<br />';
	var cadenaAncho = 'Ancho<br />';

	for(var nn = 0; nn < nroVentanas; nn++){
		cadenaIndice += nn + '<br />';
		cadenaPila += ventanas.ventana[nn].ordenPila + '<br />';
		cadenaId += ventanas.ventana[nn].id + '<br />';
		cadenaTitulo += ventanas.ventana[nn].titulo.replace(/</g,"&lt;").replace(/>/g,"&gt;") + '<br />';
		cadenaFile += ventanas.ventana[nn].fileContenido + '<br />';
		cadenaFoco += ventanas.ventana[nn].foco + '<br />';
		cadenaPosTop += ventanas.ventana[nn].posTop + '<br />';
		cadenaPosLeft += ventanas.ventana[nn].posLeft + '<br />';
		cadenaAbierta += ventanas.ventana[nn].abierta + '<br />';
		cadenaAlto += ventanas.ventana[nn].alto + '<br />';
		cadenaAncho += ventanas.ventana[nn].ancho + '<br />';
	}
	var cadena = '<div style="float:left; margin:10px;">'+cadenaIndice+'</div><div style="float:left; margin:10px;">'+cadenaPila+'</div>';
	cadena += '<div style="float:left; margin:10px;">'+cadenaId+'</div><div style="float:left; margin:10px;">'+cadenaFoco+'</div>';
	cadena += '<div style="float:left; margin:10px;">'+cadenaAbierta+'</div>';
	cadena += '<div style="float:left; margin:10px;">'+cadenaAncho+'</div><div style="float:left; margin:10px;">'+cadenaAlto+'</div>';
	cadena += '<div style="float:left; margin:10px;">'+cadenaPosTop+'</div><div style="float:left; margin:10px;">'+cadenaPosLeft+'</div>';;
	cadena += '<div style="float:left; margin:10px;">'+cadenaFile+'</div><div style="float:left; margin:10px;">'+cadenaTitulo+'</div>';;

	var ventanaInfo = document.createElement('div');
	ventanaInfo.style.position = 'absolute';
	ventanaInfo.style.top = '200px';
	ventanaInfo.style.left = '200px';
	ventanaInfo.style.background = '#fffbbb';
	ventanaInfo.style.border = '6px solid #a45d00';
	ventanaInfo.style.padding = '10px';
	ventanaInfo.style.width = '800px';
	ventanaInfo.style.zIndex = '500';
	ventanaInfo.onclick = function() { document.body.removeChild(ventanaInfo) }
	ventanaInfo.innerHTML = cadena;
	document.body.appendChild(ventanaInfo);
}
//____________________________________________________________________________

