/**
* Arquivo de funções globais
*
* @author Marcus
* @package adm.aondedownloads.com
*/

/**
* Função que contém chamadas a funções que serão feitas no evento onload do window
*/
function doOnLoad(){

	var forms = document.forms;

	ajustarLargura();

	window.onresize = function (){
		ajustarLargura();
	}

	//Dá o foco ao primeiro elemento do primeiro form
	focoForm(forms[0]);

	//Adiciona função de validação aos forms
	adicionarValidacaoForms();

}

/**
* Função que adiciona ao evento onsubmit de todos os formulários
* do documento, a função de validação de formulário "validaForm()"
*
*/
function adicionarValidacaoForms(){

	var forms = document.forms;

	for ( var i = 0; i < forms.length; i++ ){

		forms[i].onsubmit = validaForm;

	}

}


/**
* Função que valida os campos obrigatórios num formulário.
* Para que um campos seja obrigatório, o valor do seu atributo
* 'title' deve começar com um asterísco (*)
*
* @return boolean
*/
var validaForm = function(){

	var frm = this;

	for (var i = 0; i < frm.elements.length; i++){

		if ( (frm.elements[i].title.substr(0,1)) == "*" ){

			//apaguei esta linha para testes
			//if ((frm.elements[i].value == "") || (frm.elements[i].value == 0)){
			if (frm.elements[i].value == ""){
				alert("O campo '"+frm.elements[i].title.substr(1,(frm.elements[i].title.length))+"' é de preenchimento obrigatório!");
				frm.elements[i].style.backgroundColor = "#ffffcc";
				frm.elements[i].focus();
				return false;
				break;
			}else{
				frm.elements[i].style.backgroundColor = "#efefef";
			}

		}

	}

	return true;

}

/**
* Função que ajusta a largura da página de acordo com a resolução da tela do usuário
*
*/
function ajustarLargura(){

	//Pego a largura da tela
	var sWidth = screen.width;

	//Pego a div principal
	var divSite = document.getElementsByTagName('div')[0];

	if (divSite.id != 'siteWindow'){

		//Atribuo o novo width
		divSite.style.width = (sWidth - 42) + "px";

	}

	//Ocultamos a div lateral se a resolução for baixa
	if ( sWidth <= 800 ){
		var divLateral = document.getElementById( 'lateralDireita' );
		
		if ( divLateral != null ){
		
			divLateral.style.visibility = 'hidden';
			divLateral.style.display = 'none';
		
		}
		
	}

}


/**
* Função de tratamento de retorn de respostas no formato JSON
*/
function jsonResponse( str ){

	return eval( "(" + unescape(str) + ")" );

}


/**
* Função que adiciona um option a um select
*/
function addOption(obj, value, label){

	var option = document.createElement('option');

	option.setAttribute('value', value);
	option.setAttribute('label', label);

	var textOption = document.createTextNode(label);

	option.appendChild(textOption);
	obj.appendChild(option);

}


/**
* Função que limpa um select, ou seja, elimina todos os options
*/
function clear(obj){

	if ( obj != null ){

		if (obj.hasChildNodes()){

			var nos = obj.childNodes;

			while (nos.length > 0){

				var no = nos[nos.length - 1];
				obj.removeChild(no);

			}
		}

	}

}


/**
* Dá o foco do teclado ao primeiro elemento do form
*/
function focoForm(form){

	if ( form ){

		for ( var i = 0; i < form.elements.length; i++ ){

			if ( ( form.elements[i].type == 'text' ) || ( form.elements[i].type == 'select-one' ) || ( form.elements[i].type == 'select-multiple' ) || ( form.elements[i].type == 'textarea' ) || ( form.elements[i].type == 'radio' ) || ( form.elements[i].type == 'checkbox' ) ){
				form.elements[i].focus();
				break;
			}

		}

	}

}

/**
* Retorna à página anterior sem salvar as ações
*/
function cancelar(){
	history.back();
	return false;
}

/**
* Contador de caracteres digitados
*
* @param string campo		- Id do elemento a ser contado
* @param string contador	- Id do elemento contador
* @param int limite			- Limite de caracteres
*/
function contador( campo, contador, limite ){

	var objCampo = document.getElementById(campo);
	var objContador = document.getElementById(contador);
	var intCaracteres = limite - objCampo.value.length;

	if (intCaracteres > 0) {
		objContador.innerHTML = intCaracteres;
	}
	else {
		objContador.innerHTML = "0";
		objCampo.value = objCampo.value.substr(0,limite);
		alert('Você ultrapassou o limite de '+limite+' caracteres!');
	}

}


