/*
**************************************
* 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 = 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);
}
/*
**************************************
* 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;
};
/*
**************************************
* String.isCNPJ Function v1.0         *
* Autor: Carlos R. L. Rodrigues      *
**************************************
*/
String.prototype.isCNPJ = function(){
    var b = [6,5,4,3,2,9,8,7,6,5,4,3,2], c = this;
    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;
};
/*
**************************************
* String.isEmail Function v1.0        *
* Autor: Felipe Lira Rocha		      *
**************************************
*/
	String.prototype.isEmail = function(){
		value = this;
		value = new String(value)
		 p=value.indexOf('@');
		if (p<1 || p==(value.length-1)){
			return false;
		} else {
			if (value.indexOf('.',p+2)<1 || value.length < (p+4)){
				return false
			} else {
				return true;
			}
		}
	}
	function salvar_fale(){
		var elem = document.frmFale.elements;
		
        for(var i = 0; i < elem.length; i++)
        {
        	elem[i].className = elem[i].className.replace(/\binput_error\b/,'');
        } 
		if(document.frmFale.TXT_NOME.value==''){
			alert('O campo Nome deve ser informado.');
			document.frmFale.TXT_NOME.className += " input_error";
			document.frmFale.TXT_NOME.select();
			return false;
		}else if(document.frmFale.TXT_SOBRENOME.value==''){
			alert('O campo Sobrenome deve ser informado.');
			document.frmFale.TXT_SOBRENOME.className += " input_error";
			document.frmFale.TXT_SOBRENOME.select();
			return false;
		}else if(document.frmFale.TXT_CPF_CNPJ.value==''){
			alert('O campo CPF ou CNPJ deve ser informado.');
			document.frmFale.TXT_CPF_CNPJ.className += " input_error";
			document.frmFale.TXT_CPF_CNPJ.select();
			return false;
		}else if(!document.frmFale.TXT_CPF_CNPJ.value.isCNPJ() && !document.frmFale.TXT_CPF_CNPJ.value.isCPF()){
			alert('O campo CPF ou CNPJ é inválido.');
			document.frmFale.TXT_CPF_CNPJ.className += " input_error";
			document.frmFale.TXT_CPF_CNPJ.select();
			return false;
		}else if(document.frmFale.TXT_EMAIL.value==''){
			alert('O campo E-mail deve ser informado.');
			document.frmFale.TXT_EMAIL.className += " input_error";
			document.frmFale.TXT_EMAIL.select();
			return false;
		}else if(!document.frmFale.TXT_EMAIL.value.isEmail()){
			alert('O campo E-mail é inválido.');
			document.frmFale.TXT_EMAIL.className += " input_error";
			document.frmFale.TXT_EMAIL.select();
			return false;
		}else if(document.frmFale.NRO_TELEFONE.value==''){ 
			alert('O campo Telefone deve ser informado.');
			document.frmFale.NRO_TELEFONE.className += " input_error";
			document.frmFale.NRO_TELEFONE.select();
			return false;
		}else if(document.frmFale.NRO_TELEFONE.value.length<13){
			alert('O campo Telefone é inválido.');
			document.frmFale.NRO_TELEFONE.className += " input_error";
			document.frmFale.NRO_TELEFONE.select();
			return false;
		}else if(document.frmFale.TP_ASSUNTO.value==''){
			alert('O campo Assunto deve ser informado.');
			document.frmFale.TP_ASSUNTO.className += " input_error";
			document.frmFale.TP_ASSUNTO.focus();
			return false;
		}else if(document.frmFale.TXT_MENSAGEM.value==''){
			alert('O campo Mensagem deve ser informado.');
			document.frmFale.TXT_MENSAGEM.className += " input_error";
			document.frmFale.TXT_MENSAGEM.select();
			return false;
		}else if(document.frmFale.TXT_MENSAGEM.value.length > 1500){
			alert('O campo Mensagem é inválido.\nTamanho máximo: 1500 caracteres.');
			document.frmFale.TXT_MENSAGEM.className += " input_error";
			document.frmFale.TXT_MENSAGEM.select();
			return false;
		}else if(document.frmFale.captcha != undefined && document.frmFale.captcha.value === ''){
			alert('O código da imagem deve ser informado.');
			document.frmFale.captcha.className += " input_error";
			document.frmFale.captcha.select();
			return false;
		}
		//	document.frmFale.action='fale.jsp?shopping=' + shopping;
		document.frmFale.action='fale.jsp';		
		return true; 
	}	

