/**
 * This script can used with the XSLTView and the formular.xsl
 * to validate a form with ajax.
 *
 * uses JQuery >= 1.1.3
 *
 * @author Mario Volke <mario.volke@webholics.de>
 * @copyright 2007 Mario Volke
 */
 
function formValidate(_formName, _url) {
    var _data = '';
    
    // show submit query
    $('#' + _formName + '_submit').addClass('invisible');
    $('#' + _formName + '_submit_query').removeClass('invisible');

    // get data form the formular
    $('#form_' + _formName + ' input[@type=text],'
    + '#form_' + _formName + ' input[@type=password],'
    + '#form_' + _formName + ' input[@type=checkbox][@checked],'
    + '#form_' + _formName + ' textarea').each(function(i) {
        _data += this.name + '=' + this.value + '&';
    });
    
     $.ajax({type: 'POST',
             url: _url,
             data: _data,
             dataType: 'json',
             success: function(json) {
                var error = false;

                $.each(json.formular[_formName].input, function(name, value) {
                    if(value.type == 'text' || value.type == 'openid' || value.type == 'password' || value.type == 'textarea' || value.type == 'single_checkbox') {
                        // reset errors
                        if(value.errors) {
                            $.each(value.errors, function(error_name, error_value) {
                                $('#formError_' + _formName + '_' + name + '_' + error_name).addClass('invisible');
                            });
                        }

                        if(value.error) {
                            error = true;
                            $('#form_' + _formName + '_' + name).addClass('error');
                            $('#formError_' + _formName + '_' + name + '_' + value.error).removeClass('invisible');
                        }
                        else {
                            $('#form_' + _formName + '_' + name).removeClass('error');
                        }
                    }
                });
                
                if(error) {
                    $('#formErrors_' + _formName).removeClass('invisible');
                    
                    // show submit
                    $('#' + _formName + '_submit').removeClass('invisible');
                    $('#' + _formName + '_submit_query').addClass('invisible');
                }
                else {
                    $('#formErrors_' + _formName).addClass('invisible');

                    document.getElementById('form_' + _formName).submit();
                }
             }
    });

    return false;
}

