package EPrints::Plugin::InputForm::Component::Field::Itemref;

use EPrints;
use EPrints::Plugin::InputForm::Component::Field;
@ISA = ( "EPrints::Plugin::InputForm::Component::Field" );

use Unicode::String qw(latin1);

use strict;

sub new
{

	my( $class, %opts ) = @_;

	my $self = $class->SUPER::new( %opts );
	
	$self->{name} = "Itemref";
	$self->{visible} = "all";
	$self->{visdepth} = 1;
	return $self;
}


sub render_content
{
	my( $self, $surround ) = @_;
	
	my $value;
	if( $self->{dataobj} )
	{
		$value = $self->{dataobj}->get_value( $self->{config}->{field}->{name} );
	}
	else
	{
		$value = $self->{default};
	}

	my $session = $self->{session};
	my $field = $self->{config}->{field};
	my $item = $self->{workflow}->{item};

	my $input = $self->{session}->make_element( "div" );

	my $maxlength = $field->get_max_input_size;
	my $size = ( $maxlength > $field->{input_cols} ?
					$field->{input_cols} : 
					$maxlength );


	my $dataset = $self->{dataobj}->get_dataset;
	my $obj = $self->{dataobj};
	my $hidden_fields = undef;
	my $basename = $self->{prefix}; 
	my $staff = 0;

	if( defined $basename )
	{
		$basename = $basename."_".$field->{name};
	}
	else
	{
		$basename = $field->{name};
	}

	if( defined $self->{config}->{field}->{toform} )
	{
		$value = $self->{config}->{field}->call_property( "toform", $value, $session );
	}

	my $elements = $field->get_input_elements( 
		    $session,
		    $self->{dataobj}->get_value( $self->{config}->{field}->{name} ), # value 
		    0, # Staff can be zero here, the parent works that way...
		    $self->{dataobj}, # obj
		    $self->{prefix}.'_'.$field->{name}, # name?
	);
	
	
	if ( defined $field->{external_lookup_url} && length( $field->{external_lookup_url} ) ) 
	{
	    my %options;
	    my $url = $field->{external_lookup_url} ."?validate=true&basename=". $field->{name} ."&fieldname=$basename&". $field->{external_lookup_params};
	    $options{onclick} = "popup_appendfield('$basename', '$url', 400, 400);";
	    $options{class} = "ep_form_internal_button";
	    $options{type} = "button";
	    my $lookup = $session->make_element("button", %options);
	    $lookup->appendChild($session->html_phrase("lib/metafield/itemref:find_entry"));
	    push @{ $elements->[0] }, {el=>$lookup};
	}


	my $table = $session->make_element( "table", border=>0, cellpadding=>0, cellspacing=>0, class=>"ep_form_input_grid" );

	my $col_titles = $field->get_input_col_titles( $session, $staff );
	if( defined $col_titles )
	{
		my $tr = $session->make_element( "tr" );
		my $th;
		my $x = 0;
		if( $field->get_property( "multiple" ) && $field->{input_ordered})
		{
			$th = $session->make_element( "th", class=>"empty_heading", id=>$basename."_th_".$x++ );
			$tr->appendChild( $th );
		}

		if( !defined $col_titles )
		{
			$th = $session->make_element( "th", class=>"empty_heading", id=>$basename."_th_".$x++ );
			$tr->appendChild( $th );
		}	
		else
		{
			foreach my $col_title ( @{$col_titles} )
			{
				$th = $session->make_element( "th", id=>$basename."_th_".$x++ );
				$th->appendChild( $col_title );
				$tr->appendChild( $th );
			}
		}
		$table->appendChild( $tr );
	}

	my $y = 0;
	foreach my $row ( @{$elements} )
	{
		my $x = 0;
		my $tr = $session->make_element( "tr" );
		foreach my $item ( @{$row} )
		{
			my %opts = ( valign=>"top", id=>$basename."_cell_".$x++."_".$y );
			foreach my $prop ( keys %{$item} )
			{
				next if( $prop eq "el" );
				$opts{$prop} = $item->{$prop};
			}	
			my $td = $session->make_element( "td", %opts );
			if( defined $item->{el} )
			{
				$td->appendChild( $item->{el} );
			}
			$tr->appendChild( $td );
		}
		$table->appendChild( $tr );
		$y++;
	}

	$input->appendChild($table);	

	return $input;
}

