/**********************************************************************
 * Variaveis globais
 **********************************************************************/
 var arrInfoSubject = new Array();

/**********************************************************************
 * Visualiza ou oculta um array de IDs de elementos HTML
 *
 * @return bool
 **********************************************************************/
function displayElements(_arrDivsToDisplay, _strDisplay ){
	for( var i = 0 ; i < _arrDivsToDisplay.length ; ++i ){
		var strDivId = _arrDivsToDisplay[ i ];
		if( document.getElementById( strDivId ) ) document.getElementById( strDivId ).style.display = _strDisplay;
	}
	return( true );
}

/**********************************************************************
 * Funcao principal, que engatilha o processo dos Assuntos
 *
 * @return bool
 **********************************************************************/
function mainFunctionSubject(){

	// Criando validacao
	objValidateForm.addValidateElement("DescAssunto", "empty");
    	
	// Aciona a funcao que seta os elementos necessarios para a administracao da grid
	setInfoToGrid();
    	
	// Retorno da funcao
	return(true);
}

/**********************************************************************
 * Funcao principal, que engatilha o processo das Mensagens
 *
 * @return bool
 **********************************************************************/
function mainFunctionMessage(){

	// Criando validacao
	objValidateForm.addValidateElement("IdtCaixaMensagemAssunto", "empty");
	objValidateForm.addValidateElement("DescMotivo", "empty");
    	
	// Retorno da funcao
	return(true);
}
    
/**********************************************************************
 * Seta as informacoes para a administracao da grid
 *
 * @return bool
 **********************************************************************/
function setInfoToGrid(){

	// Parametros opcionais
    objDataFormToGrid.addIdTableGrid("tableGrid");
    objDataFormToGrid.addIdFieldKeyToHidden("DescAssunto");
	objDataFormToGrid.addIdTitleForm("divFormTitle");
	objDataFormToGrid.addIdButtonForm("imgButtonForm");
	objDataFormToGrid.addIdFormFields("formFields");
	objDataFormToGrid.addIdFormGrid("formGrid");
	    
    // Titulos da Grid
    objDataFormToGrid.addTitleToShowInGrid("DescAssunto"			, "Assunto"			, undefined, undefined, "width:151px; border:1px solid #666; background-color: #C1D4E8; text-align:center;", "height:30px; width:151px; border:1px solid #666; border-top:0px; text-align:left; padding-left:2px; padding-right:2px; cursor:pointer;");
    objDataFormToGrid.addTitleToShowInGrid("DescObservacao"	, "Observação"	, undefined, undefined, "width:152px; *width:151px; border:1px solid #666; background-color: #C1D4E8; border-left:0px; text-align:center;", "height:30px; width:150px; border:1px solid #666; border-top:0px; border-left:0px; text-align:left; padding-left:2px; padding-right:2px; cursor:pointer;");
    objDataFormToGrid.addTitleToShowInGrid(undefined					, "Ação"				, undefined, undefined, "width:50px; border:1px solid #666; background-color: #C1D4E8; border-left:0px; text-align:center;", "height:30px; width:53px; *width:52px; border:1px solid #666; border-top:0px; border-left:0px; text-align:center;");

    // Campos a serem adicionados na grid (inputs hiddens)
    objDataFormToGrid.addFieldToInsertIntoGrid("IdtCaixaMensagemAssunto"	, "inputHiddenIdtCaixaMensagemAssunto");
    objDataFormToGrid.addFieldToInsertIntoGrid("DescAssunto"								, "inputHiddenDescAssunto");
    objDataFormToGrid.addFieldToInsertIntoGrid("FlgRemetentePrestadora"		, "inputHiddenFlgRemetentePrestadora");
    objDataFormToGrid.addFieldToInsertIntoGrid("FlgRemetenteGestor"				, "inputHiddenFlgRemetenteGestor");
    objDataFormToGrid.addFieldToInsertIntoGrid("DescObservacao"						, "inputHiddenDescObservacao");
    objDataFormToGrid.addFieldToInsertIntoGrid("FlgUploadArquivo"						, "inputHiddenFlgUploadArquivo");
	    
	// Retorno do metodo
	return(true);
}
/**********************************************************************
 * Seta as informacoes para a administracao da grid
 *
 * @return bool
 **********************************************************************/
function confirmIframeGrid(_strIdIframeGrid, _strIdFormGrid){
	// Obrigando a passagem de todos os parametros
	if((_strIdIframeGrid == undefined)||(_strIdFormGrid == undefined)) return(false);

	// Capturando o objeto document do iframe da grid
	if(document.all){	
		eval("var objDocumentIframeGrid = parent." + _strIdIframeGrid + ".document;");	
		eval("var objWindowIframeGrid = parent." + _strIdIframeGrid + ".window;");	
	} else {
		var objDocumentIframeGrid = parent.document.getElementById(_strIdIframeGrid).contentDocument;
		var objWindowIframeGrid = parent.document.getElementById(_strIdIframeGrid).contentWindow;
	}
	
	// Submetendo o formulario da grid
	eval("objDocumentIframeGrid." + _strIdFormGrid + ".submit();");
	
	// Fechando a janela do prototype
	parent.Dialog.cancelCallback(); 
	// Atualizando a o formulario
	objWindowIframeGrid.location.reload(true);
	// Retorno do metodo
	return(true);
}

