
// -------------------------------------------------------------------------------------------------------
// Funções Genéricas
// -------------------------------------------------------------------------------------------------------

/*---------------------------------------------------------------
Nome: valida_obrigatorio
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se um campo obrigatorio foi preenchido
---------------------------------------------------------------*/
function valida_obrigatorio(campo,nomeCampo)
{
  flgOK = true;
  IsRadio = false;
  switch(campo.type)
  {
    case 'textarea':
	case 'hidden':
	case 'file':
	case 'password':
	  if (campo.value == "")
	  {
		 alert (nomeCampo + ': Campo de preenchimento obrigatório.');
		 flgOK = false;
	  }
	  break
	case 'text':
	  if (campo.value == "")
      {
        alert (nomeCampo + ': Campo de preenchimento obrigatório.');
	    flgOK = false;
      }
	  break
	case 'checkbox':
	  if (!campo.checked)
      {
        alert (nomeCampo + ': Campo de preenchimento obrigatório.');
	    flgOK = false;
      }
	  break
	default:
	  if (campo[0].type=='radio')
      {
		IsRadio = true;
		flgCheck = false;
	    for (var intCount = 0; intCount < campo.length; intCount++) 
		{
		  if (campo[intCount].checked) 
		  {
			flgCheck = true;
			break;
		  }
		}    
		if (flgCheck == false)
		{
          alert (nomeCampo + ': Campo de preenchimento obrigatório.');
	      flgOK = false;
        }
	    break
     } // end if
  } // end switch

if (flgOK == false) {
	if (IsRadio == false) {
		campo.focus();
		campo.select();
	}
}
return flgOK;
}

/*---------------------------------------------------------------
Nome: valida_select
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se um campo select obrigatorio foi preenchido
---------------------------------------------------------------*/
function valida_select(campo,nomeCampo)
{
  flgOK = true;
  
  if (campo.options[campo.selectedIndex].value == -1 )
  {
    alert (nomeCampo + ': Campo de preenchimento obrigatório.');
	flgOK = false;
  }
  
  if (flgOK == false) {
     campo.focus();
	 //campo.select();
  }
 
return flgOK;
}

/*---------------------------------------------------------------
Nome: valida_numero
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se um campo é numérico
---------------------------------------------------------------*/
function valida_numero(campo,nomeCampo)
{
  flgOK = true
  if (isNaN(campo.value))
  {
    alert ( nomeCampo + ': Campo numérico.');
	campo.focus();
    campo.select();
    flgOK = false;
  } 
  return flgOK;
}

	function valida_moeda(field, nomecampo) {
		var valid = "0123456789."
		var ok = "yes";
		var temp;
		flgOK = true
		for (var i=0; i<field.value.length; i++) {
			temp = "" + field.value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") ok = "no";
		}
		if (ok == 'no') {
			alert(nomecampo + ': Campo do tipo numérico com casas decimais separadas por ponto.');
			field.focus();
			field.select();
			flgOK = false;
   		}
		return flgOK;
	}

	function valid_number(field) {
		var valid = "0123456789."
		var ok = "yes";
		var temp;
		flgOK = true
		for (var i=0; i<field.value.length; i++) {
			temp = "" + field.value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") ok = "no";
		}
		if (ok == 'no') {
			flgOK = false;
   		}
		return flgOK;
	}

	function valid_number_space(field) {
		var valid = "0123456789."
		var ok = "yes";
		var temp;
		flgOK = true
		for (var i=0; i<field.value.length; i++) {
			temp = "" + field.value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") ok = "no";
		}
		if (ok == 'no') {
			flgOK = false;
   		}
		if (field.value.length==0) flgOK = false;

		return flgOK;
	}

	function valida_percentagem(field, nomecampo) {
		var valid = "0123456789."
		var ok = "yes";
		var temp;
		flgOK = true
		for (var i=0; i<field.value.length; i++) {
			temp = "" + field.value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") ok = "no";
		}
		if (ok == 'no') {
			alert(nomecampo + ': Campo do tipo numérico com casas decimais separadas por ponto.');
			field.focus();
			field.select();
			flgOK = false;
   		}
		else{
			if (field.value < 0 || field.value > 100) {
				alert(nomecampo + ': Campo com valores entre [0] e [100].');
				field.focus();
				field.select();
				flgOK = false;
			}
		}
		
		return flgOK;
	}


/*---------------------------------------------------------------
Nome: valida_texto
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se um campo é texto
---------------------------------------------------------------*/
function valida_texto(campo,nomeCampo)
{
  flgOK = false
  if (!isNaN(campo.value))
  {
    alert (nomeCampo + ': Campo texto.');
    flgOK = true;
  } 
  return flgOK;
}
/*---------------------------------------------------------------
Nome: valida_email
Parâmetros : campo-nome do campo no form
             nomeCampo-descrição do campo
Descrição:	valida se o campo está bem preenchido
---------------------------------------------------------------*/

