/*********************************************************************************************/
var CRUDObject = [];
var CRUDRootId;
var CRUDDialog;

// Funções para montar a região (basicamente os div's do CRUD
function ReposicionaCRUD() {
    currentDialogForm.dialog._position();
}
function FecharEdicaoCRUD(crudId) {
    document.getElementById('ConteudoEdicaoCRUD_' + crudId).style.display = 'none';
    document.getElementById('ConteudoListaCRUD_' + crudId).style.display = 'block';
    ReposicionaCRUD();
}
function PegaPosCRUDObject(crudId) {
    for (var a = 0; a < CRUDObject.length; a++) {
        if (CRUDObject[a].Id == crudId)
            return a;
    }
    return -1;
}
function PegaCRUDObject(crudId) {
    var a = PegaPosCRUDObject(crudId)
    if (a >= 0)
        return CRUDObject[a];
    return null;
}
function RegistraCRUD(crud) {
    var posCRUD = PegaPosCRUDObject(crud.Id);
    if (posCRUD >= 0)
        CRUDObject[posCRUD] = crud;
    else
        CRUDObject[CRUDObject.length] = crud;
}
function ExecutarCRUD(crudId, recordsPerPage) {
    CRUDRootId = crudId;
    CRUDObject = [];
    WorkViewer_MontaConteudoCRUD(crudId, 0, MontaConteudoCRUD);
}
function MontaConteudoCRUD(crud) {
    RegistraCRUD(crud);
//    alert(crud.HTMLContent);
    currentDialogForm = new DialogForm(crud, crud.Nome, OnCRUDFinishOK, OnCRUDValidOK, crud.HTMLContent);
    currentDialogForm.Form = null;
    currentDialogForm.MostraSubmit = false;
    currentDialogForm.MinWidth = crud.LarguraMinima;
    currentDialogForm.MinHeight = crud.AlturaMinima;
    currentDialogForm.Draw();

    CRUDDialog = currentDialogForm;
    //    CRUDGotoPage(crud.Id, 0, 0);
}
function OnCRUDFinishOK(posList, crud, obj) { }
function OnCRUDValidOK(opr, obj) { }

// Funções para montar a lista do CRUD (e tratamento de paginação)
function OnDeselectLineCRUD(registroChave) {
}
function OnSelectLineCRUD(registroChave) {
}
function ClickOnLineCRUD(crudId, registroChave, tr) {
    var crudObj = PegaCRUDObject(crudId);
    if (crudObj.trSelecionado) {
        OnDeselectLineCRUD(crudObj.registroSelecionado);
        crudObj.registroSelecionado = null;
        crudObj.trSelecionado.style.backgroundColor = crudObj.corSelecionado;
        if (crudObj.trSelecionado == tr)
            return;
    }
    crudObj.registroSelecionado = registroChave;
    OnSelectLineCRUD(registroChave);
    crudObj.corSelecionado = tr.style.backgroundColor;
    crudObj.trSelecionado = tr;
    tr.style.backgroundColor = '#0000ff';
}
function CarregaListaCRUD(crudId, registroPaiId) {
    CRUDGotoPage(crudId, 0, registroPaiId);
}
function CRUDGotoSelectPage(crudId, registroPaiId) {
    CRUDGotoPage(crudId, document.getElementById('GotoPage_' + crudId).value - 1, registroPaiId);
}
function CRUDGotoPage(crudId, page, registroPaiId) {
    var cpFilter = document.getElementById('filter_' + crudId);
    var filter = (cpFilter ? cpFilter.value : "");
    var cpRecordsPerPage = document.getElementById('RecordsPerPage_' + crudId);
    var recordsPerPage = (cpRecordsPerPage ? cpRecordsPerPage.value : 5);
    WorkViewer_MontaListaCRUD(crudId, filter, page, recordsPerPage, registroPaiId, MontaListaCRUD);
}
function MontaListaCRUD(crud) {
    RegistraCRUD(crud);
    var dv = document.getElementById('ConteudoListaCRUD_' + crud.Id);
    dv.innerHTML = crud.HTMLList;
    FecharEdicaoCRUD(crud.Id);
}


