/************************************************** AJAX: */

// metodo abreviado:
function $(id)
{
	return document.getElementById(id);
}

// metodo para generar componente ajax:
function ajaxObjeto()
{
	var xmlhttp=false;
	try{ xmlhttp=new ActiveXObject('Msxml2.XMLHTTP'); }
	catch(e)
	{
		try{ xmlhttp=new ActiveXObject('Microsoft.XMLHTTP'); }
		catch(E){ xmlhttp=false; }
	}
	if(!xmlhttp && typeof XMLHttpRequest!='undefine'){ xmlhttp=new XMLHttpRequest(); }
	return xmlhttp;
}

// metodo para ejecutar ajax y obtener respuesta:
function ajaxOpen(nombre,open_this,send_this,type)
{
	// alert(nombre+' - '+open_this+' - '+send_this+' - '+type);
	// genero el objeto ajax:
	ajax=ajaxObjeto();
	// abro archivo por metodo post:
	ajax.open('GET',open_this+send_this,true);
	// verifico cada cambio del estado del objeto ajax:
	ajax.onreadystatechange=function()
	{
		// espero el status "complete"/"4" para asignar contenido:
		if(ajax.readyState==4)
		{
			if(ajax.status==200)
			{
				// retorno ok, asigno acciones:
				ajaxAfter(ajax.responseText,nombre,type);
			}
			else if(ajax.status==404)
			{
				// url no existe:
				// alert('no existe: '+open_this);
				return "<br/>Error:<br/>La direccion no existe.";
			}
			else
			{
				// errores:
				// alert('otro error: '+ajax.status);
				return "<br/>Error:"+ajax.status;
			}
		}
	}
	// seteo cabeceras:
	ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	// envio de datos:
	ajax.send(null);
}

// metodo para mostrar resultado y aplicar metodos js:
function ajaxAfter(resultado,nombre,type)
{
	// alert(resultado+' - '+nombre+' - '+type);
	/********** POPUP: */
	/*
		Si el type es popup, le digo que genere un popup nuevo y llene el contenido con el resultado de la solicitud.
	*/
	if(type=='popup')
	{
		// genero caja con fondo opaco transparente:
		caja_bloqueo=crearDiv('popup','','');
		// genero caja para el contenido total del popup:
		caja_visible=crearDiv('contenido_popup','','');
		// genero boton para cerrar el popup:
		btn_cerrarpop=crearDiv('cerrarpop','cerrarPop();','1');
		btn_cerrarpop.innerHTML='X';
		// asigno el boton de cerrar a la caja contenedora:
		caja_visible.appendChild(btn_cerrarpop);
		// bloqueo el sitio:
		$('todo').appendChild(caja_bloqueo);
		// asigno la caja contenedora a la caja que tapa el sitio:
		caja_bloqueo.appendChild(caja_visible);
		// genero la caja de los contenidos:
		caja_contenido=crearDiv('caja_contenido','','');
		// asigno el contenido:
		caja_contenido.innerHTML=resultado;
		// hago visible el contenido:
		caja_visible.appendChild(caja_contenido);

		yScroll=document.body.scrollTop || document.documentElement.scrollTop;
   		// alert(yScroll);
		caja_visible.style.top=yScroll+'px';

		// asigno acciones a los contenidos:
		asignoAcciones(nombre,'');
		return true;
	}
	/********** SECCION: */
	/*
		Si el type es seccion, le digo que llene la caja b_principal con el resultado de la solicitud.
	*/
	if(type=='seccion')
	{
		$('b_principal').innerHTML='';
		$('b_principal').innerHTML=resultado;
		asignoAcciones(nombre,'');
		return true;
	}
	/********** ACCION: */
	/*
		Si el type es accion, le digo que pase el resultado de la solicitud al asignador de acciones para que realice las acciones necesarias para ese resultado, esto sirve en caso de que tenga que ejecutar una accion sobre un popup ya armado y asiganar o no un contenido nuevo a dicho popup.
	*/
	if(type=='accion')
	{
		asignoAcciones(nombre,resultado);
		return true;
	}
	return false;
}

/************************************************** AJAX. */



/************************************************** NODOS: */

// funcion para borrar nodos:
function borrarNodo(id)
{
	var del=$(id);
	var contenedor=del.parentNode;
	contenedor.removeChild(del);
}

// funcion para crear un div:
function crearDiv(id,funcion,funcion_event)
{
	// genero nuevo div:
	newdiv=document.createElement('div');
	// asigno el ID:
	newdiv.id=id;
	// asigno la funcion a los eventos:
	if(funcion_event=='1'){ newdiv.onclick=function(){ eval(funcion); }; }
	if(funcion_event=='2'){ newdiv.onmouseover=function(){ eval(funcion); }; }
	if(funcion_event=='3'){ newdiv.onmouseout=function(){ eval(funcion); }; }
	// devuelvo el div generado:
	return newdiv;
}

/************************************************** NODOS. */



/************************************************** POPUP Y SECCIONES: */

// cerrar popup:
function cerrarPop()
{
	borrarNodo('popup');
}

/************************************************** POPUP Y SECCIONES. */
