var httpRequest = false;

function ajaxRequest(){
	
	httpRequest=false;	
	this.doHttpRequest=doHttpRequest;
	
};	
		
	function requestBrowser(){
		
		// Vamos verificar se o browser é um browser diferete do internet Explorer
		if (window.XMLHttpRequest) { 
            httpRequest = new XMLHttpRequest();
            
        } else if (window.ActiveXObject) { 
		// Caso o browser seja o Internet Explorer
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!httpRequest) {
            alert('Nao consigo criar a instancia!');
            return false;
        }
	}
	
	function doHttpRequest(url,kind,sendstring){
	// url » Endereço da pagina a que vamos efectuar o pedido
	// kind	» Tipo do metodo POST | GET
			
		requestBrowser();
		// Alguns browsers nao funcionam se a resposta for num formato NAO XML
		// vamos obrigar a que seja XML	
			if (httpRequest.overrideMimeType) {
                httpRequest.overrideMimeType('text/xml');
            }
		
		// Quando recebermos a resposta do servidor vamos necessitar de dizer o que fazer com ela	
		// no nosso caso é correr a função receivedRequest
		httpRequest.onreadystatechange = receivedRequest;
		
		// Precisamos de verificar se o pedido é um POST ou GET ou nenhum		
		var str = kind+"";
		var command2 = kind.toUpperCase();
		
		// Se nao estamos a colocar um POST assumimos um GET
		if(!command2.match("POST"))
		{
			command2 = 'GET';
		}
		
			
		
		// Agora vamos necessitar de efectuar o pedido
		// open() 	» 1º parametro, método GET, POST, HEAD
		//			» 2º parametro, URL para efectuar o pedido, 
		//			como medida de segurança apenas é necessário efectuar o pedido ao dominio local
		//			» 3º paramentro FALSE / TRUE , define se o pedido é assincrono (se continua a executar enquanto 
		//			esperamos a resposta) ou se para, claro que desejamos continuar é o A de AJAX
		httpRequest.open(command2, url, true);
		
		
		if(command2.match("POST"))
		{
			httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}
		
		// Vamos enviar o pedido para o servidor
		// send() 	» paramentro único » o paramentro pode ser qualquer dados que se queiram enviar ao servidor
		// no caso de desejarmos efectuar um post a string deve ter o formato (name=value&anothername=othervalue&so=on)
		// para o POST temos ainda de definir o tipo de pedido atraves de uma instrução
		// http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		// de outro modo o servidor vai descratar a informação enviada
		httpRequest.send(sendstring);	
		
	};
	
	
		
	function receivedRequest(){
		// O primeiro ponto a verificar é o estado do servidor, se o estado for 4 é indicado
		// que o pedido foi respondido na totalidade
		// readyState toma os seguintes valores (#  0 (uninitialized) # 1 (loading) # 2 (loaded) # 3 (interactive) # 4 (complete))
		if (httpRequest.readyState == 4) {
		// Correu tudo bem e o pedido foi respondido
			if (httpRequest.status == 200) {
			// Foi devolvido um codigo 200 que significa pagina OK
			treatRequest(httpRequest.responseText);
			} else {
			// Existiu um problema com o pedido
			// a titulo de exemplo a resposta pode ser 404 (Not Found)
			// ou 500 (Internal Server Error)					
			alert("É impossivel processar o pedido");
			}

		} 		
	};
	
	function treatRequest(response){
		// Definir o Array
		var myResponse = stringToArray(response);
		// Tratar o Array e mostrar
		for(i=0;i<myResponse.length;i++)
		treatString(myResponse[i]);
	}
	
	function treatString(response)
	{
		// Espera-se um array de respostas do tipo
		// string|content
		// Onde string é o ID do elemento HTML onde irá ser mostrado o content
		var responseSt = response+"";
		var htmlObjectID = responseSt.substr(0,responseSt.indexOf('|'));
		var htmlObjectContent = responseSt.substr(responseSt.indexOf('|')+1,responseSt.length);
		
		changeContent(htmlObjectID,htmlObjectContent);
		DoFade(7, htmlObjectID);
		setTimeout("document.getElementById('"+htmlObjectID+"').innerHTML=''", 3000);

	}
		

	// Tratar a string de modo a efectuar o POST no formato correcto
	// NOME_DO_CAMPO = Valor na caixa
	function organiseToPost(id){
		if (document.getElementById) {
			var el = document.getElementById? document.getElementById(id): document.all[id];
			if (el) 
			{				
				return id+"="+el.value;
			}
		}
	}
	
	// Transformar uma string do tipo "A|B¨C|D¨E|F num array do tipo
	// array[0] = "A|B"; array[1] = "C|D"; array[2] = "E|F";  
	
	function stringToArray(message){
		var myMessage = message+"";
		return myMessage.split("|||");
	}
	
	
	// Alterar area HTML
	function changeContent(id,shtml) {
		if (document.getElementById || document.all) {
			var el = document.getElementById? document.getElementById(id): document.all[id];
			if (el && typeof el.innerHTML != "undefined") el.innerHTML = shtml;
		}
	}


function askAJAX(url,method,sendstring)
{
	requesty = new ajaxRequest();	
	requesty.doHttpRequest(url,method,sendstring);
}

	// Visual efects
	// Yellow fade
	
	
	var FadeInterval = 2000;	

	// This is list of steps that will be used for the color to fade out
	var FadeSteps = new Array();
		FadeSteps[1] = "ff";
		FadeSteps[2] = "ee";
		FadeSteps[3] = "dd";
		FadeSteps[4] = "cc";
		FadeSteps[5] = "bb";
		FadeSteps[6] = "aa";
		FadeSteps[7] = "99";
	
	function DoFade(colorId, targetId) {
		if (colorId >= 1) {
			document.getElementById(targetId).style.backgroundColor = "#ffff" + FadeSteps[colorId];
		
			// If it's the last color, set it to transparent
			if (colorId==1) {
				document.getElementById(targetId).style.backgroundColor = "transparent";
			}
			colorId--;
		
			// Wait a little bit and fade another shade
			setTimeout("DoFade("+colorId+",'"+targetId+"')", FadeInterval);
		}
			
			
	
	}
