
//---------------------------
// Funções de compatibilidade IE / Firefox
//---------------------------
// substituem as funções compatíveis somente pelo IE
// onde se faz xxx.insertAdjacent?(yyy,zzz), usa-se fakeInsertAdjacent?(xxx,yyy,zzz)

function fakeInsertAdjacentElement(node,where,parsedNode)
{
	if (node.insertAdjacentElement) {
		node.insertAdjacentElement(where,parsedNode);
	} else {
		var psn = where.toLowerCase();
		switch (psn){
		case 'beforebegin':
			node.parentNode.insertBefore(parsedNode,node)
			break;
		case 'afterbegin':
			node.insertBefore(parsedNode,node.firstChild);
			break;
		case 'beforeend':
			node.appendChild(parsedNode);
			break;
		case 'afterend':
			if (node.nextSibling) 
				node.parentNode.insertBefore(parsedNode,node.nextSibling);
			else this.parentNode.appendChild(parsedNode);
				break;
		}
	}
}

function fakeInsertAdjacentHTML(node,where,htmlStr)
{		
	if (node.insertAdjacentHTML) {
		node.insertAdjacentHTML(where,htmlStr);
	} else {
		var r = node.ownerDocument.createRange();
		r.setStartBefore(node);
		var parsedHTML = r.createContextualFragment(htmlStr);
		fakeInsertAdjacentElement(node,where,parsedHTML);
	}
}


function fakeInsertAdjacentText(node,where,txtStr)
{
	if (node.insertAdjacentText) {
		node.insertAdjacentText(where,txtStr);
	} else {
		var parsedText = document.createTextNode(txtStr)
		fakeInsertAdjacentElement(node,where,parsedText)
	}
}

//---------------------------

function genericOnKeyDown(event) {
	if (event.altKey && (event.keyCode == 37 ||  event.keyCode == 39)) {
        event.keyCode = 0;
        event.returnValue = false;
        alert("Não é possivel usar as teclas de atalho.");
    } else {
 		var srcEl = event.srcElement? event.srcElement : event.target;
 		if (  ((event.keyCode == 8) && !((srcEl.type == "text" ||
           srcEl.type == "textarea" || 
           srcEl.type == "password") && !srcEl.readOnly && !srcEl.disabled)) ||
           ((event.ctrlKey) && ((event.keyCode == 78) || (event.keyCode == 82)) ) ||
           (event.keyCode == 116) ) {
           event.keyCode = 0;
           event.returnValue = false;
    	} 
    }
}

function ieOnKeyDown() {
	genericOnKeyDown(event);
}

// replace de document.onkeydown = function()
function addOnKeyDownHandler(){
	if( document.addEventListener ) {		
		document.onkeydown = genericOnKeyDown;
		return 0;
	} else {
		document.onkeydown = ieOnKeyDown;
		return 0;
	}
}

addOnKeyDownHandler();


//---------------------------
//---------------------------
//---------------------------



// Função que elimina o botão direito do rato
function nocontextmenu(){
   event.cancelBubble = true
   return false;
}

document.oncontextmenu = nocontextmenu;

function right(e) {

if (navigator.appName == 'Microsoft Internet Explorer' &&
(event.button == 2 || event.button == 3)) {
alert('Sistema de Gestão de Remunerações');
return false;
}
return true;
}

//document.onmousedown=right;
//document.onmouseup=right;





// Altera o value de um botao
function changeButtonValueAndSubmit(button, value)
{
    button.value = value;
}

// Activa/Desactiva o botão "button", com base no campo booleano "value",
// e no caso do botão ficar inactivo, limpa o valor do campo "field".
function disableDisableButtonAndCleanField(value,button,field)
{
    button.disabled = value;
    // Se o botão foi desactivado, limpar o campo.
    if(value) {
        field.value = '';
    }
}

function validateTextFieldBlur(input) {
      if( input.readOnly == true && input.value != ''&& input.defaultValue != input.value ) {
        input.value = input.defaultValue;
      }
}

// Activa/Desactiva um elemento, "formElement", com base no campo booleano "value",
// e no caso do botão ficar inactivo, limpa o valor do campo "field".
function disableDisableFormElementAndCleanField(value,formElement,field)
{
    if (formElement.type == 'text') {
        if (value == true) {
            formElement.className = 'textFieldDisabledSmall';
        }
        else {
            formElement.className = 'textFieldEnabledSmall';
        }

        formElement.readOnly = value;
    }
    else {
        formElement.disabled = value;
    }

    // Se o elemento foi desactivado, limpar o campo.
    if(value) {
        field.value = '';
    }
}