/**
* Função chamada no onblur de um campo de texto.
* Esta função preenche a mensagem padrão do campo se o valor digitado foi nulo
*
* @param DomNode obj	- Elemento input
* @param string msg		- String padrão
*/
function blurInput( obj, msg ){

	if ( obj.value.length == 0 ){
		obj.value = msg;
		obj.style.color = '#999999';
	}

}

/**
* Função chamada no onfocus de um campo de texto.
* Esta função limpa a mensagem padrão do campo
*
* @param DomNode obj	- Elemento input
* @param string msg		- String padrão
*/
function focusInput( obj, msg ){

	if ( obj.value == msg ){
		obj.value = '';
		obj.style.color = '#000000';
	}

}


/**
* Função que exibe uma janela com o formulário de votação no software.
*
* @param int idSoftware	- id do Software a ser votado
* @param int nomeSoftware	- nome do Software a ser votado
*/
var exibirJanelaVotar = function( idSoftware, nomeSoftware ){

	var win = new Window({className: "alphacube", title: "Votar em " + nomeSoftware , width:530, height:360, url: "http://" + servidor + "/votar/" +idSoftware+ "/" + nomeSoftware + ".htm", minimizable: false, resizable: false, maximizable: false, draggable: false,showEffectOptions: {duration:1.5}});
	win.showCenter(true);

	return false;

}

/** 
* Função que exibe uma janela com o formulário de envio de software por email
*
* @param int idSoftware	- id do Software a ser enviado
* @param int nomeSoftware	- nome do Software a ser enviado
*/
var enviarEmail = function( idSoftware, nomeSoftware ){

	var win = new Window({className: "alphacube", title: "Enviar " + nomeSoftware + " por email" , width:336, height:305, url: "http://" + servidor + "/enviarEmail/" +idSoftware+ "/" + nomeSoftware + ".htm", minimizable: false, resizable: false, maximizable: false, draggable: false,showEffectOptions: {duration:1.5}});
	win.showCenter(true);

	return false;

}


/**
* Função que exibe uma janela com o formulário de envio de lista de downloads por email
*
* @param int idSoftware	- id do Software a ser enviado
* @param int nomeSoftware	- nome do Software a ser enviado
*/
var divulgarLista = function( idListaDownloads, nomeLista ){

	var win = new Window({className: "alphacube", title: "Divulgar " + nomeLista + " por email" , width:336, height:305, url: "http://" + servidor + "/Divulgar-Lista/" +idListaDownloads+ "/" + nomeLista + ".htm", minimizable: false, resizable: false, maximizable: false, draggable: false,showEffectOptions: {duration:1.5}});
	win.showCenter(true);

	return false;

}


/**
* Função que exibe uma janela com o formulário de envio de todas as lista de downloads por email
*
* @param int idSoftware	- id do Software a ser enviado
* @param int nomeSoftware	- nome do Software a ser enviado
*/
var divulgarTodasListas = function(){
	
	var win = new Window({className: "alphacube", title: "Divulgar todas as listas por email" , width:336, height:305, url: "http://" + servidor + "/Divulgar-Todas-Listas/" , minimizable: false, resizable: false, maximizable: false, draggable: false,showEffectOptions: {duration:1.5}});
	win.showCenter(true);

	return false;

}

/**
* Função que exibe uma janela com o formulário para salvar em lista
*
* @param int idSoftware	- id do Software a ser salvo
* @param int nomeSoftware	- nome do Software a ser enviado
*/
var salvarEmLista = function( idSoftware, nomeSoftware ){

	var win = new Window({className: "alphacube", title: "Salvar " + nomeSoftware + " em lista." , width:390, height:320, url: "http://" + servidor + "/salvarEmLista/" +idSoftware+ "/" + nomeSoftware + ".htm", minimizable: false, resizable: false, maximizable: false, draggable: false,showEffectOptions: {duration:1.5}});
	win.showCenter(true);

	return false;

}


