package XBRL::Unit;

use strict;
use warnings;
use Carp;

our $VERSION = '0.02';

use base qw(Class::Accessor);

XBRL::Unit->mk_accessors( qw( id measure numerator denominator ) );

sub new() {
	my ($class, $in_xml) = @_;
	my $self = { };
	bless $self, $class;

	if ($in_xml) {
		&parse($self, $in_xml);
	}

	return $self;
}

sub parse() {
	my ($self, $xml) = @_;

	my $id = $xml->getAttribute('id');
	if (! $id ) { croak "no id from get attribute\n"; }	
	
	$self->{'id'} = $id; 


	my @child_nodes = $xml->getElementsByTagName('xbrli:measure');

	#if ($child_nodes[0]) {
	if (@child_nodes == 1) {
		$self->{'measure'} = $child_nodes[0]->textContent();
	}
	elsif (@child_nodes == 2) {
		my @nominators = $xml->getElementsByTagName('xbrli:unitNumerator'); 
		my @measures = $nominators[0]->getElementsByTagName('xbrli:measure');	
		$self->{'numerator'} = $measures[0]->textContent();	
		my @denominators = $xml->getElementsByTagName('xbrli:unitDenominator'); 	
		my @d_measures = $denominators[0]->getElementsByTagName('xbrli:measure');	
		$self->{'denominator'} = $d_measures[0]->textContent();	
	}

}

=head1 NAME

XBR::Unit - Perl Objected-Oriented Module for ecapsulating XBRL Units 

=head1 SYNOPSIS

  use XBRL::Unit;  
		
	my $unit = XBRL::Unit->new($unit_xml); 	

	my $unit_id = $unit->id():

	my $unit_measure = $unit->measure();

	my $unit_numerator = $unit->numerator(); 

	my $unit_denominator = $unit->denominator();


=head1 DESCRIPTION

This module is intended to work in conjunction with the XBRL module for parsing Extensible Business Reporting Language docuements.  

=over 4

=item new

Constructor for the object requires a scalar containing the XML text 
of the unit. 
		
=item id

Returns a scalar variable with the unit's ID as assigned in the 
instance document.

=item measure

Returns a scalar variable with a string describing the 
measure for the unit (e.g. iso4217:USD). 

=item numerator

Returns a scalar variable with a string describing the 
the numerator measure (e.g. iso4217:USD) in the event the 
unit is representing a division of two types of 
units (e.g Dollars per Share).

=item denominator

Returns a scalar variable with a string describing the 
the denominator measure (e.g. xbrli:shares) in the event the 
unit is representing a division of two types of 
units (e.g Dollars per Share).


=back


=head1 SEE ALSO

Modules: XBRL XBRL::Element XBRL::Table 

Source code, documentation, and bug tracking is hosted 
at: https://github.com/MarkGannon/XBRL . 

=head1 AUTHOR

Mark Gannon <mark@truenorth.nu>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2012 by Mark Gannon 

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.10 or,
at your option, any later version of Perl 5 you may have available.


=cut


1;