// Activa/Desactiva a combobox "combobox", com base no campo booleano "value",
// e no caso da combobox ficar inactiva, selecciona a 1ª posição da combobox.
function disableCombobox(value,combobox,hidden)
{
    combobox.disabled = value;
    // Se a combobox foi desactivada, limpar o campo.
    if(value) {
        // Indica que a combobox deve ficar sem nenhum elemento seleccionado.
        combobox.selectedIndex = 0;
        hidden.value = ' ';
    }
    else {
        // Indica que a combobox deve ficar com um elemento seleccionado.
        hidden.value = 'x';
    }
}

function enableDisableComboWithTextFieldValue(value, combobox) {
    enableDisableComboWithTextFieldValue(value, combobox, null);
}

// Faz o enable/disable de uma combobox consoante um text field esteja ou não preenchido
function enableDisableComboWithTextFieldValue(value, combobox, runScriptIfEmpty)
{
    if(value == '') {
        combobox.disabled = true;
        combobox.selectedIndex = 0;
        if (runScriptIfEmpty != null) {
            eval(runScriptIfEmpty);
        }
    }
    else {
        combobox.disabled = false;
    }
}

function enableDisableComboboxes(value,comboboxR,comboboxE,button,field)
{
    if(value == 'R') {
        comboboxR.disabled = false;
        comboboxE.selectedIndex = 0;
        comboboxE.disabled = true;
    disableDisableButtonAndCleanField(false,button,field);
    }
    else if(value == 'E') {
    field.value = ' ';
        comboboxE.disabled = false;
        comboboxR.selectedIndex = 0;
        comboboxR.disabled = true;
    disableDisableButtonAndCleanField(true,button,field);
    }
    else {
    disableDisableButtonAndCleanField(false,button,field);
        comboboxE.disabled = false;
        comboboxR.disabled = false;
    }
}

function enableDisableTextFieldWithCombobox(value,field,fieldValue)
{
    if(value == 'T' ) {
        field.value = fieldValue;
        field.readOnly = true;
        field.className = 'textFieldDisabledSmallAlignRight'
    }
    else if( field.value != 100 && field.value != 0 )
    {
        //field.value = '';
        field.readOnly = false;
        field.className = 'textFieldEnabledSmallAlignRight'
    }else {
        field.value = '';
        field.readOnly = false;
        field.className = 'textFieldEnabledSmallAlignRight'
    }
}

function valueInArray(value, array) {
    for (var i = 0; i < array.length; i++) {
        if (array[i] == value) {
            return true;
        }
    }

    return false;
}

/**
 * :IML
 * Activa ou desactiva um botão quando um determinado grupo de valores é
 * selecionado numa comboBox, limpando opcionalmente um conjunto de textfields
 * @param value                Valor seleccionado
 * @param button               Botão a ser activado ou não pela comboBox
 * @param whenComboValueEquals Valores que fazem despoletar o script
 * @param textFieldsToClean    Campos a limpar quando a comboBox assumir um
 *                             determinado valor
 */
function enableDisableFormElementWithCombobox(value, formElement, whenComboValueEquals,
                                              textFieldsToClean) {

    if (valueInArray(value, whenComboValueEquals)) {
        for (var i = 0; i < textFieldsToClean.length; i++) {
            disableDisableFormElementAndCleanField(
                false,
                formElement,
                eval("document.MainForm." + textFieldsToClean[i])
            );
        }
    }
    else {
        for (var i = 0; i < textFieldsToClean.length; i++) {
            disableDisableFormElementAndCleanField(
                true,
                formElement,
                eval("document.MainForm." + textFieldsToClean[i])
            );
        }
    }
}

function enableDisableButtonWithCombobox1(value,button,field1,field2)
{
    if(value == 'TCO' || value == 'MOE') {
        disableDisableButtonAndCleanField(false,button,field1);
        disableDisableButtonAndCleanField(false,button,field2);
    } else if(value == 'SD'){
        field1.value='';
        field2.value='';
        button.disabled = false;
    } else {
        disableDisableButtonAndCleanField(true,button,field1);
        disableDisableButtonAndCleanField(true,button,field2);
    }

}

/**
 * :IML
 * Permite mediante a selecção de um determinado grupo de valores numa comboBox
 * activar ou desactivar um textField colocando ao mesmo tempo um determinado
 * valor neste
 * @param value O valor seleccionado na comBoBox
 * @param textField O TextField a modificar
 * @param whenComboValueEquals Valores que fazem despoletar o script
 * @param valueToPutInTextField Valor a colocar no texteField caso a selecção
 *                              na comboBox seja uma das pre-determinadas
 * @param styleSheetEnableDisable Array com a style sheet que permite modificar a
 *                                aparencia do textField para read-only e não
 *                                read-only na primeira e na segunda posição
 *                                respectivamente
 */
