/**
 * Base class for date type validators.
 *
 * @abstract
 */
Ext.define('Ext.data.validator.AbstractDate', {
    extend: 'Ext.data.validator.Validator',
 
    config: {
        /**
         * @cfg {String} message
         * The error message to return when not valid.
         * @locale
         */
        message: null,
 
        /**
         * @cfg {String/String[]} format
         * The format(s) to allow. See {@link Ext.Date}.
         * @locale
         */
        format: ''
    },
 
    applyFormat: function(format) {
        if (!format) {
            format = this.getDefaultFormat();
        }
 
        if (!Ext.isArray(format)) {
            format = [format];
        }
 
        return format;
    },
 
    parse: function(value) {
        if (Ext.isDate(value)) {
            return value;
        }
 
        /* eslint-disable-next-line vars-on-top */
        var me = this,
            format = me.getFormat(),
            len = format.length,
            ret = null,
            i;
 
        for (= 0; i < len && !ret; ++i) {
            ret = Ext.Date.parse(value, format[i], true);
        }
 
        return ret;
    },
 
    validate: function(value) {
        return this.parse(value) ? true : this.getMessage();
    }
});