function Ajax(){
	this.assincr = false;
	this.method = "GET";
	this.val = "";
	this.xmlhttp = null;
	
	try{
		this.xmlhttp =  new ActiveXObject("Microsoft.XMLHTTP");
	}catch(e){
		try{
			this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(ex){
			try{
				this.xmlhttp = new XMLHttpRequest();
			}catch(exc){
				alert("Esse browser não tem recursos para uso do Ajax");
				this.xmlhttp = null;
			}
		}
	}
	
	this.urlRand = function(uri){
		var dt = new Date();
		if(uri.indexOf("?")>=0){
			return uri+"&"+encodeURI(Math.random()+"_"+dt.getTime());
		}else{
			return uri+"?"+encodeURI(Math.random()+"_"+dt.getTime());
		}
	}
	
	this.extraiScript = function (texto) {
		var ini, pos_src, fim, codigo;
		var objScript = null;
		ini = texto.indexOf('<script', 0)

		while (ini!=-1) {
			var objScript = document.createElement("script");
			//Busca se tem algum src a partir do inicio do script
			pos_src = texto.indexOf(' src', ini)
			ini = texto.indexOf('>', ini) + 1;

			//Verifica se este e um bloco de script ou include para um arquivo de scripts
			if (pos_src < ini && pos_src >=0) {        //Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script
				//Marca como sendo o inicio do nome do arquivo para depois do src
				ini = pos_src + 4;
				//Procura pelo ponto do nome da extencao do arquivo e marca para depois dele
				fim = texto.indexOf('.', ini)+4;
				//Pega o nome do arquivo
				codigo = texto.substring(ini,fim);
				//Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano
				codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");
				// Adiciona o arquivo de script ao objeto que sera adicionado ao documento
				//alert(codigo);
				objScript.src = codigo;
			} else {                    //Se nao encontrou um "src" dentro da tag script, esta e um bloco de codigo script
				// Procura o final do script
				fim = texto.indexOf('</script>', ini);
				// Extrai apenas o script
				codigo = texto.substring(ini,fim);
				// Adiciona o bloco de script ao objeto que sera adicionado ao documento
				objScript.text = codigo;
			}
			//Adiciona o script ao documento
			document.body.appendChild(objScript);
			// Procura a proxima tag de &lt;script
			ini = texto.indexOf('&lt;script', fim);
			//Limpa o objeto de script
			objScript = null;
		}
	}

	//carrega o conteudo de uma ajax em uma var
	this.loadResult = function(url){
		if(this.xmlhttp) {
			this.xmlhttp.open(this.method, this.urlRand(url) , this.assincr);
			//headers, vulnerável
			this.xmlhttp.setRequestHeader("Cache-Control", "no-cache");
        	this.xmlhttp.setRequestHeader("Pragma", "no-cache");
			//
			if(this.method == 'GET'){
				this.xmlhttp.send(null);
			}else if(this.method == 'POST'){
				this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
				try{
					this.xmlhttp.send(url.split("?")[1]);
				}catch(e){}
			}
			//
			if(this.assincr){
				this.xmlhttp.onreadystatechange = function(){
					if(ajax.xmlhttp.readyState == 4){
						if(ajax.xmlhttp.status == 200){							
							ajax.val = ajax.xmlhttp.responseText;
						}else{
							alert(ajax.xmlhttp.statusText);
						}
					}
				}
			}else{
				ajax.val = ajax.xmlhttp.responseText;
			}
		}
		return this.val;
	}
	
	this.loadContent = function(url, div_name){
		if(this.xmlhttp) {
			this.xmlhttp.open(this.method, this.urlRand(url) , this.assincr);
			//headers, vulnerável
			this.xmlhttp.setRequestHeader("Cache-Control", "no-cache");
        	this.xmlhttp.setRequestHeader("Pragma", "no-cache");
			//
			if(this.method == 'GET'){
				this.xmlhttp.send(null);
			}else if(this.method == 'POST'){
				this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
				try{
					this.xmlhttp.send(url.split("?")[1]);
				}catch(e){}
			}
			//
			if(this.assincr){
				this.xmlhttp.onreadystatechange = function(){
					if(ajax.xmlhttp.readyState == 4){
						if(ajax.xmlhttp.status == 200){							
							ajax.val = ajax.xmlhttp.responseText;
						}else{
							alert(ajax.xmlhttp.statusText);
						}
					}
				}
			}else{
				ajax.val = ajax.xmlhttp.responseText;
			}
			
			this.extraiScript(ajax.xmlhttp.responseText);
			
			try{
				get(div_name).innerHTML = ajax.val;
			}catch(e){}
		}
	}
	
}

var ajax = new Ajax();
ajax.assincr = false;
ajax.method = "GET";
