/**
 * @author jonas
 */

function $m(quem)
{
 //Substitui o document.getElementById
 return document.getElementById(quem)
}

function remove(quem)
{
 quem.parentNode.removeChild(quem);
}

function addEvent(obj, evType, fn)
{
    if (obj.addEventListener)
        obj.addEventListener(evType, fn, true)
    if (obj.attachEvent)
        obj.attachEvent("on"+evType, fn)
}

function removeEvent(obj, type, fn)
{
	if (obj.detachEvent) {
		obj.detachEvent('on'+type, fn);
	} else {
		obj.removeEventListener(type, fn, false);
	}
}
 
function doUpload(form, url_action, id_elemento_retorno, html_exibe_carregando, html_erro_http)
{
/**
* Descricao - Submete um form para um iframe oculto e pega o resultado. Consequentemente pode
*             ser usado pra fazer upload de arquivos de forma assíncrona.
* Parametros:
* form - o form a ser submetido ou seu ID
* url_action - url pra onde deve ser submetido o form
* id_elemento_retorno - id do elemento que irá receber a informação de retorno
* html_exibe_carregando - Texto (ou imagem) que será exibido enquanto se carrega o upload
* html_erro_http - texto (ou imagem) que será exibido se der erro HTTP.
*/

 //testando se passou o ID ou o objeto mesmo
 form = typeof(form)=="string"?$m(form):form;
 
 var erro="";
 if(form==null || typeof(form)=="undefined") {
 	erro += "O form passado no 1o parâmetro não existe na página.\n";
 } else if(form.nodeName!="FORM") {
 	erro += "O form passado no 1o parâmetro da função não é um form.\n";
 }
 if($m(id_elemento_retorno)==null) {
 	erro += "O elemento passado no 3o parâmetro não existe na página.\n";
 }
 if(erro.length>0) {
  alert("Erro ao chamar a função doUpload:\n" + erro);
  return;
 }

 //criando o iframe
 var iframe = document.createElement("iframe");
 iframe.setAttribute("id","upLoadTemp");
 iframe.setAttribute("name","upLoadTemp");
 iframe.setAttribute("width","0");
 iframe.setAttribute("height","0");
 iframe.setAttribute("border","0");
 iframe.setAttribute("style","width: 0; height: 0; border: none;");
 /* Não usei display:none pra esconder o iframe
    pois tem uma lenda que diz que o NS6 ignora
    iframes que tenham o display:none */
 
 //adicionando ao documento
 form.parentNode.appendChild(iframe);
 window.frames['upLoadTemp'].name="upLoadTemp"; //ie sucks
 
 //adicionando o evento ao carregar
 var carregou = function() { 
   removeEvent( $m('upLoadTemp'),"load", carregou);
   var cross = "javascript: ";
   cross += "window.parent.$m('" + id_elemento_retorno + "').innerHTML = document.body.innerHTML; void(0); ";
   $m(id_elemento_retorno).innerHTML = html_erro_http;
   $m('upLoadTemp').src = cross;
   //deleta o iframe
	setTimeout(function() {
		remove($m('upLoadTemp'));

		var idx = null;
//*
		// Trata lixo no fim da string.
		if($m(id_elemento_retorno).innerHTML.indexOf("\r") != -1) {
			$m(id_elemento_retorno).innerHTML = $m(id_elemento_retorno).innerHTML.substring(0, $m(id_elemento_retorno).innerHTML.indexOf("\r"));
		} else if ($m(id_elemento_retorno).innerHTML.indexOf("\n") != -1) {
			$m(id_elemento_retorno).innerHTML = $m(id_elemento_retorno).innerHTML.substring(0, $m(id_elemento_retorno).innerHTML.indexOf("\n"));
		} else if ($m(id_elemento_retorno).innerHTML.indexOf(" ") != -1) {
			$m(id_elemento_retorno).innerHTML = $m(id_elemento_retorno).innerHTML.substring(0, $m(id_elemento_retorno).innerHTML.indexOf(" "));
		}
//*/
		if ($m(id_elemento_retorno).innerHTML == "") {
			alert("Resposta invalida!");
			alert($m(id_elemento_retorno).innerHTML);
			getScreen(1);
		} else if ($m(id_elemento_retorno).innerHTML.substring(0, 3) == "Erro") {
			alert($m(id_elemento_retorno).innerHTML);
			getScreen(1);
		} else {
			getScreen(2);	// Vai para a próxima tela;
		}
			
	}, 250);
  }
  
 addEvent( $m('upLoadTemp'),"load", carregou)
 
 //setando propriedades do form
 form.setAttribute("target","upLoadTemp");
 form.setAttribute("action",url_action);
 form.setAttribute("method","POST");
 form.setAttribute("enctype","multipart/form-data");
 form.setAttribute("encoding","multipart/form-data");
 //submetendo
 form.submit();
 
 //se for pra exibir alguma imagem ou texto enquanto carrega
 if(html_exibe_carregando.length > 0) {
 	
  $m(id_elemento_retorno).innerHTML = html_exibe_carregando;
 }
}

