use EPrints;

use strict;
use warnings;

my $session = EPrints::Session->new();

my $string_frag = lc($session->param( "q" ) || "");
my $table = $session->param( "table" );
my $mode = $session->param( "mode" ) || "phrase";
if( !defined $table )
{
	EPrints::abort( "table" );
}
my $Q_table = $session->get_database->quote_identifier( "ac_$table" );
my $Q_xml = $session->get_database->quote_identifier( "xml" );
my $Q_value = $session->get_database->quote_identifier( "value" );
my $Q_string_frag = EPrints::Database::prep_like_value( $string_frag );
if( $mode eq "phrase" )
{
	$Q_string_frag = "\%$Q_string_frag\%";
}
elsif( $mode eq "prefix" )
{
	$Q_string_frag = "$Q_string_frag\%";
}
$Q_string_frag = $session->get_database->quote_value( $Q_string_frag );

my $sql = "SELECT $Q_xml from $Q_table WHERE $Q_value LIKE $Q_string_frag";

my $ul = $session->make_element( "ul" );

my $sth = $session->get_database->prepare_select( $sql, 'limit' => 40 );
$session->get_database->execute( $sth , $sql );
my $first = 1;
while( my( $value ) = $sth->fetchrow_array )
{
	chomp $value;
	my $doc;
	eval { $doc = EPrints::XML::parse_xml_string( "<div>$value</div>" ) };
	if( $@ )
	{
		$value = $session->make_text( $value );
	}
	else
	{
		$value = $session->make_doc_fragment;
		for($doc->documentElement->childNodes)
		{
			$value->appendChild( $session->clone_for_me( $_, 1 ) );
		}
		EPrints::XML::dispose( $doc );
	}
	my $li = $session->make_element( "li" );
	$ul->appendChild( $li );
	if( $first )
	{
		$li->setAttribute( "class", "ep_first" );
		$first = 0;
	}
	$li->appendChild( $value );
	my $ul2 = $session->make_element( "ul" );
	my $li2 = $session->make_element( "li", id => "for:value:relative:" );
	$li->appendChild( $ul2 );
	$ul2->appendChild( $li2 );
	$li2->appendChild( $session->clone_for_me( $value, 1 ) );
}

$session->send_http_header( content_type => "text/xml; charset=UTF-8" );
print <<END;
<?xml version="1.0" encoding="UTF-8" ?>

END
print EPrints::XML::to_string( $ul, "utf-8", 1 );

EPrints::XML::dispose( $ul );

$session->terminate;
