﻿///Retorna o key cod da tecla pressionada
function getKeyCode(e)
{
  if (typeof(e.charCode) == 'undefined') //para ie
    return e.keyCode;
  else //para firefox
    return e.charCode;

}

function getShiftKey(e) 
{
  return e.shiftKey;
}

function getAltKey(e)
{
  return e.altKey;
}


function TeclaDeControle(event, tecla) 
{
  var alt = getAltKey(event);
  //PERMITE TECLAS DE CONTROLE
  return (alt || tecla == 0 || tecla == 8 || tecla == 9 || tecla == 13 || tecla == 16 || tecla == 17 || tecla == 18 || tecla == 27 || tecla == 35 || tecla == 36 || tecla == 37 || tecla == 38 || tecla == 39 || tecla == 40 || tecla == 45);
}
      
function textPos(evt, textEl){
    var obj = evt.srcElement == null ? evt.target : evt.srcElement;

	var nPosition = parseInt( obj.getAttribute("position"), 10);
	if( nPosition >= 0 )
		return nPosition;
    
    // IE
    if( document.selection != null )
    {
        var cur = document.selection.createRange();
        var pos = 0;
        if (obj && cur) 
        {
            var tr = obj.createTextRange();
            if (tr) 
            {
                while (cur.compareEndPoints("StartToStart", tr) > 0) 
                {
                    tr.moveStart("character", 1);
                    pos++;
                }
                return pos ;
            }
        }
        return -1;
    }
    else if( obj.selectionStart != null )// FF
    {
        return obj.selectionStart;
    }
    else
    {
        return -1;
    }
}

function validChar(event, pControle, pInputMask, pPos){
	var shift = getShiftKey(event);
	var tecla = getKeyCode(event);
	
	if (pControle.value.length >= pInputMask.length) {
		return false;
	}
	
	var charMask = pInputMask.charAt(pPos);
	
	if (charMask == '#') {
		if(shift)//
			return false;
		if (tecla < 48 || tecla > 57)
		  return false; 
		return true;
	}
	else if (charMask == 'X'){
		if(! (tecla >= 65 && tecla <= 90)) {
			return false;
		}
		else {
			return true;
		}
	}
	else if (charMask == '@'){
		return true;
	}
	else {
		lastchar = pControle.value.substring(pControle.value.length-1,pControle.value.length);
		if (lastchar==charMask) {
			//setKeyCode(event, 0);
			//event.returnValue = false;
			return false;
		}
        
		pControle.value = pControle.value + charMask;
		
		if (! validChar(event, pControle, pInputMask, pPos + 1)) 
		{
			//setKeyCode(event, 0);
			//event.returnValue = false; 
			return false;
		}
	}
	return true;
}

function FormataMascara(mascara, text)
{
  var result = '';
  var len = mascara.length
  for (var i = 0; i < len; i++)
  {
    var chr = mascara.charAt(i);
    if (chr == "#" || chr == "@" || chr == "X")
    {
      if (text.length > i)
        result += text.charAt(i);
      else 
        break;
    }
    else if (text.length > i)
      result += chr;
    else 
      break;
  }
  return result;
}

///Seta a mascara para o textbox
function OnSetMask(event, pControle, pInputMask) {
	var shift = getShiftKey(event);
	var tecla = getKeyCode(event);

	if(!TeclaDeControle(event, tecla)) 
	{
		curPos = textPos(event, pControle);
		
	    if (!validChar(event, pControle, pInputMask, curPos)) 
	    {
            if(event.preventDefault )
              event.preventDefault();
            event.returnValue = false;
            return false;
	    }
	}
	
	pControle.value = FormataMascara(pInputMask, pControle.value);
    return true;
}

function ValidNumber(event)
{
	var tecla = getKeyCode(event);
    if (tecla < 48 || tecla > 57)
	  return false; 
	else
	  return true;
}

function OnNumberValidating(event, pControle, pPrecision)
{
	var shift = getShiftKey(event);
	var tecla = getKeyCode(event);
	if(!TeclaDeControle(event, tecla)) 
	  if (!ValidNumber(event))
	  {
        var ok = false;
        
        if (pPrecision > 0)
        {
            ///verifica se é um ponto flutuante
            var possivelDecimal = String.fromCharCode(tecla);
            var possivelNumero = pControle.value + possivelDecimal + '0';
            if (parseFloat(possivelNumero) == possivelNumero)
              ok = true;
        }
          
        if (!ok)
        {
            if(event.preventDefault )
              event.preventDefault();
            event.returnValue = false;
            return false;
        }
	  }
	return true;
}

function MultiLineMaxLength(event, pControle, pMaxLen) 
{
	var tecla = getKeyCode(event);
	if(! TeclaDeControle(tecla)) {
		if(tecla != 46) {
			if (pControle.value.length >= pMaxLen) 
			{
                if(event.preventDefault )
                  event.preventDefault();
                event.returnValue = false;
                return false;
			}
		}
	}
	return true;
}

