var isIE = navigator.appVersion.indexOf('MSIE') > 0;
var isMozilla = document.getElementById && !isIE;
var isNetscape4 = document.layers ? true : false;

/**
 * Adiciona uma mensagem no pool de mensagens, 
 * para que sejam exibidas no onload da janela.
 */
var messages = null;
function addMessage(message) {
	if(message == null || message=="" || message.length<=0) return;
	
    if (messages == null) {
        messages = new Array();
    }
    messages[messages.length] = new Array(message);
}
function addMessages(message_array) {
    if (messages == null) {
        messages = new Array();
    }
    if(message_array!=null && message_array.length>0){
	    for(var i=0;i<message_array.length;i++){
		    messages[messages.length] = new Array(message_array[i]);
	    }
    }
}


/**
 * Apaga todas as mensagens do pool de mensagens.
 */
function clearMessages() {
	messages = null;
}

/**
 * Exibe as mensagens armazenadas. Método chamado via onload da janela.
 */
function showMessages() {
    if (messages == null) {
        return true;
    }
    
    var text = '<ul>';
    for(var i=0; i<messages.length; i++) {
        text += '<li>' + messages[i] + '</li>';
    }
    text += '</ul>';
    
    openPopup('Mensagens do sistema', 350, 150, text) ;
	messages = null;
	return false;
}

Event.observe(window, 'load', showMessages, false);

/**
 * Captura erros da tela e exibe em um alert.
 * Função chamada via evento window.onerror.
 * TODO verificar o uso de Event.observe() via prototype;
 */
window.onerror = tellerror;
function tellerror(msg, url, lno) {
	var m  = 'Ocorreu um erro de script:\n';
	    m += 'msg:  ' + msg + '\n';
	    m += 'url:  ' + url + '\n';
	    m += 'line: ' + lno + '\n';
	    m += "\n Reporte esse erro ao dono do site <a href='mailto:marison@maven.com.br'>clicando aqui</a>!";
	alert(m);
}

//inicio das funções e variáveis de controle da popup personalizada do Scc.
//Devido a um bug estúpido do IE, ao ser aberta a popup, todos os objetos do tipo
//select devem ser escondidos, e após a janela ser fechada, os objetos são exibidos
//novamente
var selectsEsconder = new Array();

/**
 * Abre a popup personalizada.
 *
 * @param title Título para a popup.
 * @param width largura da popup.
 * @param height altura da popup.
 * @param content Conteúdo da popup. Deve ser em formato HTML.
 */
function openPopup(title, width, height, content) {
	var objMessages = $('corpo');
	Element.show('corpo')			
	objMessages.innerHTML = "<div id=\"contentMessages\">"+content+"</div>";	
}

/**
 * Abre a popup personalizada do Scc imprimindo na mesma o conteúdo de um div
 * e semelhantes.
 *
 * @param title Título para a popup.
 * @param width largura da popup.
 * @param height altura da popup.
 * @param div referencia do objeto ou ID do div.
 */
function openPopupByDiv(title, width, height, divId) {
	openPopup(title, width, height, $(divId).innerHTML);
}

function ajaxEvalRequest(url, params, afterCall) {
	showMouseWaiting(true);
	var myAjax = new Ajax.Request(url, {
		method: 'get', 
		parameters: params,
		onSuccess: function(response) {
			showMouseWaiting(false);
			var text = response.responseText;
			text = text.replace(/\+/g," ");
			text = unescape(text);
			try {
				eval(text);		
				showMessages();
				if(afterCall) eval(afterCall);		
			} catch(e) {
				alert(e);
			}
		},
		onFailure: function(response) {
			showMouseWaiting(false);
			var text = response.responseText;
			text = text.replace(/\+/g," ");
            text = unescape(text);
            try {
				eval(text);		
				showMessages();		
			} catch(e0) {
				try {
					alert('Houve uma falha ao recuperar os dados: ' + text);
				} catch (e) {
					alert(e);
				}
			}
		}
	});
}

/** 
 * Altera o estado do cursor para 'aguarde' caso o valor flag 
 * for true, ou para 'normal' caso o valor da flag for false.
 *
 * @param flag true para cursor 'aguarde', false para cursor 'normal'.
 */