function valida_email(campo,nomeCampo)
{
	flgOK = true;
	Ctrl = campo;
	ind = Ctrl.value.indexOf ('@', 0);

    exclude = /[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
    check = /@[\w\-]+\./;
    checkend = /\.[a-zA-Z]{2,3}$/;

	if (Ctrl.value=="o seu email"){
		alert("Por favor, introduza o seu e-mail!");
		campo.focus();
    	campo.select();
		flgOK = false;
	} else if (Ctrl.value.length==0) {
		//validatePrompt(Ctrl, "Por favor, introduza o seu e-mail!");
		//return (false);
		flgOK = true;
	} else if (ind==-1) {
		alert("O e-mail inserido não é válido...");
		campo.focus();
    	campo.select();
		flgOK = false;
	} else if (ind==0) {
		alert("O e-mail inserido não é válido...");
		campo.focus();
    	campo.select();
		flgOK = false;
	} else if (ind==Ctrl.value.length-1) {
		alert("O e-mail inserido não é válido...");
		campo.focus();
		campo.select();
		flgOK = false;
	} else if ((Ctrl.value.search(exclude) != -1) ||
               (Ctrl.value.search(check) == -1)   || 
               (Ctrl.value.search(checkend) ==-1)) {
		alert("O e-mail inserido não é válido...");
		campo.focus();
		campo.select();
		flgOK = false;
	} else
		return flgOK;
}

// ---------------------------------------------------------------------------------
// date validation functions - INI
// ---------------------------------------------------------------------------------
function decodeDate(dtStr) { 
  sep = '-'; 
  len = dtStr.length; 
  
  p1 = dtStr.indexOf(sep); 
  if (p1 < 0) { return null; } 
  day = dtStr.substr(0, p1); 
  if (day.length != 2) { return null; } 

  p2 = dtStr.indexOf(sep, p1 + 1);
  mon = dtStr.substr(p1 + 1, p2 - p1 - 1); 
  if (mon.length != 2) { return null; }

  year = dtStr.substr(p2 + 1, len); 
  if (year.length != 4) { return null; }
  
  return new Array(day, mon - 1, year); 
}

function makeDate(dtArr) { 
  if (dtArr == null) { return null; }
  return new Date(dtArr[2], dtArr[1], dtArr[0]); 
}

function compareDate(dtArr, dtObj) { 
  if (dtObj == null) { return false; }
  return ((dtArr[2] == dtObj.getFullYear()) && (dtArr[1] == dtObj.getMonth()) && (dtArr[0] == dtObj.getDate())); 
}

function checkDate(dtStr) { 
  dtArr = decodeDate(dtStr); 
  return compareDate(dtArr, makeDate(dtArr)); 
}

function validDate(field) {
  dtStr = field.value; 
  var ok = true;
  if (dtStr != "") {
    result = checkDate(dtStr);
    if (dtArr==null) {
      alert("Formato Inválido -> (dd-mm-aaaa)");
      field.focus();
      field.select();
	  ok = false;
    } else if (!result) {
      alert("Data Inválida!"); 
      field.focus();
      field.select();
	  ok = false;
    }
  }
  return ok;
} 

function abreJanela(ficheiro,window_width,window_height)
{ 
    var fich;
	fich=ficheiro;
	
	//the center properties
	var screen_balance_w = ((screen.width)-(window_width))/2;
	var screen_balance_h = ((screen.height)-(window_height))/2;
	var set_top = screen_balance_h;
	var set_left = screen_balance_w; 

    window.open(fich,'my_new_window','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no, copyhistory=yes, width=' + window_width +', height=' + window_height + ',top=' + set_top +',left='+ set_left);
}

function display(myimage) {
	html = "<HTML><HEAD><TITLE>.: Pluriapoio :.</TITLE>" +
      	  "<script language='javascript'>" +
          "  function fitPic() {" +
          "      if (window.innerWidth){" +
          "          iWidth = window.innerWidth;" +
          "          iHeight = window.innerHeight;" +
          "      }else{" +
          "          iWidth = document.body.clientWidth;" +
          "          iHeight =document.body.clientHeight;" +
          "      }" +
          "      cWidth = document.images[0].width - iWidth;" +
          "      cHeight = document.images[0].height - iHeight;" +
		  "      window.moveTo((screen.width-document.images[0].width)/2,(screen.height-document.images[0].height)/2);"+
          "      window.resizeBy(cWidth, cHeight);" +
          "  };" +
		"</script>" +
	"</HEAD>" +
	"<BODY LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0  MARGINHEIGHT=0 onload='fitPic();'><CENTER>" +
	"<A href='javascript:window.close()'> "+
	"<IMG SRC='" + myimage + "' BORDER=0 NAME=image ></A>"
	">/CENTER></BODY></HTML>";	
	
	popup=window.open('','image','toolbar=0,location=0,directories=0,menuBar=0,scrollbars=0,resizable=0');
    popup.document.open();
	popup.document.write(html);
	popup.document.focus();
	popup.document.close()
 };


/*---------------------------------------------------------------
Nome: move
Parâmetros : ListBox Origem
             ListBox Destino
Descrição:	Permite fazer a passagem de dados de uma lista para outra
---------------------------------------------------------------*/
function move(fbox, tbox) {
     var arrFbox = new Array();
     var arrTbox = new Array();
	 var arrLookup = new Array();
     var i;
     for(i=0; i<tbox.options.length; i++) {
          arrLookup[tbox.options[i].text] = tbox.options[i].value;
          arrTbox[i] = tbox.options[i].text;
     }
     var fLength = 0;
     var tLength = arrTbox.length
     for(i=0; i<fbox.options.length; i++) {
          arrLookup[fbox.options[i].text] = fbox.options[i].value;
          if(fbox.options[i].selected && fbox.options[i].value != "") {
               arrTbox[tLength] = fbox.options[i].text;
               tLength++;
          } else {
               arrFbox[fLength] = fbox.options[i].text;
               fLength++;
          }
     }
     arrFbox.sort();
     arrTbox.sort();
     fbox.length = 0;
     tbox.length = 0;
     var c;
     for(c=0; c<arrFbox.length; c++) {
          var no = new Option();
          no.value = arrLookup[arrFbox[c]];
          no.text = arrFbox[c];
          fbox[c] = no;
     }
     for(c=0; c<arrTbox.length; c++) {
     	var no = new Option();
     	no.value = arrLookup[arrTbox[c]];
     	no.text = arrTbox[c];
     	tbox[c] = no;
     }
}

/*---------------------------------------------------------------
Nome: MoveALL
Parâmetros : ListBox 
Descrição:	Permite Seleccionar todos os registos existentes na Listbox Origem
            e enviar para a Listbox Destino
---------------------------------------------------------------*/
function moveALL(fbox, tbox) {
  	  selectAll(fbox);
  	  move(fbox, tbox);	  
}

/*---------------------------------------------------------------
Nome: SelectALL
Parâmetros : ListBox 
Descrição:	Permite Seleccionar todos os registos existentes na Listbox
---------------------------------------------------------------*/
function selectAll(box) {
	var mails;
	mails="";
     for(var i=0; i<box.length; i++) {
    	 box[i].selected = true; 

		 mails +=box[i].value;
		if (i <(box.length-1))
		{
			mails+= ",";
		}

	 }
	 
	 return mails;
}

/*---------------------------------------------------------------
Nome: CancelALL
Parâmetros : ListBox 
Descrição:	Permite Limpar todos os registos existentes na Listbox Origem
---------------------------------------------------------------*/
function cancelAll(fbox, tbox) {	
     for(var i=0; i<fbox.length; i++) {
     fbox[i].selected = true;
     }
	 
	 move(fbox, tbox);
}

// ---------------------------------------------------------------------------------
// date validation functions - END
// ---------------------------------------------------------------------------------


function mi(obj,cor,corold) {
	obj.style.cursor='hand';
	if (cor == 0) {
		setPointer(obj,'#CCCCFF'); 
	} else{
		if (cor == 1) {
			setPointer(obj,corold);
		}
	}
}

function setPointer(theRow, thePointerColor, theNormalBgColor)
{
    var theCells = null;

    if (thePointerColor == '' || typeof(theRow.style) == 'undefined') {
        return false;
    }
    if (typeof(document.getElementsByTagName) != 'undefined') {
        theCells = theRow.getElementsByTagName('td');
    }
    else if (typeof(theRow.cells) != 'undefined') {
        theCells = theRow.cells;
    }
    else {
        return false;
    }

    var rowCellsCnt  = theCells.length;
    var currentColor = null;
    var newColor     = null;

	if (typeof(window.opera) == 'undefined'
        && typeof(theCells[0].getAttribute) != 'undefined' && typeof(theCells[0].getAttribute) != 'undefined') {
        currentColor = theCells[0].getAttribute('bgcolor');
        newColor     = (currentColor.toLowerCase() == thePointerColor.toLowerCase())
                     ? theNormalBgColor
                     : thePointerColor;
        for (var c = 0; c < rowCellsCnt; c++) {
            theCells[c].setAttribute('bgcolor', newColor, 0);
        } 
    }
    else {
        currentColor = theCells[0].style.backgroundColor;
        newColor     = (currentColor.toLowerCase() == thePointerColor.toLowerCase())
                     ? theNormalBgColor
                     : thePointerColor;
        for (var c = 0; c < rowCellsCnt; c++) {
            theCells[c].style.backgroundColor = newColor;
        }
    }

    return true;
} 
