// JavaScript Document

/*******************************************************************

CLASSE DE NOTIFICAÇÃO DO USUÁRIO

Tipos de notificação

- default (não precisa especificar tipo)
- trash   (notificação de lixeira)
- exit    (notificação de saida de sistema)
- search  (notificação de busca)
- upload  (notificação de upload de arquivo)
- link    (notificação de mostra de link)

********************************************************************/


ucg.Notify = Class.create();

ucg.Notify.prototype = {
	
	// CONSTRUTOR
	initialize: function(){
		
		// ICONES
		Object.extend(this,new ucg.Base())
		
		this.notifyDefault   = this.ucgFrameworkURL + '/icones/notifyDefault.gif';
		this.notifyExit      = this.ucgFrameworkURL + '/icones/notifyExit.gif';
		this.notifyTrash     = this.ucgFrameworkURL + '/icones/notifyTrash.gif';
		this.notifySearch    = this.ucgFrameworkURL + '/icones/notifySearch2.gif';	
		this.notifyUpload    = this.ucgFrameworkURL + '/icones/notifyUpload2.gif';	
		this.notifyImgClose  = this.ucgFrameworkURL + '/icones/notifyClose.gif';
		this.notifyUplink    = this.ucgFrameworkURL + '/icones/notifyUplink.gif';	
		this.notifyGoto      = this.ucgFrameworkURL + '/icones/notifyGoto.gif';	
		this.notifyMail      = this.ucgFrameworkURL + '/icones/notifyMail.gif';	
		this.uploadClose     = this.ucgFrameworkURL + '/icones/notifyCloseUpload.gif';
		this.iconBarProgress = this.ucgFrameworkURL + '/icones/uploadBar.gif';	

		this.timeDefault    = 7;

	},
	
	/****************************************
	CRIA E RETORNA A FUNÇÃO CHAMADORA 
	A ESTRUTURA BÁSICA DA NOTIFICAÇÃO
	uso interno da classe
	****************************************/
	create:function(){
		var notify = $('notify'); 
  
		// se não existir o elemento notify
		if(!notify){
			//CRIA TODOS OS ELEMENTOS DA NOTIFICAÇÃO
			this.notIcon = document.createElement('img');
			this.notIcon.setAttribute('id','notIcon');
			this.notClose = document.createElement('img');
			this.notClose.setAttribute('id','notClose');
			this.notClose.src        = this.notifyImgClose;
			this.notClose.obj        = this;
			this.notClose.onclick    = this.notifyOut;

   	  
			this.notTitulo = document.createElement('div');
			this.notTitulo.setAttribute('id','notTitulo');
   
			this.notTexto  = document.createElement('div');
			this.notTexto.setAttribute ('id','notTexto');

			this.txtNoty = document.createElement('div');
			this.txtNoty.setAttribute('id','txtNoty');

			notify = document.createElement('div');
			notify.setAttribute('id','notify');
			
			// ENVOLVE TITULO E TEXTO E GERA FUNDO
			this.txtNoty.appendChild(this.notTitulo);
			this.txtNoty.appendChild(this.notTexto);  

			// INSERER FILHOS DA NOTIFICAÇÃO
			notify.appendChild(this.notIcon);
			notify.appendChild(this.txtNoty);
			notify.appendChild(this.notClose);
  
			// INSERE NOTIFICAÇÃO NA ÁRVORE DOM;    
			document.body.appendChild (notify);
						
		}else{
			this.notIcon   = $('notIcon');
			this.notClose  = $('notClose');
			this.notClose.src  = this.notifyImgClose;
			this.notTitulo = $('notTitulo');
			this.notTexto  = $('notTexto');
			this.txtNoty   = $('txtNoty');
		}
		
 
		Effect.Appear('notify'); // efeito de entrada;
		
		this.notify = notify;
		
	},
	

	notifyOut:function(){
		debugger;
		var obj = this.obj;
		var notify = $('notify');
		Effect.Fade(notify);
		obj.clear();
		obj = null;
	},

	/**********************************
	AJUSTA TEMPO DE SAIDA DA NOTIFICAÇÃO
	metodo para uso interno da classe	
	**********************************/
	setTimeOut:function(time){
		if(time){
			setTimeout("new Effect.Fade('notify')",time*1000);
		}else{	
			setTimeout("new Effect.Fade('notify')",this.timeDefault*1000);
		}
	}

};


/************************************************************
CLASSE NOTIFY ALERT
extendida a Notify

CAMPOS:
title - titulo da notificação
text  - texto da notificação
time  - tempo da notificação
*************************************************************/

ucg.Notify.Alert = Class.create();