function showMouseWaiting(flag,appear) {
	if(appear && appear == "true") return;
	var bodyTags = document.getElementsByTagName('body');
	bodyTags[0].style.cursor = flag ? 'wait' : 'default';
	
	var selectTags = document.getElementsByTagName('select');
	for(var i=0; i<selectTags.length; i++) {
		selectTags[i].style.cursor = flag ? 'wait' : 'default';
	}
	
	var inputs = document.getElementsByTagName('input');
	for(var i=0; i<inputs.length; i++) {
		if (inputs[i].type == 'text' || inputs[i].type == 'password') {
			inputs[i].style.cursor = flag ? 'wait' : 'text';
		} else {
		inputs[i].style.cursor = flag ? 'wait' : 'default';
		}
	}
	if($('loading')){
		if(flag){
			Element.show('loading');
		if (isIE) {//bugfix pq o pseudo-browser IE deixa o select por cima dos DIVs
		try{
			var fields = document.getElementsByTagName('select');
			for(var i=0; i<fields.length; i++) {
				if (!fields[i].style || !fields[i].style.display) {
					selectsEsconder[selectsEsconder.length] = fields[i];
					Element.hide(fields[i])
				}
			}
			}catch(e){}
		}			
		
		}else{
			Element.hide('loading');
			Element.show('pagediv');
		}
	}
}

/**
 * Processa uma requisição via AJAX. O conteúdo retornado pela tela de output
 * é renderizado dentro do objeto definido no parametro target. Durante o 
 * processamento, é chamada a função que deixa o cursor do mouse em estado de 
 * espera, e ao final do processamento, volta ao estado padrão. 
 * Ao chamar esta função, a requisição é tratada tanto no lado servidor 
 * como o lado cliente para o uso de caracteres acentuados, que no IE 
 * causa o travamento do mesmo.
 * Caso houver erro, o sistema exibe a mensagem do mesmo.
 * TODO alterar o parametro params para aceitar array
 * TODO Tratar AJAX quando HttpSession expirou
 *
 * @param url
 * @param params parametros para a requisição (p1=aa&p2=bb)
 */
function ajaxInnerRequest(url, params, target) {
	showMouseWaiting(true);
	var myAjax = new Ajax.Request(url, {
		method: 'get', 
		parameters: params,
		onSuccess: function(response) {
			showMouseWaiting(false);
			var text = response.responseText;
			text = text.replace(/\+/g," ");
			text = unescape(text);
			try {
				$(target).innerHTML = text;
			} catch(e) {
				alert(e);
			}
		},
		onFailure: function(response) {
			showMouseWaiting(false);
			var text = response.responseText;
			text = text.replace(/\+/g," ");
            text = unescape(text);
            try {
				eval(text);
				showMessages();
			} catch(e0) {
				try {
					alert('Houve uma falha ao recuperar os dados: ' + text);
				} catch (e) {
					alert(e);
				}
			}
		}
	});
}



/** 
 * Armazena a função de alert e confirm originais do browser, caso haja
 * problemas ao sobrescrever com a popup personalizada do Scc.
 */
var oldAlert = alert;
var oldConfirm = confirm;

/**
 * Função que exibe a janela personalizada o Scc, ao invés do alert padrão
 * do browser.
 */
/*var alert = function alert(message) {
	try {
		var messageSplited = message.toString().split('\n');		
		var newMessage = '<ul>';
		for(var i=0; i<messageSplited.length; i++) {
			newMessage += '<li>' + messageSplited[i] + '</li>';
		}
		newMessage += '<ul>';		
		openPopup('Mensagem do sistema', 350, 200, newMessage);
	} catch(e) {
		oldAlert(message);
	}
}*/

function abreJanela(url,w,h){
	if(w==null || w=='') w='660';
  	if(h==null || h=='') h='420';
  	
   window.open(url,'4','width='+w+',height='+h+',toolbar=no,statusbar=no,scrollbars=yes,resizable=yes');
}


function validaEmail(campo) {
	if (!campo || (campo.value == "") || campo.value.length<=0) {
	 return false;
	} else {
		prim = campo.value.indexOf("@")
		if(
		  (campo.value.indexOf("..") > 0)
		||(campo.value.indexOf(")") > 0)
		||(campo.value.indexOf("(") > 0)
		||(campo.value.indexOf("]") > 0)
		||(campo.value.indexOf("[") > 0)
		||(campo.value.indexOf("/") > 0)
		||(campo.value.indexOf(".com.br.") > 0)
		||(campo.value.indexOf("@.") > 0)
		||(campo.value.indexOf(".@") > 0)
		||(campo.value.indexOf("hotmeil.com") > 0)
		||(campo.value.indexOf("zipmeil.com") > 0)
		||(campo.value.indexOf(" ") != -1)
		||(campo.value.indexOf(".") < 1)
		||(campo.value.indexOf("@",prim + 1) != -1)
		||(prim<2)
			) {
			return false;
		}
	}
		return true;
}

// verifica se um campo esta vazio ou não existe
function isEmpty(campo) {	
  return (campo==null || campo.value==null || campo.value=='');
}

/*
* Define o campo como errado ou não
*/
function setError(campo,erro,mensagem){
	var sub = $(campo.name+'Error');	
	if(erro){			
		campo.className="highlight";		
		if(sub)
			sub.innerHTML = sub.innerHTML+mensagem+"<br>";	
			
		return false;
	}else{
		campo.className = "";
		if(sub)
			sub.innerHTML = "";	
			
		return true;
	}
} 