/**
* Função que exibe uma janela com o formulário de login
*
*/
var login = function(){

	var win = new Window({className: "alphacube", title: "Fazer login" , width:250, height:250, url: "http://" + servidor + "/login.htm", minimizable: false, resizable: false, maximizable: false, draggable: false,showEffectOptions: {duration:1.5}});
	win.showCenter(true);

	return false;

}


/**
* Função que exibe uma mensagem de ajuda
*
*/
var ajuda = function( mensagem ){

	Dialog.alert( mensagem, {width:300, height:100, okLabel: "Fechar", ok:function(win) {debug("validate alert panel"); return true;}});

}


/**
* Função que fecha a janela aberta dinamicamente
*/
var fecharJanela = function(){

	var documentParent = window.parent.document;
	var btnsFechar = documentParent.getElementsByClassName('alphacube_close');

	var btnFechar = btnsFechar[0];
	btnFechar.onclick();

	return false;

}

/**
* Função que troca o submit do formulário de buscas na visualiação da
* lista de downloads.
*
* @param DomElement obj - Objeto radio
*/
var trocarSubmitListaDownloads = function( obj ){

	if ( obj.checked ){

		if ( obj.value == 'S' ){

			var frmBusca = document.getElementById('frmBuscarSoftwares');
			frmBusca.action = "http://" + servidor + "/submitBusca.php";

			var termosBusca = document.getElementById( 'termosBusca' );
			termosBusca.title = "*Termos da busca";

		}else{

			var frmBusca = document.getElementById('frmBuscarSoftwares');
			frmBusca.action = "http://" + servidor + "/visualizarListaDownloads.php";

			var termosBusca = document.getElementById( 'termosBusca' );
			termosBusca.title = "Termos da busca";

		}

	}

}


/**
* Função que exclui um Item de uma Lista de Downloads
*
* @param int	idItemListaDownloads 	id do Item de uma Lista de Downloads
* @param string	idObj				 	id do objeto DOM ContratoDestaque
*/

var excluirItem = function( idItemListaDownloads, idObj ){

	if ( confirm('Tem certeza que deseja excluir este item da lista?') ){
		
		//Pegamos o objeto select
		var obj = document.getElementById(idObj);

		//Instanciamos o objeto ajax
		var req = new XMLHttpRequest();

		//Definimos a url
		var url = "http://" + servidor + "/excluirItemListaDownloads.ajax.php?idItemListaDownloads=" + idItemListaDownloads + "&post=1";

		if (req){

			//Definimos a função manipuladora
			req.onreadystatechange = function() {
				
				//Se a requisição estiver completa
				if (req.readyState == 4 && (req.status == 200 || req.status == 304)) {

					var response = req.responseText;
					
					if ( response == 1 ){
						
						w3Opacity.fading(obj.id,100,0,600 );						
						
						return true;

					}else if ( response == 2 ){
						alert('Você não pode excluir item da lista de outro usuário!');
						return false;						
					}
					 else {

						alert('Ocorreu um erro ao excluir o Item da Lista!');
						return false;

					}

				}

			}

		}

		req.open('GET', url);
		req.send(null);

	} else {
		
		return false;
		
	}

}

/**
* Função que adiciona lista de downloads as listas de favoritas do usuário
*
* @param int	idListaDownloads 	id de uma Lista de Downloads 
*/ 

var adicionarListasFavoritas = function( idListaDownloads, homePageLista ){
	
	if ( confirm('Deseja adicionar esta lista às suas listas favoritas?') ){
		
		// Instanciamos o objeto ajax
		var req = new XMLHttpRequest();

		// Definimos a url
		var url = "http://" + servidor + "/adicionarListasFavoritas.ajax.php?idListaDownloads=" + idListaDownloads + "&post=1&js=1";

		if (req){

			var response = req.responseText;
			
			// Definimos a função manipuladora
			req.onreadystatechange = function() {
			
			// Se a requisição estiver completa
			if (req.readyState == 4 && (req.status == 200 || req.status == 304)) {
				
				var response = req.responseText;
				
				switch( response ){
					
					case '1':
					alert('Lista adicionada às suas listas favoritas com sucesso!');
					break;

					case '2':
					alert('Esta lista já foi adicionada às suas listas favoritas');
					break;
					
					case '3':
					alert('Ocorreu um erro ao excluir a lista de downloads das favoritas!');
					break;
					
				}
				

				}

			}

		}

		req.open('GET', url);
		req.send(null);
		document.location( homePageLista );
		return false;

	} else {
		
		return false;
		
	}

}


