/* 
 * jquery.validar.ows.js
 *
 * @author Ricardo Silva
 *
 * funcoes:
 *
 * $("#form").validar();
 *
 * @return boolean
 * $("#input").validarEmail();
 *
 * @return boolean
 * $("#input").validarCPF();
 */
(function($){
    $.extend($.fn,{
        validar : function(opts){
            var json = opts;
            this.submit(function(){
                var canSubmit = true;

                $(this).find("[req=true], [req=text], [req=email], [req=cpf], [req=equals]").each(function(){
                    var label = $(this).attr("label");

                    if($(this).val().length < 1 && canSubmit){
                        canSubmit = false;
                        alert(((label.split(" ").length > 1)? label : "Por favor, preencha o campo "+label.replace("_", " ").replace("_", " ")+"."));
                        $(this).slowFocus();
                    }else if(canSubmit){
                        switch ($(this).attr("req")) {
                            case "email":
                                if(!$(this).validarEmail()){
                                    canSubmit = false;
                                    alert(((label.split(" ").length > 1)? label : "Por favor, preencha corretamente o campo "+label.replace("_", " ").replace("_", " ")+"."));
                                    $(this).slowFocus();
                                }
                                break;
                            case "cpf":
                                if(!$(this).validarCPF()){
                                    canSubmit = false;
                                    alert(((label.split(" ").length > 1)? label : "Por favor, preencha corretamente o campo "+label.replace("_", " ").replace("_", " ")+"."));
                                    $(this).slowFocus();
                                }
                                break;
                            case "equals":
                                if($(this).val()!=$($(this).attr("equals")).val()){
                                    canSubmit = false;
                                    alert(((label.split(" ").length > 1)? label : "Por favor, preencha corretamente o campo "+label.replace("_", " ").replace("_", " ")+"."));
                                    $(this).slowFocus();
                                }
                                break;
                            default:
                                break;
                        }
                    }
                });
                if(canSubmit){
                    try{
                        canSubmit = json.end();
                    }catch(er){}
                }
                return canSubmit;
            });
        },
        slowFocus : function(){
            setTimeout(function(ej){
                ej.focus();
            }, 1, $(this));
        },
        validarCPF : function (){
            var arg = $(this).val();
            var pri = arg.substring(0,3);
            var seg = arg.substring(4,7);
            var ter = arg.substring(8,11);
            var qua = arg.substring(12,14);
            var i;
            var numero=(pri+seg+ter+qua);
            var s = numero;
            var c = s.substr(0,9);
            var dv = s.substr(9,2);
            var d1 = 0;
            for (i = 0; i < 9; i++)
                d1 += c.charAt(i)*(10-i);
            var result;
            if (d1 == 0) result = "falso";
            d1 = 11 - (d1 % 11);
            if (d1 > 9) d1 = 0;
            if (dv.charAt(0) != d1) result = "falso";
            d1 *= 2;
            for (i = 0; i < 9; i++) d1 += c.charAt(i)*(11-i);
            d1 = 11 - (d1 % 11);
            if (d1 > 9) d1 = 0;
            if (dv.charAt(1) != d1) result = "falso";
            return !(result == "falso");
        },
        validarEmail : function(){
            var apos = $(this).val().indexOf("@");
            return !(apos < 1 || $(this).val().lastIndexOf(".")-apos < 2);
        }
    })
})(jQuery);