function InitOTAutocomplete( id , cls ) {
	o = $("#"+id );
	o.attr( "autocomplete" , "off" );
	o.data( "defval" , "" );
	o.data( "prevval" , o.val() );
	o.data( "id" , id );
	o.data( "class" , cls );
	o.data( "mouseovertooltip" , false );

	ul = $("<ul></ul>");
	ul.attr( "class" , $("#"+id+"_cont").attr( "class" ) );
	ul.data( "parent" , o );
	ul.mouseover( function() {
			o = $(this).data("parent");
			o.data( "mouseovertooltip" , true );
		}
	);
	ul.mouseout( function() {
			o = $(this).data("parent");
			o.data( "mouseovertooltip" , false );
		}
	);
		
	ul.attr( "id" , id + "_items" );
	ul.addClass( "hitems" );
	o.data( "ul" , ul );

	$("#"+id+"_cont").append( ul );
	o.focus( function() { OTAutocompleteOnFocus( $(this) ); } );
	o.blur( function() { OTAutocompleteOnBlur( $(this) ); } );
	o.keyup( function() { OTAutocompleteOnKeyup( $(this) ); } );
}

function OTAutocompleteOnFocus( o ) {
	if (o.val()==o.data("defval")) {
		o.val("");
	}
	return FNTHAutocompleteOnFocus( o );
}

function OTAutocompleteOnBlur( o ) {
	if (o.val()=="") {
		o.val(o.data("defval"));
	}
	return FNTHAutocompleteOnBlur( o );
}

function OTAutocompleteOnKeyup( o ) {
	if (o.data("prevval")!=o.val()) {
		OTAutocompleteGetDatas( o );
		o.data("prevval",o.val());
	}
}

function OTAutocompleteHourglass( o , b ) {
	return FNTHAutocompleteHourglass( o , b );
}

function OTAutocompleteGetDatas( o ) {
	OTAutocompleteHourglass( o , true );
	$.ajax(
		{
			type: "POST",
			cache: false,
			context: o,
			data: (
				{
					inajax : 1,
					ajaxobject : o.data( "id" ),
					ajaxevent : "get_datas",
					ac_filter : o.val()
				}
			),
			success: function(ret) {
				a = eval( ret );
				$(this).data( "datas" , a );
				OTAutocompleteRegenerateTooltip( o );
				OTAutocompleteHourglass( o , false );
			}
		}
	);
}

function OTAutocompleteOnClickItem( i ) {
	o = i.data( "parent" );
	n = i.data( "num" );
	d = o.data( "datas" ).items;
	o.val( d[n].value );
	OTAutocompleteShowTooltip( o , false );
	o.focus();
}

function OTAutocompleteShowTooltip( o , b ) {
	return FNTHAutocompleteShowTooltip( o , b );
}

function OTAutocompleteRegenerateTooltip( o ) {
	ul = $("#" + o.data("id") + "_items" );
	o.data( "ul" , ul );
	ul.html( "" );
	ad = o.data( "datas" );
	d = ad.items;
	if (d.length) {
		for (i in d ) {
			li = $("<li></li>");
			li.data( "parent" , o );
			li.data( "num" , i );
			li.click( function() { OTAutocompleteOnClickItem( $(this) ); } );
			li.html( d[i].title );
			ul.append( li );
			if (i>10) break;
		}
		OTAutocompleteShowTooltip( o , true );
	} else {
		OTAutocompleteShowTooltip( o , false );
	}
}