/**
* Função que exclui uma lista das listas de favoritas
*
* @param int	idListaDownloads 		id da Lista de Downloads
* @param string	idObj				 	id do objeto DOM ContratoDestaque
*/

var excluirListaFavorita = function( idListaDownloads, idObj ){
	
	if ( confirm('Tem certeza que deseja excluir esta lista às suas listas de favoritas?') ){

		//Pegamos o objeto select
		var obj = document.getElementById(idObj);

		//Instanciamos o objeto ajax
		var req = new XMLHttpRequest();

		//Definimos a url
		var url = "http://" + servidor + "/excluirListaFavorita.ajax.php?idListaDownloads=" + idListaDownloads + "&post=1";

		if (req){

			//Definimos a função manipuladora
			req.onreadystatechange = function() {

				//Se a requisição estiver completa
				if (req.readyState == 4 && (req.status == 200 || req.status == 304) ) {

					var response = req.responseText;
					
					switch( response ){
						
						case '1':
						
						if ( idObj != '-1') {
							
							w3Opacity.fading(obj.id,100,0,600 );
							return true;						
							
						} else {
							
							alert('Lista removida das listas de favoritas com sucesso!');
							history.go()
							return true;
													
						}
						
						break;
						
						case '0':
						alert('Ocorreu um erro ao excluir a lista de downloads das favoritas.');
						return false;
						break;
						
					}
					
				}

			}

		}

		req.open('GET', url);
		req.send(null);

	} else {
		
		return false;
		
	}

}


/**
* Função que troca o submit do formulário de buscas na visualiação de
* softwares de uma categoria
*
* @param DomElement obj - Objeto radio
*/
var trocarSubmitCategoria = function( obj ){

	if ( obj.checked ){

		if ( obj.value == 'S' ){

			var frmBusca = document.getElementById('frmBuscarSoftwares');
			frmBusca.action = "http://" + servidor + "/submitBusca.php";

			var termosBusca = document.getElementById( 'termosBusca' );
			termosBusca.title = "*Termos da busca";

		} else {

			var frmBusca = document.getElementById('frmBuscarSoftwares');
			frmBusca.action = "http://" + servidor + "/visualizarCategoria.php";

			var termosBusca = document.getElementById( 'termosBusca' );
			termosBusca.title = "Termos da busca";

		}

	}

}


/**
* Função que exclui uma Foto do avatar por ajax
*
* @param int	idImagem	id da imagem no banco de dados
* @param string	sexo		sexo do usuario
*/

var excluirFoto = function(){

	if ( confirm('Tem certeza que deseja excluir a sua foto?') ){
		
		//Instanciamos o objeto ajax
		var req = new XMLHttpRequest();

		//Definimos a url
		var url = "http://" + servidor + "/excluirFoto.ajax.php";
		
		if (req ){
			
			//Definimos a função manipuladora
			req.onreadystatechange = function() {
				
				//Se a requisição estiver completa
				if ( req.readyState == 4 && ( req.status == 200 || req.status == 304 ) ) {
					
					var response = req.responseText;
					
					if ( response != '' ){

						//Pegamos a imagem
						var imagem = document.getElementById( 'avatar' );
						imagem.src = response;

						//Pegamos o link
						var linkExcluir = document.getElementById( 'excluirAvatar' );
						linkExcluir.parentNode.removeChild(linkExcluir);

						//Informamos ao usuário quanto ao sucesso da exclusão da imagem
						alert( "Sua foto foi excluída com sucesso!" );

						return true;
						
					} else {
						
						alert('Ocorreu um erro ao excluir a Foto!');
						return false;
						
					}

				}

			}

			req.open('GET', url);
			req.send(null);
			
		}
		
	}
	
}

/**
* Remove o objeto do interior do objeto que o contém
*/
function remover(obj){
	obj.parentNode.removeChild(obj);
}

/**
* Abre uma janela popup
*/
var popup = function(width, height, top, left, url){				
	
	var config="toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width="+width+",height="+height+",top="+top+",left="+left;			
	
	var win = window.open(url,"win",config);
	
	return win;
	
}


