function Ajax(host)
{
	//___________PROPRIEDADES___________//
	
	this.host = document.getElementById(host);
	
	//___________METODOS___________//	
	
	this.addNode = function(tag,atb)
	{
		/* 	atb recebe valores como array bidimensional:
		[ ['id','glow'],	
		  ['src','../images/estrutura/glow.png'], 
		  ['style','position:absolute; top:50%; left:50%; margin-left:-390px; margin-top:-220px; -moz-opacity:0.5; filter:alpha(opacity=50); z-index:1; width:780px; height: 440px'] ];  */
		
		this.tag = tag;
		this.atributes = atb; 
		this.node = document.createElement(this.tag);
		
		//adiciona dinamicamente o novo nó
		
		this.host.appendChild(this.node);
		
		//o loop percorre a propriedade this.atributes, nela constam atributos html tais como id, style etc 
		for( i = 0; i<this.atributes.length;i++)
		{
			/*o tratamento javascript para a propriedade style é diferente em navegadores IE ou Moz.
			 O IE utiliza sintaxe de . (ponto). Ou seja deveremos informar document.quem.style.propriedade = valor,
			 essa instrução deverá ser repetida para cada propriedade de estilo definida. No caso do Moz basta 
			 apenas informar o estilo como na definição interna do HTML e aplicá-la via função setAtribute 
			*/
			if(navigator.appName != 'Microsoft Internet Explorer')
			{
				/*a funcao setAttribute() é entendida diferente para browsers Moz ou IE. 
				No caso do Moz a funcao processa todos os atributos de uma tag. Exemplo src, id, style. 
				No caso do IE, atributos simples como src, id etc são processados, porém atributos 
				compostos tal como style, não são processados*/
				this.node.setAttribute(this.atributes[i][0], this.atributes[i][1]); //adiciona os atributos
			}else{
				/*a declaração de estilo na CSS para alguns elementos é utilizado hifen como por 
				exemplo background-color, tal sintaxe não é aceita na declaração de ponto, devendo ser convertida
				para backgroundColor. Essa é a tarefa empreendida a seguir*/			
				if (this.atributes[i][0] != 'style')
				{
					//adiciona os atributos não compostos
					this.node.setAttribute(this.atributes[i][0], this.atributes[i][1]); 
				}else{
					//tratamento para atributo style
					var arrayStyle = this.atributes[i][1].split(';');
					for( j = 0 ; j<arrayStyle.length; j++)
					{
						//aqui dividimos a declaração de estilo onde constar (:)
						arrayStyleItens = arrayStyle[j].split(':');
						/*aqui pegamos valores de string que contenham - (hifen) mas que não sejam declarações do
						tipo -moz (Mozilla)*/
						if(arrayStyleItens[0].indexOf('-') != -1 && arrayStyleItens[0].indexOf('-moz') == -1)
						{
							hifenPos = arrayStyleItens[0].indexOf('-');
							minuscula = arrayStyleItens[0].slice(hifenPos,hifenPos+2);
							maiuscula = minuscula.toUpperCase();
							maiuscula = maiuscula.replace(/-/,'');
							definicao =  arrayStyleItens[0].replace(minuscula,maiuscula);
							propriedade = arrayStyleItens[1];
						}else{
							/*aqui pegamos valores de string isentas de - (hifen) mas que também não sejam
							declarações do tipo -moz */
							if(arrayStyleItens[0].indexOf('-moz') == -1)
							{
								definicao = arrayStyleItens[0];
								propriedade = arrayStyleItens[1];
							}
						}
						//aqui criamos uma string que na realidade é o comando de formatação do javascript para estilo
						ex ="this.host.childNodes[(this.host.childNodes.length-1)].style."+definicao+"= '"+propriedade+"'"; 
						//aqui a string anterior é transformada em comando javascript e executada
						eval(ex);			
					} //fecha for
				}//fecha if dentro do else
			}//fecha else
		}//fecha for
	}//fecha funcao
	
	
	
	this.addContent = function (content,el,flag) 
	{
		/* o flag indica se um arquivo sera aberto ou o conteudo esta 
		sendo inserido diretamente em formato texto. 
		Ex. valor 0 - conteudo será inserido diretamente, nesse caso o atributo content 
							recebe uma valor em formato texto.
			   valor 1 -  será aberto um arquivo, nesse caso content recebe o nome do arquivo a ser aberto.
		O argumento el representa o elemento de destino*/
		
//		var destino = ()
		if(flag) 
		{
			request = (window.XMLHttpRequest) ? new XMLHttpRequest()  :  
																				(window.ActiveXObject) ? new 
																				ActiveXObject("Microsoft.XMLHTTP") : false ; 
			request.open("GET", content,true);
			request.onreadystatechange=function()  
			{ 
				if (request.readyState==4)  
				{ 
					//alert(document.getElementById(el))
					//alert(request.responseText)
					document.getElementById(el).innerHTML = request.responseText; 
				} 
			} 
			request.send(null); 
		}else{
			document.getElementById(el).innerHTML = content;
		}//fecha if
	}//fecha funcao

	this.addContentTop = function (content,el,flag) 
	{
		if(flag) 
		{
			request = (window.XMLHttpRequest) ? new XMLHttpRequest()  :  
																				(window.ActiveXObject) ? new 
																				ActiveXObject("Microsoft.XMLHTTP") : false ; 
			request.open("GET", content,true);
			request.onreadystatechange=function()  
			{ 
				if (request.readyState==4)  
				{ 
					//alert(document.getElementById(el))
					//alert(request.responseText)
					top.document.getElementById(el).innerHTML = request.responseText; 
				} 
			} 
			request.send(null); 
		}else{
			top.document.getElementById(el).innerHTML = content;
		}//fecha if
	}//fecha funcao

	this.addContentIframe = function (content,el,flag,indice) 
	{
		if(flag) 
		{
			request = (window.XMLHttpRequest) ? new XMLHttpRequest()  :  
																				(window.ActiveXObject) ? new 
																				ActiveXObject("Microsoft.XMLHTTP") : false ; 
			request.open("GET", content,true);
			request.onreadystatechange=function()  
			{ 
				if (request.readyState==4)  
				{ 
					window.frames[0].document.getElementById(el).innerHTML= request.responseText; 
				} 
			} 
			request.send(null); 
		}else{
			window.frames[0].document.getElementById(el).innerHTML = content;
		}//fecha if
	}//fecha funcao

	
	this.sendPost = function (file,content,el)
	{
		request = (window.XMLHttpRequest) ? new XMLHttpRequest()  :  
																		(window.ActiveXObject) ? new 
																		ActiveXObject("Microsoft.XMLHTTP") : false ; 
		request.open("POST", file,true);
		request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		if(el != '')
		{
			request.onreadystatechange=function()  
			{ 
				if (request.readyState==4)  
				{ 
					document.getElementById(el).innerHTML = request.responseText; 
				} 
			} 
		}
		request.send(content); 		
	}
	
	//outro metodo
}

