var sCaracteresValidos = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789,. @_-";
var sCaracteresNaoValidos = "'<";

var nav=navigator.appName;
var ns=(nav.indexOf("Netscape")!=-1);

if (ns) {
	if(document.layers){
		document.captureEvents(Event.onkeypress);
		document.onchange = validaEntrada;
	}
	if(document.getElementById){
		document.onkeypress = validaEntrada;
	}
}
else {
	document.onkeypress = validaEntrada;
}

function validaEntrada(e, keyStroke)
{
	/*var eventChooser = (ns) ? keyStroke.which : event.keyCode;
	var caractereDigitado = String.fromCharCode(eventChooser);
	
	if (sCaracteresValidos.indexOf(caractereDigitado) != -1 || 
		eventChooser == 194 ||
		eventChooser == 190 ||
		eventChooser == 189 ||
		eventChooser == 96 ||
		eventChooser == 09 ||
	    eventChooser == 08 || 
	    eventChooser == 13 || 
	    eventChooser == 16 || 
	    eventChooser == 33 || 
	    eventChooser == 34 || 
	    eventChooser == 37 || 
	    eventChooser == 38 || 
	    eventChooser == 39 || 
	    eventChooser == 40 ||
	    eventChooser == 36 ||
	    eventChooser == 35	    	    
	    )
		return true;
		
	return false;*/
	var eventChooser = (ns) ? keyStroke.which : event.keyCode;
	var caractereDigitado = String.fromCharCode(eventChooser);
	if (sCaracteresNaoValidos.indexOf(caractereDigitado) != -1) return false;
	
	return true;
}

function validatePasteAndCopy()
{
var pressedKey = String.fromCharCode(event.keyCode).toLowerCase();

	if (event.ctrlKey && pressedKey == "v") {
		var x = getClipboard();
		if (x == null){
			event.returnValue = false;
		}
		else{
			event.returnValue = validaString(x);
		}		
	}
}

function validaString(str){
	var str1 = "";
		for(i = 0; i <= str.toString().length -1; i++){
			var caractere = str.charAt(i);
			if (sCaracteresNaoValidos.indexOf(caractere) == -1){
				str1 = str1 + caractere;
			}
		}
		copy_clip(str1);
		return true;
}	

function getClipboard() {
  if (window.clipboardData) {
    // the IE-manier
    return(window.clipboardData.getData('Text'));
    // waarschijnlijk niet de beste manier om Moz/NS te detecteren;
    // het is mij echter onbekend vanaf welke versie dit precies werkt:
  }
  else if (window.netscape) { 
    // dit is belangrijk maar staat nergens duidelijk vermeld:
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

    // maak een interface naar het clipboard
    var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
    if (!clip) return;

    // maak een transferable
    var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
    if (!trans) return;

    // specificeer wat voor soort data we op willen halen; text in dit geval
    trans.addDataFlavor('text/unicode');

    // haal de data op
    clip.getData(trans,clip.kGlobalClipboard);

    // om de data uit de transferable te halen hebben we 2 nieuwe objecten nodig om het in op te slaan
    var str = new Object();
    var len = new Object();

    // haal de data en datalengte op in de nieuwe objecten; hier vang ik errors op als type-conversion niet lukt
    try { trans.getTransferData('text/unicode',str,len); }
    catch(error) { return; }

    // Als het data object iets bevat converteer het naar een string object

    if (str) {
      // deze werkte bij mij alleen in NS7
      if (Components.interfaces.nsISupportsWString) str=str.value.QueryInterface(Components.interfaces.nsISupportsWString);
      // en deze alleen in Mozilla 1.2
      else if (Components.interfaces.nsISupportsString) str=str.value.QueryInterface(Components.interfaces.nsISupportsString);
      else str = null;
    }

    // haal de text op uit het data segment; de lengte is de helft van de lengte zoals opgehaald uit de transferable
    if (str) return(str.data.substring(0,len.value / 2));

  }
 return;
}


function copy_clip(meintext)
{
	if (window.clipboardData) 
    {
	   // the IE-manier
	   window.clipboardData.setData("Text", meintext);
	   // waarschijnlijk niet de beste manier om Moz/NS te detecteren;
	   // het is mij echter onbekend vanaf welke versie dit precies werkt:
	}
	else if (window.netscape) 
	{ 
	   // dit is belangrijk maar staat nergens duidelijk vermeld:
	   netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
	   
	   // maak een interface naar het clipboard
	   var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
	   if (!clip) return;
	   
	   // maak een transferable
	   var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
	   if (!trans) return;
	   
	   // specificeer wat voor soort data we op willen halen; text in dit geval
	   trans.addDataFlavor('text/unicode');
	   
	   // om de data uit de transferable te halen hebben we 2 nieuwe objecten nodig   om het in op te slaan
	   var str = new Object();
	   var len = new Object();
	   
	   var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
	   
	   var copytext=meintext;
	   
	   str.data=copytext;
	   
	   trans.setTransferData("text/unicode",str,copytext.length*2);
	   
	   var clipid=Components.interfaces.nsIClipboard;
	   
	   if (!clip) return false;
	   
	   clip.setData(trans,null,clipid.kGlobalClipboard);
   }
}

//Função utilizada para controlar o MaxLength de um campo Texto
function TrataMaxLength(componente, evento, tamanhoMaximo)
{
    evento.returnValue = (componente.value.length < tamanhoMaximo);
}

//Método utilizado para controlar a quantidade de caracteres quando o texto for informado
//via CTRL+V 
function TrataTexto(componente,tamanhoMaximo)
{
    if (componente.value.length > tamanhoMaximo)
    {
        componente.value = componente.value.substring(0,tamanhoMaximo);
    }
}