﻿
function ClassAjax()
{
	var versao='1.0';
	
	var dias=Array ('','Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado');
	
}

/////////////////////////////////////////////////////////////////
ClassAjax.prototype.Brower=function()
{
	try
	{
		document.scripts.length;
		return ("IE"); 
	}
	catch(ex)
	{
		return ("FOX");				
	}
} 
/////////////////////////////////////////////////////////////////
ClassAjax.prototype.$=function(sId)
{
	try
	{
		if(!sId)
			return null;
		var oDoc=document;
		var obj=oDoc.getElementById(sId);
		if(obj)
			return obj;
		if(oDoc.all)
			return oDoc.all[sId];
		return null;
	}
	catch(e)
	{
		try
		{
			var oDoc=document;
			var obj=oDoc.getElementByNome(sId);
			if(obj[0])
				return obj[0];
		}
		catch(ex)
		{
			alert("Objeto não encontrado: " + sId);
			return null;
		}
	}
	
	return null;
} 
//////////////////////////////////////////////////////////////////
ClassAjax.prototype.execute = function(script)
{
	try
	{
		var returnValue=true;
		eval(unescape( script));
		return returnValue;
	}
	catch(ex)
	{
		alert("Falha oa Exercutar o script!");
	}
	
}
//////////////////////////////////////////////////////////////////
ClassAjax.prototype.includeCSS=function(filename)
{
	var oDoc=document;
	var oHeads=oDoc.getElementsByTagName('head');
	var oHead=oHeads[0];
	var oLinks=oHead.getElementsByTagName('link');
	var found=false;
	var iLen=oLinks.length;
	for(var i=0; i < iLen && false==found ;++i)
		if(0 < oLinks[i].href.indexOf(filename))
			found=true;
	if(false==found)
	{
		var oCSS=oDoc.createElement('link');
		oCSS.rel='stylesheet';
		oCSS.type='text/css';
		oCSS.href=filename;
		oHead.appendChild(oCSS);
	}
}
////////////////////////////////////////////////////////////
ClassAjax.prototype.includeScript=function(fileName)
{
	var oDoc=document;
	var objHead=oDoc.getElementsByTagName('head');
	var objScript=oDoc.createElement('script');
	objScript.type='text/javascript';
	objScript.src=fileName;
	objHead[0].appendChild(objScript);
	
}
///////////////////////////////////////////////////////////
ClassAjax.prototype.RestauraScript=function(element)
{
	if('string'==typeof element)
		element=this.$(element);
	var loadedScripts=element.getElementsByTagName('script');
	
	var iLen=loadedScripts.length;
	_AreaElemento=element.id;

	for(var i=0;i < iLen;i++)
	{
		var script=loadedScripts[i];
		if(script.innerHTML)
		{
			var oDoc=document;
			var objHead=oDoc.getElementsByTagName('head');
			var objScript=oDoc.createElement('script');
			objScript.type='text/javascript';
			if(0 >objHead[0].innerHTML.indexOf(script.innerHTML))
			{
				try
				{
					document.scripts.length;
					if(!script.id)
					{
						objScript.text=script.innerHTML;
						objHead[0].appendChild(objScript);
					}
					else
						this.execute(script.innerHTML);
				}
				catch(ex)
				{
					objScript.innerHTML=script.innerHTML;
					objHead[0].appendChild(objScript);
				}
			}
		}
	}
}
///////////////////////////////////////////////////////////
ClassAjax.prototype.includeScriptOnce=function(fileName)
{
	var oDoc=document;
	var loadedScripts=oDoc.getElementsByTagName('script');
	var iLen=loadedScripts.length;
	for(var i=0;i < iLen;i++)
	{
		var script=loadedScripts[i];
		if(script.src)
		{
			if(0 <=script.src.indexOf(fileName))
			return;
		}
	}
	return this.includeScript(fileName);
}
//////////////////////////////////////////////////
ClassAjax.prototype.stripOnPrefix=function(sEventName)
{
	sEventName=sEventName.toLowerCase();
	if(0==sEventName.indexOf('on'))
		sEventName=sEventName.replace(/on/,'');
	return sEventName;
}
////////////////////////////////////////////////////////
ClassAjax.prototype.addOnPrefix=function(sEventName)
{
	sEventName=sEventName.toLowerCase();
	if(0!=sEventName.indexOf('on'))
		sEventName='on'+sEventName;
	return sEventName;
}
/////////////////////////////////////////////////////////
ClassAjax.prototype.setEvent=function(element,event,code)
{
	if('string'==typeof element)
		element=this.$(element);
	event=this.addOnPrefix(event);
	
	eval('element.'+event+' = function() { '+code+'; }');
	
}
////////////////////////////////////////////////////////
if(window.addEventListener)
{
	ClassAjax.prototype.addHandler=function(element,event,fun)
	{
		if('string'==typeof element)
			element=this.$(element);
		event=this.stripOnPrefix(event);
		eval('element.addEventListener("'+event+'", '+fun+', false);');
		
	}
}
else
{
	ClassAjax.prototype.addHandler=function(element,event,fun)
	{
		if('string'==typeof element)
			element=this.$(element);
		event=this.addOnPrefix(event);
		eval('element.attachEvent("'+event+'", '+fun+', false);');
		
	}
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.getBrowserHTML=function(sValue)
{
	var oDoc=document;
	if(!oDoc.body)
		return '';
	var elWorkspace=this.$('xClassAjax_temp_workspace');
	if(!elWorkspace)
	{
		elWorkspace=oDoc.createElement("div");
		elWorkspace.setAttribute('id','xClassAjax_temp_workspace');
		elWorkspace.style.display="none";
		elWorkspace.style.visibility="hidden";
		oDoc.body.appendChild(elWorkspace);
	}
	elWorkspace.innerHTML=sValue;
	var browserHTML=elWorkspace.innerHTML;
	elWorkspace.innerHTML='';
	return browserHTML;
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.willChange=function(element,attribute,newData)
{
	if("string"==typeof(element))
	element=this.$(element);
	if(element)
	{
		var oldData;
		eval("oldData=element."+attribute);
		return(newData!==oldData);
	}
	return 0;
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.assign=function(element,property,data)
{
	if("string"==typeof(element))
	element=this.$(element);
	switch(property)
	{
		case 'innerHTML':
			element.innerHTML=data;
			break;
		case 'outerHTML':
			if(undefined==element.outerHTML)
			{
				var r=document.createRange();
				r.setStartBefore(element);
				var df=r.createContextualFragment(data);
				element.parentNode.replaceChild(df,element);
			}
			else
				element.outerHTML=data;
			break;
		default:
			if(this.willChange(element,property,data))
				eval('element.'+property+' = data;');
			break;
	}
	
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.replace=function(element,sAttribute,sSearch,sReplace)
{
	if(sAttribute=='innerHTML')
		sSearch=this.getBrowserHTML(sSearch);
	if("string"==typeof(element))
		element=this.$(element);
	eval('var txt = element.'+sAttribute);
	var bFunction=false;
	if('function'==typeof(txt))
	{
		txt=txt.toString();
		bFunction=true;
	}
	var start=txt.indexOf(sSearch);
	if(start >-1)
	{
		var newTxt=[];
		while(start >-1)
		{
			var end=start+sSearch.length;
			newTxt.push(txt.substr(0,start));
			newTxt.push(sReplace);
			txt=txt.substr(end,txt.length-end);
			start=txt.indexOf(sSearch);
		}
		newTxt.push(txt);
		newTxt=newTxt.join('');
		if(bFunction)
		{
			eval('element.'+sAttribute+'=newTxt;');
		}
		else
			if(this.willChange(element,sAttribute,newTxt))
			{
				eval('element.'+sAttribute+'=newTxt;');
			}
	}
	
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.corrigeChar=function(valor)
{
	var oDoc=document;
	
	if(_AreaElemento == '' )
		 var objbody=oDoc.getElementsByTagName('body').item(0);
	else
		var objbody=this.$(_AreaElemento);
	var vetor=valor.split(",");
	for(i=0;i<vetor.length;i+=2)
		this.replace(objbody,"innerHTML",vetor[i],vetor[i+1]);
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.remove=function(element)
{
	if('string'==typeof(element))
		element=this.$(element);
	if(element&&element.parentNode&&element.parentNode.removeChild)
		element.parentNode.removeChild(element);
	
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.create=function(sParentId,sTag,sId)
{
	try
	{
		var objParent=this.$(sParentId);
		objElement=document.createElement(sTag);
		objElement.setAttribute('id',sId);
		if(objParent)
			objParent.appendChild(objElement);
	}
	catch(e)
	{
		alert("falha oa criar "+ sId );
	}
	
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.append=function(element,property,data)
{
	if('string'==typeof(element))
		element=this.$(element);
	eval('element.'+property+' += data;');	 
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.prepend=function(element,property,data)
{
	if('string'==typeof(element))
		element=this.$(element);
	eval('element.'+property+' = data + element.'+property);
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.insert=function(sBeforeId,sTag,sId)
{
	var objSibling=this.$(sBeforeId);
	objElement=document.createElement(sTag);
	objElement.setAttribute('id',sId);
	objSibling.parentNode.insertBefore(objElement,objSibling);	
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.insertAfter = function(sAfterId,sTag,sId)
{
	var objSibling=this.$(sAfterId);
	objElement=document.createElement(sTag);
	objElement.setAttribute('id',sId);
	objSibling.parentNode.insertBefore(objElement,objSibling.nextSibling);	
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.createXMLHTTP = function()
{
	var ObjAjax;
	try
	{
		ObjAjax = new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			ObjAjax = new ActiveXObject("Msxml2.XMLHTTP");
			//alert(ObjAjax);
		}
		catch(ex)
		{
			try
			{
				ObjAjax = new XMLHttpRequest();
			}
			catch(exc)
			{
				alert("Esse browser não tem recursos para uso do Ajax");
				ObjAjax = null;
			}
		}
	}
	return ObjAjax;
}



/////////////////////////////////////////////////////////////
ClassAjax.prototype.xDecode = function(valor){

if (typeof valor != 'undefined')
{
	valor = valor.replaceAll('&',encodeURIComponent("&"));
	valor = valor.replaceAll('?',encodeURIComponent("?"));
	valor = valor.replaceAll('/',encodeURIComponent("/"));
	valor = valor.replaceAll('#',encodeURIComponent("#"));
	valor = valor.replaceAll('\\',encodeURIComponent("\\"));
	valor = valor.replaceAll('+',encodeURIComponent("+"));
	valor = valor.replaceAll('\n',encodeURIComponent("\n"));
}
	return valor;

}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.getFormValue = function (element)
{
	
	var submitDisabledElements=false;
	if(arguments.length > 1&&arguments[1]==true)
		submitDisabledElements=true;
	var prefix="";
	if(arguments.length > 2)
		prefix=arguments[2];
	if("string"==typeof(element))
		element=this.$(element);
	var aXml=new Array;
	if(element&&element.tagName&&"FORM"==element.tagName.toUpperCase())
	{
		var formElements=element.elements;
		for(var i=0;i < formElements.length;++i)
		{
			var child=formElements[i];
			if(!child.name)
				continue;
			if(prefix!=child.name.substring(0,prefix.length))
				continue;
				if(child.type&&(child.type=='radio'||child.type=='checkbox')&&child.checked==false)
					continue;
					if(child.disabled&&true==child.disabled&&false==submitDisabledElements)
						continue;
					var name=child.name;
					if(name)
					{
						if(1 < aXml.length)
							aXml.push('&');
							if('select-multiple'==child.type)
							{
								if(name.substr(name.length-2,2)!='[]')
									name+='[]';
								for(var j=0;j < child.length;++j)
								{
									var option=child.options[j];
									if(true==option.selected)
									{
										aXml.push(name);
										aXml.push("=");
										aXml.push(this.xDecode(option.value));
										aXml.push("&");
									}
								}
							}
							else
							{
								aXml.push(name);
								aXml.push("=");
								aXml.push(this.xDecode(child.value));
							}
						}
					}
				}
		
		return aXml.join('');
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.GetPagina = function (pagina,IDobj)
{
	
	var Responde = this.createXMLHTTP();
	_AreaElemento=''
	Responde.open("get", pagina, true); 
	Responde.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    Responde.setRequestHeader("Content-Type", "text/html; charset=iso-8859-1");
    Responde.setRequestHeader("Cache-Control", "no-cache");
    Responde.setRequestHeader("Pragma", "no-cache");
	Responde.onreadystatechange=function()
	{
		
			if (Responde.readyState==4)
			{	 
				if(Responde.status == 200)
				{
					var obj = new ClassAjax();
					if(IDobj != "")
					{
						obj.$(IDobj).innerHTML = Responde.responseText;
						obj.RestauraScript(obj.$(IDobj));
						
					}
					else
					{
						var oDoc=document;
						var objDiv=oDoc.createElement('div');
						objDiv.id="DIV_FUNCAO_AJAX"
						objDiv.style.display = "none";
						objDiv.innerHTML=" div para funcoes " + Responde.responseText;
						oDoc.body.appendChild(objDiv);
						if(obj.Brower()=="IE")
							obj.RestauraScript("DIV_FUNCAO_AJAX");
						obj.remove("DIV_FUNCAO_AJAX"); 
					}
				}
				else
				{
						var oDoc=document;
						oDoc.body.innerHTML = Responde.responseText;
				}
	
			}
		
	}
	
	Responde.send(null);
	
}
/////////////////////////////////////////////////////////////
ClassAjax.prototype.PostPagina = function (pagina,IDobj, frm)
{
	var Responde = this.createXMLHTTP();
   	var oDoc=document;
	var objForm=oDoc.getElementById(frm);

	if(pagina.indexOf("?") >= 0)
		pagina+="&"+this.getFormValue(objForm);
	else
		pagina+="?"+this.getFormValue(objForm);
	_AreaElemento=''
	Responde.open("get", pagina, true); 
	Responde.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	Responde.setRequestHeader("Content-length", pagina.length);
    Responde.setRequestHeader("Content-Type", "text/html; charset=iso-8859-1");
    Responde.setRequestHeader("Cache-Control", "no-cache");
    Responde.setRequestHeader("Pragma", "no-cache");
	Responde.onreadystatechange=function()
	{
		if (Responde.readyState==4)
		{	
			if(Responde.status == 200)
			{
				var obj = new ClassAjax();
			/*	if(IDobj != "")
				{
					obj.$(IDobj).innerHTML = Responde.responseText;
					obj.RestauraScript(obj.$(IDobj));
				}
				else*/
				{
					
					obj.$(IDobj).innerHTML = Responde.responseText;
					obj.RestauraScript(obj.$(IDobj));

				
					var oDoc=document;
					var objDiv=oDoc.createElement('div');
					objDiv.id="DIV_FUNCAO_AJAX"
					objDiv.style.display = "none";
					objDiv.innerHTML=" div para funcoes " + Responde.responseText;
					oDoc.body.appendChild(objDiv);
					if(obj.Brower()=="IE")
						obj.RestauraScript("DIV_FUNCAO_AJAX");
					obj.remove("DIV_FUNCAO_AJAX"); 
					
				}
			}
			else
			{
					var oDoc=document;
					oDoc.body.innerHTML = Responde.responseText;
			}
		}
	}
	
	Responde.send(null);
}
///////////////////////////////////////////////////////
ClassAjax.prototype.createCookie = function(name,value,days)
{
	if(value.replace(" ","").length == 0 )
		return;
		
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else 
		var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}
/////////////////////////////////////
ClassAjax.prototype.readCookie = function(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ')
			c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0)
			return c.substring(nameEQ.length,c.length);
	}
	return null;
}
//////////////////////////////////
ClassAjax.prototype.eraseCookie = function(name)
{
	this.createCookie(name,"",-1);
}
//////////////////////////////////
ClassAjax.prototype.addOption = function(element,optionId,txt,val)
{
	if('string'==typeof(element))
		element=this.$(element);
	var objOption = new Option(txt,val);
	objOption.id = optionId;
	element.options.add(objOption);
}
//////////////////////////////////
ClassAjax.prototype.removeOption=function(element)
{
	if('string'==typeof(element))
		element=this.$(element);
	
	var iLen = element.options.length;
	
	for(var i=0;i < iLen;i++)
	{
		this.remove(element.options[0]);
	}
}
///////////////////////////////////////////////////////////////////////
ClassAjax.prototype.Optionlord=function(element,objDiv)
{
	if('string'==typeof(element))
		element=this.$(element);
	if('string'==typeof(objDiv))
		objDiv=this.$(objDiv);
	this.removeOption(element)
	txt=objDiv.innerHTML;
	var start=txt.indexOf(',');
	this.addOption(element,element.id+'Option', '', '');
	if(start >-1)
	{
		while(start >-1)
		{
			end=start+1;
			codigo=txt.substr(0,start);
			txt=txt.substr(end,txt.length-end);
			start=txt.indexOf(',');
			end=start+1;
			if(start == -1)
				texto=txt;
			else
				texto=txt.substr(0,start);
			txt=txt.substr(end,txt.length-end);
			start=txt.indexOf(',');
			if(texto.replace(' ','').length>0)
				this.addOption(element,element.id+'Option'+codigo, texto, codigo);
		}
		
	}

}
///////////////////////////////////////////////////////////////////////	
ClassAjax.prototype.OptionInterval=function(element,inicio,fim)
{
	if('string'==typeof(element))
		element=this.$(element);
	this.removeOption(element)
	this.addOption(element, element.id+'Option', '', '');
	if(inicio<=fim)
	{
		for(var i=inicio;i <= fim;i++)
		{
			this.addOption(element, element.id+'Option'+i, i, i);
		}
	}
	else
	{
		for(var i=inicio;i >= fim;i--)
		{
			this.addOption(element, element.id+'Option'+i, i, i);
		}
	}
}
///////////////////////////////////////////////////////////////////////
ClassAjax.prototype.Optionmeses=function(element)
{
	
	if('string'==typeof(element))
		element=this.$(element);
	this.removeOption(element);
	this.addOption(element, element.id+'Option', '', '' );
	for(var i=1;i < _meses.length;i++)
	{
		this.addOption(element, element.id+'Option'+i, _meses[i], i );
	}	
}
var _meses=Array ('','janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro');
var _AreaElemento='';
var Ajax = new ClassAjax();

