// JavaScript Document
/*declaramos la clase*/
function my_ajax()
{	
	this.xmlhttp = false;							//declaramos la variable httprequest
	this.create = create_object;					//funcion que crea el objecto
	this.loading_text = '';							//texto a mostrar durante la carga de datos
	this.set_loading_text = set_loading_text_html;	//funcion que obtiene el texto de carga
	this.container;									//variable que contiene el id del contenedor
	this.set_container_id = set_container_id;		//funcion que obtiene los datos del contenedor html
	this.use_form = false;							//variable que indica si se utilizara un formulario para enviar datos POST
	this.form;										//variable que contiene el id del formulario
	this.set_form_id = set_form_id;					//funcion que obtiene los datos del formulario
	this._reload = _reload_container;				//funcion qye realiza la recarga del contenedor indicado	
	this.url = '';									//variable que contiene la direción url
	this.send_by_get = send_data_by_get;			//funcion que envia los datos por el metodo get
	this.send_by_post = send_data_by_post;			//funcion que envia los datos por el métido post
	this.values_post;								//contiene los datos de los elementos post
	this.val_extra;
	this.get_elements = get_all_elements;			//funcion que obtiene los datos del formulario
	this.type_ret = '';								//tipo de retorno
}

/*funcion que crea el objecto xmlhttprequest*/
function create_object()
{
	try
	{	//para navegadores como internet explorer
		this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{	//para versiones antiguas de Internet Explorer
			this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(E)
		{
			this.xmlhttp = false;
		}
	}

	//si el navegador no es internet explorer
	if(!this.xmlhttp && typeof XMLHttpRequest  != 'undefined')
	{
		this.xmlhttp = new XMLHttpRequest();
	}		
	
	this.type_ret = 0;
}

/*funcion que obtiene el codigo html o el texto que se muestra mientras carga el resultado*/
function set_loading_text_html(text_html)
{
	this.loading_text = text_html;		
}

/*funcion que obtiene el id del contenedor y carga los datos*/
function set_container_id(id_container)
{
	this.container = getObject(id_container);
}

/*funcion que obtiene el id del formulario y carga los datos*/
function set_form_id(id_form)
{
	this.form = getObject(id_form);
	this.use_form = true;
}

/*funcion que realiza la carga de los datos de acuerdo a los parametros*/
function _reload_container(url,method,post_values,ret,val_extra)
{		
	//alert('reload');
	this.url = url;
	this.type_ret = ret;
	this.val_extra = val_extra;

	//verificamos el metodo por el cual se desea enviar los datos	
	if(method == 'GET')
		this.send_by_get();
	else if(method == 'POST')	
		this.send_by_post(post_values);
}

/*funcion que envia los datos por el metodo get*/
function send_data_by_get()
{	
	l_xml = this.xmlhttp;
	l_url = this.url;
	l_cont = this.container;
	l_ltext = this.loading_text;
	l_prop = this.property;
	
	l_val_extra = this.val_extra;
	//alert(l_val_extra);
	if(this.type_ret == 0)
	{
		this.xmlhttp.onreadystatechange = function()
		{
			verify_send_data(l_xml,l_url,l_cont,l_ltext,l_prop,'',l_val_extra);
		}
	}
	else	
	{
		this.xmlhttp.onreadystatechange = function()
		{
			verify_send_data_inner(l_xml,l_url,l_cont,l_ltext,l_prop,'',l_val_extra);
		}
	}
	this.xmlhttp.open('GET',l_url,true);
	this.xmlhttp.send(null);
}

/*funcion que envia los datos por el metodo post*/
function send_data_by_post(post_values)
{
	l_xml = this.xmlhttp;
	l_url = this.url;
	l_cont = this.container;
	l_ltext = this.loading_text;
	l_tret = this.type_ret;
	l_prop = this.property;
	l_val_extra = this.val_extra;
	
	if(post_values.length == 0)
		this.get_elements();
	else
		this.values_post = post_values;
	
	//alert(this.values_post);
	
	this.xmlhttp.open('POST',this.url,true);
	if(this.type_ret == 0)
	{
		this.xmlhttp.onreadystatechange = function()
		{
			verify_send_data(l_xml,l_url,l_cont,l_ltext,l_prop,l_tret,l_val_extra);
		}
	}
	else
	{
		this.xmlhttp.onreadystatechange = function()
		{
			//alert('inner');
			verify_send_data_inner(l_xml,l_url,l_cont,l_ltext,l_prop,l_tret,l_val_extra);
		}
	}
	this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');	
	this.xmlhttp.send(this.values_post);
}

/*funcion que verifica si los datos ya han sido enviados*/
function verify_send_data(l_xml,l_url,l_cont,l_ltext,l_prop,l_tret,l_val_extra)
{	
	//alert(l_val_extra);				
	if(l_xml.readyState == 4 && (l_xml.status == 200 || window.location.href.indexOf('http') == -1))
	{				
		l_cont.value = l_xml.responseText;			
		//uitlevening special functions
		if(l_val_extra == 1)	
			copy_value('REAL_START1','REAL_END1');
			
		if(l_val_extra == 2)	
			copy_value('REAL_START2','REAL_END2');
			
			
		//alert(l_xml.responseText);
	}
	else
		l_cont.value = l_ltext;
}

/*funcion que verifica si los datos ya han sido enviados*/
function verify_send_data_inner(l_xml,l_url,l_cont,l_ltext,l_prop,l_tret,l_val_extra)
{		
	if(l_xml.readyState == 4 && (l_xml.status == 200 || window.location.href.indexOf('http') == -1))
	{
		//alert(l_xml.responseText);
		//alert(l_cont.innerHTML);
		l_cont.innerHTML = l_xml.responseText;
		if (l_val_extra==1)
		{
			window.location=l_cont.innerHTML;
			l_cont.innerHTML='';
		}
		//l_cont.innerHTML = 'juan';				
		//alert('despues');
	}
	else
		l_cont.innerHTML = l_ltext;
}

/*funcion que verifica si los datos ya han sido enviados*/
function verify_send_data_select(l_xml,l_url,l_cont,l_ltext,l_prop,l_tret)
{		
	if(l_xml.readyState == 4 && (l_xml.status == 200 || window.location.href.indexOf('http') == -1))
	{
		l_cont.innerHTML = l_xml.responseText;				
		//alert(l_xml.responseText);
	}
	else
		l_cont.innerHTML = l_ltext;
}


/*funcion que obtiene todos los valores de un formulario*/
function get_all_elements()
{
	this.values_post = '';
	var long = this.form.elements.length;		
	
	for(i = 0; i < long; i++)
	{
		//alert(this.form.elements[i].type+'--'+this.form.elements[i].name);
		//concatenamos los nombres y los elementos --> nombre=valor		
		if(i == 0)
		{
			//alert('primero');
			if(this.form.elements[i].type == 'text' || this.form.elements[i].type == 'hidden')
				this.values_post = this.form.elements[i].name+'='+escape(this.form.elements[i].value);
			else if(this.form.elements[i].type == 'select-one')
				this.values_post = this.form.elements[i].name+'='+this.form.elements[i].options[this.form.elements[i].selectedIndex].value;			
		}
		else
		{	
			if(this.form.elements[i].type == 'text' || this.form.elements[i].type == 'hidden')
				this.values_post = this.values_post + '&' + this.form.elements[i].name+'='+escape(this.form.elements[i].value);
			else if(this.form.elements[i].type == 'select-one')
				this.values_post = this.values_post + '&' + this.form.elements[i].name+'='+this.form.elements[i].options[this.form.elements[i].selectedIndex].value;				
		}
	}	
	//alert('values '+this.values_post);
}

/*funcion que devuelte los datos de un elemento indicandole el id*/
function getObject(objectId) 
{
    // cross-browser function to get an object's style object given its id
    if(document.getElementById && document.getElementById(objectId)) 
		return document.getElementById(objectId); 	// W3C DOM
	else if(document.all && document.all(objectId)) 
		return document.all(objectId);				// MSIE 4 DOM
	else if(document.layers && document.layers[objectId]) 
		return document.layers[objectId];			// NN 4 DOM.. note: this won't find nested layers
	else 
		return false;
}