/*!
 * Sistema de requisições assincronas
 * com iframe oculto ultilizando 
 * o framework jQuery 
 * http://jquery.com
 *
 * Baseado no plugin ajaxfileupload.js
 * http://www.phpletter.com/Demo/AjaxFileUpload-Demo/
 * 
 * Modificado por Júnior Alves
 * jr290488@gmail.com
 */

var AJAX_A = new Array();
var AJAX_B = new Array();
var AJAX_C = new Array();
var AJAX_D = new Array();
var AJAX_E = new Array();
var BITY = {};
var idRetorno;

try
{
	jQuery = jQuery;
}
catch(e)
{
	var _func = function()
	{
		if(document.readyState !== 'complete'){setTimeout('_func();', 1);}		
		_fs = document.getElementsByTagName('head')[0].getElementsByTagName('script')[0];
		_sn = document.createElement('script');
		_sn.type = 'text/javascript';
		_sn.src = ((/index.php/i).test(AJAX_B[0]))? AJAX_B[0]+'&&method=jQuery' : AJAX_B[0]+'jQuery.html';
		_fs.parentNode.insertBefore(_sn, _fs);
	}
	
	if(window.addEventListener){window.addEventListener('load', _func, false);}
	else if(window.attachEvent){window.document.attachEvent('onreadystatechange', _func);}
}