function enableDisableTextFieldAndSetAValueWithComboBox(value,
                                                        textField,
                                                        whenComboValueEquals,
                                                        valueToPutInTextField,
                                                        styleSheetEnableDisable) {
    if (valueInArray(value, whenComboValueEquals)) {
        textField.value = valueToPutInTextField;
        textField.readOnly = true;
        textField.className = styleSheetEnableDisable[0];
    }
    else {
        textField.value = "";
        textField.readOnly = false;
        textField.className = styleSheetEnableDisable[1];
    }
}

/**
 * :ASC
 * <BR>
 * Faz SUBMIT do botão com a LABEL "value".
 * @param value Label do botão ao qual se quer fazer submit.
 */
function submitButton(value){
    campos = document.MainForm.elements;
    for(var i = 0; i<campos.length; i++) {
        if(campos[i].type == "submit" && campos[i].value==value) {
           campos[i].click();
        }
    }
}

/**
 * :ASC
 * <BR>
 * Activa/Desactiva o campo "field", com base no campo booleano "value",
 * e no caso do campo ficar inactivo, coloca o valor a ZERO.
 */
function disableFieldAndSetToZero(value,field)
{
    // Verificar se a propriedade read-only foi alterada
    if(value != field.readOnly) {
        // Activar/Desactivar o campo
        field.readOnly = value;

        // Verificar qual o novo estado
        if(value) {
            // Se ficou read-only colocar o valor a ZERO.
            field.value = '0';
            field.className = 'textFieldDisabledSmallAlignRight';
        }
        else {
            // Se deixou de estar read-only limpar o valor.
            field.value = '';
            field.className = 'textFieldEnabledSmallAlignRight';
        }
    }
}

function setChoice(method)
 {
    document.MainForm.choice.value=method;
 }

 /**
 * Altera o valor dos campos text que tenham vindo
 * da página vazios e que estejam vazios quando for
 * feito o submit da página
 */


function resetTextFields(){
    campos = document.MainForm.elements;
    for(var i = 0; i<campos.length; i++){
        if(campos[i].type == "text" && campos[i].defaultValue!='' && campos[i].value==''){
           campos[i].value=' ';
        }
    }
}

function submitFormWidthMethod(form, method,choice){
    if(choice){
        document.MainForm.choice.value = method;
    }else{
        fakeInsertAdjacentHTML(form,'BeforeEnd', '<INPUT TYPE=\"Hidden\" NAME=\"button\" VALUE=\"' + method + '\">');
        //form.insertAdjacentHTML('BeforeEnd', '<INPUT TYPE=\"Hidden\" NAME=\"button\" VALUE=\"' + method + '\">');
    }
    form.submit();
}

function changeOrder(combobox, radio,asc,desc){
    index = combobox.selectedIndex;
    radio[0].value=combobox.options[index].value+"/"+asc;
    radio[1].value=combobox.options[index].value+"/"+desc;
}

/**
 * Atribui a ordenação seleccionada ao hidden-field do form exterior.
 * Para o caso da ordenação multipla, considera-se que dois RadioGroups
 * pertencem ao mesma ordenação caso sejam da mesma familia.
 * <P>
 * A regra para determinar se os RadioGroups são da mesma familia é:
 * O nome do 1º RadioGroup está contido nos restantes.
 * Exemplo:
 *   RadioGroup1: nome = radio1
 *   RadioGroup2: nome = radio12
 * como radio1 está contido em radio12, diz-se o 2º é da familia do 1º,
 * logo fazem parte da mesma ordenação.
 * </P>
 */
function setOrdenacao(radioB){
    duplaPesquisa = false;

    // Obter o 1º RadioGroup
    // e
    // Atribuir a ordenação desta ao hidden-field do form exterior
    for(var i = 0; i<radioB.length; i++){
        if(radioB[i].checked==true){
            document.MainForm.ordenacao.value=radioB[i].value;
        }
    }

    // Para situações onde exista mais que uma pesquisa
    // Iterar por todos os elementos do formulário
    for (var i = 0; i < document.TableForm.elements.length; i++) {
        // Verificar se o elemento do form é um RadioGroup
        // Verificar se não é o 1º RadioGroup
        // Verificar se o RadioGroup tem um valor seleccionado
        // Verificar se o RadioGroup é da familia do 1º RadioGroup
        if(document.TableForm.elements[i].type == 'radio' && document.TableForm.elements[i].name != radioB[0].name && document.TableForm.elements[i].checked==true && document.TableForm.elements[i].name.indexOf(radioB[0].name)!=-1){
            // Actualizar a ordenação a efectuar
            document.MainForm.ordenacao.value = document.MainForm.ordenacao.value +'*'+document.TableForm.elements[i].value;
            duplaPesquisa = true;
        }
    }

    if(duplaPesquisa){
        document.TableForm.orderBy.value = document.MainForm.ordenacao.value;
    }

}