// Funções para edição do registro
function AdicionarCRUD(crudId, registroPaiId) {
    WorkViewer_EditarRegistroCRUD(crudId, 0, registroPaiId, MontaFormularioCRUD);
}
function EditarCRUD(crudId, pos, registroId, registroPaiId) {
    var crudObj = PegaCRUDObject(crudId);
    crudObj.registroId = registroId;
    crudObj.registroPaiId = registroPaiId;
    
    WorkViewer_EditarRegistroCRUD(crudId, registroId, registroPaiId, MontaFormularioCRUD);
}
function MontaFormularioCRUD(crud) {
/*
    var dvEd = dojo.byId('ConteudoEdicaoCRUD_' + crud.Id);
    dvEd.innerHTML = crud.HTMLFormulario;
    dvEd.style.display = 'block';
//    document.getElementById('ConteudoListaCRUD_' + crudId).style.display = 'none';
    ReposicionaCRUD();
*/

    RegistraCRUD(crud);
    var conteudo = crud.HTMLFormulario;
    currentDialogForm = new DialogForm(crud, crud.Titulo, OnCRUDFinishOK, OnCRUDValidOK, conteudo);
    currentDialogForm.Id = 'DialodFormularioCRUD_'+crud.Id;
    currentDialogForm.Form = null;
    currentDialogForm.MostraSubmit = false;
    currentDialogForm.MinWidth = crud.LarguraMinima;
    currentDialogForm.MinHeight = crud.AlturaMinima;
    currentDialogForm.Draw();
}
function SalvarCRUD(crudId) {
    var obj = currentDialogForm.dialog.getValues();
    var crudObj = PegaCRUDObject(crudId);
    var dados = '';
    for (var a = 0; a < crudObj.Campos.length; a++) {
        var cp = crudObj.Campos[a];
        if (cp.TemValorInterface) {
            var valor = '';
            var djCp = dojo.byId(cp.HTMLId);
//            valor = djCp.value;
            eval('valor = obj.' + cp.HTMLId);
            if (dados != '')
                dados += ';';
            dados += cp.HTMLId + '=' + valor;
        }
    }
//    alert(dados);
//    return;

    var registroId = (crudObj.registroId ? crudObj.registroId : -1);
    var registroPaiId = crudObj.registroPaiId;
    FecharEdicaoCRUD(crudId);
    var filter = document.getElementById('filter_' + crudId).value;
    var recordsPerPage = document.getElementById('RecordsPerPage_' + crudId).value;
    currentDialogForm.dialog.hide();
    currentDialogForm = CRUDDialog;
    WorkViewer_SalvarRegistroCRUD(crudId, registroId, dados, registroPaiId, filter, crudObj.PaginaCorrente, recordsPerPage, MontaListaCRUD);
}
function RemoverCRUD(crudId, pos, registroId) {
    if (confirm('Confirma a exclusão ?')) {
        FecharEdicaoCRUD(crudId);
        var crudObj = PegaCRUDObject(crudId);
        var filter = document.getElementById('filter_' + crudId).value;
        var recordsPerPage = document.getElementById('RecordsPerPage_' + crudId).value;
        WorkViewer_RemoverRegistroCRUD(crudId, registroId, filter, crudObj.PaginaCorrente, recordsPerPage, crudObj.registroPaiId, MontaListaCRUD);
    }
}
/*********************************************************************************************/
var ChaveCorrente = null;

function LeiaMais(id) {
    ShowDiv('Noticia_'+id);
    HideDiv('LeiaMais_'+id);
}

//function ExecutarRelatorio(relatorio) {
//    alert(relatorio);
//    ChaveCorrente = null;
//    WorkViewer_MontaRelatorio(relatorio, MontaRelatorio);
//}

//function MontaRelatorio(relatorio) {
//    currentDialogForm = new DialogForm(relatorio, 'Relatorio', OnRelatorioFinishOK, OnRelatorioValidOK, relatorio, 'Fechar', cancelFn);
//    currentDialogForm.Form = null;
//    currentDialogForm.ErrorsNotRecognized = ErroTela;
//    currentDialogForm.Draw();
//}

function OnRelatorioFinishOK(posList, formulario, obj) {
}

function OnRelatorioValidOK(opr, obj) {
}

/*********************************************************************************************/

function ExecutarAcao(tarefaCfg) {
	ChaveCorrente = null;
	WorkViewer_NovaTarefa(tarefaCfg, MontaFormulario);
}

function ExecutarPendenteSelecionadaByPos(pos) {
	var acao = CurrentGRID.GetObject(pos);
	ExecutarPendenteSelecionadaById(acao.Id, acao.Chave);
}

function ExecutarPendenteParametro(parm) {
	var cps = parm.split('_');
	ExecutarPendenteSelecionadaById(cps[0], cps[1]);
}

function ExecutarPendenteSelecionadaById(id, chave) {
	ChaveCorrente = chave;
	WorkViewer_MontaTarefaFormulario(id, MontaFormulario);
}

var lastDijitToolTip = null;
function mostraAjuda(value) {
	var dv = document.getElementById('areaAjuda');
	if (value) {
		value += '<a href="javascript:mostraAjuda()" style="float:right;"><img src="../../images/Icones/x.png" border="0"></a>';
	} else
		value = '';
	dv.innerHTML = value;
}