/**********************************************************************
 * Oculta ou visualiza o elemento para a realizacao do upload
 *
 * @param object objSelectSubject
 * @param string strIdDivDisableUploadElement
 * @return bool
 **********************************************************************/
function showHideDescArquivo(_objSelectSubject, _strIdDivDisableUploadElement){

	// Obrigando a passagem de todos os parametros
	if((_objSelectSubject == undefined)||(_strIdDivDisableUploadElement == undefined)) return(false);
	
	// Capturando o objeto que disabilita o elemento de upload
	var objDivDisableUploadElement = document.getElementById(_strIdDivDisableUploadElement);
	
	// Capturando o valor do option selecionado
	var strOptionValue = (_objSelectSubject.selectedIndex == -1) ? "" : _objSelectSubject.options[_objSelectSubject.selectedIndex].value;

	// Varrendo array global de informacoes do assunto
	for(var i = 0; i < arrInfoSubject.length; ++i){
		var arrInfoSubjectIntern = arrInfoSubject[i];
		var intIdtCaixaMensagemAssunto = arrInfoSubjectIntern[0];
		var boolFlgUploadArquivo = arrInfoSubjectIntern[1];
		
		if(intIdtCaixaMensagemAssunto == strOptionValue){
			if(boolFlgUploadArquivo == "True"){
				objDivDisableUploadElement.style.display = "none";
			} else {
				objDivDisableUploadElement.style.display = "block";
			}
		}
	}
}

/**********************************************************************
 * Funcao que envia uma mensagem
 *
 * @param string _strIdForm
 * @return bool
 **********************************************************************/
function sendMessage(_strIdForm) {

	// Definindo valor padrao
	if(_strIdForm == undefined) _strIdForm = "formSendMessage";
	
	// Capturando objetos necessarios
	var objIdtCaixaMensagemAssunto = document.getElementById( "IdtCaixaMensagemAssunto" );
	var objDescMotivo = document.getElementById( "DescMotivo" );
	var objDescObservacao = document.getElementById( "DescObservacao" );
	var strDescObservacao = objDescObservacao.value;
	strDescObservacao = replaceAll( strDescObservacao , "\n" , "<br />" );
	var objDescArquivo = document.getElementById( "DescArquivo" );
	var objDescArquivoPath = document.getElementById( "DescArquivoPath" );
	var objForm = document.getElementById(_strIdForm);
	
	// Capturando o valor do campo file e setando em um hidden
	objDescArquivoPath.value = objDescArquivo.value;
	
	// Construindo a string QueryString
	var strQueryString = "?IdtCaixaMensagemAssunto=" + objIdtCaixaMensagemAssunto.value + "&DescMotivo=" + objDescMotivo.value + "&DescObservacao=" + strDescObservacao + "&DescArquivoPath=" + objDescArquivoPath.value;
	
	// Tratamento com o atributo action do form
	var strActionForm = objForm.getAttribute( "action" );
	if( strActionForm.indexOf( "?" ) == -1 )
	{
		strActionForm += strQueryString;
	}
	else
	{
		arrActionForm = explode( "?" , strActionForm );
		strActionForm = arrActionForm[ 0 ] + strQueryString;
	}
	
	// Submetendo o objeto form	
	objForm.setAttribute( "action" , strActionForm );
	objForm.submit();
	
	// Retorno do metodo
	return(true);
}

/**********************************************************************
 * Funcao que visualiza as informacoes da mensagem
 *
 * @param integer _intIdtCaixaMensagem
 * @param string _strDescAssunto
 * @param string _strDescMotivo
 * @param string _strDescObservacao
 * @param string _strRemetente
 * @param string _strDataInclusao
 * @param string _strDescArquivo
 * @return bool
 **********************************************************************/