function Menu(ul)
{
	//propriedades do objeto

	this.ulPrincipal = document.getElementById(ul);
	//aqui contamos o numero de LI tanto para browser Mozilla qto para IE
	this.liCount = 0;
	for (i = 0; i< this.ulPrincipal.childNodes.length; i++)
	{
		this.liCount  += (this.ulPrincipal.childNodes[i].tagName == 'LI') ? 1 : 0;
	}
	/* nesse loop pegamos a ul pelo ID e recuperamos sempre os nós filhos da UL ou seja a cada
	execução uma LI 
	Vamos criar a variavel:
			this.rotulos - contendo somente os nomes das partes estruturais do portal */
	this.rotulos = new Array();
	for( l = 0; l<this.liCount; l++)
	{
		if(navigator.appName == 'Microsoft Internet Explorer')
		{
			li = (l == 0) ? this.ulPrincipal.childNodes[0] : li.nextSibling ;
			this.rotulos[l] = li.childNodes[0].innerHTML;
		}else{
			li = (l == 0) ? this.ulPrincipal.childNodes[0].nextSibling : li.nextSibling.nextSibling ;
			this.rotulos[l] = li.childNodes[0].nextSibling.innerHTML;
		}//fecha if
	}//fecha for
		
	//metodos para o objeto

	this.addMenu = function (host, tag, atb, flag)
	{
		//vamos instanciar um novo objeto Ajax com o proposito de criar a DIV menu
		this.menuBar = new Ajax(host);
		this.menuBar.addNode(tag,atb);
		//alert(this.menuBar.atributes)
		/*	Vamos criar a variavel:
			this.links - onde montaremos a estrutura <a></a> para cada link assumindo o rotulo 
							 anterior como titulo para o link.  Desse modo, se futuramente houver a necessidade
							 de usar outro texto como rotulo para o link, os elementos já estão separados */

		this.links = new Array();
		for(k=0; k<this.liCount; k++)
		{
			//dimLink =  this.rotulos[k].length*10;
			//alert(dimLink);
			this.links[k] = '<a href="#" id="m'+k+'" style="margin-right:10px; float:left; display:block">'+this.rotulos[k]+'</a>';
			//alert(this.links[k]);
		}
		menuBarId = this.menuBar.node.id;
		this.links = this.links.join('');
		this.menuBar.addContent(this.links,menuBarId,flag);
		totalDim = 0;
		for(y=0; y<this.liCount; y++)
		{
			dimLink = 'm'+y;
			totalDim += document.getElementById(dimLink).clientWidth;
		}
		dimBar = parseInt(this.menuBar.node.style.width);
		this.menuBar.node.style.paddingLeft = Math.ceil((dimBar-totalDim)/3)+'px';
	}
	
}
