
function findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}


//  chamada da função no evento onClick do botão
//  validateForm('nomedocampo','','Validação','nomedooutrocampo','','Validação',...)"
//  onde Validação pode ser:
//  'R' -> indica que o campo é de preenchimento obrigatório
//  'isEmail' -> o campo deve ser preenchido com um e-mail válido
//  'isMes -> deve conter um valor entre 1 e 12
//  'inRangeMIN:MAX -> deve conter um valor entre MIN e MAX (inclusive)
//  'isSelected' -> 	Quando trata-se de um campo select em que o primeiro option é somente um título e deve 
//					ser selecionada uma das opções. O valor para o option título do select deve ser '-'
function NumSeparadores(aString, SepChar)
{
  StrLen = aString.length;
  Num = 0;
  EndofToken = StrLen;
  while (EndofToken != -1) 
  {
    EndofToken = aString.indexOf(SepChar);
    if (EndofToken != -1)
	{
      aString = aString.substring(EndofToken+1,aString.length);
      Num++;
//	  alert(aString+'\n'+SepChar+'\n'+EndofToken+'\n'+Num);
	}
  }
  return  Num;
}


function SQLInject(valor){
	inject = 0;
	sql = new Array("select","insert","update","delete","drop","destroy","alter");
	for (i = 0; i < sql.length; i++){
		if (NumSeparadores(valor,sql[i])!=0){
			inject = 1;
			break;
		}
	}
	return inject;
}

function formatanumero(Num)
{
  var aux1, str, virgula, TemVirgula, numdecimais, parteinteira, partedecimal;
  TemVirgula = (Num.indexOf(",") != -1);
//  alert ("Tem Virgula: " + TemVirgula);
  if (TemVirgula) 
  {
	partedecimal = Num.substr(Num.indexOf(",")+1, Num.length - Num.indexOf(",")); 
    numdecimais = partedecimal.length;
	parteinteira = Num.substr(0,Num.length - numdecimais-1);
//     alert ("Parte inteira: " + parteinteira);
//     alert ("Parte decimal: " + partedecimal);
//     alert ("Número de decimais: " + numdecimais);
     if (numdecimais == 1) 
	 {
        partedecimal = partedecimal + "0";
	 }
	 else 
	 if (numdecimais > 2)
	 {
		 numdecimais = 2;
		 partedecimal = partedecimal.substr(0,2);
	 }
  }
  else  // Não tem vírgula
  {
	  parteinteira = Num;
	  partedecimal = "";
  }
  str = "";
  while (parteinteira.indexOf(".")!= -1)
  {
     parteinteira = parteinteira.replace(".", "");alert(parteinteira);
  }
  aux1 = parteinteira + partedecimal ;
//  alert ("Número a ser formatado: " +aux1);

  numdigitos = aux1.length;
  if (numdigitos <= 2)
  {
    str = "0," + aux1;
//	alert("número de dígitos <= 2 "+str);
  }
  else
  {
	 switch (parteinteira.length){
	 case 4: case 5: case 6: 
	    aux2 = "";
	    parteinteira = aux2.concat(parteinteira.substr(0,parteinteira.length-3),".",parteinteira.substr(parteinteira.length-3,parteinteira.length));
	 aux1 = parteinteira + partedecimal ;
//	 alert (aux1)
	 break;
	 case 7:
	    aux2 = "";
	    parteinteira = aux2.concat(parteinteira.substr(0,1),".",parteinteira.substr(1,3),".",parteinteira.substr(4,6));
		aux1 = parteinteira + partedecimal ;
	    break;
	 }
	 str = aux1.substr(0,aux1.length - 2) + "," + aux1.substr(aux1.length - 2, aux1.length);
	
  }
   alert("Resultado "+str);
}


function validateForm() //v4.0
{ 
  var i,p,q,nm,test,num,min,max,errors='',args=validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) 
  { 
    test=args[i+2]; 
	val=findObj(args[i]);
    if (val) 
	{
	  nm=val.name; 
	  if ((val=val.value)!="") 
	  {
        if (test.indexOf('isEmail')!=-1) 
		{ 
		  p=val.indexOf('@');
          if (p<1 || p==(val.length-1)) 
		    errors+='- '+nm+' seu email não é válido.\n';
        } 
	    else if (test!='R') 
		{
		  if (test.indexOf('isNum')!=-1)  // Verifica se o campo é um número inteiro
		  {
			expReg = new RegExp([0-9]);
            if (!val.match(expReg))
		      errors+='- '+nm+' deve conter um número.\n';
		  }
		  if (test.indexOf('isMonetary')!=-1) // Verifica se o campo é um valor monetário
		  {
			formatanumero(val);
            if (!val.match(expReg))
		      errors+='- '+nm+' deve conter um número.\n';
		  }
          if (test.indexOf('inRange') != -1) 
		  { 
		    p=test.indexOf(':');
            min=test.substring(8,p); max=test.substring(p+1);
            if (val<min || max<val) 
			  errors+='- '+nm+' deve conter um número entre '+min+' e '+max+'.\n';
          }
		  if (test.indexOf('isMes')!=-1){
			 if (val < 1 || val > 12){
				 errors+=' -'+nm+' deve ser um Mês válido.\n';
			 }
		  }
		  if (test.indexOf('isSelected')!=-1){
			 if (val == '-1'){
				 errors+=' -'+nm+' deve ter uma opção válida.\n';
			 }
		  }
		  if (test.indexOf('isSQLInject')!=-1){
			  if (SQLInject(val)!=0){
				 errors+=' -'+nm+' tentativa de SQL Injection.\n';
			  }
		  }
	    } 
	  }
	  else if (test.charAt(0) == 'R')
	    errors += '- '+nm+' é obrigatório.\n'; 
	}
  } 
  if (errors) 
   alert('Ocorrem os seguintes problemas no seu formulário:\n'+errors);
  document.returnValue = (errors == '');
  
}