function showMessage(_intIdtCaixaMensagem, _strDescAssunto, _strDescMotivo, _strDescObservacao, _strRemetente, _strDataInclusao, _strDescArquivo){

	// Alterando caracteristicas da linha
	readMessageTr(_intIdtCaixaMensagem);

	// Estrutura HTML para a visualizacao das informacoes
	var strHTML = "" + 
		"<fieldset style='padding-right:6px; padding-left:6px; padding-bottom:6px; text-align:left; margin:5px; margin-top:0px; border:1px solid #B5B5B5;'>" +
		"	<legend style='font-weight:bold; font-size:11px; padding:3px;'>Assunto: </legend>" + 
		"	" + _strDescAssunto +
		"</fieldset>" +
		"<fieldset style='padding-right:6px; padding-left:6px; padding-bottom:6px; text-align:left; margin:5px; margin-top:0px; border:1px solid #B5B5B5;'>" +
		"	<legend style='font-weight:bold; font-size:11px; padding:3px;'>Remetente: </legend>" + 
		"	" + _strRemetente +
		"</fieldset>" +
		"<fieldset style='padding-right:6px; padding-left:6px; padding-bottom:6px; text-align:left; margin:5px; margin-top:0px; border:1px solid #B5B5B5;'>" +
		"	<legend style='font-weight:bold; font-size:11px; padding:3px;'>Data de Inclusão: </legend>" + 
		"	" + _strDataInclusao +
		"</fieldset>" +
		"<fieldset style='padding-right:6px; padding-left:6px; padding-bottom:6px; text-align:left; margin:5px; margin-top:0px; border:1px solid #B5B5B5;'>" +
		"	<legend style='font-weight:bold; font-size:11px; padding:3px;'>Motivo: </legend>" + 
		"	" + _strDescMotivo +
		"</fieldset>" +
		"<fieldset style='padding-right:6px; padding-left:6px; padding-bottom:6px; text-align:left; margin:5px; margin-top:0px; border:1px solid #B5B5B5;'>" +
		"	<legend style='font-weight:bold; font-size:11px; padding:3px;'>Observação: </legend>" + 
		"	" + _strDescObservacao +
		"</fieldset>";
	
	// Caso exista algum arquivo a ser visualizado
	if((_strDescArquivo != undefined)&&(_strDescArquivo != "")){
		strHTML += "" + 
			"<fieldset style='padding-right:6px; padding-left:6px; padding-bottom:6px; text-align:left; margin:5px; margin-top:0px; border:1px solid #B5B5B5;'>" +
			"	<legend style='font-weight:bold; font-size:11px; padding:3px;'>Arquivo: </legend>" + 
			"	<a href='/SGIQ/Upload/MessageBox/" + _strDescArquivo + "' target='_blank'>" + _strDescArquivo.substring( 14 , _strDescArquivo.length ) + "</a>" +
			"</fieldset>";
	}
	
	// Mostrando as informacoes para o usuario
	parent.alerta(strHTML, 'Visualização da Mensagem', 400, 350);
	
	// URL para realizacao do ajax
	var strUrl = "databaseReceiveMessage.asp?IdtCaixaMensagem=" + _intIdtCaixaMensagem + "&strDescAssunto= " + _strDescAssunto + "&strDescMotivo= " + _strDescMotivo + "&strDescObservacao= " + _strDescObservacao;
	
	// Executando ajax que insere registro na tabela de mensagens lidas
	ajaxFunctionExec(strUrl, new Array(), voidAjax);
	
	// Retorno do metodo
	return(true);
}

/**********************************************************************
 * Funcao que altera caracteristicas da linha clicada
 *
 * @param integer _intIdtCaixaMensagem
 * @return bool
 **********************************************************************/
function readMessageTr(_intIdtCaixaMensagem){
	var objTrCaixaMensagem = document.getElementById('trMessage' + _intIdtCaixaMensagem);
	if(objTrCaixaMensagem != undefined){
		objTrCaixaMensagem.style.fontWeight = "normal";
		var objImgEnvelope = document.getElementById('imgEnvelope' + _intIdtCaixaMensagem);
		if(objImgEnvelope != undefined){
			objImgEnvelope.setAttribute("src", "/SGIQ/images/envelopeAberto.gif");
		}
	}
	return(true);
}

/**********************************************************************
 * Funcao que deleta a mensagem clicada
 *
 * @param integer _intIdtCaixaMensagem
 * @return bool
 **********************************************************************/
function deleteMessage(_intIdtCaixaMensagem){

	// Fechando janela do prototype
	Dialog.cancelCallback();
	
	// Deleta a linha da mensagem a ser excluida
	deleteMessageTr(_intIdtCaixaMensagem);
	
	// URL para realizacao do ajax
	var strUrl = "MessageBox/databaseDeleteMessage.asp?IdtCaixaMensagem=" + _intIdtCaixaMensagem;
	
	// Executando ajax que deleta registro na tabela de mensagens
	ajaxFunctionExec(strUrl, new Array(), voidAjax);
	
	// Retorno do metodo
	return(true);
}

/**********************************************************************
 * Funcao que deleta a linha da mensagem clicada
 *
 * @param integer _intIdtCaixaMensagem
 * @return bool
 **********************************************************************/
function deleteMessageTr(_intIdtCaixaMensagem){

	if(document.all){
		var iframeDocument = parent.iframeMessageBox.document;
	} else {
		var iframeDocument = parent.document.getElementById( 'iframeMessageBox' ).contentDocument;
	}
	
	var objTrCaixaMensagem = iframeDocument.getElementById('trMessage' + _intIdtCaixaMensagem);
	if(objTrCaixaMensagem != undefined){
		var objTrCaixaMensagemParent = iframeDocument.getElementById('tbodyMessage' + _intIdtCaixaMensagem);
		objTrCaixaMensagemParent.removeChild(objTrCaixaMensagem);
	}
	return(true);
}

/**********************************************************************
 * Funcao generica para nao realizar alguma operacao apos
 * o termino da execucao da requisicao do ajax
 *
 * @return bool
 **********************************************************************/
function voidAjax(_arrParamet){
	return(true);
}