function disableButtons(form) {
    //var value = form.button.value;
    //alert("form.button.value = " + form.button.value);

    for (var i = 0; i < form.elements.length; i++) {
        alert("form.elements[" + i + "].type = " + form.elements[i].type);
        if (form.elements[i].type == "submit") {
            form.elements[i].disabled = true;
        }
    }
	//form.insertAdjacentHTML('BeforeEnd', '<INPUT TYPE=\"Hidden\" NAME=\"button\" VALUE=\"' + value + '\">');
    fakeInsertAdjacentHTML(form,'BeforeEnd', '<INPUT TYPE=\"Hidden\" NAME=\"button\" VALUE=\"' + value + '\">');
}

function isEmpty(str)
{
    if (str != '') {
        for(i = 0 ; i < str.length; i++) {
            if(str.charAt(i) != ' ') {
                return false;
            }
        }
    }
    return true;
}

// Devolve o valor do radio button seleccionado
function valorSeleccionado(radioB){
    for(var i = 0; i<radioB.length; i++){
        if(radioB[i].checked==true){
            return radioB[i].value;
        }
    }
}

// :ASC
// Utilizador no Registo de Documento P3 da Pesca Artesanal.
/**
 * Função que é chamada sempre que se clica na checkbox, que indica
 * se houve desembarque para num determinado dia do mês.
 * Se a checkbox ficar "check" então o "textfield" que guarda o valor
 * de contribuições associado fica disponível para leitura/escrita.
 * Caso a checkbox fique "unchecked", então o "textfield" que guarda o valor
 * de contribuições associado fica "readonly" e o valor de contribuições é apagado.
 *
 * @param day Dia seleccionado.
 * @param checked Indicação da checkbox estar "check" ou "unchecked".
 */
function setDay(day,checked) {
    // Obter uma referência para o TextField com o valor monetário.
    var field = eval("document.MainForm.valor_" + day);

    // Activar/Desactivar o campo
    if(checked) {
        field.readOnly = false;
        field.className = 'textFieldEnabledAlignRight';
        field.focus();
    }
    else {
        field.readOnly = true;
        field.value = '';
        field.className = 'textFieldDisabledAlignRight';
   }
}

function changeMoeda(campo1, campo2) {

    var aux = campo1.value;

    campo1.value = campo2.value;
    campo2.value = aux;
}

// codigo para tratar duplos submits

function disableResubmit() {
    for (var i = 0; i < document.all.length; i++)
        if (document.all[i].type != null && (document.all[i].type.toLowerCase() == 'submit' || document.all[i].type.toLowerCase() == 'button'))
    		document.all[i].onclick=cancelClickEvent;

}

function disableResubmitParams(toDisable) {
    for (var i = 0; i < toDisable.length; i++) {
        toDisable[i].onclick=cancelClickEvent;
    }
}

function cancelClickEvent(){
    window.event.returnValue = false;
}

/**
 * Verifica se pode fazer o submit
 */

function verifyDoSubmit(){
    if ( pageLoaded == 0 )  {
        pageLoaded = 1;
        return true;
    }
    return false;
}


/**
 * Método submitFormWithMethod
 * Utilizado nos casos de vários botões com o mesmo nome
 */
function submitFormWithMethod(form, method) {

    if (pageLoaded == 0) {
        pageLoaded = 1;

        // Fazer o disable dos botões
        mDisableButtons();
        form.choice.value = method;
        form.submit();

    }
}



/**
 * Testa para ver se se pode fazer submit ou não
 */
function testSubmit() {
    return (pageLoaded == 0);
}



/**
 * Inactiva todos os botões em todos os forms
 *
 */
function mDisableButtons() {
    if (document.forms.length > 1) {
        for (var i = 0; i < document.forms.length; i++) {
            if (document.forms[i].button.length != null &&
                document.forms[i].button.length > 1) {
                for (var j = 0; j < document.forms[i].button.length; j++) {
                    if (document.forms[i].button[j].type == 'button')
                        document.forms[i].button[j].disabled = true;
                }
            }
            else {
                if (document.forms[i].button.type == 'button') {
                    document.forms[i].button.disabled = true;
                }
            }
        }
    }
    else {
        // Só existe o MainForm

        var form = document.forms[0];

        if (form.elements.length != null &&
            form.elements.length >= 1) {
            for (var j = 0; j < form.elements.length; j++) {
                if (form.elements[j].type == 'button')
                    form.elements[j].disabled = true;
            }
        }
    }
}

// fim de codigo