﻿
// mascaras.js 


/* ---------------------------------------------
   MASCARAS USANDO EXPRESSOES REGULARES
   Masks:
        - rne                [xxxxxxx-x          ]
        - nis                [xx.xxxxx.xx-x      ]
        - onlyTextAndNumbers [chars and numbers  ]
        - noNumbers          [only characters    ]
        - onlyNumbers        [only numbers       ]
        - cep                [xxxxx-xx           ]
        - telefone           [(xx) xxxx-xxxx     ]
        - TelefoneSemEspaco  [(xx)xxxx-xxxx      ]
        - cpf                [xxx.xxx.xxx-xx     ]
        - cnpj               [xx.xxx.xxx/xxxx-xx ]
        - date               [xx/xx/xxxx         ]
        - currency           [xxx.xxx.xxx,xx     ]
        - integer            [xxx.xxx.xxx        ]
        - hours              [xx:xx              ]
        - hours_02           [xx:xx:xx           ]
        - percentage         [xx.xx              ]
   --------------------------------------------- */
function mask(o,f){
    v_obj=o
    v_fun=f
    setTimeout("execMask()",1)
}

function execMask(){
    v_obj.value=v_fun(v_obj.value)
}

/* NIS */
function nis(v)
{
    v = v.replace(/\D/g, "");
    v = v.replace(/(\d{2})(\d)/,"$1.$2");
    v = v.replace(/(\d{2})\.(\d{5})(\d)/, "$1.$2.$3");
    v = v.replace(/(\d{2})\.(\d{5})\.(\d{2})(\d{1})$/,"$1.$2.$3-$4");
    
    return v;
}

/* RNE */
function rne(v)
{
	v = v.replace(/\W/g, "");
	v=v.replace(/(\d{7})(\d{1})/,"$1-$2");
	return v;
}

/* Apenas texto e números */
function onlyTextAndNumbers(v)
{
    return v.replace(/\W/g, "")
}

/* Apenas texto e números e espaço  */
function onlyTextAndNumbersSpace1000(v) {
//   if (v.search[\s$|.$|;$|/$] > -1)
//   {
//    return v;
    //   }
    v = v.substr(0, 1000)
    setMaxLength()
   
    return v.replace(/[^\s.;\/, :a-zA-Z0-9-çÇãÂÃõÕéÉàÀÁá()]/g, "");
}

/* Apenas texto e números e espaço  */
function onlyTextAndNumbersSpace5000(v) {
    v = v.substr(0, 5000)
    setMaxLength()
    return v.replace(/[^\s.;\/, :a-zA-Z0-9-çÇãÂÃõÕéÉàÀÁá()]/g, "");
}

/* Apenas texto e números e espaço  */
function onlyTextAndNumbersSpace100(v) {

    v = v.substr(0, 100)
    setMaxLength()

    return v.replace(/[^\s.;\/, :a-zA-Z0-9-çÇãÂÃõÕéÉàÀÁá()]/g, "");
}


// Sem igual e sem aspas simples
function removeSqlInjection(v) {
    return v.replace(/\x27/g, "").replace(/\x3D/g, "");
}

function semAspasSimples2(v) {
    return v.replace(/[^\s.;\/, :a-zA-Z0-9-çÇãÂÃõÕéÉàÀÁáêÊ()]/g, "");
}
/* Apenas texto e números e espaço Daniela 13/04/10 */
function onlyTextAndNumbersSpace(v) {
    return v.replace(/[^\s.;\/, :a-zA-Z0-9-çÇãÂÃõÕéÉàÀÁá()]/g, "");
}


/* Apenas texto */
function noNumbers(v)
{
    return v.replace(/\d/g,"")
}

/* Apenas números */
function onlyNumbers(v){
    return v.replace(/\D/g,"")
}

/* CEP
 * Mas: xxxxx-xxx
 */
function cep(v){
    v=v.replace(/\D/g,"")                
    v=v.replace(/^(\d{5})(\d)/,"$1-$2") 
    return v
}

/* TELEFONE
 * Mask: (xx) xxxx-xxxx
 */
function telefone(v){
    v=v.replace(/\D/g,"")                 //Remove tudo o que não é dígito
    v=v.replace(/^(\d\d)(\d)/g,"($1) $2") //Coloca parênteses em volta dos dois primeiros dígitos
    v=v.replace(/(\d{4})(\d)/,"$1-$2")    //Coloca hífen entre o quarto e o quinto dígitos
    return v
}

/* TELEFONE_SIMPLES
 * Mask:  xxxx-xxxx
 */
function telefone_simples(v){
    v=v.replace(/\D/g,"")                 //Remove tudo o que não é dígito
    v=v.replace(/(\d{4})(\d)/,"$1-$2")    //Coloca hífen entre o quarto e o quinto dígitos
    return v
}

/* CPF
 * Mask: xxx.xxx.xxx-xx
 */
