/****************************************************************************
JQ- AJAX - 3.6.2
CONTENIDO
1.	Variables globales
2.	Funciones AJAX
3.	Interfaz AJAX
4.	Funciones de propósito general
5.	Manipulación de COOKIES
6.	Análisis de URL's
7.	Análisis y redirección de contenido
8.	Efectos visuales
9.	Menús desplegables
10.	Simulacion de ventanas
****************************************************************************/
/****************************************************************************
1.	Variables globales
****************************************************************************/


var ancla = null;

var ventana;
var popup;
var debug;
var state;
var cerror;
var ventanas = new Array();
var nventanas = 0;
var posx, posy, boton, ancho, alto; //Posicion del puntero
var procesos = 0;
var maxprocesos = 0;
var contador = 0;
var proceso = 0;
var tiempoproceso = 0;
var url_actual = new String();
var cargado = false;
var BrowserDetect =
{
	init : function()
	{
		this.browser = this.searchString(this.dataBrowser) || "Explorador desconocido";
		this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "version desconocida";
		this.OS = this.searchString(this.dataOS) || "Sistema Operativo desconocido";
	},
searchString: function(data)
{
		for (var i = 0; i < data.length; i++)
		{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString)
			{
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
},
searchVersion: function(dataString)
{
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
},
dataBrowser: [
{
	string: navigator.userAgent,
		subString: "OmniWeb",
		versionSearch: "OmniWeb/",
		identity: "OmniWeb"
},
	{
	string: navigator.vendor,
		subString: "Apple",
		identity: "Safari"
	},
	{
	prop: window.opera,
		identity: "Opera"
	},
	{
	string: navigator.vendor,
		subString: "iCab",
		identity: "iCab"
	},
	{
	string: navigator.vendor,
		subString: "KDE",
		identity: "Konqueror"
	},
	{
	string: navigator.userAgent,
		subString: "Firefox",
		identity: "Firefox"
	},
	{
	string: navigator.vendor,
		subString: "Camino",
		identity: "Camino"
	},
	{				// for newer Netscapes (6+)
	string: navigator.userAgent,
		subString: "Netscape",
		identity: "Netscape"
	},
	{
	string: navigator.userAgent,
		subString: "MSIE",
		identity: "Explorer",
		versionSearch: "MSIE"
	},
	{
	string: navigator.userAgent,
		subString: "Gecko",
		identity: "Mozilla",
		versionSearch: "rv"
	},
	{				// for older Netscapes (4-)
	string: navigator.userAgent,
		subString: "Mozilla",
		identity: "Netscape",
		versionSearch: "Mozilla"
	}
	],
	dataOS: [
{
	string: navigator.platform,
		subString: "Win",
		identity: "Windows"
},
	{
	string: navigator.platform,
		subString: "Mac",
		identity: "Mac"
	},
	{
	string: navigator.platform,
		subString: "Linux",
		identity: "Linux"
	}
	]
};
/****************************************************************************
2.	Funciones AJAX
****************************************************************************/
function loadPage(pagina, contenedor, rastro)
{
	rastro  = typeof(rastro) == 'boolean' ? rastro : false ;
	
	switch (pagina.readyState)
	{
		case 1:
		case 2:
		case 3:
			window.status = "Cargando...";
			if (contenedor.intervalo <= 0)
			{
				contenedor.className = contenedor.className.indexOf("loading") < 0 ? contenedor.className + " loading" : contenedor.className;
			}
			break;
		case 4:

			contenedor.className = contenedor.className.indexOf("loading") < 0 ? contenedor.className : contenedor.className.substr(0, contenedor.className.indexOf("loading")) + contenedor.className.substr(contenedor.className.indexOf("loading") + 7);
			
			if(rastro)
			{
				var html = pagina.responseText;
				if(html!="")
				{
					var rastroc = objetoCrear('div', '', '', contenedor);
					rastroc.innerHTML = html;
					
					contenedor.scrollTop = contenedor.scrollHeight;
				}
			}
			else
			{
				contenedor.innerHTML = pagina.responseText;
			}

			vinculosRedireccionar(contenedor);
			
			if (contenedor.intervalo > 0)
			{
				contenedor.t = setTimeout("paginaCargar('" + contenedor.url + "','" + contenedor.parametros + "','" + contenedor.id + "','" + contenedor.metodo + "', " + contenedor.intervalo + ", " +  rastro + ")", contenedor.intervalo);
			}

			procesos--;

			trace(contenedor.id + ": " + contenedor.url + "?" + contenedor.parametros + ", " + tiempoproceso, "div_" + contenedor.id);
			
			window.status = "Listo";
			break;
	}
}
function paginaCargar(url, parametros, id_contenedor, method, intervalo, rastro)
{
	
	var contenedor;
	var mktime = new Date();
	var pagina = false;

	method	= typeof(method) == "undefined" ? 'get' : method;
	intervalo = typeof(intervalo) != "number" ? 0 : intervalo;

	procesos++;
	maxprocesos++;
	
	if(rastro)
	{
		if( typeof(id_contenedor) == "string" )
		{
			if(!document.getElementById(id_contenedor) )
			{
				return;
			}
		}
	}
	
	if (id_contenedor == "_blank")
	{
		var opciones = ("toolbar=yes,location=no,directories=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,fullscreen=yes");
		url += parametros == "" ? "" : "?" + parametros;
		
		ventana = window.open(url, "ajax", opciones);
		ventana.focus();

		procesos--;
		return true;
	}
	else if (id_contenedor == "_top")
	{
		window.location = parametros == "" ? "" : "?" + parametros;
	}
	else
	{
		contenedor = typeof(id_contenedor) == "object" ? id_contenedor : objetoCrear('div', id_contenedor);
	}
	
	contenedor.url = url;
	contenedor.parametros = parametros;
	contenedor.metodo = method;
	contenedor.intervalo = intervalo;
	contenedor.espera = 0;

	if (window.XMLHttpRequest)
	{
		pagina = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try
		{
			pagina = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				pagina = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
			}
		}
	}
	else
	{
		return false;
	}

	pagina.onreadystatechange = function()
	{
		loadPage(pagina, contenedor, rastro);
	}
	if (!method || method == "get")
	{
		url = url + "?" + parametros + (parametros == "" ? "mktime=" : "&mktime=") + mktime.getTime();
		pagina.open('GET', url, true);
		pagina.setRequestHeader('Content-Type', 'text/xml; charset=UTF-8');
		pagina.send(null);
	}
	else
	{
		url = url + "?" + "mktime=" + mktime.getTime();
		pagina.open('POST', url, true);
		pagina.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		pagina.send(parametros);
	}
}

