/************************************************** AJAX: */

// metodo abreviado:
function $(id)
{
	return document.getElementById(id);
}

// metodo para generar componente ajax:
function ajaxObjeto()
{
	var request = null;
	if(typeof window.XMLHttpRequest != "undefined")
	{
		request=new XMLHttpRequest();
	}
	else if(typeof window.ActiveXObject != "undefined")
	{
		try{ request=new ActiveXObject("Microsoft.XMLHTTP"); }
		catch(err){ request=null; }
	}
	return request;
}

// 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')
	{
		yScroll=0;
		// 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('pop_contenido','','');
		// asigno el contenido:
		caja_contenido.innerHTML=resultado;
		// hago visible el contenido:
		caja_visible.appendChild(caja_contenido);
		// movimiento del popup:
		/*
		if (document.documentElement && !document.documentElement.scrollTop)
		// IE6 +4.01 but no scrolling going on
		else if (document.documentElement && document.documentElement.scrollTop)
		// IE6 +4.01 and user has scrolled
		else if (document.body && document.body.scrollTop)
		// IE5 or DTD 3.2 
		*/
		// yScroll=document.body.scrollTop || document.documentElement.scrollTop;
		/*
		switch(navigator.appName)
		{
			case 'Microsoft Internet Explorer':
				var myregex=/MSIE 7\.0/i;
				var myArray=navigator.appVersion.match(myregex);
				if(myArray.length > 0) scrollY=document.documentElement.scrollTop;
				else scrollY=document.body.scrollTop;
				break;
			default:
				scrollY=window.pageYOffset;
		}
		*/
   		// alert(yScroll);
		caja_visible.style.top=(yScroll+10)+'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. */



/************************************************** EXPRESIONES REGULARES: */

// expresion regular de email:
function echeck(str)
{
	var at="@";
	var dot=".";
	var lat=str.indexOf(at);
	var lstr=str.length;
	var ldot=str.indexOf(dot);
	if(str.indexOf(at)==-1)
	{
		return false;
	}
	if(str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr)
	{
		return false;
	}
	if(str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr)
	{
		return false;
	}
	if(str.indexOf(at,(lat+1))!=-1)
	{
		return false;
	}
	if(str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot)
	{
		return false;
	}
	if(str.indexOf(dot,(lat+2))==-1)
	{
		return false;
	}
	if(str.indexOf(" ")!=-1)
	{
		return false;
	}
	return true;
}

/************************************************** EXPRESIONES REGULARES. */