function cpf(v){
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/(\d{3})(\d)/,"$1.$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
    v=v.replace(/(\d{3})(\d)/,"$1.$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
                                             //de novo (para o segundo bloco de números)
    v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2") //Coloca um hífen entre o terceiro e o quarto dígitos
    return v
}

/* CNPJ
 * Mask: xx.xxx.xxx/xxxx-xx
 */
function cnpj(v){
    v=v.replace(/\D/g,"")                   
    v=v.replace(/^(\d{2})(\d)/,"$1.$2")     
    v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3") 
    v=v.replace(/\.(\d{3})(\d)/,".$1/$2")           
    v=v.replace(/(\d{4})(\d)/,"$1-$2")              
    return v
}

/* DATA
 * Mask: xx/xx/xxxx
 */
function date(v){
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/(\d{2})(\d)/,"$1/$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
    v=v.replace(/(\d{2})(\d)/,"$1/$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
                                             //de novo (para o segundo bloco de números)    
    return v
}

/* HOURS - OPTION 1
 * xx:xx
 */
function hours(v){
    v=v.replace(/\D/g,"") 
    v=v.replace(/(\d{2})(\d)/,"$1:$2")  
    return v
}

/* HOURS - OPTION 2
 * xx:xx:xx
 */
function hours(v){
    v=v.replace(/\D/g,"") 
    v=v.replace(/(\d{2})(\d)/,"$1:$2")
    v=v.replace(/(\d{2})(\d)/,"$1:$2")
    return v
}
    
/* MOEDA
 * Mask: xxx.xxx.xxx,xx
 */
function currency(v) {
/*
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/^([0-9]{3}\.?){3}-[0-9]{2}$/,"$1.$2");
    v=v.replace(/(\d)(\d{8})$/,"$1.$2")      //Coloca ponto antes dos 2 últimos digitos
    v=v.replace(/(\d)(\d{5})$/,"$1.$2")      //Coloca ponto antes dos 2 últimos digitos
    v=v.replace(/(\d)(\d{2})$/,"$1,$2")      //Coloca ponto antes dos 2 últimos digitos
    return v;
 */
    // Verifica se o usuário digitou números ou vírgula
    if (v.match(/^\d*(?:\,\d{0,2})?$/) != null)
        return v;
    else
        return v.replace(/\D/g, ""); //Remove tudo o que não é dígito

}


/* INTEGER
 * Mask: xxx.xxx.xxx
 */
function integer(v){
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/^([0-9]{3}\.?){3}-[0-9]{2}$/,"$1.$2");
    v=v.replace(/(\d)(\d{6})$/,"$1.$2")      //Coloca ponto antes dos 3 últimos digitos
    v=v.replace(/(\d)(\d{3})$/,"$1.$2")      //Coloca ponto antes dos 3 últimos digitos
    return v
}
/* CHARACTER LIMIT [1000]
*/
function maxlenght1000(v) {
    v = v.substr(0, 1000)
    setMaxLength()
    return v
}


/* CHARACTER LIMIT [100]
 */
function maxlenght100(v){
    v=v.substr(0,100)
    setMaxLength()
    return v
}
/* CHARACTER LIMIT [150]
*/
function maxlenght150(v) {
    v = v.substr(0, 150)
    return v
}

/* CHARACTER LIMIT [5000]
*/
function maxlenght5000(v) {
    v = v.substr(0, 5000)
    setMaxLength()
    return v
}

/* CONTROLER CHARACTER LIMIT
 * By maxlenght of textarea
 * Ex.: maxlenght='100'
 */
var W3CDOM = document.createElement && document.getElementsByTagName;
var counter = null

function setMaxLength() {
    if (!W3CDOM) return;
	var textareas = document.getElementsByTagName('textarea');
    if(counter==null){
        counter = document.createElement('div');
	    counter.className = 'counter';
	    counter.id = 'counter';
	}
	for (var i=0;i<textareas.length;i++) {
		if (textareas[i].getAttribute('maxlength')) {
			counter.innerHTML = '<span>0</span>/'+textareas[i].getAttribute('maxlength')+' Caracteres';
			textareas[i].parentNode.insertBefore(counter,textareas[i].nextSibling);
			textareas[i].relatedElement = counter.getElementsByTagName('span')[0];
			textareas[i].onkeyup = textareas[i].onchange = checkMaxLength;
			textareas[i].onkeyup();
		}
	}
}

function checkMaxLength() {
	var maxLength = this.getAttribute('maxlength');
	var currentLength = this.value.length;
	if (currentLength > maxLength)
		this.relatedElement.className = 'toomuch';
	else
		this.relatedElement.className = '';	
	this.relatedElement.firstChild.nodeValue = currentLength;
}
/* ---------------------------------------------
   VALIDATION AND MASK USING REGULAR EXPRESSIONS
   --------------------------------------------- */
   
Date.prototype.addMonths = function(n)
{
    this.setMonth(this.getMonth()+n);
    return this;
}

function DateAdd(sdate,objmonth)
{
if (sdate != '')
{
    var dateSplit = sdate.split('/');
    var inpMonth = dateSplit[1];
    var inpDay = dateSplit[0];
    if (inpMonth.length == 2)
    {
       // colocar a seguinte regra aqui, se o total da soma passados forem maior que 12 entao pegar o primeiro numero e somar com a data e apos13 considerar como 1
    
    }
    var newSdate = Math.abs(inpMonth)+'/'+Math.abs(inpDay)+'/'+Math.abs(dateSplit[2]);
    var snow = new Date(newSdate);
    snow.addMonths(Math.abs(objmonth)+1)
    var smonth = snow.getMonth();
    var sday = snow.getDate();
    var syear = snow.getFullYear();
    
    if (smonth == 00)
    {
        smonth = 1
    }
    
    if(sday < 10)
    {
      sday = '0'+sday; 
    }

    if(smonth < 10)
    {
      smonth = '0'+smonth; 
    }


    var formatedDate = sday + "/"+ smonth +"/" + syear;
    return formatedDate;
   }
   else
   {
    return '';
   }
}

/* TELEFONE (sem espaço)
* Mask: (xx)xxxx-xxxx
*/
function TelefoneSemEspaco(v) {
    v = v.replace(/\D/g, "")                 //Remove tudo o que não é dígito
    v = v.replace(/^(\d\d)(\d)/g, "($1)$2") //Coloca parênteses em volta dos dois primeiros dígitos
    v = v.replace(/(\d{4})(\d)/, "$1-$2")    //Coloca hífen entre o quarto e o quinto dígitos
    return v
}
