var intDigPart = 1;
var bubbleEvent = false;

if (window.document.captureEvents!=null) 
{
	window.document.captureEvents(Event.KEYPRESS)
	window.document.captureEvents(Event.KEYDOWN)
	window.document.captureEvents(Event.MOUSEDOWN)
}

//window.document.onkeypress = TrapKeyPress;
//window.document.onkeydown = TrapKeyDown;

// Apenas capturamos os eventos de mouse em browsers não baseado em Gecko
if (navigator.userAgent.toLowerCase().indexOf('gecko') == -1)
{
	window.document.onmousedown = TrapMouseDown;
}

function TrapMouseDown()
{
	if (window.event.button == 2)
	{
		return false;
	}
	else
	{
		return true;
	}
}

function TrataKeyDown() {
    return false;
}

function TrapKeyDown(evt)
{
    var agt=navigator.userAgent.toLowerCase();
	var e;
    
	if (agt.indexOf('gecko') != -1)
	{
		e = evt;
	}
	else
	{
		e = window.event;
	}
	
	if (e.ctrlKey && (e.keyCode == 86))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function TrapKeyPress(e)
{
    var agt=navigator.userAgent.toLowerCase();
    var evt;

    var IE5 = (agt.indexOf('msie') != -1);
    var Nav4 = document.layers;
    var IE4 = document.all;
    var Nav7 = false;
	
    // Vamos verificar se estamos no Mozilla,Nets 7, ou qualquer outro browser baseado em Gecko
	
	if (agt.indexOf('gecko') != -1)
	{
		// É, estávamos. O Mozilla é interessante:
		// ele trata eventos como o Navigator 4, porém na ordem do IE5;
		Nav4 = true;
		IE4 = false;
		IE5 = true;
		
		if (agt.indexOf('netscape/7.0') != -1)
		{
			Nav7 = true;
			IE5 = false;				
		}
	}

    var objLength = 0;
    var bolReturn = true;
    var strDocMask = "", strDocType;

    var keyPressed, keyUnicode, re, ObjectType;
	
    if (Nav4) 
    {
		keyUnicode = e.which;
		var objFocused = e.target;
		evt = e;
    }
    else if (IE4) 
    {
		keyUnicode = window.event.keyCode;
		var objFocused = window.document.activeElement;
		evt = window.event;
    }
		
	if (String(objFocused.name) == 'undefined')	// é um objeto que permite foco?
		return true;

    keyPressed = String.fromCharCode(keyUnicode);

    if (keyUnicode < 15)               			// caracteres de controle
           return true;

    var IE4 = document.all;

    if (Nav4 || IE4)
    
      ObjectType = objFocused.name.substring(0,3);

       if (ObjectType == "sel") return true;

       if ((objFocused.type == 'button') || (objFocused.type == 'reset') || (objFocused.type == 'submit'))   // Implementação 24/06/1999 ( IE5 considera o botão para keypress )
          return false;

       re = /[0-9]/;
       
		// Alegretti, Junho/2007
		// Passamos para um switch para melhoria do código
		
		switch (ObjectType)
		{
		   //------------------------------------------------------------------
		    case "doc":					// Documentos
				strDocType = objFocused.name.substring(5,6);
				strDocMask = objFocused.name.substring(6,11);

				if (Nav7)
				{
					objFocused.value = FormatAsDocField(objFocused.value.substring(0,objFocused.value.length-1), keyPressed, strDocMask, strDocType);
				}
				else
				{
					objFocused.value = FormatAsDocField(objFocused.value, keyPressed, strDocMask, strDocType);
				}
				          
				bolReturn = false;
				break;
				
		   //------------------------------------------------------------------
			case "str":					// String, aceita tudo
				bolReturn = true;
				break;
				

		   //------------------------------------------------------------------
			case "asc":					// só permite caract. da tab. ASC (128 caract.)
				keyUnicode = FormatAsASC(keyPressed, keyUnicode);
				if (Nav4) 
				{ 
					if (keyUnicode > 0) objFocused.value = objFocused.value + String.fromCharCode(keyUnicode);
					bolReturn = false;
				} 
				else
				{				
					evt.keyCode = keyUnicode; 
					bolReturn = true;
				}
				
				break;
				
		   //------------------------------------------------------------------
			case "esp":					// só permite caract. da tab. ASC (128 caract.) incluindo apóstrofe
				keyUnicode = FormatAsEspASC(keyPressed, keyUnicode);
				if (Nav4) 
				{ 
					if (keyUnicode > 0) objFocused.value = objFocused.value + String.fromCharCode(keyUnicode);
					bolReturn = false;
				} 
				else
				{				
					evt.keyCode = keyUnicode; 
					bolReturn = true;
				}
				
				break;
               
		   //------------------------------------------------------------------
			case "eml":            
				keyUnicode = FormatAsEmail(keyPressed, keyUnicode);
				if (Nav4) 
				{ 
					if (keyUnicode > 0) objFocused.value = objFocused.value + String.fromCharCode(keyUnicode);
					bolReturn = false;
				} 
				else
				{				
					evt.keyCode = keyUnicode; 
					bolReturn = true;
				}
				
				break;

		   //------------------------------------------------------------------
			case "dta":
				if (keyPressed.search(re)) return false;		// Só aceita números

				if (Nav7)
				{
				   objFocused.value = FormatAsDate(objFocused.value);
				}
				else
				{
				   objFocused.value = FormatAsDate(objFocused.value + keyPressed);
				}
				bolReturn = false;
				break;
			
		   //------------------------------------------------------------------
			case "cur":
				if (keyPressed.search(re)) return false;		// Só aceita números
			
				if (objFocused.id.substring(0,3) == "dec")
				{
					// Se o campo tiver um ID que comece com DEC, significa que queremos uma formatação específica de decimais
										
					if (Nav7)
					{
						objFocused.value = FormatAsNumberDec(objFocused.value, parseInt(objFocused.id.substring(3,5), 10));
					}
					else
					{
						objFocused.value = FormatAsNumberDec(objFocused.value + keyPressed, parseInt(objFocused.id.substring(3,5), 10));
					}										
				}
				else
				{
					if (Nav7)
					{
						objFocused.value = FormatAsNumber(objFocused.value);
					}
					else
					{
						objFocused.value = FormatAsNumber(objFocused.value + keyPressed);
					}
										
				}
				bolReturn = false;
				break;

		   //------------------------------------------------------------------
			case "per":
				if (keyPressed.search(re)) return false;		// Só aceita números

				if (Nav7)
				{
					objFocused.value = FormatAsPercentual(objFocused.value);									
				}
				else
				{
					objFocused.value = FormatAsPercentual(objFocused.value + keyPressed);
				}
				bolReturn = false;
				break;

		   //------------------------------------------------------------------
			default:			// Por incrível que pareça, o procedimento padrão é o "num" - aceita apenas numéricos
				if (keyPressed.search(re)) return false;		// Só aceita números
				bolReturn = true;
				break;
		}
		
	
		// Aqui começa a rotina de pulo automático
   		var ObjectMaxLen;
		if (IE4)
		{
		   ObjectMaxLen = parseInt(objFocused.maxLength, 10);
		}
		else
		{
		   ObjectMaxLen = parseInt(objFocused.name.substring(3,5), 10);
		}
    
		if (!isNaN(parseInt(ObjectMaxLen, 10)))
		{
		    if (IE5)
		       objLength = parseInt(objFocused.value.length, 10);
		    else
		       if (IE4)
		       {
		          if (ObjectType == "txt")
		             objLength = parseInt(objFocused.value.length+1, 10);
		          else
		             objLength = parseInt(objFocused.value.length, 10);
		       }
		       else
		       {
		          if (Nav7)
		          {
						   objLength = parseInt(objFocused.value.length, 10);
		          }
		          else
		          {
						//Nav4
						if (ObjectType == "asc" || ObjectType == "esp" )
						   objLength = parseInt(objFocused.value.length, 10);
						else
						   objLength = parseInt(objFocused.value.length+1, 10);					
		          }   
		       }

		    if (objLength > parseInt(ObjectMaxLen, 10))
		       objFocused.value =
		       objFocused.value.substring
		       (0, objFocused.value.length-1);

			// Se o retorno estiver se dando por evento, na verdade ainda não consideramos 1 byte...
			if (bolReturn) objLength++;

		    if (objLength >= parseInt(ObjectMaxLen, 10))
		    {
			   if (bolReturn) 
			   {
				   if (objFocused.value.length < parseInt(ObjectMaxLen, 10))
				   {
				      objFocused.value = objFocused.value + String.fromCharCode(keyUnicode);
				   }
				   bolReturn = false;		// Como já injetamos o valor, vamos cancelar o evento
			   } 
		    
		       var indObject = 0;
		       var ObjectType = "";

		       for (indObject = 0; indObject <= objFocused.form.elements.length-1; indObject++)
		       {
		             if (objFocused.form.elements[indObject].name == objFocused.name ) break;
		       }

		       do
		       {   indObject++;
		           ObjectType = String(objFocused.form.elements[indObject].type);
		       }
				  while ((objFocused.form.elements[indObject].disabled) ||
						 ((objFocused.form.elements[indObject].type != "text") &&
		              (objFocused.form.elements[indObject].type != "password") &&
		              (objFocused.form.elements[indObject].type != "select-one") &&
		              (objFocused.form.elements[indObject].type != "button") &&
		              (objFocused.form.elements[indObject].type != "submit") &&
		              (objFocused.form.elements[indObject].type != "radio") &&
		              (objFocused.form.elements[indObject].type != "checkbox")))

					if ((!objFocused.form.elements[indObject].disabled) ||
					  (objFocused.form.elements[indObject].type == "text") ||
		           (objFocused.form.elements[indObject].type == "password") ||
		           (objFocused.form.elements[indObject].type == "select-one") ||
		           (objFocused.form.elements[indObject].type == "button") ||
		           (objFocused.form.elements[indObject].type == "radio") ||
		           (objFocused.form.elements[indObject].type == "checkbox") ||
		           (objFocused.form.elements[indObject].type == "submit"))
		       {
		              objFocused.form.elements[indObject].focus();
		       }
		    }
		}
       
   		return (bolReturn);

     

}

function FormatAsDate(DtaField)
{
   var Separator = "/";
   var LeftSep = 2;
   var RightSep = 5;

   var RetField = DtaField;
   var SepPos = -1;
   var i = 0;
   var tmpPos = 0;

   while (i != -1)
   {
      i = DtaField.indexOf(Separator, tmpPos); //-- i será a posição do separador.
      if (i > 0) DtaField = DtaField.substring(0,i) + DtaField.substring(i + 1, DtaField.length);
   }

   if (DtaField.length >= 2)
   {
      DtaField = DtaField.substring(0,LeftSep) + Separator + DtaField.substring(LeftSep, DtaField.length);
   }

   if (DtaField.length >= 5)
   {
      DtaField = DtaField.substring(0,RightSep) + Separator + DtaField.substring(RightSep, DtaField.length);
   }

   RetField = DtaField;

   return RetField;
}

function FormatAsNumber(OriginalNumber)
{        
		
        var Nav4 = document.layers;
        var IE4 = document.all;

        var PointPosition = 0;
        var CommaPosition = 0;

        var LenString = 0;

        var FormatedNumber;

        while (PointPosition != -1)
        {
                PointPosition = OriginalNumber.indexOf(".");
                OriginalNumber = OriginalNumber.substring(0,PointPosition) + OriginalNumber.substring(PointPosition + 1, OriginalNumber.length);
                
        }

        CommaPosition = OriginalNumber.indexOf(",");

        if (CommaPosition != -1)
                OriginalNumber = OriginalNumber.substring(0,CommaPosition) + OriginalNumber.substring(CommaPosition + 1, OriginalNumber.length);

        LenString = OriginalNumber.length;
        
        //Vamos retirar os zeros a esquerda
        var ZeroPosition=0;
        for (ZeroPosition=0 ; ZeroPosition < LenString ; ZeroPosition++)
        {
			if (OriginalNumber.substring(ZeroPosition,1) == "0")
			{
				OriginalNumber = OriginalNumber.substring(ZeroPosition+1,LenString);
			}
			else
			{
				break;
			}
        }

        LenString = OriginalNumber.length;

        if (LenString > 2)
        {
           FormatedNumber = OriginalNumber.substring(0,LenString - 2) + "," + OriginalNumber.substring(LenString - 2,LenString);
        } 
        else
        {
           FormatedNumber = "0," + MultiChar("0", 2-LenString) + OriginalNumber;
        }

        return(FormatedNumber);
}

function FormatAsNumberDec(OriginalNumber, Dec)
{
        var Nav4 = document.layers;
        var IE4 = document.all;

        var PointPosition = 0;
        var CommaPosition = 0;

        var LenString = 0;

        var FormatedNumber;

        while (PointPosition != -1)
        {
                PointPosition = OriginalNumber.indexOf(".");
                OriginalNumber = OriginalNumber.substring(0,PointPosition) + OriginalNumber.substring(PointPosition + 1, OriginalNumber.length);
                
        }

        CommaPosition = OriginalNumber.indexOf(",");

        if (CommaPosition != -1)
                OriginalNumber = OriginalNumber.substring(0,CommaPosition) + OriginalNumber.substring(CommaPosition + 1, OriginalNumber.length);

        LenString = OriginalNumber.length;
        
        //Vamos retirar os zeros a esquerda
        var ZeroPosition=0;
        for (ZeroPosition=0 ; ZeroPosition < LenString ; ZeroPosition++)
        {
			if (OriginalNumber.substring(ZeroPosition,1) == "0")
			{
				OriginalNumber = OriginalNumber.substring(ZeroPosition+1,LenString);
			}
			else
			{
				break;
			}
        }

        LenString = OriginalNumber.length;        

        if (LenString > Dec)
        {
           FormatedNumber = OriginalNumber.substring(0,LenString - Dec) + "," + OriginalNumber.substring(LenString - Dec,LenString);
        }
        else
        {
           FormatedNumber = "0," + MultiChar("0", Dec-LenString) + OriginalNumber;
        }

        return(FormatedNumber);
}

function FormatAsPercentual(OriginalNumber)
{
        var Nav4 = document.layers;
        var IE4 = document.all;

        var PointPosition = 0;
        var CommaPosition = 0;

        var LenString = 0;

        var FormatedNumber;

        while (PointPosition != -1)
        {
                PointPosition = OriginalNumber.indexOf(".");
                OriginalNumber = OriginalNumber.substring(0,PointPosition) + OriginalNumber.substring(PointPosition + 1, OriginalNumber.length);
                
        }

        CommaPosition = OriginalNumber.indexOf(",");

        if (CommaPosition != -1)
                OriginalNumber = OriginalNumber.substring(0,CommaPosition) + OriginalNumber.substring(CommaPosition + 1, OriginalNumber.length);

        LenString = OriginalNumber.length;
        
        //Vamos retirar os zeros a esquerda
        var ZeroPosition=0;
        for (ZeroPosition=0 ; ZeroPosition < LenString ; ZeroPosition++)
        {
			if (OriginalNumber.substring(ZeroPosition,1) == "0")
			{
				OriginalNumber = OriginalNumber.substring(ZeroPosition+1,LenString);
			}
			else
			{
				break;
			}
        }

        LenString = OriginalNumber.length;

        if (LenString > 4)
        {
           FormatedNumber = OriginalNumber.substring(0,LenString - 4) + "," + OriginalNumber.substring(LenString - 4,LenString);
        } 
        else
        {
           FormatedNumber = "0," + MultiChar("0", 4-LenString) + OriginalNumber;
        }

        return(FormatedNumber);
}


function FormatAsEspASC(keyPressed, keyUnicode)
{
   if (keyUnicode > 128)
   {
      if (((keyUnicode >= 224) && (keyUnicode <= 228)) ||
          ((keyUnicode >= 192) && (keyUnicode <= 196))) {return ("A".charCodeAt(0));}
      if (((keyUnicode >= 232) && (keyUnicode <= 235)) ||
          ((keyUnicode >= 200) && (keyUnicode <= 203))) {return ("E".charCodeAt(0));}
      if (((keyUnicode >= 236) && (keyUnicode <= 239)) ||
          ((keyUnicode >= 204) && (keyUnicode <= 207))) {return ("I".charCodeAt(0));}
      if (((keyUnicode >= 242) && (keyUnicode <= 246)) ||
          ((keyUnicode >= 210) && (keyUnicode <= 214))) {return ("O".charCodeAt(0));}
      if (((keyUnicode >= 249) && (keyUnicode <= 252)) ||
          ((keyUnicode >= 217) && (keyUnicode <= 220))) {return ("U".charCodeAt(0));}
      if  ((keyUnicode == 231) || (keyUnicode == 199))  {return ("C".charCodeAt(0));}
   }

   // aceitamos apostrofe
   else if (((keyUnicode >= 33) && (keyUnicode <= 37)) || ((keyUnicode >= 40) && (keyUnicode <= 44)) || (keyUnicode == 47)) {return 0;}
   else if ((keyUnicode >= 58) && (keyUnicode <= 64))  {return 0;}  
   else if ((keyUnicode >= 91) && (keyUnicode <= 96))  {return 0;}     
   else if ((keyUnicode >= 123) && (keyUnicode <= 126))  {return 0;}   
   else
      return(keyPressed.toUpperCase().charCodeAt(0));
}


function FormatAsASC(keyPressed, keyUnicode)
{  
   if (keyUnicode > 128)
   {
      if (((keyUnicode >= 224) && (keyUnicode <= 228)) ||
          ((keyUnicode >= 192) && (keyUnicode <= 196))) {return ("A".charCodeAt(0));}
      if (((keyUnicode >= 232) && (keyUnicode <= 235)) ||
          ((keyUnicode >= 200) && (keyUnicode <= 203))) {return ("E".charCodeAt(0));}
      if (((keyUnicode >= 236) && (keyUnicode <= 239)) ||
          ((keyUnicode >= 204) && (keyUnicode <= 207))) {return ("I".charCodeAt(0));}
      if (((keyUnicode >= 242) && (keyUnicode <= 246)) ||
          ((keyUnicode >= 210) && (keyUnicode <= 214))) {return ("O".charCodeAt(0));}
      if (((keyUnicode >= 249) && (keyUnicode <= 252)) ||
          ((keyUnicode >= 217) && (keyUnicode <= 220))) {return ("U".charCodeAt(0));}
      if  ((keyUnicode == 231) || (keyUnicode == 199))  {return ("C".charCodeAt(0));}
   }
   
   // não barrar &@-
   // Vamos usar essa função apenas para aceitar letras e números,
   // portanto, é necessário Barrar &-. Mais detalhes no site administrativo.
   
   else if ((keyUnicode >= 33) && (keyUnicode <= 47))  {return 0;}
   else if ((keyUnicode >= 58) && (keyUnicode <= 64))  {return 0;}  
   else if ((keyUnicode >= 91) && (keyUnicode <= 96))  {return 0;}     
   else if ((keyUnicode >= 123) && (keyUnicode <= 126))  {return 0;}   
   else
      return(keyPressed.toUpperCase().charCodeAt(0));
}

function FormatAsEmail(keyPressed, keyUnicode)
{
   if (keyUnicode > 128)
   {
      if (((keyUnicode >= 224) && (keyUnicode <= 228)) ||
          ((keyUnicode >= 192) && (keyUnicode <= 196))) {return ("a".charCodeAt(0));}
      if (((keyUnicode >= 232) && (keyUnicode <= 235)) ||
          ((keyUnicode >= 200) && (keyUnicode <= 203))) {return ("e".charCodeAt(0));}
      if (((keyUnicode >= 236) && (keyUnicode <= 239)) ||
          ((keyUnicode >= 204) && (keyUnicode <= 207))) {return ("i".charCodeAt(0));}
      if (((keyUnicode >= 242) && (keyUnicode <= 246)) ||
          ((keyUnicode >= 210) && (keyUnicode <= 214))) {return ("o".charCodeAt(0));}
      if (((keyUnicode >= 249) && (keyUnicode <= 252)) ||
          ((keyUnicode >= 217) && (keyUnicode <= 220))) {return ("u".charCodeAt(0));}
      if  ((keyUnicode == 231) || (keyUnicode == 199))  {return ("c".charCodeAt(0));}
   }
   
   // não barrar "@", ".", "-", "'"
   else if (((keyUnicode >= 32) && (keyUnicode <= 38)) || ((keyUnicode >= 40) && (keyUnicode <= 44)) || (keyUnicode == 47)) return 0;
   else if ((keyUnicode >= 58) && (keyUnicode <= 63))  {return 0;}
   else if ((keyUnicode >= 91) && (keyUnicode <= 94))  {return 0;}
   else if (keyUnicode == 96) {return 0;}
   else if ((keyUnicode >= 123) && (keyUnicode <= 126))  {return 0;}
   else
      return(keyPressed.toLowerCase().charCodeAt(0));
}


function MultiChar(strCharPass,intVezes)
{
   var i = 1;
   var strChars = "";
   for (i = 1; i <= intVezes; i++)
      strChars = strChars + strCharPass;
   return strChars;
}

function FormatAsDocField(DocField, Key, DocMask, DocType)
{
   var LeftPos = parseInt(DocMask.substring(0,2), 10);
   var Separator = DocMask.substring(2,3);
   var RightPos = parseInt(DocMask.substring(3,5), 10);

   var RetField = "";
   var SepPos = 0;

   var re = /[0-9]/;

   if (RightPos > 0)
   {
      if (Separator == "b") Separator = "/";
      if (Separator == "p") Separator = ".";

      SepPos = DocField.indexOf(Separator); //-- Indica a pos. que o sep. está.

      if (SepPos != -1)           //-- Tem Separador
      {
         if (SepPos == LeftPos)   //-- Tá no lugar certo?
            RetField = DocField.substring(0, intDigPart+1) + Key; //-- Então acresc. o caract. pressionado.
         else                     //-- Sep. não tá no lugar certo:
         {
            RetField = DocField.substring(0, SepPos) + DocField.substring(SepPos+1, DocField.length) + Key; //---????? Tirá-o
            if (RetField.length >= LeftPos) //-- Recoloca-o
               RetField = RetField.substring(0, LeftPos) + Separator + RetField.substring(LeftPos, RetField.length);
         }
      }
      else                           //-- Não tem separador...
      {   if (intDigPart == LeftPos) //-- Se ainda não tem separador, então põe:
            RetField = DocField.substring(0, intDigPart) + Key + Separator;
         else                        //-- Senão só passa direto e põe a tecla.
         {
            RetField = DocField + Key;
         }
      }
   }
   else
      RetField = DocField + Key;

   intDigPart = RetField.length + 1;

   if ((Key.search(re)) &&
       (DocType == "n"))
      return DocField;

   return RetField;
}

function FormatCurrency(OriginalNumber)
{
    var CommaPosition  = 0;
    var DecimalPart = ',';
    var IntegerPart = 0;

        CommaPosition = OriginalNumber.indexOf(",");

        if (CommaPosition == -1)
        {
           DecimalPart = DecimalPart + '00';
           IntegerPart = OriginalNumber;
        }
        else
    {
           DecimalPart = DecimalPart + OriginalNumber.substring(CommaPosition + 1, OriginalNumber.length);
           IntegerPart = OriginalNumber.substring(0,CommaPosition);
    }

        return IntegerPart + DecimalPart;
}

//function ContaCaracteres(tamanho,obj,form)
//{
//	if (parseInt(eval("document." + form + "." + obj + ".value.length")) > tamanho )
//	{
//		alert("O máximo de letras aceito é " + tamanho + ".");
//		eval("document." + form + "." + obj + ".value = document." + form + "." + obj + ".value.substr(0,tamanho);");		
//	}
//}

function Trim( cadeia )
	{
	// Garante que os dados tratados estejam no formato de String
	cadeia = String( cadeia );
	
	while(cadeia.charAt(0) == " " )
		{
		cadeia = cadeia.substr(1); // Toda a string menos o caracter 0, que é branco.
		}
	
	while( cadeia.lastIndexOf(" ") == cadeia.length - 1 )
		{
		cadeia = cadeia.substring(0, cadeia.lastIndexOf(" ")); // do primeiro caracter até o penultimo, ver definição da .substring()
		}
	
	return cadeia;
	}
	
function FormataCampoValor(Valor)
{
	var AxValor = '';
	for (var ind = 0; ind < Valor.length; ind++)
	{
		if (isNaN(parseInt(Valor.substring(ind,parseInt(ind + 1))))){
		}else{
			AxValor = AxValor +  Valor.substring(ind,parseInt(ind + 1));
		}
	}
	AxValor = Number(AxValor);
	AxValor = FormatAsNumber(AxValor.toString());
	return AxValor;
}
