function LocalStorageCores() {
    var mSelf = this;

    mSelf.IdCoresLocalstorage = "CoresViagem";

    mSelf.IdViagemLocalstorage = "ViagensVisiveis";

    mSelf.CoresViagem = ko.toJS(ko.mapping.fromJSON(localStorage.getItem(mSelf.IdCoresLocalstorage)));

    mSelf.ViagensVisiveis = ko.toJS(ko.mapping.fromJSON(localStorage.getItem(mSelf.IdViagemLocalstorage)));
    
    mSelf.NewDate = function (dt) {
        if (dt)
            return new Date(new Date(new Date(new Date(new Date(dt).setMinutes(0)).setHours(0)).setSeconds(0)).setMilliseconds(0));
        else
            return new Date(new Date(new Date(new Date(new Date().setMinutes(0)).setHours(0)).setSeconds(0)).setMilliseconds(0));
    }

    mSelf.AtualizaLocalStorage = function (obj, idLocalStorage) {       

        var lista = ko.toJS(ko.mapping.fromJSON(localStorage.getItem(idLocalStorage)));
        if (lista == null)
            lista = [];
        else {
            var dtAtual = mSelf.NewDate();
            if (lista.length > 0) {
                var dtLocalStorage = mSelf.NewDate(lista[0].Data);
                if (dtLocalStorage.getTime() < dtAtual.getTime()) {
                    lista = [];
                    localStorage.setItem(idLocalStorage, null);
                }
            }
        }
        if (obj && obj != null) {
            lista.push(obj);
            localStorage.setItem(idLocalStorage, ko.toJSON(lista));
        }
        mSelf[idLocalStorage] = ko.toJS(ko.mapping.fromJSON(localStorage.getItem(idLocalStorage)));
    };

    mSelf.GetItemStorage = function (codigoSetorRealizado, codigoViagem, item, idLocalStorage) {
        var viagem;
        if (mSelf[idLocalStorage] != null) {
            viagem = ko.utils.arrayFilter(mSelf[idLocalStorage], function (item) {
                return item.CodigoViagem == codigoViagem && item.CodigoSetorRealizado == codigoSetorRealizado;
            });
        }
        if (viagem && viagem != null && viagem.length > 0) {
            return viagem[0].Item;
        } else {
            viagem = { CodigoViagem: codigoViagem, CodigoSetorRealizado: codigoSetorRealizado, Data: new Date(), Item: item };
            mSelf.AtualizaLocalStorage(viagem, idLocalStorage);
            return viagem.Item;
        }
    };

    mSelf.AtulizarItem = function (codigoSetorRealizado, codigoViagem, valor, idLocalStorage) {
        if (mSelf[idLocalStorage] != null) {
            var lista = [];
            ko.utils.arrayForEach(mSelf[idLocalStorage], function (item) {
                if (item.CodigoSetorRealizado == codigoSetorRealizado && item.CodigoViagem == codigoViagem)
                    item.Item = valor;
                lista.push(item);
            });
            localStorage.setItem(idLocalStorage, ko.toJSON(lista));
        }
    };

    mSelf.AtulizarCor = function (codigoSetorRealizado, codigoViagem, cor) {
        mSelf.AtulizarItem(codigoSetorRealizado, codigoViagem, cor, mSelf.IdCoresLocalstorage);
    };
    
    mSelf.GetCorStorage = function (codigoSetorRealizado, codigoViagem, Cor) {
        return mSelf.GetItemStorage(codigoSetorRealizado, codigoViagem, Cor, mSelf.IdCoresLocalstorage);
    };
    
    mSelf.AtulizarVisivel = function (codigoSetorRealizado, codigoViagem, visivel) {
        mSelf.AtulizarItem(codigoSetorRealizado, codigoViagem, visivel, mSelf.IdViagemLocalstorage);
    };

    mSelf.GetViagemVisivel = function (codigoSetorRealizado, codigoViagem, visivel) {
        return mSelf.GetItemStorage(codigoSetorRealizado, codigoViagem, visivel, mSelf.IdViagemLocalstorage);
    };

    // ------------------ LOCAL STORAGE PARA VEÍCULOS -------------------------------//

    mSelf.IdVeiculoLocalStorage = "VeiculosVisiveis"

    mSelf.IdCoresVeiculosLocalStorage = "CoresVeiculos";

    mSelf.CoresVeiculos = ko.toJS(ko.mapping.fromJSON(localStorage.getItem(mSelf.IdCoresVeiculosLocalStorage)));

    mSelf.VeiculosVisiveis = ko.toJS(ko.mapping.fromJSON(localStorage.getItem(mSelf.IdVeiculoLocalStorage)));

    mSelf.GetVeiculoVisivel = function (codigoVeiculo, visivel) {
        return mSelf.GetItemStorageVeiculo(codigoVeiculo, visivel, mSelf.IdVeiculoLocalStorage);
    };

    mSelf.AtualizarVeiculoVisivel = function (codigoVeiculo, visivel) {
        mSelf.AtualizarItemVeiculo(codigoVeiculo, visivel, mSelf.IdVeiculoLocalStorage);
    };

    mSelf.AtualizarItemVeiculo = function (codigoVeiculo, valor, idLocalStorage) {
        if (mSelf[idLocalStorage] != null) {
            var lista = [];
            ko.utils.arrayForEach(mSelf[idLocalStorage], function (item) {
                if (item.CodigoVeiculo == codigoVeiculo)
                    item.Item = valor;

                lista.push(item);
            });
            localStorage.setItem(idLocalStorage, ko.toJSON(lista));
        }
    };

    mSelf.GetItemStorageVeiculo = function (codigoVeiculo, item, idLocalStorage) {
        var veiculo;
        if (mSelf[idLocalStorage] != null) {
            veiculo = ko.utils.arrayFilter(mSelf[idLocalStorage], function (item) {
                return item.CodigoVeiculo ==  codigoVeiculo;
            });
        }
        if (veiculo && veiculo != null && veiculo.length > 0) {
            return veiculo[0].Item;
        } else {
            veiculo = { CodigoVeiculo: codigoVeiculo, Data: new Date(), Item: item };
            mSelf.AtualizaLocalStorage(veiculo, idLocalStorage);
            return veiculo.Item;
        }
    };

    mSelf.GetCorStorageVeiculo = function (codigoVeiculo, Cor) {
        return mSelf.GetItemStorageVeiculo(codigoVeiculo, Cor, mSelf.IdCoresVeiculosLocalStorage);
    };

    mSelf.AtualizarCorVeiculo = function (codigoVeiculo, cor) {
        mSelf.AtualizarItemVeiculo(codigoVeiculo, cor, mSelf.IdCoresVeiculosLocalStorage);
    };

}