$(document).ready(function(){
	applyAutocomplete();
});

function applyAutocomplete(){
	$('input[funcao=autocomplete]').each(function(){
		$(this).unautocomplete();
		var element = this;
		var name = element.name.substring(0,element.name.length-6);
		
		var change = $(this).attr('changeAutocomplete');
		$('input[autocompleteId=' + name + '_value]').change(function(){eval(change)});
		
		if($('input[autocompleteId=' + name + '_value]').val() == '<null>'){
			setarAutocomplete(name);
		}
		verificaBotoes(name);
	});
}

function excluirAutocomplete(name){
	var includeConfirmExcludeAutocomplete = $('input[name=' + name + '_label]').attr('includeConfirmExcludeAutocomplete');

	if(includeConfirmExcludeAutocomplete == "false" || confirm('Deseja realmente deselecionar este valor?')){
		$('input[name=' + name + '_label]').val('');
		$('input[autocompleteId=' + name + '_value]').val('<null>');	
		$('input[autocompleteId=' + name + '_value]').change();
		setarAutocomplete(name);
		verificaBotoes(name);
	}
}

function verificaBotoes(name){
	if($('input[autocompleteId=' + name + '_value]').val() != '<null>'){
		$('span[autocompleteId=' + name + '_Selecionado]').show();
		$('span[autocompleteId=' + name + '_NaoSelecionado]').hide();
		
		$('input[name=' + name + '_label]').attr('readOnly','true');
	} else {
		$('span[autocompleteId=' + name + '_Selecionado]').hide();
		$('span[autocompleteId=' + name + '_NaoSelecionado]').show();
		
		$('input[name=' + name + '_label]').removeAttr('readOnly');
	}
}

function setarAutocomplete(name){

	var beanName = $('input[name=' + name + '_label]').attr('beanName');
	var loadFunctionAutocomplete = $('input[name=' + name + '_label]').attr('loadFunctionAutocomplete');
	var propertyLabel = $('input[name=' + name + '_label]').attr('propertyLabel');
	var propertyMatch = $('input[name=' + name + '_label]').attr('propertyMatch');
	var getterLabel = $('input[name=' + name + '_label]').attr('getterLabel');
	var widthAutocomplete = $('input[name=' + name + '_label]').attr('widthAutocomplete');
	var matchAutocomplete = $('input[name=' + name + '_label]').attr('matchAutocomplete');
	var startAutocomplete = $('input[name=' + name + '_label]').attr('startAutocomplete');
	
	if(loadFunctionAutocomplete === undefined) {loadFunctionAutocomplete = '';}
	if(propertyLabel === undefined) {propertyLabel = '';}
	if(propertyMatch === undefined) {propertyMatch = '';}
	if(getterLabel === undefined) {getterLabel = '';}
	if(widthAutocomplete === undefined) {widthAutocomplete = '300';}
	if(matchAutocomplete === undefined) {matchAutocomplete = 'false';}
	
	if(startAutocomplete === undefined) {
		startAutocomplete = 1;
	} else {
		startAutocomplete = parseFloat(startAutocomplete);
	}


	$('input[name=' + name + '_label]').autocomplete(contextoAutoComplete + '/ajax/autocomplete?beanName=' + beanName + '&functionLoad=' + loadFunctionAutocomplete + '&propertyLabel=' + propertyLabel + '&propertyMatch=' + propertyMatch + '&getterLabel=' + getterLabel + '&matchOption=' + matchAutocomplete, {
		width: parseFloat(widthAutocomplete),
		formatItem: formatItem,
		formatResult: formatResult,
		minChars: startAutocomplete,
		max: 300
	}).result(function(event, data, formatted) {
		$('input[name=' + name + '_label]').val(formatted);
		$('input[autocompleteId=' + name + '_value]').val(data[1]);	
		$('input[autocompleteId=' + name + '_value]').change();	
		$('input[name=' + name + '_label]').unautocomplete();
		verificaBotoes(name);
	});
}

function formatItem(row) {
	return retirarAcento(row[0]);
}
function formatResult(row) {
	return row[0];
}

function retirarAcento(varString) {
	var stringAcentos = new String('àâêôûãõáéíóúçüÀÂÊÔÛÃÕÁÉÍÓÚÇÜ');
	var stringSemAcento = new String('aaeouaoaeioucuAAEOUAOAEIOUCU');
	
	var i = new Number();
	var j = new Number();
	var cString = new String();
	var varRes = '';
	
	for (i = 0; i < varString.length; i++) {
		cString = varString.substring(i, i + 1);
		for (j = 0; j < stringAcentos.length; j++) {
			if (stringAcentos.substring(j, j + 1) == cString){
				cString = stringSemAcento.substring(j, j + 1);
			}
		}
		varRes += cString;
	}
	return varRes;
}


