// RICARDO MOMM / ABC Interactive

/******************************************
/* Validação dos campos
/*****************************************/

// Validação de Formulários
MM_validateForm = function() { 
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=2; i<(args.length-2); i+=3) { 
		erro = "";
		val=MM_findObj(args[i]);
		if (args[0]!='' && val)		
		  val.className = args[0];		
		test=args[i+2]; 
    if (val) { 
			nm=args[i+1];
			if (test.indexOf('isCheckbox')!=-1) {
				if (!testaCheckbox(MM_findObj(args[i])))
					erro ='- '+nm+': você deve selecionar pelo menos uma opção.\n';
			}else{
				if ((val=val.value)!="") {
	      	if (test.indexOf('isEmail')!=-1)
						if (!testaEmail(val))
	        		erro ='- '+nm+' deve conter um endereço de e-mail.\n';
					if (test.indexOf('isCPF')!=-1)
						if (!testaCPF(val))
	        		erro ='- '+nm+' deve conter um CPF válido.\n';						
					if (test.indexOf('isCNPJ')!=-1)
						if (!testaCNPJ(val))
							erro ='- '+nm+' deve conter um CNPJ válido.\n';
					if (test.indexOf('isCEP')!=-1)
					  if (!testaCEP(val))
					    erro ='- '+nm+' deve conter um CEP válido: xxxxx-xxx.\n';
					if (test.indexOf('isFone')!=-1)
					  if (!testaFone(val))
					    erro ='- '+nm+' deve conter um Telefone válido: (xx) xxxx-xxxx.\n';					    
					if (test.indexOf('isData')!=-1)
						if (!testaData(val))
							erro ='- '+nm+' deve conter uma data válida: dd/mm/aaaa.\n';
					if (test.indexOf('isHora')!=-1)
						if (!testaHora(val))
							erro ='- '+nm+' deve conter uma hora válida.\n';
					if (test.indexOf('isLink')!=-1)
						if (!testaLink(val))
							erro ='- '+nm+' deve conter um link válido (com HTTP://).\n';
					if (test.indexOf('isNum')!=-1)
						if (isNaN(val))
							erro ='- '+nm+' deve conter um número.\n';
					if (test.indexOf('isSeguro')!=-1)
						if (!testaSeguro(val))
							erro ='- '+nm+' deve conter somente letras sem acentos e números.\n';
					if (test.indexOf('isLenMin')!=-1) {
  					num=test.substring(test.indexOf('isLenMin')+9,test.indexOf(']',test.indexOf('isLenMin')+9));
						if (val.length<num)
							erro ='- '+nm+' deve conter no minimo '+num+' caracteres.\n';
					}
				} else 
					if (test.charAt(0) == 'R') erro = '- '+nm+' é requerido.\n'; 
			}
  	}
  	val=MM_findObj(args[i]);
		if (erro!=""){
			errors+=erro;
			if (args[1]!='')
				val.className = args[1];
		}else if (args[0]!='')			
		  val.className = args[0];
	} 
	if (errors) alert('Erro:\n'+errors);
  document.MM_returnValue = (errors == '');
};

MM_findObj = function(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=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
};

// Testa um grupo de CheckBox ou RadioButton
testaCheckbox = function(objChk){
	for (j=0; objChk[j]; j++)
		if (objChk[j].checked)
			return true;
	return false;
};

// Testa um e-mail
testaEmail = function(strEmail){
	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // e-mail inválido
  var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // e-mail válido
  return (!reg1.test(strEmail) && reg2.test(strEmail));
};