var load = function()
{
	try{
		jQuery.extend({
			div:null,
			url:null,
			ManterValores:true,
			criarFrame:function(frameId)
			{
				if(window.ActiveXObject){
                	var io = document.createElement('<iframe id="IF' + frameId + '" name="IF' + frameId + '" />');
	            }
	            else
				{
	                var io = document.createElement('iframe');
	                io.name = 'IF'+frameId;
	                io.id = 'IF'+frameId;
	            }
	            io.width = '0px';
				io.height = '0px';
	            io.style.border = '0';
	            io.src = 'javascript:void(0);';
	
	            jQuery(io).appendTo('body');
	
	            return io;
			},
			
			criarForm:function(formId)
			{
				if(window.ActiveXObject){
                	var form = document.createElement('<form id="F' + formId + '" name="F' + formId + '" />');
	            }
	            else
				{
	                var form = document.createElement('form');
	                form.name = 'F'+formId;
	                form.id = 'F'+formId;
	            }
	
	            jQuery(form).insertBefore("#s_"+jQuery.div);
	
	            return form;
			},
			
			RetiraForms:function()
			{
				jQuery('div#'+jQuery.div).find('form').each(function(){
					var content = this.getElementsByTagName('*');
					var div_sub = document.createElement('div');
					for(var f = 0; f < content.length; f++)
					{
						div_sub.appendChild(content[f]);
					}
					this.parentNode.replaceChild(div_sub, this);
				});
			},
			
			FrameRequest:{},
			
			funcao_base:function(e)
			{
				var id = new Date().getTime();
				jQuery.div = '[ID]';
				jQuery.url = '[URL]';
				var cal = '[FUNCTION]';
				
				if((cal.length > 1)? (eval(cal + '(this);')):true)
				{	
					var Frame = jQuery.criarFrame(id);

					jQuery.FrameRequest = jQuery.extend({}, jQuery.ajaxSettings, jQuery.FrameRequest);
					
					if(jQuery.FrameRequest.global && ! jQuery.active++){jQuery.event.trigger("ajaxStart");}            
	        		
					var requestDone = false;
	        
					var req = {}
					
					if(jQuery.FrameRequest.global){jQuery.event.trigger("ajaxSend", [req, jQuery.FrameRequest]);}
					
					var LoadFrame = function(Timeout)
					{
						try 
						{				
							if(Frame.contentWindow)
							{
								 req.responseText = Frame.contentWindow.document.body?Frame.contentWindow.document.body.innerHTML:null;
							}
							else if(Frame.contentDocument)
							{
								req.responseText = Frame.contentWindow.document.body?Frame.contentWindow.document.body.innerHTML:null;
							}						
			            }
						catch(e)
						{
							jQuery.handleError(jQuery.FrameRequest, req, null, e);
						}
						
						if(req || Timeout == 'timeout')
						{
							requestDone = true;
							var status = Timeout != "timeout" ? "success" : "error";
							
							if(status != 'error')
							{
								var retorno = req.responseText;
								if(jQuery.FrameRequest.success){jQuery.FrameRequest.success(retorno, status);}
								
								if(jQuery.FrameRequest.global && ! --jQuery.active){jQuery.event.trigger("ajaxStop");}
								
								if(jQuery.FrameRequest.complete){jQuery.FrameRequest.complete(req, status);}
								
								if(jQuery.FrameRequest.global){
									jQuery.event.trigger("ajaxSuccess", [req, jQuery.FrameRequest]);
									jQuery.event.trigger( "ajaxComplete", [req, jQuery.FrameRequest]);
								}
								
								var div = jQuery('#'+jQuery.div).clone();
								jQuery(div).html(retorno);
									
								if(jQuery.ManterValores)
								{
									jQuery('#'+jQuery.div).find(':input').each(function(){
										if(jQuery(this).val()!='')
										{
											var t = jQuery(this).attr('type');
											var n = jQuery(this).attr('name');
											var busca = ':input[type="'+t+'"][name="'+n+'"]:not(:file,:checkbox, :radio)';
											jQuery(div).find(busca).attr('value', jQuery(this).val());
											if(this.checked){
												var el = this;
												jQuery(div).find(':checkbox, :radio').each(function(){
													if(this.value === el.value){this.checked = true}
												});
											}
										}
									});
									
									jQuery(Form).html(div);
									var id = jQuery(Form).attr('id');
									var form = document.getElementById(id);
									var conteudo = document.getElementById(jQuery.div);
									form.parentNode.replaceChild(conteudo, form);
								}
								else
								{
									jQuery(Form).html(div);
									var id = jQuery(Form).attr('id');
									var form = document.getElementById(id);
									var conteudo = document.getElementById(jQuery.div);
									form.parentNode.replaceChild(conteudo, form);
								}
								
								jQuery.ManterValores = true;
								
								setTimeout(function(){
									jQuery(Frame).unbind();
									jQuery(Frame).die();
									jQuery(Frame).remove();
								}, 100);
								
								if(!jQuery.live){jQuery.iniciar();};
							}
							else
							{
								jQuery.handleError(jQuery.FrameRequest, req, status);
							}

                			req = null;
						}
					}
					
					if(window.attachEvent)
					{
	        			document.getElementById(Frame.id).attachEvent('onload', LoadFrame);
			        }
			        else
					{
			            document.getElementById(Frame.id).addEventListener('load', LoadFrame, false);
			        }
					
					jQuery.RetiraForms();
					
					var Form = jQuery.criarForm(id);
					Form.method = 'POST';
					Form.action = jQuery.url;
					Form.target = 'IF'+id;
					Form.enctype = 'multipart/form-data';
					Form.encoding = 'multipart/form-data';
					
					Form = jQuery('#F'+id);
					
					jQuery('div#'+jQuery.div).find(':radio:checked,:checkbox:checked').each(function(){
						jQuery(Form).append('<input type="hidden" name="'+jQuery(this).attr('name')+'" value="' + jQuery(this).val() + '" />');
					});
					
					jQuery(Form).append(jQuery('div#'+jQuery.div));
					jQuery(Form).append('<input type="hidden" name="HTTP_BLOCO_AJAX" value="' + jQuery.div + '" />');
					jQuery(Form).append('<input type="hidden" name="EVENTO" value="' + e.type + '" />');
					jQuery(Form).append('<input type="hidden" name="HTTP_BITY_REQUEST" value="1.0" />');
					if(document.charset){jQuery(Form).append('<input type="hidden" name="CHARSET_ORIGINAL" value="' + document.charset + '" />');}
					
					var _this = this;
					
					jQuery.each(['id','class','href','src','name','type','value'],function(index, at){
						if(jQuery(_this).attr(at)){jQuery(Form).append('<input type="hidden" name="' + at + '" value="' + jQuery(_this).attr(at) + '" />');}
					});
					
					jQuery(Form).submit();
				}
				
				return false;
			},
			
			recarregar:function(el){
				jQuery(el).trigger('recarregar');
				jQuery(el).unbind('recarregar');
			},
			
			FuncDefault:function(e){
				jQuery.FrameRequest.complete = function()
				{
					setTimeout(function(){}, 1);
				}
				
				return true;
			},
				
			iniciar : function(){
				jQuery.each(AJAX_A, function(index_c, valor){
					var url = AJAX_B[index_c]; container = valor;
					
					var r = new String(jQuery.funcao_base).replace('[ID]', container);
					r = new String(r).replace('[URL]', url);
					r = new String(r).replace('[FUNCTION]', (AJAX_E[index_c].length > 0)? AJAX_E[index_c] : "jQuery.FuncDefault");

					eval('r = '+r+';');
					
					var div_css = 'div#' + container;
					
					jQuery(div_css).unbind('recarregar');
					jQuery(div_css).bind('recarregar', r);
					jQuery(div_css).live('recarregar', r);
						
					jQuery.each(AJAX_C[index_c], function(index_css,valor){
						if(AJAX_C[index_c] != '')
						{
							var el = eval('jQuery("' + valor + '");');
							var evt = AJAX_D[index_c][index_css];
							
							var f = new String(jQuery.funcao_base).replace('[ID]', container);
							f = new String(f).replace('[URL]', url);
							f = new String(f).replace('[FUNCTION]', AJAX_E[index_c]);
							
							eval('jQuery(el).unbind("' + evt + '");');
							eval('jQuery(el).' + evt + '(' + f + ');');
							if(jQuery.live){eval('jQuery(el).live("' + evt + '",' + f + ');')};
						}
					});
				});
			}
		});
		
		jQuery(document).ready(function(){
			jQuery.iniciar();
		});
	}
	catch(erro){
		setTimeout('load();', 1);
	}
}

setTimeout('load();', 1);