function formularioEnviar(Formulario)
{
	var Cadena = "";
	var Elementos;
	var url = "";
	var prueba;
	var i;
	var iframe = false;

	Cadena = urlParametros(Formulario.action);
	Elementos = Formulario.getElementsByTagName("input");
	if (Elementos != null)
		for (i = 0; i < Elementos.length; i++)
		{
			switch (Elementos[i].type)
			{
				case "checkbox":
					if (Elementos[i].checked)
					{
						Cadena += Cadena == "" ? "" : "&";
						Cadena += Elementos[i].name + "=";
						Cadena += escape(Elementos[i].value);
					}
					break;
				case "radio":
					if (Elementos[i].checked)
					{
						Cadena += Cadena == "" ? "" : "&";
						Cadena += Elementos[i].name + "=";
						Cadena += escape(Elementos[i].value);
					}
					break;
				case "password":
					Cadena += Cadena == "" ? "" : "&";
					Cadena += Elementos[i].name + "=";
					Cadena += escape(Elementos[i].value);
					Elementos[i].value = "";
					break;
				case "button":
				case "submit":
					Cadena += Cadena == "" ? "" : "&";
					Cadena += Elementos[i].name + "=";
					Cadena += escape(Elementos[i].value);
					break;
				case "file":
					iframe = true;
					break;
				default:
					Cadena += Cadena == "" ? "" : "&";
					Cadena += Elementos[i].name + "=";
					Cadena += escape(Elementos[i].value);
					break;
			}
		}
	Elementos = Formulario.getElementsByTagName("textarea");
	if (Elementos != null)
		for (i = 0; i < Elementos.length; i++)
		{
			Cadena += Cadena == "" ? "" : "&";
			Cadena += Elementos[i].name + "=";
			Cadena += escape(Elementos[i].value);

			if (Elementos[i].className.indexOf("comando") > -1)
				Elementos[i].value = "";

		}
	Elementos = Formulario.getElementsByTagName("select");
	if (Elementos != null)
	{
		for (i = 0; i < Elementos.length; i++)
		{
			Cadena += Cadena == "" ? "" : "&";
			Cadena += Elementos[i].name + "=";
			Cadena += escape(Elementos[i].value);
		}
	}

	Elementos = Formulario.getElementsByTagName("button");
	if (Elementos != null)
	{
		for (i = 0; i < Elementos.length; i++)
		{
			Cadena += Cadena == "" ? "" : "&";
			Cadena += Elementos[i].name + "=";
			Cadena += escape(Elementos[i].value);
		}
	}

	if (iframe)
	{
		var frame = objetoCrear('iframe', 'iframe_' + Formulario.id);
		frame.style.display = "none";
		Formulario.target = 'iframe_' + Formulario.id;
		Formulario.className = Formulario.className.indexOf("loading") < 0 ? Formulario.className + " loading" : Formulario.className;
		Formulario.submit();
		frame.onload = function()
		{
			Formulario.innerHTML = this.contentWindow.document.body.innerHTML;
			Formulario.className = Formulario.className.indexOf("loading") < 0 ? Formulario.className : Formulario.className.substr(0, Formulario.className.indexOf("loading")) + Formulario.className.substr(Formulario.className.indexOf("loading") + 7);
		}
	}
	else
	{
		paginaCargar(Formulario.action, Cadena, Formulario.getAttribute('target'), Formulario.method);
	}

}
/****************************************************************************
3.	Interfaz AJAX
****************************************************************************/
// Alias de paginaCargar para compatibilidad con versiones anteriores
function CargarPagina(url, parametros, id_contenedor, method, splash, msgloading, actualizar)
{
	paginaCargar(url, parametros, id_contenedor, method, splash, msgloading, actualizar);
}
/****************************************************************************
4.	Funciones de propósito general
****************************************************************************/
function objetoCrear(tipo, id, clase, padre)
{
	var objeto;
	
	if(document.getElementById(id))
	{
		objeto = document.getElementById(id) ;
		
		if (typeof(id) == 'string' && id != '')
		{
			objeto.id = id;
			objeto.name = id;
		}
		
		
	}
	else
	{
		objeto = document.createElement(tipo);
		
		if (typeof(id) == 'string' && id != '')
		{
			objeto.id = id;
			objeto.name = id;
		}
		
		
		if (typeof(padre) == 'object')
		{
			padre.appendChild(objeto);
		}
		else
		{
			document.body.appendChild(objeto);
		}
	}
	

	if (typeof(clase) == 'string' && clase != '')
	{
		objeto.className = clase;
	}
	
	return objeto;
}
function Dimensiones()
{
	var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' ? d.documentElement : d.body;

	ancho = BrowserDetect.browser == "Explorer" ? iebody.clientWidth : (d.documentElement.clientWidth || self.innerWidth);
	alto = BrowserDetect.browser == "Explorer" ? iebody.clientHeight : self.innerHeight;
	
	estado("Pantalla: " + ancho + "x" + alto);

}
function validar(valor, patron)
{
	var expreg = new RegExp(patron),
		cadena = valor

		if (expreg == "" || cadena == "")
		{

			return false;
		}

	if (expreg.test(cadena))
	{
		return expreg.exec(cadena);
	}

	return false;
}
function cargarEventos()
{
	BrowserDetect.init();

	addEvent(window, 'load', demonio);
	addEvent(window, 'load', menuActivar);
	addEvent(window, 'load', function() {vinculosRedireccionar(document);});
	addEvent(window, 'load', function() {ventanasCargar();});
	addEvent(window, 'load', Main);
	addEvent(window, 'load', function() {variables(); Dimensiones();});
	addEvent(window, 'resize', function() {Dimensiones();});
	addEvent(window, 'mouseup', function() {Soltar();});	
	addEvent(document, 'mousemove', MouseCheck);
}
function addEvent(elemento, nomevento, funcion, captura)
{
	if (elemento.attachEvent)
	{
		elemento.attachEvent('on' + nomevento, funcion);
		return true;
	}
	else if (elemento.addEventListener)
	{
		elemento.addEventListener(nomevento, funcion, captura);
		return true;
	}
	else
	{
		return false;
	}
}
//Capturar la posicion del mouse
function MouseCheck(e)
{
	var e = e ? e : window.event;

	posx = e.pageX ? e.pageX : e.clientX;

	posy = e.pageY ? e.pageY : e.clientY;

}
// Funcion para el depurado
function propiedades(objeto, nombre)
{
	for (var i in objeto)
	{
		trace(nombre + "." + i + " = " + objeto[i], nombre + '_' + i);
	}
}
function trace(texto, variable, destino, tipo)
{
	if (typeof(destino) == 'undefined')
		destino = typeof(debug) == 'undefined' ? null : debug;
	else if (typeof(destino) == 'string')
		destino = objetoCrear('div', destino);

	tipo = typeof(tipo) == 'undefined' ? 'p' : tipo;

	if (destino)
	{
		var mensaje = objetoCrear(tipo, variable, '', destino);
		mensaje.innerHTML = texto;
		destino.scrollTop = destino.scrollHeight;
		
		alert(destino.id);
	}

}
function estado(texto)
{
	if (!state)
	{
		state = document.getElementById('state');
	}
	if (state)
	{
		state.innerHTML = texto;
	}
}
function error(texto)
{
	if (!cerror)
	{
		cerror = document.getElementById('error');
	}
	if (state)
	{
		cerror.innerHTML = texto;
	}
}