ucg.Notify.Alert.prototype = {
	
	// CONSTRUTOR
	initialize: function(title,text,time,objDom,evt){
		
		Object.extend(this,new ucg.Notify());
		this.title = title;
		this.text  = text;
		this.time  = time;
		
		if($(objDom)){
			$(objDom).isso = this;
			$(objDom)[evt] = this.padrao;			
		}else{
			this.isso = this;
			this.padrao();
		}

	},

	// NOTIFICAÇÃO PADRÃO
	padrao : function(){
		var obj = this.isso;
		this.isso = null;

		obj.create();
		obj.notTitulo.innerHTML    = obj.title;
		obj.notTexto.innerHTML     = obj.text;
		obj.notIcon.src            = obj.notifyDefault;
		obj.setTimeOut(obj.time);
		obj = null;
	}
}


/************************************************************
CLASSE NOTIFY TRASH
extendida a Notify

CAMPOS:
title - titulo da notificação
text  - texto da notificação
time  - tempo da notificação
*************************************************************/


ucg.Notify.Trash = Class.create();

ucg.Notify.Trash.prototype = {
	
	// CONSTRUTOR
	initialize: function(title,text,time,objDom,evt){
		
		Object.extend(this,new ucg.Notify());
		this.title = title;
		this.text  = text;
		this.time  = time;

		if($(objDom)){
			$(objDom).isso = this;
			$(objDom)[evt] = this.lixeira;			
		}else{
			this.isso = this;
			this.lixeira();
		}
	},

	lixeira:function(){
		
		var obj = this.isso;
		this.isso = null;

		obj.create();
		obj.notTitulo.innerHTML = obj.title;
		obj.notTexto.innerHTML  = obj.text;
		obj.notIcon.src         = obj.notifyTrash;
		obj.setTimeOut(obj.time);
		obj = null;
	}
	
};



/***********************************************
CLASSE NOTIFY SEARCH
extendida a Notify
	
title = Texto titulo da notificação
page  = página que irá tratar a busca
key   = nome da variavel GET passada para page	
***********************************************/


ucg.Notify.Search = Class.create();

ucg.Notify.Search.prototype ={
	// CONSTRUTOR
	initialize: function(title,page,key,objDom,evt){

		Object.extend(this,new ucg.Notify());
		this.title      = title;
		this.page       = page;
		this.keySearch  = key;
		
		if($(objDom)){
			$(objDom).isso = this;
			$(objDom)[evt] = this.busca;			
		}else{
			this.isso = this;
			this.busca();
		}

	},

	busca:function(){

		var obj = this.isso;
		
		obj.create();
		obj.notTexto.innerHTML = "";
		obj.notTitulo.innerHTML = obj.title;
			
		obj.notIcon.src = obj.notifySearch;   // icone de busca
			
		var searchField = document.createElement('input');
			searchField.setAttribute('id','searchField');
			searchField.size = 15;
			
		var	searchButton = document.createElement('button');
			textoSearch = document.createTextNode("buscar");
			searchButton.appendChild(textoSearch);	
			searchButton.setAttribute('id','searchButton');
			
			searchButton.obj = obj;
			searchButton.onclick = obj.buscaOut;
			
		obj.notTexto.appendChild(searchField);
		obj.notTexto.appendChild(searchButton);
		obj = null;
		
	},
	
	// metodo de saida da busca
	buscaOut:function(){

		var obj  = this.obj;
		this.obj = null;

		var searchField = 	$('searchField');	
			
		if(searchField.value!=""){
			Effect.Fade('notify');
			window.location = obj.page + "?" + obj.keySearch + '=' + searchField.value;
		}		
	}
}


/***********************************************
GOTO
	
title = Texto titulo da notificação

***********************************************/
ucg.Notify.Goto = Class.create();

ucg.Notify.Goto.prototype ={

	// CONSTRUTOR
	initialize: function(title,objDom,evt){	

		Object.extend(this,new ucg.Notify());	
		this.title = title;	

		// inicializa notificação goto
		if($(objDom)){
			$(objDom).isso = this;
			$(objDom)[evt] = this.goto;
		}else{
			this.isso = this;
			this.goto();
		}		
		
	},
	
	goto:function(){

		var obj = this.isso;
		this.isso = null;

		obj.create();

		obj.notTexto.innerHTML = "";
		obj.notTitulo.innerHTML = obj.title;
			
		obj.notIcon.src = obj.notifyGoto;   // icone de busca
			
		var gotoField = document.createElement('input');
			gotoField.setAttribute('id','gotoField');
			gotoField.size = 15;
			
		var	gotoButton = document.createElement('button');
			textoGoto  = document.createTextNode("ir para");
			gotoButton.appendChild(textoGoto);	
			gotoButton.setAttribute('id','gotoButton');
			
			gotoButton.obj = obj;
			gotoButton.onclick = obj.gotoOut;
			
		obj.notTexto.appendChild(gotoField);
		obj.notTexto.appendChild(gotoButton);
		obj = null;
		
	},
	
	// metodo de saida da busca
	gotoOut:function(){

		var obj = this.obj;
		this.obj = null;
	
		var gotoField = $('gotoField');	
			
		if(gotoField.value!=""){
			Effect.Fade('notify');
			window.location = 'http://' + gotoField.value;
		}		
	}

}


