/**
 * @private
 */
Ext.define('Ext.device.globalization.Abstract', {
    mixins: ['Ext.mixin.Observable'],
 
    config: {
        formatLength: 'full',
        selector: 'date and time',
        dateType: 'wide',
        items: 'months',
        numberType: 'decimal',
        currencyCode: "USD"
    },
 
    getPreferredLanguage: function(config) {
        //<debug>
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #getPreferredLanguage');
        }
        //</debug>
 
        return config;
    },
    getLocaleName: function(config) {
        //<debug>
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #getLocaleName');
        }
        //</debug>
 
        return config;
    },
    dateToString: function(config) {
        var defaultConfig = Ext.device.globalization.Abstract.prototype.config;
 
        config = Ext.applyIf(config, {
            date: new Date(),
            formatLength: defaultConfig.formatLength,
            selector: defaultConfig.selector
        });
 
        //<debug>
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #dateToString');
        }
        //</debug>
 
        return config;
    },
    stringToDate: function(config) {
        var defaultConfig = Ext.device.globalization.Abstract.prototype.config;
 
        config = Ext.applyIf(config, {
            dateString: Ext.util.Format.date(new Date(), 'm/d/Y'),
            formatLength: defaultConfig.formatLength,
            selector: defaultConfig.selector
        });
 
        //<debug>
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #stringToDate');
        }
        //</debug>
 
        return config;
    },
    getDatePattern: function(config) {
        var defaultConfig = Ext.device.globalization.Abstract.prototype.config;
 
        config = Ext.applyIf(config, {
            formatLength: defaultConfig.formatLength,
            selector: defaultConfig.selector
        });
 
        //<debug>
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #getDatePattern');
        }
        //</debug>
 
        return config;
    },
    getDateNames: function(config) {
        var defaultConfig = Ext.device.globalization.Abstract.prototype.config;
 
        config = Ext.applyIf(config, {
            type: defaultConfig.dateType,
            items: defaultConfig.items
        });
 
        //<debug>
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #getDateNames');
        }
        //</debug>
 
        return config;
    },
    isDayLightSavingsTime: function(config) {
        config = Ext.applyIf(config, {
            date: new Date()
        });
 
        //<debug>
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #isDayLightSavingsTime');
        }
        //</debug>
 
        return config;
    },
    getFirstDayOfWeek: function(config) {
        //<debug>
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #getFirstDayOfWeek');
        }
        //</debug>
 
        return config;
    },
    numberToString: function(config) {
        var defaultConfig = Ext.device.globalization.Abstract.prototype.config;
 
        config = Ext.applyIf(config, {
            number: defaultConfig.number,
            type: defaultConfig.numberType
        });
 
        //<debug>
        if (!config.number) {
            Ext.Logger.warn('You need to specify a `number` for #numberToString');
        }
 
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #numberToString');
        }
        //</debug>
 
        return config;
    },
    stringToNumber: function(config) {
        var defaultConfig = Ext.device.globalization.Abstract.prototype.config;
 
        config = Ext.applyIf(config, {
            type: defaultConfig.numberType
        });
 
        //<debug>
        if (!config.number) {
            Ext.Logger.warn('You need to specify a `string` for #stringToNumber');
        }
 
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #stringToNumber');
        }
        //</debug>
 
        return config;
    },
    getNumberPattern: function(config) {
        var defaultConfig = Ext.device.globalization.Abstract.prototype.config;
 
        config = Ext.applyIf(config, {
            type: defaultConfig.numberType
        });
 
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #getNumberPattern');
        }
        //</debug>
 
        return config;
    },
    getCurrencyPattern: function(config) {
        var defaultConfig = Ext.device.globalization.Abstract.prototype.config;
 
        config = Ext.applyIf(config, {
            currencyCode: defaultConfig.currencyCode
        });
 
        if (!config.success) {
            Ext.Logger.warn('You need to specify a `success` function for #getCurrency');
        }
        //</debug>
 
        return config;
    }
});