var ErroTela;
function MontaFormulario(formulario) {
//    alert('Montando');

	if (formulario.Erro != '') {
		alert(formulario.Erro);
		return;
	}
	
	var fn = '{';
	var content='';
	var firstField=null;
	content += "<input id='TarefaId' name='TarefaId' value='"+formulario.TarefaId+"' type='hidden' />";
	content += "<input id='TarefaConfiguracaoId' name='TarefaConfiguracaoId' value='"+formulario.TarefaConfiguracaoId+"' type='hidden' />";
	content += "<input id='Sign' name='Sign' type='hidden' value='' />";
	content += "<tr><td colspan='2'><div id='areaAjuda' style='color:#0000FF;background-color:#FFFACD;'></div></td></tr>";
	
	for(var a=0; a<formulario.Campos.length; a++) {
		if (firstField == null)
			firstField = formulario.Campos[a].HTMLId;
		content+=formulario.Campos[a].Conteudo;
		if (formulario.Campos[a].ScriptPre)
			fn += formulario.Campos[a].ScriptPre;
	}
	fn += '}';
//	alert(content);
	var cancelFn = null;
	if (formulario.TemCancel) {
		cancelFn = 'CallCancelar()';
    }

//    alert(content);

    currentDialogForm = new DialogForm(formulario, formulario.Nome + (ChaveCorrente ? ' (' + ChaveCorrente + ')' : ''), OnTarefaFinishOK, OnTarefaValidOK, content, formulario.LabelBtnConcluir, cancelFn);
    currentDialogForm.Sign = formulario.DeveAssinar;
	if (true) // formulario.NeedPOST)
		currentDialogForm.Form = '<form id="FormTarefa" method="post" enctype="multipart/form-data" action="javascript:OnTarefaValidOKPOST();">';
	else
		currentDialogForm.Form = null;
    currentDialogForm.MinWidth = formulario.LarguraMinima;
    currentDialogForm.MinHeight = formulario.AlturaMinima;
    currentDialogForm.ErrorsNotRecognized = ErroTela;
    currentDialogForm.Draw();

//	alert('Montado');
	
	if (firstField) {
		var el = document.getElementById(firstField);
		if (el)
			el.focus();
	}

	if (fn != '{}')
	    eval(fn);

//	AtualizaPendentes();
}

var DadosSearchField = null;

function SearchField(field, dados, grid, filterField, selectedField) {
	if (dados == null)
		dados = DadosSearchField;
	else
		DadosSearchField = dados;
	var filter = document.getElementById(filterField);
	var selected = document.getElementById(selectedField);
	var content = '<table id="GridCRUD">';
	for (var a=0; a<dados.length; a++) {
		if ((!filter.value) || dados[a][1].toLowerCase().indexOf(filter.value.toLowerCase()) >= 0) {
			content += "<tr id='"+(a%2==0?'GridCRUDLinePar':'GridCRUDLineImpar')+"'><td>";
			if (selected.value == dados[a][0])
				content += "<strong>"+dados[a][1]+"</strong>";
			else
				content += "<a href=\"javascript:SetInputValue('" + field + "','" + dados[a][0] + "');javascript:SearchField('"+field+"', null, '"+grid+"', '"+filterField+"', '"+selectedField+"');\">" + dados[a][1] + "</a>";
			content += "</td></tr>";
		}
	}
	content += '</table>';
	document.getElementById(grid).innerHTML = content;
}

function OnTarefaValidOKPOST() {
	var fn = '{';
	for(var a=0; a<currentDialogForm.DialogObj.Campos.length; a++) {
		if (currentDialogForm.DialogObj.Campos[a].ScriptPos)
			fn += currentDialogForm.DialogObj.Campos[a].ScriptPos;
	}
	fn += '}';
//	alert(fn);
	if (fn != '{}')
		eval(fn);
	CallConcluir();
}

var terminateFunction;
function SignForm(text, fn) {
    terminateFunction = fn;
    if (currentDialogForm.Sign) {
        if (certificadoSelecionado() == null) {
            alert('Esta atividade deve ser encerrada com uma assinatura.');
            return;
        }
        var obj = currentDialogForm.dialog.getValues();
        var dt = new Date();
        var dados = '(OPERACAO=' + text + ')\n(ATIVIDADE=' + currentDialogForm.Title + ')\n(DATA=' + dt.format('d/m/Y H:i') + ')\n';
        for (var a = 0; a < currentDialogForm.DialogObj.Campos.length; a++) {
            var cp = currentDialogForm.DialogObj.Campos[a];
            var valor = '';
            if (cp.TemValorInterface) {
                var djCp = dojo.byId(cp.HTMLId);
                //            valor = djCp.value;
                eval('valor = obj.' + cp.HTMLId);
            } else
                valor += cp.CurrentValue;
            dados += '(ID=' + cp.Id + ', TITULO='+cp.Label + ', VALOR=' + valor + ', HASH=' + cp.Hash + ')\n';
        }
        if (confirm('Confirmar sua assinatura em: \n\n'+dados))
            assinar(dados, Signed);
    } else
        terminateFunction();
}