/***********************************************
MAIL
	
title = Texto titulo da notificação
page  = página que o browser irá
***********************************************/
ucg.Notify.Mail = Class.create();

ucg.Notify.Mail.prototype ={

	// CONSTRUTOR
	initialize: function(title,page,objDom,evt){	

		Object.extend(this,new ucg.Notify());	
		this.title = title;	
		this.page  = page

		// inicializa notificação goto
		if($(objDom)){
			$(objDom).isso = this;
			$(objDom)[evt] = this.mail;
		}else{
			this.isso = this;
			this.mail();
		}	
		
	},	
	
	
	mail:function(){
		
		var obj = this.isso;
		this.isso = null;

		obj.create();

		obj.notTexto.innerHTML = "";
		obj.notTitulo.innerHTML = obj.title;
		
		var dominios = new Array(4);
		dominios[0]= 'ucg.br';
		dominios[1]= 'sgc.org.br';
		dominios[2]= 'aroeira.org.br';
		dominios[3]= 'crbm3.org.br';

			
		obj.notIcon.src = obj.notifyMail;   // icone de busca		
		
		var usuario = document.createElement('input');
			usuario.setAttribute('name','usuario');
			usuario.setAttribute('id','usuario');
			usuario.size = 5;

		var dominio = document.createElement('select');
			dominio.setAttribute('name','dominio');
			dominio.setAttribute('id','dominio');

		for(var i=0; i<dominios.length;i++){
			var option = document.createElement('option');
			option.value = dominios[i];
			option.innerHTML = dominios[i];
			dominio.appendChild(option);
		}
		
		var	submitButton = document.createElement('button');
			textoSubmit  = document.createTextNode("entrar");
			submitButton.appendChild(textoSubmit);	
			submitButton.setAttribute('id','submitButton');
			submitButton.setAttribute('name','submitButton');
			submitButton.obj = obj;
			submitButton.onclick = obj.mailOut;
			//submitButton.formMail = formMail;


		obj.notTexto.appendChild(usuario);
		obj.notTexto.appendChild(dominio);
		obj.notTexto.appendChild(submitButton);
		//obj = null;
		
	},
	
	// metodo de saida da busca
	mailOut:function(){
		
		var obj = this.obj;
		this.obj = null;
		
		var formMail = document.createElement('form');
			formMail.setAttribute('id','formMail');
			formMail.setAttribute('name','formMail');
			formMail.setAttribute('action',obj.page);
			formMail.setAttribute('method','post');
			
			var usuario = $('usuario');
				usuario.parentNode.removeChild(usuario);
			
			var dominio = $('dominio');
				dominio.parentNode.removeChild(dominio);

			var	submitButton = $('submitButton');
				submitButton.parentNode.removeChild(submitButton);
			
			
			formMail.appendChild(usuario);
			formMail.appendChild(dominio);
			formMail.appendChild(submitButton);
			formMail.style.display = 'none';
			
			//this.notTexto = ""
			
			document.body.appendChild(formMail);
			
			
		//var formMail = this.formMail;
		formMail.submit();
	
	}
}


/***********************************************
NOTIFICAÇÃO DE SAIDA DE SISTEMA 
	
title = Texto titulo da notificação
page  = página que irá tratar do logout de sistema
***********************************************/
ucg.Notify.Logout = Class.create();

ucg.Notify.Logout.prototype ={

	// CONSTRUTOR
	initialize: function(title,page,pos,objDom,evt){	
		
		Object.extend(this,new ucg.Notify());	
		

		this.title = title;	
		this.page  = page;
		this.center = true;
		
		// inicializa notificação goto
		if($(objDom)){
			$(objDom).isso = this;
			$(objDom)[evt] = this.sair;
		}else{
			this.isso = this;
			this.sair();
		}	
		
	},		
	
	sair : function(){
	
		var obj = this.isso;
		this.isso = null;
		// desabilita a interface usando usgMessage
		obj.disableFace();

		if($('notify')){
			var notify = $('notify');
			notify.parentNode.removeChild(notify);
	    }

		//cria notificação
		obj.create();
	
		// centraliza notify logout
		if(obj.center){
			obj.notTexto.style.textAling = 'center';
			var lay = new ucg.Layout();
			lay.centerElem(obj.notify);
		}
		
		
		obj.notTexto.innerHTML  = "";
		obj.notTitulo.innerHTML = obj.title;
			
		obj.notClose.src        = obj.uploadClose;
		obj.pageURL = obj.page;
			
		obj.notIcon.src = obj.notifyExit;     // icone de saida
			
		// CRIANDO BOTÃO SIM
		var	yesButton = document.createElement('button');
		var	textoYes = document.createTextNode("Sim");
			yesButton.appendChild(textoYes);
			yesButton.setAttribute('id','yesButton');
			yesButton.obj = obj;
			yesButton.onclick = obj.gotoURL;

			// CRIANDO BOTÃO NÃO
		var	notButton = document.createElement('button');
		var	textoNot = document.createTextNode("Não");
			notButton.appendChild(textoNot);
			notButton.setAttribute('id','notButton');
			notButton.obj = obj;
			notButton.onclick = obj.notifyOut;
			
			// INSERINDO DA ÁRVORE DOM
		obj.notTexto.appendChild(yesButton);
		obj.notTexto.appendChild(notButton);	
		
		obj = null;
		
	},
	
	gotoURL : function(){
		var obj = this.obj;
		this.obj = null;
		window.location = obj.pageURL;		
	}
	
}
	
	

