// JavaScript Document
/*
**************************************
* String.isCPF Function v1.0         *
* Autor: Carlos R. L. Rodrigues      *
**************************************
*/
String.prototype.isCPF = function(){
var c = this;
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;
};
// DHTML email validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
function echeck(str) {
var at="@"
var dot="."
var lat=str.indexOf(at)
var lstr=str.length
var ldot=str.indexOf(dot)
if (str.indexOf(at)==-1){
//alert("Invalid E-mail ID")
return false
}
if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
//alert("Invalid E-mail ID")
return false
}
if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
//alert("Invalid E-mail ID")
return false
}
if (str.indexOf(at,(lat+1))!=-1){
//alert("Invalid E-mail ID")
return false
}
if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
//alert("Invalid E-mail ID")
return false
}
if (str.indexOf(dot,(lat+2))==-1){
//alert("Invalid E-mail ID")
return false
}
if (str.indexOf(" ")!=-1){
//alert("Invalid E-mail ID")
return false
}
return true					
}
function isDate(y, m, d)
{
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;
}
function getDateMsg(x)
{
return x == 1 ? "Formato de data inválido"
: x == 2 ? "Dia inválido"
: x == 3 ? "Mês inválido"
: x == 4 ? "Nos meses de abril, junho, setembro e novembro não existe o dia 31"
: x == 5 ? "Fevereiro só tem 28 dias"
: x == 6 ? "Em anos bissextos, fevereiro tem 29 dias" : "=]";
}
function ValidaData(data)
{
var expressao1 = /^([0-9]{1,2})[\/]([0-9]{1,2})[\/]([0-9]{1,4})$/;
var expressao2 = {d : 1, m : 2, y : 3}
;
var eData = isDate(data, expressao1, expressao2);
return eData;
}
function Janela(url, nome, largura, altura, centro)
{
var parametros = "toolbar=no,location=no,directories=no,status=no,menubar=no,		scrollbars=no,resizable=no,copyhistory=no,width=" + largura + ",height=" + altura;
var maisparametros = "";
if (centro == true)
{
var esquerda = (screen.width - largura) / 2;
var topo = (screen.height - altura) / 2;
maisparametros = ",screenX=" + esquerda + ",screenY=" + topo + ",top=" + topo + ",left=" + esquerda;
}
parametros = parametros + maisparametros;
var Njanela = window.open(url, nome, parametros);
}
function Tamanho()
{
var largura = document.body.clientWidth;
var altura = document.body.clientHeight;
alert(largura + " x " + altura);
}
function ValidarFormulario(idf)
{
var f = document.forms[idf];
var quant = f.elements.length;
var erros = "";
for (var i = 0; i < quant; i++ )
{
var ele = f.elements[i];
var nom = ele.getAttribute('nome');
var sel = ele.getAttribute('sel');
var cont = ele.getAttribute('cont');
var dat = ele.getAttribute('dat');
var email = ele.getAttribute('email');
var cpf = ele.getAttribute('cpf');
if (nom)
{
if (sel)
{
if(ele.value == "0") erros += " - O campo " + nom + " não pode estar vazio\n";
}
else if (cont)
{
if(ele.length == 0) erros += " - O campo " + nom + " não pode estar vazio\n";
}
else if (dat)
{
var ed = ValidaData(ele.value);
if(ed > 0) erros += " - " + getDateMsg(ed) + ". Verificar campo: " + nom + "\n";
}
else if (email)
{
if (echeck(ele.value) == false) erros += " - O campo " + nom + " deve conter um e-mail válido\n";
}
else if (cpf)
{
if (!ele.value.isCPF()) erros += " - O campo " + nom + " deve conter um CPF válido\n";
}
else
{
if(ele.value == "")  erros += " - O campo " + nom + " não pode estar vazio\n";
}
}
}
if (erros != "")
{
alert ("Ocorreram os seguintes erros: \n" + erros);
return false;
}
else return true;
}
/*
**************************************
* Event Listener Function v1.4       *
* Autor: Carlos R. L. Rodrigues      *
**************************************
*/
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;
}
};
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;
};
/*
**************************************
* Restrict Class v1.0                *
* Autor: Carlos R. L. Rodrigues      *
**************************************
*/
//========================================================
// REQUIRES http://www.jsfromhell.com/geral/event-listener
//========================================================
Restrict = function(form){
this.form = form, this.field = {}, this.mask = {};
}
Restrict.field = Restrict.inst = Restrict.c = null;
Restrict.prototype.start = function(){
var $, __ = document.forms[this.form], s, x, j, c, sp, o = this, l;
var p = {".":/./, w:/\w/, W:/\W/, d:/\d/, D:/\D/, s:/\s/, a:/[\xc0-\xff]/, A:/[^\xc0-\xff]/};
for(var _ in $ = this.field)
if(/text|textarea|password/i.test(__[_].type)){
x = $[_].split(""), c = j = 0, sp, s = [[],[]];
for(var i = 0, l = x.length; i < l; i++)
if(x[i] == "\\" || sp){
if(sp = !sp) continue;
s[j][c++] = p[x[i]] || x[i];
}
else if(x[i] == "^") c = (j = 1) - 1;
else s[j][c++] = x[i];
o.mask[__[_].name] && (__[_].maxLength = o.mask[__[_].name].length);
__[_].pt = s, addEvent(__[_], "keydown", function(e){
var r = Restrict.field = e.target;
if(!o.mask[r.name]) return;
r.l = r.value.length, Restrict.inst = o; Restrict.c = e.key;
setTimeout(o.onchanged, r.e = 1);
});
addEvent(__[_], "keyup", function(e){
(Restrict.field = e.target).e = 0;
});
addEvent(__[_], "keypress", function(e){
o.restrict(e) || e.preventDefault();
var r = Restrict.field = e.target;
if(!o.mask[r.name]) return;
if(!r.e){
r.l = r.value.length, Restrict.inst = o, Restrict.c = e.key || 0;
setTimeout(o.onchanged, 1);
}
});
}
}
Restrict.prototype.restrict = function(e){
var o, c = e.key, n = (o = e.target).name, r;
var has = function(c, r){
for(var i = r.length; i--;)
if((r[i] instanceof RegExp && r[i].test(c)) || r[i] == c) return true;
return false;
}
var inRange = function(c){
return has(c, o.pt[0]) && !has(c, o.pt[1]);
}
return (c < 30 || inRange(String.fromCharCode(c))) ?
(this.onKeyAccept && this.onKeyAccept(o, c), !0) :
(this.onKeyRefuse && this.onKeyRefuse(o, c),  !1);
}
Restrict.prototype.onchanged = function(){
var ob = Restrict, si, moz = false, o = ob.field, t, lt = (t = o.value).length, m = ob.inst.mask[o.name];
if(o.l == o.value.length) return;
if(si = o.selectionStart) moz = true;
else if(o.createTextRange){
var obj = document.selection.createRange(), r = o.createTextRange();
if(!r.setEndPoint) return false;
r.setEndPoint("EndToStart", obj); si = r.text.length;
}
else return false;
for(var i in m = m.split(""))
if(m[i] != "#")
t = t.replace(m[i] == "\\" ? m[++i] : m[i], "");
var j = 0, h = "", l = m.length, ini = si == 1, t = t.split("");
for(i = 0; i < l; i++)
if(m[i] != "#"){
if(m[i] == "\\" && (h += m[++i])) continue;
h += m[i], i + 1 == l && (t[j - 1] += h, h = "");
}
else{
if(!t[j] && !(h = "")) break;
(t[j] = h + t[j++]) && (h = "");
}
o.value = o.maxLength > -1 && o.maxLength < (t = t.join("")).length ? t.slice(0, o.maxLength) : t;
if(ob.c && ob.c != 46 && ob.c != 8){
if(si != lt){
while(m[si] != "#" && m[si]) si++;
ini && m[0] != "#" && si++;
}
else si = o.value.length;
}
!moz ? (obj.move("character", si), obj.select()) : o.setSelectionRange(si, si);
}
function MaiusculoFormulario(idf)
{
var f = document.forms[idf];
var quant = f.elements.length;
var valor = "";
for (var i = 0; i < quant; i ++ )
{
var ele = f.elements[i];
var tipo = ele.type;
if (tipo == "text")
{
valor = ele.value;
valor = valor.toUpperCase();
ele.value = valor;
} else if (tipo == "textarea")
{
valor = ele.value;
valor = valor.toUpperCase();
ele.value = valor;
} 
}
}
ToolTip = function(o, t, c, f){
var i, $ = this;
$.s = ($.o = document.createElement("div")).style;
$.s.display = "none", $.s.position = "absolute", $.o.className = c, $.t = t, $.f = f;
for(i in {mouseout: 0, mouseover: 0, mousemove: 0})
addEvent(o, i, function(e){$[e.type](e);});
};
with({p: ToolTip.prototype}){
p.update = function(e){
var w = window, b = document.body;
this.s.top = e.clientY + (w.scrollY || b.scrollTop || b.parentNode.scrollTop || 0) + "px",
this.s.left = e.clientX + (w.scrollX || b.scrollLeft || b.parentNode.scrollLeft || 0) + 10 + "px";
}
p.mouseout = function(){
this.s.display = "none";
};
p.mouseover = function(e){
this.s.display = "block", document.body.appendChild(this.o).innerHTML = this.t,
e.stopPropagation(), this.update(e);
};
p.mousemove = function(e){
this.f && this.update(e);
};
}

function IExp()
{
	isIE = false;
	if (navigator.userAgent.indexOf("MSIE") != -1) 
	{
		var isIE = true;
	}
	return isIE;
}