/****************************************************************************
5.	Manipulación de COOKIES
****************************************************************************/
function GetCookie(name, InCookie)
{
	var prop = name + "="; // propiedad buscada
	var plen = prop.length;
	var clen = InCookie.length;
	var i = 0;
	if (clen > 0)
	{ // Cookie no vacío
		i = InCookie.indexOf(prop, 0); // aparición de la propiedad
		if (i != -1)
		{ // propiedad encontrada
			// Buscamos el valor correspondiente
			j = InCookie.indexOf(";", i + plen);
			if (j != -1) // valor encontrado
				return unescape(InCookie.substring(i + plen, j));
			else //el último no lleva ";"
				return unescape(InCookie.substring(i + plen, clen));
		}
		else
			return "";
	}
	else
		return "";
}
function SetCookie(name, value)
{
	// número de parámetros variable.
	var argv = SetCookie.arguments;
	var argc = SetCookie.arguments.length;
	// asociación de parámetros a los campos cookie.
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	// asignación de la propiedad tras la codificación URL
	document.cookie = name + "=" + escape(value) +
		((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
		((path == null) ? "" : (";path=" + path)) +
		((domain == null) ? "" : ("; domain=" + domain)) +
		((secure == true) ? "; secure" : "");
}
function DeleteUsernameAndTime(username)
{
	var today = new Date();
	var expire = new Date("Feb 12, 1980"); // fecha pasada
	// Asignación de la propiedad username
	SetCookie("username", username.value, expire);
	// Asignación de la propiedad lastime
	SetCookie("lastime", today.getTime(), expire);
	alert("El cookie " + username + " se ha borrado");
	return true;
}
/****************************************************************************
6.	Análisis de URL's
****************************************************************************/
function urlExterna(url)
{
	dir = basedir(window.location);
	if (url.indexOf("http://") == 0 && url.indexOf(dir) != 0)
		return true;
	else
		return false;
}
function basedir(url)
{
	var URL = new String(url);
	var Cadena;

	Cadena = URL.indexOf("#") > 0 ? URL.substr(0, URL.indexOf('#')) : URL;
	Cadena = Cadena.indexOf("?") > 0 ? Cadena.substr(0, Cadena.indexOf('?')) : Cadena;
	Cadena = Cadena.indexOf("/") > 0 ? Cadena.substr(0, Cadena.lastIndexOf('/') + 1) : "";

	return Cadena;
}
function urlArchivo(url)
{
	var cadena = new String, directorio = "";
	var actual, inicio;
	cadena = url;
	if (cadena.indexOf('?') >= 0)
	{
		return cadena.substring(0, cadena.indexOf('?'));
	}
	else
	{
		return cadena;
	}
}
function addUrl(url, extra)
{

	var dir = new String(basedir(window.location));

	extra = extra ? extra : "";
	if (url.indexOf(dir) == 0)
	{
		url = extra + url.substring(dir.length);
	}
	else
	{
		url = extra + url;
	}

	return url;
}
function urlParametros(url)
{
	var cadena = new String, directorio = "";
	var actual, inicio;
	cadena = url;
	if (cadena.indexOf('?') >= 0)
	{
		return cadena.substring(cadena.indexOf('?') + 1);
	}
	else
	{
		return "";
	}
}
/****************************************************************************
7.	Análisis y redirección de contenido
****************************************************************************/

function demonio()
{
	var ahora = new Date();
	trace('Tiempo total de los procesos: ' + tiempoproceso, 'tiempoproceso');
	trace('Total de procesos: ' + maxprocesos, 'maxprocesos');
	trace('Procesos activos: ' + proceso, 'proceso')

		tiempoproceso = procesos > 0 ? tiempoproceso + 1 : 0;

	contador++;
	
	if (url_actual != window.location || cargado == false)
	{
		url_actual = String(window.location);

		cargado = false;

		var url = new String(window.location), seccion = new String;

		ajaxurl = url.indexOf('#') >= 0 ? url.substr(url.indexOf('#') + 1) : "";
		destino = ajaxurl.indexOf(':') >= 0 ? ajaxurl.substr(0, ajaxurl.indexOf(':')) : "";
		seccion = ajaxurl.indexOf(':') >= 0 ? ajaxurl.substr(ajaxurl.indexOf(':') + 1) : "";

		if (seccion != "" && destino != "")
		{
			var contenedor = document.getElementById(destino);
			if (contenedor)
			{
				cargado = true;
				parametros = seccion.indexOf('?') >= 0 ? seccion.substr(seccion.indexOf('?') + 1) : '';
				seccion = seccion.indexOf('?') >= 0 ? seccion.substr(0, seccion.indexOf('?')) : seccion;
				paginaCargar(seccion, parametros, destino, 'get');
			}
		}
		else
		{
			cargado = true;
		}

	}

	setTimeout("demonio();", 50);
}

function vinculosRedireccionar(contenedor)
{
	var vinculos, destino, clase;
	var url, clase, target;
	var nvinculos = 0, nimagenes = 0, nforms = 0, nmultimedia;
	var enventana = false;

	contenedor = typeof(contenedor) == 'undefined' ? document : (typeof(contenedor) == 'string' ? document.getElementById(contenedor) : contenedor);

	vinculos	= contenedor.getElementsByTagName("a");
	imagenes	= contenedor.getElementsByTagName("img");
	multimedia	= contenedor.getElementsByTagName("embed");	
	formularios	= contenedor.getElementsByTagName("form");
	
	for (var i = 0 ; i < vinculos.length; i++)
	{
		clase = vinculos[i].className.indexOf("ajax") > -1 ?
				'ajax'
				:
				( vinculos[i].className.indexOf("onload") > -1 ?
				'onload' 
				:
				( vinculos[i].className.indexOf("ventana") > -1 ? 'ajax' :
				'' 
				));
		
		if(clase!='' && vinculos[i].ajax!=true)
		{
			vinculos[i].ajax = true;
			
			switch (vinculos[i].getAttribute('target'))
			{
				case "_top":
					destino ='_top';
					break;
				case "_self":
					destino = contenedor;
					break;
				case "_blank":
					destino = '_blank';
					break;
				case "_parent":
					destino = contenedor.parentNode;
					break;
				default:
					destino = typeof(vinculos[i].getAttribute('target')) == 'undefined'?contenedor:vinculos[i].getAttribute('target');
					break;
			}
			
			switch(clase)
			{
				case 'ajax':
					vinculos[i].destino = destino;
					vinculos[i].onclick = function(e)
					{
						if (window.event) window.event.returnValue = false; else if (e) e.preventDefault();

						var raiz 	= this.className.indexOf("raiz") > -1 ?true:false;
						var url		= urlArchivo(this.getAttribute('href'));
						var param	= urlParametros(this.getAttribute('href'));
						var enventana = this.className.indexOf("ventana") > -1 ?true:false;
						var actualizar = 0;
						var info;
						var ancho = 'inerte';
						var alto = 'inerte';
						var traso = this.className.indexOf("trace") > -1 ? true : false ;
						
						if(this.className.indexOf("refresh") > -1)
						{
							info = validar(this.className,'seconds([0-9]*)');
							actualizar = parseInt(info[1])*1000;
						}
						if(this.className.indexOf("size") > -1)
						{
							info = validar(this.className,'size([0-9]+)x([0-9]+)');
							ancho = info[1]?parseInt(info[1]):'inerte';
							alto = info[2]?parseInt(info[2]):'inerte';
						}
						
						url	= raiz == true || destino == "_blank" ? url : addUrl(url,basedir(contenedor.url));				
						
						if(enventana==true)
						{
							ventanaCrear(this.destino,this.getAttribute('title') ? this.getAttribute('title') :'','centrar','centrar',ancho,alto);
						}
						
						paginaCargar(url, param, this.destino, "get", actualizar, traso);
					}
					break;
				case 'onload':
					var raiz 	= vinculos[i].className.indexOf("raiz") > -1 ?true:false;
					var url		= urlArchivo(vinculos[i].getAttribute('href'));
					var param	= urlParametros(vinculos[i].getAttribute('href'));
					var enventana = vinculos[i].className.indexOf("ventana") > -1 ?true:false;
					var actualizar = 0;
					var info;
					var ancho = 'inerte';
					var alto = 'inerte';
					var traso = vinculos[i].className.indexOf("trace") > -1 ? true : false ;
					var retraso = 0;
					
					if(vinculos[i].className.indexOf("refresh") > -1)
					{
						info = validar(vinculos[i].className,'seconds([0-9]*)');
						actualizar = parseInt(info[1])*1000;
					}
					if(vinculos[i].className.indexOf("retraso") > -1)
					{
						info = validar(vinculos[i].className,'seconds([0-9]*)');
						retraso = parseInt(info[1])*1000;
					}
					if(vinculos[i].className.indexOf("size") > -1)
					{
						info = validar(vinculos[i].className,'size([0-9]+)x([0-9]+)');
						ancho = info[1]?parseInt(info[1]):'inerte';
						alto = info[2]?parseInt(info[2]):'inerte';
					}					
					
					url	= raiz == true || destino == "_blank"? url : addUrl(url,basedir(contenedor.url));
					
					if(enventana==true)
					{
						ventanaCrear(destino,vinculos[i].getAttribute('title') ? vinculos[i].getAttribute('title') :'','centrar','centrar',ancho,alto);
					}
					
					if(retraso > 0)
					{
						setTimeout("paginaCargar('" + url + "','" + param + "','" + (typeof(destino) == "string" ? destino : destino.id ) + "','get')", retraso);
					}
					else
					{
						paginaCargar(url, param, destino, "get",actualizar, traso);
					}
					
					break;
			}
			
		}
	
	}
	
		
	for (i = 0; i < multimedia.length; i++)
	{
		if (multimedia[i].className.indexOf("ajax") > -1)
		{
			nmultimedia++;
			url = multimedia[i].src;
			trace("Imagen: " + url, 'imagen');
			multimedia[i].src = addUrl(url, basedir(contenedor.url));
		}
	}
	
	for (i = 0; i < imagenes.length; i++)
	{
		if (imagenes[i].className.indexOf("ajax") > -1)
		{
			nimagenes++;
			url = imagenes[i].src;
			trace("Imagen: " + url, 'imagen');
			imagenes[i].src = addUrl(url, basedir(contenedor.url));
		}
	}	
		
	if (formularios != null)
		for (var i = 0; i < formularios.length; i++)
		{
			if (formularios[i].target != "" && formularios[i].className.indexOf("ajax") > -1)
			{
				nforms++;
				formularios[i].target = formularios[i].target == "_self" ? contenedor.id : formularios[i].target;
				
				if (formularios[i].getAttribute('action') == "")
					formularios[i].action = source;
				else
					formularios[i].action = addUrl(formularios[i].getAttribute('action'), basedir(contenedor.url));
					

				formularios[i].onsubmit = function(e)
				{
					if (window.event)
						window.event.returnValue = false;
					else if (e)
						e.preventDefault();
						
					formularioEnviar(this);
				}
				
				var textarea	= formularios[i].getElementsByTagName("textarea");

				for (var j = 0; j < textarea.length; j++)
				{
					if (textarea[j].className.indexOf("comando") > -1)
					{
						textarea[j].formulario = formularios[i];

						textarea[j].onkeypress = function(e)
						{
							e = (window.event) ? event : e;

							tecla = (e.keyCode) ? e.keyCode : e.charCode;

							if (tecla == 13)
							{
								formularioEnviar(this.formulario);


								this.focus();

								try
								{
									e.preventDefault();
								}
								catch (e)
								{
									e.returnValue = false; // IE
								}

								return false;
							}
						}
					}
				}
			}
		}
	if (nforms > 0)
		trace(nforms + " formularios redireccionados", "formularios_redireccionados");
}

function ventanasCargar(id)
{
	capas	= id ? document.getElementById(id).getElementsByTagName('div') : document.getElementsByTagName('div');

	for (var i = 0; i < capas.length; i++)
	{
		if (capas[i].className.indexOf("ventana") > -1)
		{
			nventanas++;
			ventanas[nventanas] = new ventana(capas[i],
								capas[i].getAttribute('title')?capas[i].getAttribute('title'):capas[i].id,
								capas[i].style.left?parseInt(capas[i].style.left.substring(0,capas[i].style.left.length-2)):'centrado',
								capas[i].style.top?parseInt(capas[i].style.top.substring(0,capas[i].style.top.length-2)):'centrado',
								capas[i].style.width?parseInt(capas[i].style.width.substring(0,capas[i].style.width.length-2)):'inerte',								
								capas[i].style.height?parseInt(capas[i].style.height.substring(0,capas[i].style.height.length-2)):'inerte'
								);
			ventanas[nventanas].zIndex(nventanas);
			ventanasCargar(id);
			return;
		}
	}
}
function menuActivar()
{
	if (!document.getElementById("menu"))
		return;
	trace('Cargando menu desplegable...', 'accion');
	var Elementos = document.getElementById("menu").getElementsByTagName("li");
	if (Elementos)
		for (var i = 0; i < Elementos.length; i++)
		{
			Elementos[i].onmouseover = function()
			{
				this.className = "activo";
			}
			Elementos[i].onmouseout = function()
			{
				this.className = "inactivo";
			}
			Elementos[i].onclick = function()
			{
				menuOcultar();
			}
		}
}
/****************************************************************************
8.	Efectos visuales
****************************************************************************/
function alTope(id)
{
	var objeto = typeof(id) == 'string' ? document.getElementById(id) : id;

	var y	=	Math.round(document.body.scrollTop + (alto - objeto.clientHeight) / 3);
	var x	=	Math.round(document.body.scrollLeft + (ancho - objeto.clientWidth) / 2);

	var sx = objeto.offsetLeft;	
	var sy = objeto.offsetTop;
	
	y = y < document.body.scrollTop ? document.body.scrollTop : y ;
	
	
	if( sx != x )
	{
		objeto.style.left = sx + (Math.abs( x - sx ) <= 10 ? ( x - sx ) : Math.round(( x - sx ) / 10 )) + 'px';
	}
	if( sy != y )
	{
		objeto.style.top  = sy + (Math.abs( y - sy ) <= 10 ? ( y - sy ) : Math.round(( y - sy ) / 10 )) + 'px';		
	}
	
	if( sx != x || sy != y )
	{
		
		id = typeof(id) == 'string' ?  id : objeto.id;
		
		setTimeout("alTope('" + id + "')",10);
		
		document.title = "[ " + sx + " - " + x + "] [ " + sy + " - " + y + "] ";
	}
	else
	{
		document.title = "SALIR";
	}
	
}
function zoom(objeto, porcentaje)
{
	objeto = typeof(objeto) == 'string' ? document.getElementById(objeto) : objeto;
	objeto.x = typeof(objeto.x) == 'undefined' ? objeto.offsetLeft : objeto.x;
	objeto.y = typeof(objeto.y) == 'undefined' ? objeto.offsetTop : objeto.y;
	objeto.ancho = typeof(objeto.ancho) == 'undefined' ? objeto.clientWidth : objeto.ancho;
	objeto.alto = typeof(objeto.alto) == 'undefined' ? objeto.clientHeight : objeto.alto;
	objeto.style.width = (objeto.ancho * porcentaje / 100) + 'px';
	objeto.style.height = (objeto.alto * porcentaje / 100) + 'px';
	objeto.style.left = objeto.x + (objeto.ancho - (objeto.ancho * porcentaje / 100)) / 2;
	objeto.style.top = objeto.y + (objeto.alto - (objeto.alto * porcentaje / 100)) / 2;
}
function transparencia(objeto, degree)
{

	objeto = typeof(objeto) == 'string' ? document.getElementById(objeto) : objeto;

	objeto.style.visibility = degree == 0 ? "hidden" : "visible";

	if (BrowserDetect.browser != "Explorer")
	{
		objeto.style.MozOpacity = parseFloat(degree) / 100.0;
	}
	else if (BrowserDetect.browser == "Explorer" && objeto.style.filter != "")
	{
		objeto.filters.alpha.opacity = degree;
	}
	else if (BrowserDetect.browser == "Explorer" && objeto.style.filter == "")
	{
		objeto.style.filter = "alpha(opacity=" + degree + ")";
		objeto.filters.alpha.opacity = degree;
	}

	return degree;
}
function fadein(objeto)
{
	objeto = typeof(objeto) == 'string' ? document.getElementById(objeto) : objeto;

	trace("fade: " + objeto.fadein + ", " + objeto.fadeout, "fade");

	objeto.transparencia = typeof(objeto.transparencia) == 'undefined' ? 0 : objeto.transparencia;

	if (objeto.transparencia < 100)
	{
		objeto.fadein = true;

		objeto.transparencia += 5;

		transparencia(objeto, objeto.transparencia);

		trace("fade in: " + objeto.transparencia, "fadein");

		zoom(objeto, 90 + (objeto.transparencia / 10));

		setTimeout("fadein('" + objeto.id + "')", 15);
	}
	else
	{
		objeto.transparencia = 100;

		objeto.fadein = false;
	}

}
function fadeout(objeto, porcentaje)
{
	objeto = typeof(objeto) == 'string' ? document.getElementById(objeto) : objeto;
	if (!objeto) return;

	trace("fade: " + objeto.fadein + ", " + objeto.fadeout, "fade");

	objeto.transparencia = typeof(objeto.transparencia) == 'undefined' ? 0 : objeto.transparencia;

	if (objeto.transparencia > 0)
	{
		objeto.fadeout = true;

		objeto.transparencia -= 5;

		transparencia(objeto, objeto.transparencia);

		trace("fade out: " + objeto.transparencia, "fadeout");

		zoom(objeto, 90 + (objeto.transparencia / 10));

		setTimeout("fadeout('" + objeto.id + "')", 15);
	}
	else
	{
		objeto.transparencia = 0;

		objeto.fadeout = false;
	}
}
function centrar(objeto)
{
	objeto = typeof(objeto) == 'string' ? document.getElementById(objeto) : objeto;

	if (objeto)
	{
		Dimensiones();

		var y	=	document.body.scrollTop + (alto - objeto.clientHeight) / 3;
		var x	=	document.body.scrollLeft + (ancho - objeto.clientWidth) / 2;

		objeto.style.top = Math.round(y) + "px";
		objeto.style.left = Math.round(x) + "px";
	}
}
function SplashCentrado(id_objeto, tiempo)
{
	objeto	= document.getElementById(id_objeto);
	objeto.style.visibility = "visible";
	centrar(id_objeto);
	if (tiempo <= 0)
	{
		fadeout(id_objeto);
	}
	else
	{
		setTimeout("SplashCentrado('" + id_objeto + "'," + (tiempo - 100) + ")", 100);
	}
}
/****************************************************************************
9.	Menús desplegables
****************************************************************************/
function menuOcultar()
{
	var Elementos = document.getElementById("menu").getElementsByTagName("li");
	if (Elementos)
		for (var i = 0; i < Elementos.length; i++)
		{
			Elementos[i].className = "inactivo";
		}
}
/****************************************************************************
10.	Simulacion de ventanas
****************************************************************************/
function ventana(objeto,titulo, px, py, wancho, walto)
{
	this.panel = objeto;

	this.panel.className = "main-edge";

	this.contenedor = objetoCrear("div", null, "window", document.body);

	this.contenedor.className = "window";
	
	this.contenedor.id = "window_" + objeto.id;	
	
	this.nombre = typeof(titulo) == 'string' ? titulo : ( this.panel.titulo ? this.panel.titulo : (objeto.id ? objeto.id : "Ventana " + nventanas) );

	this.id = "ventana_" + (objeto.id ? objeto.id : nventanas);

	this.contenedor.indice = nventanas;

	this.top_left = objetoCrear("div", null, "top-left-edge", this.contenedor);
	this.top_right = objetoCrear("div", null, "top-right-edge", this.top_left);
	this.caption = objetoCrear("div", null, "top-edge", this.top_right);

	this.actions = objetoCrear("div", null, "actions", this.caption);
	this.cerrar = objetoCrear("div", null, "action_close", this.actions);
	//this.maximizar = objetoCrear("div", null, "action_maximized", this.actions);
	//this.minimizar = objetoCrear("div", null, "action_minimized", this.actions);

	this.titulo = objetoCrear("h1", null, null, this.caption);

	this.left = objetoCrear("div", null, "left-edge", this.contenedor);
	this.right = objetoCrear("div", null, "right-edge", this.left);
	//this.background = objetoCrear("div", null, "background-main-edge", this.right);
	this.right.appendChild(this.panel);

	this.bottom_left = objetoCrear("div", null, "bottom-left-edge", this.contenedor);
	this.bottom_right = objetoCrear("div", null, "bottom-right-edge", this.bottom_left);
	objetoCrear("div", null, "bottom-edge", this.bottom_right);


	this.titulo.innerHTML = this.nombre;

	this.titulo.contenedor = this.contenedor;
	this.titulo.ventanaid = this.id;
	this.cerrar.ventana = this;
	
	//propiedades


	Dimensiones();
	
	if( typeof(wancho) == 'number' )
		this.ancho = wancho;
	if( typeof(walto) == 'number' )
		this.alto = walto;	

	if(this.ancho)
	{
		this.panel.style.width = this.ancho + 'px';
	}
		
	if(this.alto)
	{
		this.panel.style.height = this.alto + 'px'; 
		this.panel.style.overflow = "auto";
	}

	if(BrowserDetect.browser == "Explorer")
	{
		
		this.contenedor.style.width = ( this.panel.clientWidth + 42 ) + 'px';
		this.contenedor.style.height = ( this.panel.clientHeight + 42 ) + 'px';		
		
		var y	=	document.body.scrollTop + (alto - walto) / 3;
		var x	=	document.body.scrollLeft + (ancho - wancho) / 2;
		
	}
	else
	{
		var y	=	document.body.scrollTop + (alto - this.contenedor.clientHeight) / 3;
		var x	=	document.body.scrollLeft + (ancho - this.contenedor.clientWidth) / 2;
	}
	
	this.x = typeof(px) == 'number' ? ( px > 0 ? px : ancho + px ) : Math.round(x);
	this.y = typeof(py) == 'number' ? ( py > 0 ? py : alto + py ) :  Math.round(y);
	

	this.contenedor.style.left = isNaN(this.x) ? '' : this.x + 'px';
	this.contenedor.style.top = isNaN(this.y) ? '' : this.y + 'px';

	
	//eventos

	this.titulo.onmousedown = function(e)
	{
		Sujetar(e,this.contenedor);
	}
	this.contenedor.onmousedown = function(e)
	{
		ventanaEnfocar(this);
	}
	this.cerrar.onclick = function(e)
	{
		this.ventana.close();
	}
	this.panel.onresize = function(e)
	{
		this.offsetParent.style.width = ( this.clientWidth + 42 ) + 'px';
		this.offsetParent.style.height = ( this.clientHeight + 42 ) + 'px';		
	}
	
	//funciones

	this.zIndex = ventanaZIndex;
	this.close = ventanaCerrar;

}
function ventanaCerrar()
{
	var aux, indice, ventana, padre;

	indice = this.indice;
	ventana = this;

	for (var i = indice + 1; i < ventanas.length; i++)
	{
		aux = ventanas[i-1];
		ventanas[i-1] = ventanas[i];
		ventanas[i] = aux;
		ventanas[i-1].zIndex(i - 1);
		ventanas[i].zIndex(i);
	}

	if( this.panel.t ){ clearTimeout(this.panel.t);	}
	padre = this.contenedor.offsetParent;
	padre.removeChild(this.contenedor);

	nventanas--;
}
function ventanaZIndex(indice)
{
	this.indice = indice;
	this.contenedor.indice = indice;
	this.contenedor.style.zIndex = 100 + indice;
	SetCookie(this.id + "_posz", indice);

}
function ventanaAgregar(ventana)
{
}

function ventanaCrear(id, titulo, px, py , ancho, alto)
{

	var contenedor = typeof(id)=='object'?id:(document.getElementById(id) ? document.getElementById(id) : objetoCrear('div', id, 'ventana'));
	
	if (contenedor.className.indexOf("ventana") > -1)
	{
		nventanas++;
		ventanas[nventanas] = new ventana(contenedor,titulo, px, py , ancho, alto);
		ventanas[nventanas].zIndex(nventanas);
	}
	return contenedor;
}

function ventanaEnfocar(ventana)
{
	var aux, indice;

	indice = ventana.indice;
	ventana = ventanas[ventana.indice];

	for (var i = indice + 1; i < ventanas.length; i++)
	{
		aux = ventanas[i-1];
		ventanas[i-1] = ventanas[i];
		ventanas[i] = aux;
		ventanas[i-1].zIndex(i - 1);
		ventanas[i].zIndex(i);
	}

	ventanas[ventanas.length - 1] = ventana;
	ventanas[ventanas.length - 1].zIndex(ventanas.length - 1);
}
function ventanaGenerar(id, caption, width, height)
{
	var ventana	= objetoCrear('div', id, 'ventana');
	var	cerrar		= objetoCrear('div', '', 'cerrar', ventana);
	var titulo		= objetoCrear('h1', '', '', ventana);
	var marco		= objetoCrear('div', '', 'marco', ventana);

	ventana.style.width = width + "px";
	ventana.style.height = height + "px";
	ventana.style.visibility = "visible";
	ventana.style.display = "block";
	ventana.style.position = "absolute";

	marco.style.width = width + "px";
	marco.style.height = (height - 25) + "px";
	marco.className = "marco";

	titulo.style.cursor = "move";
	titulo.innerHTML = caption;

	cerrar.innerHTML = "Cerrar";

	ventanaAgregar(ventana);

	ventanaEnfocar(ventana);
}
function ventanaCargar(url, parametros, id, caption, width, height)
{
	ventanaGenerar(id, caption, width, height);
	paginaCargar(url, parametros, id, 'post', 0);
}

function evitaEventos(event)
{
	// Funcion que evita que se ejecuten eventos adicionales
	if(BrowserDetect.browser == "Explorer")
	{
		window.event.cancelBubble=true;
		window.event.returnValue=false;
	}
	else
	{
	 	event.preventDefault();
	}
}

function Soltar()
{
	if(BrowserDetect.browser == "Explorer")
	{    
		document.detachEvent("onmousemove", Mover);
		document.detachEvent("onmouseup", Soltar);
	}
	else
	{
		document.removeEventListener("mousemove", Mover, true);
		document.removeEventListener("mouseup", Soltar, true); 
	}

}
function Sujetar(event, id)
{
	
	ancla = typeof(id) == 'string' ? document.getElementById(id) : id ;
	
	if(ancla.nodeType==3) ancla=ancla.parentNode;
	
	if(BrowserDetect.browser == "Explorer")
	 {
	 	cursorComienzoX=window.event.clientX+document.documentElement.scrollLeft+document.body.scrollLeft;
		cursorComienzoY=window.event.clientY+document.documentElement.scrollTop+document.body.scrollTop;

		document.attachEvent("onmousemove", Mover);
		document.attachEvent("onmouseup", Soltar);
	}
	else
	{    
		cursorComienzoX=event.clientX+window.scrollX;
		cursorComienzoY=event.clientY+window.scrollY;
		
		document.addEventListener("mousemove", Mover, true); 
		document.addEventListener("mouseup", Soltar, true);
	}
	
	elComienzoX = parseInt(ancla.style.left);
	elComienzoY = parseInt(ancla.style.top);
	
	evitaEventos(event);
}
function Mover(event)
{  
	var xActual, yActual;
	if(BrowserDetect.browser == "Explorer")
	{    
		xActual=window.event.clientX+document.documentElement.scrollLeft+document.body.scrollLeft;
		yActual=window.event.clientY+document.documentElement.scrollTop+document.body.scrollTop;
	}  
	else
	{
		xActual=event.clientX+window.scrollX;
		yActual=event.clientY+window.scrollY;
	}
	
	ancla.style.left=(elComienzoX+xActual-cursorComienzoX)+"px";
	ancla.style.top=(elComienzoY+yActual-cursorComienzoY)+"px";

	evitaEventos(event);
}


/****************************************************************************

Inicio de la automatización

****************************************************************************/

cargarEventos();

function Main()
{
	trace("JQ - AJAX");
	trace("Autor: Jesús Manuel Rosales Quiroga");
	trace("email: jesusquiroga@gmail.com");
	trace("Version: 3.8.0");
	trace("Browser: " + BrowserDetect.browser + " " + BrowserDetect.version);
	trace("Sistema operativo: " + BrowserDetect.OS);
	trace("-----------------------");
}
function variables()
{
	debug = document.getElementById('debug');

	/*state = objetoCrear('div','estado');
	cerror = objetoCrear('div','error');*/
}

