Array.prototype.search = function(value) {
	for(i in this) {
		if(this[i] == value) {
			return true;
		}
	}
	return false;
}

jQuery.fn.popular = function(options) {
	var settings = {
		nome: $(this).attr('id'),
		classe: '',
		selOpt: false,
		dados: {}
	}
	$.extend(settings, options);

	$(this).attr('name', settings.nome);
	$(this).addClass(settings.classe);

	if(settings.selOpt) {
		o = document.createElement('option');
		o.text = 'Selecione...';
		o.value = '';
		try {
			$(this)[0].add(o, null);
		} catch (e) {
			$(this)[0].add(o);
		}
	}
    
	for(i in settings.dados) {
		o = document.createElement('option');
		o.text = settings.dados[i];
		o.value = i;

		try {
			$(this)[0].add(o, null);
		} catch (e) {
			$(this)[0].add(o);
		}
	}
        
	return $(this);
}

jQuery.fn.popularForm = function(dados) {
	for(i in dados) {
		$("#"+i, $(this)).val(dados[i]);
	}
	return $(this);
}

jQuery.fn.maiusculas = function() {
	$(this).keyup(function(e) {
		var end   = this.selectionEnd;
		var start = this.selectionStart;
		$(this).val($(this).val().toUpperCase());
		this.selectionEnd   = end;
		this.selectionStart = start;
	});
}
jQuery.fn.minusculas = function() {
	$(this).keyup(function(e) {
		var end   = this.selectionEnd;
		var start = this.selectionStart;
		$(this).val($(this).val().toLowerCase());
		this.selectionEnd   = end;
		this.selectionStart = start;
	});
}

jQuery.fn.limpar = function(excecoes) {
	$(this).find(':input').each(function() {
		if(this.id != excecoes) {
			switch(this.type) {
				case 'password':
				case 'select-multiple':
				case 'select-one':
				case 'text':
				case 'textarea':
				case 'hidden':
					$(this).val('');
					break;
				case 'checkbox':
				case 'radio':
					this.checked = false;
			}
		}
	});
}

/**
 * Remove os options de um elemento select
 * @utor Wanderson Bezerra
 * @param ultimo (opcional) Numero do indice do ultimo option a ser removido,
 * caso nao seja informado, remove todos
 * @version 25/05/2011
 */
jQuery.fn.removerOptions = function() {
	var ultimo = 0;
	if(arguments.length > 0) {
		ultimo = arguments[0];
	}

	while(this[0].length > ultimo) {
		this[0].remove(this[0].length -1);
	}
}

/**
 * Retorna um objeto em formato de string json
 * @utor Wanderson Bezerra
 * @version 30/05/2011
 */
jQuery.fn.parseStringJson = function(objeto) {
	var jsonString = '{';
	for(i in objeto) {
		var tipo = typeof(objeto[i]);
		if(tipo === 'object') {
			jsonString+= '"' +i+ '":' + $().parseStringJson(objeto[i]) +',';
		}
		else if(tipo === 'number' || tipo === 'boolean') {
			jsonString+= '"' +i+ '":' + objeto[i] + ',';
		}
		else if(tipo === 'string') {
			jsonString+= '"' +i+ '":"' + objeto[i]+ '",';
		}
	}

	jsonString = jsonString.substr(0, (jsonString.length - 1));
	return jsonString+'}';
}

jQuery.validator.addMethod("checaArquivos", function(id) {
	v = id;
	if (v) {
		a = v.split("\\");
		x = a.length - 1;
		ext = a[x].split(".");

		var f = ['pdf', 'PDF', 'jpeg', 'jpg', 'JPEG', 'JPG'];

		if (f.search(ext.pop())) {
			return true;
		} else {
			return false;
		}
	} else {
		return true;
	}
},"Formato do arquivo inválido, apenas .pdf ou imagens são suportados.");


/*
	Descricao: Formata um valor (anteriormente formatado com a funcao "inteiro"), retornando no formato 999.999.999,99
	Retorno:
		- texto = valor formatado (com separadores decimais e inteiros)
	Parametros:
		- valor = valor inteiro (sem separadores decimais)
		- [variacaoDecimal] = quantidade de casas decimais contidas no numero fornecido
*/

function formatarValor (valor) {
	var variacaoDecimal = 2;
	if (arguments.length > 1) {
		var variacaoDecimal = arguments[1];
	}

	var valorString = valor.toString();
	var complemento = "";

	for (var i = 0; i < variacaoDecimal + 1; i++) {
		complemento += "0";
	}

	if (valorString.length < variacaoDecimal + 1) {
		valorString = complemento + valorString;
		valorString = valorString.substr(valorString.length - (variacaoDecimal + 1),variacaoDecimal + 1);
	}

	var parteInteira = valorString.substr(0,valorString.length - variacaoDecimal);
	var parteInteiraFormatada = "";
	var qtdeSeparadores = 0;

	for (var i = parteInteira.length - 1; i >= 0; i--) {

		if ((parteInteiraFormatada.length > 0)&&(((parteInteiraFormatada.length - qtdeSeparadores) % 3 == 0))) {
			parteInteiraFormatada = "." + parteInteiraFormatada;
			qtdeSeparadores++;
		}
		parteInteiraFormatada = parteInteira.charAt(i) + parteInteiraFormatada;
	}
	valorString = parteInteiraFormatada + "," + valorString.substr(valorString.length - variacaoDecimal,variacaoDecimal);
	return valorString;
}

/*
	Descricao: Remove a formatacao de um valor (para ser formatado posteriormente com a funcao "formatarValor")
	Retorno:
		- texto = valor formatado (com separadores decimais e inteiros)
	Parametros:
		- valor = valor sem formatacao
		- [casasDecimais] = quantidade de casas decimais contidas no numero fornecido
		- [inverterSeparador] = caso verdadeiro, utiliza virgula como separador inteiro e o ponto como separador decimal, caso falso, utiliza a virgula como separador decimal e o ponto como separador inteiro
*/
function inteiro (valor) {
	if (valor == "") {
		return "0";
	}

	if (!valor.length) {
		valor = valor.toString();
	}

	var inverterSeparador = false;
	var casasDecimais = 0;

	if (arguments.length > 1) {
		casasDecimais = arguments[1];
		if (arguments.length > 2) {
			inverterSeparador = arguments[2];
		}
	}

	var caracteresDecimais = "";

	for (var i = 0; i < casasDecimais; i++) {
		caracteresDecimais += "0";
	}

	valor = $.trim(valor);
	var separador1 = ".";
	var separador2 = ",";
	if (inverterSeparador) {
		separador1 = ",";
		separador2 = ".";
	}

	var partes = new Array();
	partes = valor.split(separador1);
	valor = partes.join("");

	partes = new Array();
	partes = valor.split(separador2);
	partes[1] = (partes[1]) ? partes[1].concat(caracteresDecimais).substr(0,casasDecimais) : caracteresDecimais;

	var valorStr = partes.join("");

	i = 0;

	while ((valorStr.length > 1)&&(valorStr.charAt(i) == "0")) {
		valorStr = valorStr.substr(1);
	}

	return parseInt(valorStr);
}
