/**
 *
 */

function BuscaLocalStora(arrayResults) {

	var arrayGeral = arrayResults;

	var arrayFiltrado = [];

	var ultimoValor = '';

	this.buscaElementoOR = buscaElementoOR;
	this.setArray = setArray;
	this.getLengthArrayGeral = getLengthArrayGeral;

	function getLengthArrayGeral() {
		return arrayGeral.length;
	}

	function setArray(array) {
		arrayResults = array;
	}

	function buscaElementoOR(valor, keyup, operacao) {
		var start = new Date().getTime();
		if (valor.length != 0) {
			if (keyup == true) {

				if (ultimoValor.length == 0) {
					arrayFiltrado = filtragem(arrayGeral, valor, operacao);
				} else if (ultimoValor.length < valor.length) {
					arrayFiltrado = filtragem(arrayFiltrado, valor, operacao);
				} else {
					arrayFiltrado = filtragem(arrayGeral, valor, operacao);
				}

			} else {
				arrayFiltrado = filtragem(arrayGeral, valor, operacao);
			}

		} else {
			arrayFiltrado = arrayGeral;
		}

		ultimoValor = valor;

		var end = new Date().getTime();
		var time = end - start;
		console.log('Execution time: ' + time);

		return arrayFiltrado;
	}

	function filtragem(results, valor, operacao) {
		var retorno = [];
		var contador = 0;
		var i = results.length;
		while (--i >= 0) {
			var elemento = results[i];
			var inserido = 0;
			var j = operacao.length;
			while (--j >= 0) {
				var busca = operacao[j];
				if (inserido == 0) {
					if (busca[1] == '%==') {
						if (elemento[busca[0]].toString().toLocaleLowerCase().indexOf(valor.toString().toLocaleLowerCase()) != -1) {
							retorno[contador++] = elemento;
							inserido++;
						}
					} else if (busca[1] == '==') {
						if (elemento[busca[0]].toString().toLocaleLowerCase() == valor.toString().toLocaleLowerCase()) {
							retorno[contador++] = elemento;
							inserido++;
						}
					}
				}
			};
		};
		return retorno;

	}

}
