function AjaxGeneric(){
	
	this.GetAjaxReturn  	 			= GetAjaxReturnFunction;
	this.ReloadCombo		 			= ReloadComboFunction;
	this.ReloadComboWriter 	 			= ReloadComboWriterFunction;
	this.StartXmlHttp		 			= StartXmlHttpFuntion;
	this.LondingBox		 		        = LondingBox;
	this.DataList			 			= DataListFunction;
	this.PageIndex			 			= PageIndexFunction;
	this.CheckElaboreConn	 			= CheckElaboreConnFunction;
	this.GetElaboreFormatedNowTime 		= GetElaboreFormatedNowTimeFunction;
	
	var xmlhttp					= false;
	this.AjaxReturnDestination	= 'ExternalFunction'; 														//destino do retorno do Ajax
	this.AjaxReturnVariable		= ''; 																		//caso a opcao seja variavel... esta eh ela
	this.XmlResponseObj			= null;
	this.PostSend				= null;
	
	this.ReloadComboPlaceId 	= ''; 																		//id do objeto onde o combo será reescrito
	
	this.LoadingString			= 'Loading';
	this.LoadingImage			= '../../modules/general/templates/default/media/ajax-loader.gif';
	
	this.tabOption				= '';
	this.currentPage			= '';
	this.tabTotal				= '';
	this.perPage				= '';
	
	this.rootUrl				= '';
	
	this.NowTimeFormated		= '';
	this.ObjName				= 'AjaxGenO';
	
	
	/*
	var tmp 		= arguments.callee.toString();
	var class_name 	= tmp.substring(tmp.indexOf(' ')+1,tmp.indexOf('('));
	alert(class_name);
	tmp 			= eval(class_name+".caller");
			
	alert(tmp);
	*/
	
	/*
	s = '';
	if (arguments.callee) 
	{
		var thisName = getObjectName(arguments.callee);
		s+= "My name is " + thisName;
	}
	alert(AjaxGeneric.caller);
	if (arguments.caller) 
	{
		s+= "\nI'm called by ";
		s+= getObjectName(eval(thisName+".caller"));
	}
	alert(s);
	
	function getObjectName(obj) {
		var tmp = obj.toString();
		return tmp.substring(tmp.indexOf(' ')+1,tmp.indexOf('('));
	}
	*/

	function StartXmlHttpFuntion()
	{
		try
		{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (E)
			{
				xmlhttp = false;
			}
		}
		
		if (!xmlhttp && typeof XMLHttpRequest!='undefined')
		{
			xmlhttp = new XMLHttpRequest();
		}
		
		return xmlhttp;
	}

	function GetAjaxReturnFunction(theUrl,nextFunc)
	{
		this.StartXmlHttp();
		
		var ajaxGenricObjO = this;
		
		if(theUrl.substr(theUrl.length-4) != "html")
		{

			var no_cache = new Date().getTime();
			theUrl += "&no_cache="+no_cache+"&";
		}
		
		//xmlhttp.open("POST", theUrl,true);
		xmlhttp.open("GET", theUrl,true);
		xmlhttp.onreadystatechange=function()
		{
			if (xmlhttp.readyState==4)
			{
				switch (ajaxGenricObjO.AjaxReturnDestination)
				{
					case 'DebugTextArea':
						document.getElementById('sql').value = xmlhttp.responseText;
					break;

					case 'XMLExternalFunction':
						try
						{
							if (xmlhttp.status == 200)
							{
								ajaxGenricObjO.XmlResponseObj = xmlhttp.responseXML.documentElement;
								eval(nextFunc+'(true);');
							}
						}
						catch(e){'';}
					break;

					case 'ExternalFunction':
						//alert(xmlhttp.responseText);
						eval(nextFunc+'("'+xmlhttp.responseText+'");');
					break;
					
					case 'ExternalFunctionWithAjaxReturnVariable':
						ajaxGenricObjO.AjaxReturnVariable = xmlhttp.responseText;
						eval(nextFunc+'();');
					break;
					
					case 'InverseExternalFunction':
						eval(nextFunc+"('"+xmlhttp.responseText+"');");
					break;
					
					case 'CheckElaboreConn':
						if(xmlhttp.responseText != 'UAreConnected' && xmlhttp.responseText != '')
						{
							
							try
							{
								eval(nextFunc+"(false);");
							}
							catch(e)
							{
								'';
							}
						}
						else
						{
							try
							{
								eval(nextFunc+"(true);");
							}
							catch(e)
							{
								'';
							}
						}
					break;
					
					case 'Combo':
						ajaxGenricObjO.ReloadComboWriter(xmlhttp.responseText);
					break;
					
					case 'AjaxReturnVariable':
						ajaxGenricObjO.AjaxReturnVariable = xmlhttp.responseText;
					break;
					
					case 'GetElaboreFormatedNowTime':
						ajaxGenricObjO.NowTimeFormated = xmlhttp.responseText;
					break;
				}
			}
		}
		
		if(this.PostSend)
		{
			if (navigator.appName == 'Netscape')
			{
				xmlhttp.setRequestHeader('Content-Type','text/xml');
				xmlhttp.setRequestHeader('encoding','ISO-8859-1'); 
				xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			}
			else
			{
				xmlhttp.setRequestHeader('encoding','ISO-8859-1');
				xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
			}
		}
		
		//xmlhttp.send(this.PostSend);
		xmlhttp.send(null);
	}
	
	function GetElaboreFormatedNowTimeFunction()
	{
		var win_location 	= window.location.href;
		
		var loc 			= win_location.split('modules');
		var check_conn_url 	= loc[0]+'modules/general/inc/ElaboreGeneric.class.php?op=get_now_formated_date&module_name=general&';
		
		this.AjaxReturnDestination 	= 'GetElaboreFormatedNowTime';
		this.GetAjaxReturn(check_conn_url,"");
		
		setTimeout(this.ObjName+".GetElaboreFormatedNowTime();",5000);
	}
	
	function CheckElaboreConnFunction(extFunc,moduleName)
	{
		var win_location 	= window.location.href;
		
		var loc 			= win_location.split('modules');
		var check_conn_url 	= loc[0]+'modules/general/inc/ElaboreGeneric.class.php?op=check_elab_conn&module_name='+moduleName+'&';
		
		this.AjaxReturnDestination 	= 'CheckElaboreConn';
		this.GetAjaxReturn(check_conn_url,extFunc);
		
	}
	
	function ReloadComboFunction(comboUrl,comboDestination,isMultiple)
	{
		this.ReloadComboPlaceId 	= comboDestination;
		
		isMultiple ? multiple = 'multiple size=5 ' : multiple = '';
		
		loading_combo = '<select '+multiple+' style="width:200px;"><option>'+this.LoadingString+'</option></select>';
		this.ReloadComboWriter(loading_combo);
		
		this.AjaxReturnDestination 	= 'Combo';
		this.GetAjaxReturn(comboUrl,'ReloadComboWriter');
	}
	
	function ReloadComboWriterFunction(Combo)
	{
		document.getElementById(this.ReloadComboPlaceId).innerHTML = Combo;
	}
	
	function LondingBox(divName,option)
	{
		if (option == "show")
		{
			document.getElementById(divName).innerHTML = '<div id="loadingBox_'+divName+'" class="loadingDiv" style="display:block;">'+
															 '<table border="0" cellpadding="0" cellspacing="0" width="95%"><tr>'+ 	
																 '<td ><img src="'+this.LoadingImage+'"></td>'+
																 '<td class="tab_noBK">&nbsp;'+this.LoadingString+'</td>'+
															 '</tr></table>'+
														 '</div>';
														 
			/*
			document.getElementById(divName).innerHTML = '<div id="loadingBox_'+divName+'" style="display:block;">'+
															 '<table border="0" cellpadding="0" cellspacing="0" width="95%"><tr>'+
																 '<td class="loadingLeft">&nbsp;&nbsp;&nbsp;</td>'+
																 '<td class="loadingMiddle"><img src="'+this.LoadingImage+'"></td>'+
																 '<td class="loadingMiddle">&nbsp;'+this.LoadingString+'</td>'+
																 '<td class="loadingRight">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>'+
															 '</tr></table>'+
														 '</div>';
														 
			*/											 
			//document.getElementById(divName).style.visibility = "visible";
		}
		else
			document.getElementById("loadingBox_"+divName).style.visibility = "hidden";
	}
	
	function DataListFunction(columns,dataX,destination)
	{

		data = eval(dataX);
		data = eval(data);
		
		if(tabMenuO.ReloadTotalInTabs)
			tabMenuO.RefreshTotal(tab_infos);
			
		/**
		 *Cabecalho
		 **/
		header = "<table id='RgsTable' name='RgsTable' border='0' cellpadding='0' cellspacing='0' width='100%'>"+
					"<tr>"+
						"<td class='lines2' height='2' width='1' colspan='20'><img src='../../../../modules/general/templates/default/media/space.gif' alt='' width='1' height='2'></td>"+
					"</tr>"+
					"<tr align='right'>";
		
		for(i=0;i<columns.length;i++)
		{			
			header += "<td class='tableheader' width='"+columns[i]['size']+"px' height='20' align='"+columns[i]['align']+"' style='CURSOR: pointer; padding-left:5px; padding-right:5px;' onClick='tabMenuO.SetDescAsc(\"prio\"); tabMenuO.GetRegisterAjax(\""+this.rootUrl+columns[i]['order_url']+"&tabOption="+this.tabOption+"&currentPage="+(this.currentPage-1)+"\",\"sameTab\");'>"+columns[i]['name']+"</td>";
		}					
		
		header += "<td class='tableheader' align='right' width='20'>&nbsp;</td>"+
				  "</tr>"+
				  "<tr>"+
				  	  "<td class='lines2' height='1' width='1' colspan='20'><img src='../../../../modules/general/templates/default/media/space.gif' alt='' width='1' height='1'></td>"+
				  "</tr>";
		/**
		  *FIM Cabecalho
		  **/
		
		table_content = '';
		
		if(data.length > 0)
		{
			for(i=0;i<data.length;i++)
			{
					table_content += "<tr onmouseover='this.className=\"hilite\";' onmouseout='this.className=\"tab\";' style='"+data[i].tr_style+"'>";
					for(z=0;z<columns.length;z++)
					{
						column_value 	= eval("data[i].c"+z);
						(column_value == 'function') ? column_value = eval(eval("data[i].c"+z+"_value_func")) : '';
						
						((column_bg_color = eval("data[i].c"+z+"_bg_color")) == undefined) ? column_bg_color = "class='tab'" : column_bg_color = "class='tab_noBK' bgcolor='"+column_bg_color+"'";
						
						table_content += "<td height='20' align='"+columns[z]['align']+"' "+ column_bg_color +" style='padding-left:5px; padding-right:5px; "+data[i].td_style+"'>"+column_value+"</td>";
										 
					}
					table_content += "<td class='tab' width='20'>&nbsp;</td></tr>"+
									  "<tr>"+
									      "<td class='lines' height='1' width='1' colspan='20'><img src='../../../../modules/general/templates/default/media/space.gif' alt='' width='1' height='1'></td>"+
									  "</tr>";
			}
		}

		page_index = '<tr><td align="center" colspan="20"><br />'+this.PageIndex()+'</tr></td>';

		document.getElementById(destination).innerHTML = header + table_content + page_index + '</table>';

	}

	function PageIndexFunction()
	{
		var pageCounter = '';

		var nPage = this.tabTotal/this.perPage;
		var aPage = Math.round(nPage);

		if(aPage < nPage){
			var Page = aPage + 1;
		}else{
			var Page = aPage;
		}

		pageCounter = pageCounter +
		"<table id='RgsTable' name='RgsTable' border='0' cellpadding='0' cellspacing='0' align='center'>"+
			"<tr align='left'>";
		for(x=1;x<=Page;x++){
			if(this.currentPage-1 == x){
				pageCounter = pageCounter +
				"<td class='contentback'>&nbsp;"+x+"&nbsp;</td>";
				currPage = x;
			}else{
				pageCounter = pageCounter +
				"<td class='contentback'>&nbsp;<a href='javascript:tabMenuO.GetRegisterAjax(\""+this.rootUrl+"tabOption="+this.tabOption+"&currentPage="+(x)+" \",\"sameTab\");'>"+x+"</a>&nbsp;</td>"
			}
		}
		return pageCounter += '</tr></table>';
	}

}