// Testa um CPF
testaCPF = function(strCPF){
    var c = strCPF;
    if((c = c.replace(/[^\d]/g,"").split("")).length != 11) return false;
    if(new RegExp("^" + c[0] + "{11}$").test(c.join(""))) return false;
    for(var s = 10, n = 0, i = 0; s >= 2; n += c[i++] * s--);
    if(c[9] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
    for(var s = 11, n = 0, i = 0; s >= 2; n += c[i++] * s--);
    if(c[10] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
    return true;
};

// Testa um CNPJ
testaCNPJ = function(strCNPJ){
    var b = [6,5,4,3,2,9,8,7,6,5,4,3,2], c = strCNPJ;
    if((c = c.replace(/[^\d]/g,"").split("")).length != 14) return false;
    for(var i = 0, n = 0; i < 12; n += c[i] * b[++i]);
    if(c[12] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
    for(var i = 0, n = 0; i <= 12; n += c[i] * b[i++]);
    if(c[13] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
    return true;
};

// Testa uma Data
testaData = function(strData){
    var reg1 = /[0-9]{2}\/[0-9]{2}\/[0-9]{4}/;
    if (!reg1.test(strData))
      return false;
    var data = strData.split("/");
    y = data[2], m = data[1], d = data[0];
    if(typeof y == "string" && m instanceof RegExp && d){
      if(!m.test(y)) return 1;
        y = RegExp["$" + d.y], m = RegExp["$" + d.m], d = RegExp["$" + d.d];
      }
      d = Math.abs(d) || 0, m = Math.abs(m) || 0, y = Math.abs(y) || 0;
    return arguments.length != 3 ? 1 : d < 1 || d > 31 ? 2 : m < 1 || m > 12 ? 3 : /4|6|9|11/.test(m) && d == 31 ? 4
    : m == 2 && (d > ((y = !(y % 4) && (y % 1e2) || !(y % 4e2)) ? 29 : 28)) ? 5 + !!y : 0;
};

// Testa um cep
testaCEP = function(strCep){
    var reg1 = /[0-9]{5}\-[0-9]{3}/;
    return (reg1.test(strCep))
};

// Testa um Telefone
testaFone = function(strFone){
    var reg1 = /\([0-9]{2}\)\ [0-9]{4}\-[0-9]{4}/;
    return (reg1.test(strFone))
};

// Testa uma hora
testaHora = function(horario) {
	if (horario.indexOf(".") == -1)
		if (horario.indexOf(":") != -1){
			div    = horario.indexOf(":");
			tam    = horario.length;
			hora   = horario.substring(0,div);
			minuto = horario.substring(div+1,tam);
			msg    = "";
			if ((!isNaN(hora))&&(!isNaN(minuto))){
				if ((minuto>=60)||(minuto<0))
					return false;
				if ((hora>24)||(hora<0))
					return false;
				return true;
			}
		}
	return false;
};

// Testa um link
testaLink = function(strLink) {
   var reg1 = /http?:\/\/([-\w\.]+)+(:\d+)?(\/([\w\/_\.]*(\?\S+)?)?)?/;
   return reg1.test(strLink);
};

// Testa se um valor é seguro 
testaSeguro = function(strSeguro){
	var reg1 = /\W/;
	return (strSeguro.search(reg1)==-1);
};

/******************************************
/* Mascara para os campos
/*****************************************/

// Adiciona um evento a uma função/campo
addEvent = function(o, e, f, s){
    var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
    r[r.length] = [f, s || o], o[e] = function(e){
        try{
            (e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
            e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
            e.target || (e.target = e.srcElement || null);
            e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
        }catch(f){}
        for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
        return e = null, !!d;
    }
};

// Remove um evento de uma função/campo
removeEvent = function(o, e, f, s){
    for(var i = (e = o["_on" + e] || []).length; i;)
        if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
            return delete e[i];
    return false;
};

// Função que cria a maskara
MaskInput = function(f, m){ //v1.0
    function mask(e){
        var patterns = {"1": "/[A-Z]/i", "2": "/[0-9]/", "4": "/[À-ÿ]/i", "8": "/./" };
        var rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
        function accept(c, rule){
            for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
                if(r & i && eval(patterns[i]).test(c))
                    break;
                return i <= r || c == rule;
        }
        var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
        (!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
            r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
            : (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
            r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
    }
    for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1})
        addEvent(f, i, mask);
};


// Formata uma data
var DATA = "99/99/9999";
// Formata um Cpf
var CPF  = "999.999.999-99";
// Formata um CNPJ
var CNPJ = "99.999.999/9999-99";
// Formata uma HORA
var HORA = "99:99";
// Formata um TELEFONE
var FONE = "(99) 9999-9999";
// Formata um CEP
var CEP  = "99999-999";
// Formata Seguro
var SEGURO = "a^";

// Formata um VALOR
FormataValor = function(o, n, dig, dec) {
  o.c = !isNaN(n) ? Math.abs(n) : 2;
  o.dec = dec || ",", o.dig = dig || ".";
  addEvent(o, "keypress", function(e){
      if(e.key > 47 && e.key < 58){
          var o, s = ((o = this).value.replace(/^0+/g, "") + String.fromCharCode(e.key)).replace(/\D/g, ""), l, n;
          (l = s.length) <= (n = o.c) && (s = new Array(n - l + 2).join("0") + s);
          for(var i = (l = (s = s.split("")).length) - n; (i -= 3) > 0; s[i - 1] += o.dig);
          n && n < l && (s[l - ++n] += o.dec);
          o.value = s.join("");
      }
      e.key > 30 && e.preventDefault();
  });
};

/******************************************
/* Funções para Listagem de Valores
/*****************************************/
function ordenar(c){
	p = location.href;
	t = p.substr(0,p.lastIndexOf('?'));
	location.href=t+'?o='+c;
}

function paginar(c){
	p = location.href;
	t = p.substr(0,p.lastIndexOf('?'));
	location.href=t+'?p='+c;
}

function excluir(){
	return confirm('Deseja realmente excluir este item?\nEste processo é irreversível.');
}

// Auto tabulação
autoTab = function(){
    var c = 0, lastKey = function(e){c = e.key;}, next = function(e){
        var i, j, f = (e = e.target).form.elements, l = e.value.length, m = e.maxLength;
        if(c && m > -1 && l >= m){
            for(i = l = f.length; f[--i] != e;);
            for(j = i; (j = (j + 1) % l) != i && (!f[j].type || f[j].disabled || f[j].readOnly || f[j].type.toLowerCase() == "hidden" || f[j].style.display == "none"););
            try {j != i && f[j].focus();}catch(e){ /*nada*/ }
        }
    };
    for(var f, i = (f = document.forms).length; i; addEvent(f[--i], "keyup", next), addEvent(f[i], "keypress", lastKey));
};