/**
 * LinkAjax
 * 
 * @author jperes
 * @prototype
 */
function LinkAjax()
{
	this.stack_return = new Array();
	this.stack_free = true;
	this.stack_pos = null;
	this.stack_loading = null;
}

/**
 * send
 * 
 * @param string id_div_return div onde retornara a requisição
 * @param string url_link url do link
 * @param object opcoes objeto com as opcoes (opcional)
 * 
 */
LinkAjax.prototype.send = function(url_link, id_div_return, id_div_loading, option_loading, exec_eval)
{
	var date = new Date();
	
	if(url_link.search(/\?/))
	url_link += '&ts='+date.getTime();
	else
	url_link += '?ts='+date.getTime();
	
	if(!$(id_div_return)) return false;
	if($(id_div_loading))
	{
		$(id_div_return).style.display = 'none';
		this.loading(id_div_loading, option_loading);
	}
	else
		$(id_div_return).style.display = '';
	
	var ajax = new Ajax(
	url_link, 
	{method: 'get', evalScripts: true, onComplete: function()
	{
		if($(id_div_loading)) $(id_div_loading).style.display = 'none';
		if(!$(id_div_return)) return false;
		
		$(id_div_return).innerHTML = this.response.text;
		$(id_div_return).style.display = '';
		if(exec_eval)
		{
			eval(exec_eval);
		}
	}
	});
	
	ajax.request();
}


/**
 * sendForm
 * 
 * @param string idForm
 * @param string id_div_return
 * @param string id_div_loading
 */
LinkAjax.prototype.sendForm = function(id_form, id_div_return, id_div_loading, option_loading)
{
	if(!$(id_div_return)) return false;
	$(id_div_return).style.display = 'none';
	if($(id_div_loading))
		this.loading(id_div_loading, option_loading);
	else
		$(id_div_return).style.display = '';
	
	$(id_form).send({evalScripts: true, onComplete: function(){
			if($(id_div_return).innerHTML != this.response.text)
			{
				if($(id_div_loading))$(id_div_loading).style.display='none';
				$(id_div_return).innerHTML = this.response.text;
				$(id_div_return).style.display = '';
			}
		}	
	});
}

/**
 * loading
 * 
 * @param string id_div_loading
 */
LinkAjax.prototype.loading = function(id_div_loading, option_loading)
{
	$(id_div_loading).style.display = '';
	switch(option_loading)
	{
		case 'mini':
		$(id_div_loading).innerHTML = '<div align="center"><img src="'+urlimg+'private/loading_mini.gif" vspace="35" /></div>';
		break;
		default:
		$(id_div_loading).innerHTML = '<div align="center"><img src="'+urlimg+'private/loading.gif" vspace="35" /></div>';
		break;
	}
}

/**
 * processStack
 * 
 * @param array array
 */
LinkAjax.prototype.processStack = function(array)
{
	if(LinkAjax.stack_free)
	{
		LinkAjax.stack_free = false;
		if(array[LinkAjax.stack_pos])
		if(array[LinkAjax.stack_pos].idForm)
		{
			$(array[LinkAjax.stack_pos].idForm).send({onComplete: function()
			{
				LinkAjax.returnProcessStack(array, this.response.text);
			}	
			});
		}
		else if(array[LinkAjax.stack_pos].url)
		{
			var ajax = new Ajax(
			array[LinkAjax.stack_pos].url, 
			{method: 'get', onComplete: function()
			{
				LinkAjax.returnProcessStack(array, this.response.text);
			}
			});
			ajax.request();
		}
	}
}

/**
 * returnProcessStack
 * 
 * @param array array
 * @param string response
 */
LinkAjax.prototype.returnProcessStack = function(array, response)
{
	LinkAjax.stack_return[LinkAjax.stack_pos] = response;
	LinkAjax.stack_pos++;
	LinkAjax.stack_free = true;
	if(array[LinkAjax.stack_pos])
	LinkAjax.processStack(array);
	else
	LinkAjax.returnStack(array);
}

/**
 * stack
 * 
 * @param array array
 */
LinkAjax.prototype.stack = function(array,id_div_loading)
{
	this.loading(id_div_loading);
	this.stack_loading = id_div_loading;
	this.stack_free = true;
	this.stack_pos = 0;
	this.stack_return = new Array();
	this.processStack(array);
}

LinkAjax.prototype.returnStack = function(array)
{
	$(this.stack_loading).innerHTML = '';
	for(var x=0;x<array.length;x++)
	{
		this.stack_return[x] = this.stack_return[x].replace("\n",'');
		this.stack_return[x] = this.stack_return[x].replace("\r",'');
		if(this.stack_return[x])
		$(array[x].idDivReturn).innerHTML = this.stack_return[x];
	}
}

var LinkAjax = new LinkAjax();