/***********************************************
NOTIFICAÇÃO DE SAIDA DE SISTEMA 
	
title = Texto titulo da notificação
page  = página que irá tratar do logout de sistema
***********************************************/
ucg.Notify.Upload = Class.create();

ucg.Notify.Upload.prototype ={

	// CONSTRUTOR
	initialize: function(title){	
		
		Object.extend(this,new ucg.Notify());	
		this.title = title;	
				// CAMPO ESPECIFICOS PARA UPLOAD
		this.iconBarProgress= this.ucgFrameworkURL + '/icones/uploadBar.gif';	
		this.uploadClose    = this.ucgFrameworkURL + '/icones/notifyCloseUpload.gif';

		// inicializa notificação goto
		this.upload();
	
	},		
	
	upload:function(title){
		// desabilita toda a interface;
		this.disableFace();
		
		if($('notify')){
			var notify = $('notify');
			notify.parentNode.removeChild(notify);
	    }
		
		// cria notificação
		this.create();
		// limpa texto
		this.notTexto.innerHTML = "";
		this.notTitulo.innerHTML = this.title;
		
		// seta novo fechamento para o x Close
		this.notClose.onclick = "";
		this.notClose.src = this.uploadClose

		// icone padrão
		this.notIcon.src = this.notifyUpload;  
			
		// barra de progresso
		var iconBar = document.createElement('img');
			iconBar.setAttribute('id','iconBar');
			iconBar.src = this.iconBarProgress;
			iconBar.style.width = '0%';
			iconBar.style.height = '15px';
			
		// criando div que envolve o barProgress
		var divBar = document.createElement('div');
			divBar.setAttribute('id','divBar');
			
		var porcProgress = document.createElement('div');
			porcProgress.setAttribute('id','porcProgress');
			porcProgress.innerHTML = '0%';
			
			// incluindo filhos
			divBar.appendChild(iconBar);
			this.notTexto.appendChild(divBar);	
			this.notTexto.appendChild(porcProgress);	
		
	},

	//PROGRESS
	//Atualiza barra de progresso 
	//value = valor percentual do progresso (de 0 a 100)

	progress:function(value){
		debugger;
		$('porcProgress').innerHTML = value + "%";
		var iconBar = $('iconBar');
		iconBar.style.width = value +"%";
	
		if(value>=100){
			this.uploadOut()	
		}
		
	},
	
	uploadOut : function(){
		this.obj = this;
		this.notifyOut();	
	}
	
}




	/***********************************************
	NOTIFICAÇÃO DE LINK
	
	title    = Texto titulo da notificação
	txtlink  = texto do link
	url      = url para o link
	***********************************************/
	
ucg.Notify.Link = Class.create();

ucg.Notify.Link.prototype ={
	// CONSTRUTOR
	initialize: function(title,page,url,objDom,evt){
		Object.extend(this,new ucg.Notify());

		this.title = title;
		this.page  = page;
		this.url   = url;
		
		if($(objDom)){
			$(objDom).isso = this;
			$(objDom)[evt] = this.uplink;			
		}else{
			this.isso = this;
			this.uplink();
		}

	},	
	
	uplink:function(){
		//debugger;
		var obj = this.isso;
		this.isso = null;
		// cria notificação
		obj.create();
		// limpa texto
		obj.notTexto.innerHTML = "";
		obj.notTitulo.innerHTML = obj.title;
		
		// icone padrão
		obj.notIcon.src = obj.notifyUplink;  
			
		// barra de progresso
		var docUrl = document.createElement('a');
		docUrl.setAttribute('href',obj.url);
		docUrl.innerHTML = obj.page
		//docUrl.pageURL = url
		//docUrl.onclick = 
			
		obj.notTexto.appendChild(docUrl);	
		
		obj.setTimeOut(15);
		
		obj = null;
		
	}
}