function Signed(pkcs7) {
    document.getElementById('Sign').value = pkcs7;
    terminateFunction();
}

function CallConcluir() {
    SignForm('Concluir', CallConcluirCB);
}

function CallConcluirCB() {
    var KeyContext = document.getElementById('KeyContext');
    var formTarefa = document.getElementById('FormTarefa');
    formTarefa.action = '/WorkViewer.mvc/ConcluiTarefaFormularioPOST?KeyContext=' + KeyContext.value;
	formTarefa.submit();
}

function CallCancelar() {
    SignForm('Cancelar', CallCancelarCB);
}

function CallCancelarCB() {
    var formTarefa = document.getElementById('FormTarefa');
	formTarefa.action = '/WorkViewer.mvc/CancelaTarefaFormularioPOST';
	formTarefa.submit();
}

function OnTarefaFinishOK(posList,formulario,obj) {
//	alert('formulario:'+formulario+', posList:'+posList+', obj:'+obj);
//	AtualizaPendentes();
}

function OnTarefaValidOK(opr,obj) {
	var dados = '';
	for(var a=0; a<currentDialogForm.DialogObj.Campos.length; a++) {
		var cp = currentDialogForm.DialogObj.Campos[a];
		if (cp.TemValorInterface) {
			var valor;
			eval('valor = obj.'+cp.HTMLId);
			if (dados != '')
				dados += ';';
			//valor = valor.replace(';',',');
			dados += cp.HTMLId+'='+valor;
		}
	}
	//	WorkViewer_ConcluiTarefaFormulario(currentDialogForm.DialogObj.TarefaId,currentDialogForm.DialogObj.TarefaConfiguracaoId,dados,OnConcluirTarefa);
}

function ExecutarPendente() {
	var selecionados = CurrentGRID.GetSelected();
	if (selecionados.length != 1) {
		alert('Selecione a linha da tarefa para executar');
	} else
		ExecutarPendenteSelecionadaByPos(selecionados[0]);
}

function OnConcluirTarefa(resp) {
	var erros = new GCList();
	if (resp.Erro != '') {
		erros.AddGCObject(new GCObject('',resp.Erro));
	}
	currentDialogForm.FinishOK(0, erros);
	
	if (resp.Proximas.length > 0) {
		ExecutarPendenteSelecionadaById(resp.Proximas[0].Id, resp.Proximas[0].Chave);
	} else
		AtualizaPendentes();
}

var SignatureField;
var ResultField;

var assinaturaCorrente = '';

function zeraAssinatura(assinatura) {
    assinaturaCorrente = '';
}

function setaAssinatura(assinatura) {
    assinaturaCorrente += assinatura;
}

function encerraAssinatura(res) {
    //    alert(assinaturaCorrente.length);
//    alert(assinaturaCorrente);
    while (assinaturaCorrente.indexOf('#') >= 0)
        assinaturaCorrente = assinaturaCorrente.replace('#', '%');
//    alert(assinaturaCorrente);
    document.getElementById(ResultField).value = 'ok';
    document.getElementById(SignatureField).value = assinaturaCorrente;
    //    alert(document.getElementById(ResultField).value + ':' + document.getElementById(SignatureField).value);
}

function falhaAssinatura(msg) {
    document.getElementById(ResultField).value = 'cancel';
}

function novoCertificadoSelecionado() {
}

function resultadoAssinatura(res, pkcs7) {
    alert(pkcs7);
    if (res == 0) { // OK
        document.getElementById(ResultField).value = 'ok';
        document.getElementById(SignatureField).value = pkcs7;
        alert(document.getElementById(ResultField).value + ':' + document.getElementById(SignatureField).value);
    } else if (res == 1) { // NOK
        document.getElementById(ResultField).value = 'cancel';
    }
}

/** Para o OpenOces
var SignatureField;
var ResultField;
function onSignOK(signature) {
	document.getElementById(SignatureField).value=signature;
	document.getElementById(ResultField).value='ok';
	//alert(document.getElementById(SignatureField).value);
	//alert(document.getElementById(ResultField).value);
	// "document.form[0].submit();
}
function onSignCancel() {
	document.getElementById(ResultField).value='cancel';
	// "document.form[0].submit();
}
function onSignError(msg) {
	document.getElementById(ResultField).value=msg;
	// "document.form[0].submit();
}
*/