var Validate = function(form, fields, options){
    var errors = [],
        settings = jQuery.extend({
            error_class: 'error',
            onFailure: function(form_event, errors){
                form_event.preventDefault();
                alert("Form errors:\n"+ errors.join("\n"));
            }
        }, options);
    
    function check(){
        errors = [];
        
        jQuery.each(fields, function(idx, set){
            var field = set.field;
            
            if(!valType(set)){
                field.addClass(settings.error_class)
                errors.push(set.message);
            }else{
                field.removeClass(settings.error_class)
            }
        });
    };     

    function valType(set){
        var passed = true;
        
        switch(set.type){
            case 'email':
                passed = /.*?@.*?\..*/.test(set.field.val());
                break;
                
            case 'phone':
                passed = /\d{3}\-\d{3}\-\d{4}/.test(set.field.val());
                break;
                
            case 'zip':
                passed = /\d{5}(\-\d{4})?/.test(set.field.val());
                break;
                
            case 'isset':
                passed = set.field.val().replace(/\s+$/, '') != '';
                break;
        }
        
        return !!passed;
    }
        
    form.submit(function(e){
        check();
        
        if(errors.length){
            settings.onFailure(e, errors);
        }
    });
};
