function validate_form( form, text )
{
    var submit_button = '';

    for ( var i = 0; i < form.elements.length; i++ ) {

        var value = form.elements[ i ].value;

        switch ( form.elements[ i ].type ) {

            case 'text':
            case 'password':
            case 'textarea':
            case 'file':

                var pattern = form.elements[ i ].getAttribute( 'pattern' );

                if ( pattern ) {

                    switch ( pattern ) {

                        case 'string':

                            if ( ! is_string( value ) ) {
                                return validate_notice( form.elements[ i ] );
                            }
                            break;

                        case 'string_or_empty':

                            if ( ! is_string_or_empty( value ) ) {
                                return validate_notice( form.elements[ i ] );
                            }
                            break;

                        case 'number':

                            if ( ! is_numeric( value ) ) {
                                return validate_notice( form.elements[ i ] );
                            }
                            break;

                        case 'float':

                            if ( ! is_float( value ) ) {
                                return validate_notice( form.elements[ i ] );
                            }
                            break;

                        case 'url':

                            if ( ! is_url( value ) ) {
                                return validate_notice( form.elements[ i ] );
                            }
                            break;

                        case 'email':

                            if ( ! is_email( value ) ) {
                                return validate_notice( form.elements[ i ] );
                            }
                            break;

                        case 'ip_address':

                            if ( ! is_ip_address( value ) ) {
                                return validate_notice( form.elements[ i ] );
                            }
                            break;

                        case 'ip_mask':

                            if ( ! is_ip_mask( value ) ) {
                                return validate_notice( form.elements[ i ] );
                            }
                            break;

                        case 'repeat-field':

                            if ( ! is_identical( form.elements[ i ] ) ) {

                                return validate_notice( form.elements[ i ] );
                            }
                            break;
                            
                        case 'dependence-field':

                            if ( ! is_dependence( form.elements[ i ] ) ) {

                                return validate_notice( form.elements[ i ] );
                            }
                            break;
                            
                        case 'dependence-empty-fields':

                            if ( ! is_dependence_empty_fields( form.elements[ i ] ) ) {

                                return validate_notice( form.elements[ i ] );
                            }
                            break;

                        case 'amount':

                            if ( ! is_amount( value ) ) {

                                return validate_notice( form.elements[ i ] );
                            }
                            break;

                        default:

                            if ( ! is_pattern( pattern, value ) ) {
                                return validate_notice( form.elements[ i ] );
                            }
                            break;
                    }
                }
                break;

            case 'radio':
            case 'checkbox':

                var min = form.elements[ i ].getAttribute( 'min' ) ? form.elements[ i ].getAttribute( 'min' ) : 0;
                var max = form.elements[ i ].getAttribute( 'max' ) ? form.elements[ i ].getAttribute( 'max' ) : document.getElementsByName( form.elements[ i ].getAttribute( 'name' ) ).length;

                if ( min || max ) {
                    var items = document.getElementsByName( form.elements[ i ].getAttribute( 'name' ) );
                    var count = 0;

                    for ( var l = 0; l < items.length; l++ ) {
                        if ( items[ l ].checked ) {
                            count++;
                        }
                    }

                    if ( count < min || count > max ) {
                        return validate_notice( form.elements[ i ] );
                    }
                }
                break;

            case 'select-one':
            case 'select-multiple':

                if ( form.elements[ i ].selectedIndex != -1 ) {

                    var selected = form.elements[ i ].options[ form.elements[ i ].selectedIndex ];

                    if ( selected && selected.getAttribute( 'notselected' ) ) {

                        return validate_notice( form.elements[ i ] );

                    } else if ( selected && selected.value == '' ) {

                        return validate_notice( form.elements[ i ] );
                    }

                } else {

                    return validate_notice( form.elements[ i ] );
                }
                break;

            case 'file':

                break;

            case 'button':
            case 'reset':

                break;

            case 'submit':
            case 'image':

                submit_button = form.elements[ i ];
                break;

            default:

                break;
        }
    }

    if ( typeof text == 'undefined' ) {

        return ( true );

    } else {

        return ( confirm_user( submit_button, text, 'button' ) );
    }
}

function validate_form_button( name_form, text )
{
    var is_valid     = false;

    if ( name_form ) {

        if ( typeof text == 'undefined' ) {

            is_valid = validate_form( name_form );

        } else {

            is_valid = validate_form( name_form, text );
        }
    }

    if ( is_valid ) {

        return true;
    }

    return false;
}

function validate_notice( input )
{
    show_message( input );

    return false;
}

function disabled_field( element )
{
    var border_disabled = '#BEBEBE 1px solid';
    var border_enabled  = '#83b4e0 1px solid';
    
    var ftarget = element.getAttribute( 'ftarget' );
    
    for ( var i = 0; i < element.form.elements.length; i++ ) {

        var item = element.form.elements[ i ];

        if ( item.name == ftarget ) {
            break;
        }
    }
    
    item.disabled  = ( element.value != '' ) ? true : false;
    item.style.border = ( item.disabled ) ? border_disabled : border_enabled;
}