/**
* Função que exibe a janela de edição de Software
*
* @param int idSoftware	- id do Software a ser salvo
* @param int nomeSoftware	- nome do Software a ser enviado
*/
var editarSoftware = function( idSoftware, nomeSoftware ){

	var w_width = (screen.width - 50);
	var w_height = (screen.height - 300);
	
	//alert( "Width: " + w_width + "\nHeight: " + w_height );
	
	//var winEditarSoftware = new Window({id: "window_frmEditar_" + idSoftware, className: "alphacube", title: "Editar " + nomeSoftware, width: w_width, height: w_height, url: "http://" + servidor + "/editar/" +idSoftware+ "/" + nomeSoftware + ".htm", minimizable: false, resizable: false, maximizable: true, destroyOnClose: true, draggable: false,showEffectOptions: {duration:1.5}});
	var winEditarSoftware = new Window({className: "alphacube", title: "Editar " + nomeSoftware, width: w_width, height: w_height, url: "http://" + servidor + "/editar/" +idSoftware+ "/" + nomeSoftware + ".htm", minimizable: false, resizable: false, maximizable: true, destroyOnClose: true, draggable: false,showEffectOptions: {duration:1.5}});
	winEditarSoftware.showCenter(true);

	return false;

}

/**
* Função que define a página como favoritos no browser do usuário
* 
* @param string pagina - Página que está sendo adicionada
* @param string titulo - Título de entrada para os favoritos
*
*/
var favoritos = function (pagina, titulo) {
  if(document.all){
    window.external.AddFavorite (pagina, titulo);
  } else {
    window.sidebar.addPanel (titulo, pagina, "");
  }
}

	/**
	* Função que exclui um software
	*
	* @param int	idSoftware			id do Software no banco de dados
	* @param string	idObj				id do objeto DOM
	*/
	
	var excluirSoftware = function( idSoftware, idObj ){
	
		if ( confirm('Tem certeza que deseja excluir este software?') ){	
	
			//Instanciamos o objeto ajax
			var req = new XMLHttpRequest();
	
			//Definimos a url
			var url = "./excluirSoftware.ajax.php?idSoftware=" + idSoftware + "&post=1";
	
			if (req){
	
				//Definimos a função manipuladora
				req.onreadystatechange = function() {
	
					//Se a requisição estiver completa
					if (req.readyState == 4 && (req.status == 200 || req.status == 304)) {
	
						var response = req.responseText;
	
						if ( response == 1 ){
							w3Opacity.fading( idObj,100,0,600 );
							return true;
						}else{
							alert('Ocorreu um erro ao excluir o Software!');
							return false;
						}
	
					}
	
				}
	
			}
	
			req.open('GET', url);
			req.send(null);
	
		} else {
			
			return false;
			
		}
	
	}
	
/**
* Função que exclui uma lista das listas de favoritas
*
* @param int	idListaDownloads 		id da Lista de Downloads
* @param string	idObj				 	id do objeto DOM ContratoDestaque
*/

var excluirLista = function( idListaDownloads, idObj ){
	
	if ( confirm('Tem certeza que deseja excluir esta lista de downloads?') ){

		//Pegamos o objeto select
		var obj = document.getElementById(idObj);

		//Instanciamos o objeto ajax
		var req = new XMLHttpRequest();

		//Definimos a url
		var url = "http://" + servidor + "/excluirListaDownloads.ajax.php?idListaDownloads=" + idListaDownloads + "&post=1";

		if (req){

			//Definimos a função manipuladora
			req.onreadystatechange = function() {

				//Se a requisição estiver completa
				if (req.readyState == 4 && (req.status == 200 || req.status == 304) ) {

					var response = req.responseText;
					
					switch( response ){
						
						case '1':
						
						if ( idObj != '-1') {
							
							w3Opacity.fading(obj.id,100,0,600 );
							return true;						
							
						} else {
							
							alert('Lista removida com sucesso!');
							history.go()
							return true;
													
						}
						
						break;
						
						case '0':
						alert('Ocorreu um erro ao excluir a lista de downloads.');
						return false;
						break;
						
					}
					
				}

			}

		}

		req.open('GET', url);
		req.send(null);

	} else {
		
		return false;
		
	}

}	
	

// Atribui ao evento onload da janela a função doOnLoad.
// Esta função contém chamadas a outras funções necessárias ao funcionamento do site.
// OBS: Desta forma estamos trabalhando com javascript não-obstrutivo.
window.onload = doOnLoad;
