(function(object) {
    'use strict';
    
    /*
     * users.js'
     * -----------
     * get names from uids on unix from /etc/passwd'
    */
    
    var fs          = require('fs'),
        time        = require('./time'),
        Util        = require('../util'),
        FILE        =  '/etc/passwd',
        FileTime,
        Names;
    
    object.getNames = function(callback) {
        getTime(function(error, names) {
            Util.exec(callback, error, names);
        });
    };
    
    function getTime(callback) {
        time.get(FILE, 'raw', function(error, time) {
            if (error)
                callback(error);
            else if (FileTime === time) {
                    if (!Names)
                        error = 'user: parse error of ' + FILE;
                    
                    callback(error, Names);
                } else {
                    FileTime = time;
                    read(callback);
                }
         });
    }
    
    function read(callback) {
        fs.readFile(FILE, 'utf8', function(error, passwd) {
            if (!error)
                Names   = get(passwd);
            
            callback(error, Names);
        });
    }
    
    
    /** Функция парсит uid и имена пользователей
     * из переданного в строке вычитаного файла /etc/passwd
     * и возвращает массив обьектов имён и uid пользователей
     * @param passwd - строка, в которой находиться файл /etc/passwd
     */
    function get(passwd) {
        var uid, name,
            passwdArray = passwd.split('\n'),
            users   = {};
        
            passwdArray.forEach(function(line) {
                passwd = Util.rmStr(passwd, line);
                
                /* получаем первое слово строки */
                name = line.substr(line, line.indexOf(':'));
                line = Util.rmStr(line, name + ':x:');
                
                /* получаем uid */
                uid = line.substr(line, line.indexOf(':'));
                
                if (uid)
                    users[uid] = name;
            });
        
        return users;
    }
})(this);
