commit 194e0ca89e009b12534177097d4fbfc4a46330ff Author: Ben Ramey Date: Thu Mar 2 21:32:16 2017 -0600 initial commit diff --git a/archive/version_01/en/graphics/Jairus_Logo_e_small.jpg b/archive/version_01/en/graphics/Jairus_Logo_e_small.jpg new file mode 100755 index 0000000..d62358b Binary files /dev/null and b/archive/version_01/en/graphics/Jairus_Logo_e_small.jpg differ diff --git a/archive/version_01/en/graphics/bottom_left_corn.gif b/archive/version_01/en/graphics/bottom_left_corn.gif new file mode 100755 index 0000000..acb3230 Binary files /dev/null and b/archive/version_01/en/graphics/bottom_left_corn.gif differ diff --git a/archive/version_01/en/graphics/bottom_right_corn.gif b/archive/version_01/en/graphics/bottom_right_corn.gif new file mode 100755 index 0000000..b14619c Binary files /dev/null and b/archive/version_01/en/graphics/bottom_right_corn.gif differ diff --git a/archive/version_01/en/graphics/contactus_btn.gif b/archive/version_01/en/graphics/contactus_btn.gif new file mode 100755 index 0000000..723fdb1 Binary files /dev/null and b/archive/version_01/en/graphics/contactus_btn.gif differ diff --git a/archive/version_01/en/graphics/contactus_btn_2.gif b/archive/version_01/en/graphics/contactus_btn_2.gif new file mode 100755 index 0000000..cd844ac Binary files /dev/null and b/archive/version_01/en/graphics/contactus_btn_2.gif differ diff --git a/archive/version_01/en/graphics/horz_border_bottom.gif b/archive/version_01/en/graphics/horz_border_bottom.gif new file mode 100755 index 0000000..8c20fac Binary files /dev/null and b/archive/version_01/en/graphics/horz_border_bottom.gif differ diff --git a/archive/version_01/en/graphics/horz_border_top.gif b/archive/version_01/en/graphics/horz_border_top.gif new file mode 100755 index 0000000..05152dc Binary files /dev/null and b/archive/version_01/en/graphics/horz_border_top.gif differ diff --git a/archive/version_01/en/graphics/jairus_logotext_en.jpg b/archive/version_01/en/graphics/jairus_logotext_en.jpg new file mode 100755 index 0000000..685849c Binary files /dev/null and b/archive/version_01/en/graphics/jairus_logotext_en.jpg differ diff --git a/archive/version_01/en/graphics/links_btn.gif b/archive/version_01/en/graphics/links_btn.gif new file mode 100755 index 0000000..bd5c8b3 Binary files /dev/null and b/archive/version_01/en/graphics/links_btn.gif differ diff --git a/archive/version_01/en/graphics/links_btn_2.gif b/archive/version_01/en/graphics/links_btn_2.gif new file mode 100755 index 0000000..eab9079 Binary files /dev/null and b/archive/version_01/en/graphics/links_btn_2.gif differ diff --git a/archive/version_01/en/graphics/ourfamilies_btn.gif b/archive/version_01/en/graphics/ourfamilies_btn.gif new file mode 100755 index 0000000..a33f4a8 Binary files /dev/null and b/archive/version_01/en/graphics/ourfamilies_btn.gif differ diff --git a/archive/version_01/en/graphics/ourfamilies_btn_2.gif b/archive/version_01/en/graphics/ourfamilies_btn_2.gif new file mode 100755 index 0000000..b06765c Binary files /dev/null and b/archive/version_01/en/graphics/ourfamilies_btn_2.gif differ diff --git a/archive/version_01/en/graphics/ourmission_btn.gif b/archive/version_01/en/graphics/ourmission_btn.gif new file mode 100755 index 0000000..a026312 Binary files /dev/null and b/archive/version_01/en/graphics/ourmission_btn.gif differ diff --git a/archive/version_01/en/graphics/ourmission_btn_2.gif b/archive/version_01/en/graphics/ourmission_btn_2.gif new file mode 100755 index 0000000..9da39e6 Binary files /dev/null and b/archive/version_01/en/graphics/ourmission_btn_2.gif differ diff --git a/archive/version_01/en/graphics/support_btn.gif b/archive/version_01/en/graphics/support_btn.gif new file mode 100755 index 0000000..389854e Binary files /dev/null and b/archive/version_01/en/graphics/support_btn.gif differ diff --git a/archive/version_01/en/graphics/support_btn_2.gif b/archive/version_01/en/graphics/support_btn_2.gif new file mode 100755 index 0000000..5141265 Binary files /dev/null and b/archive/version_01/en/graphics/support_btn_2.gif differ diff --git a/archive/version_01/en/graphics/top_left_corn.gif b/archive/version_01/en/graphics/top_left_corn.gif new file mode 100755 index 0000000..165a1a7 Binary files /dev/null and b/archive/version_01/en/graphics/top_left_corn.gif differ diff --git a/archive/version_01/en/graphics/top_right_corn.gif b/archive/version_01/en/graphics/top_right_corn.gif new file mode 100755 index 0000000..82263dd Binary files /dev/null and b/archive/version_01/en/graphics/top_right_corn.gif differ diff --git a/archive/version_01/en/graphics/vert_border_left.gif b/archive/version_01/en/graphics/vert_border_left.gif new file mode 100755 index 0000000..1f8b90c Binary files /dev/null and b/archive/version_01/en/graphics/vert_border_left.gif differ diff --git a/archive/version_01/en/graphics/vert_border_right.gif b/archive/version_01/en/graphics/vert_border_right.gif new file mode 100755 index 0000000..eae1d49 Binary files /dev/null and b/archive/version_01/en/graphics/vert_border_right.gif differ diff --git a/archive/version_01/en/index.htm b/archive/version_01/en/index.htm new file mode 100755 index 0000000..50fb5dd --- /dev/null +++ b/archive/version_01/en/index.htm @@ -0,0 +1,61 @@ + + + + +The Internationl Jairus Society + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + +
+
+ Heading Goes Here +
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed dictum elementum pede. Maecenas nec enim. Maecenas pretium augue ut justo. Nunc dictum, sapien sit amet aliquet porttitor, nibh ligula ullamcorper dui, nec vulputate risus diam ac metus. Integer ante enim, vehicula ac, pretium in, molestie facilisis, erat. Pellentesque at nisl. Maecenas tempus risus id wisi. Maecenas nibh sem, pretium non, blandit non, fringilla in, neque. Phasellus justo. Etiam quis wisi id arcu ultrices ullamcorper. Vivamus interdum risus eget ipsum. Fusce at nisl ut odio pretium pellentesque. Integer arcu nibh, tincidunt non, vehicula faucibus, lacinia id, tortor. Etiam dignissim eleifend massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Morbi hendrerit, libero eget mollis commodo, turpis tellus tempor sem, at laoreet odio lectus convallis quam. Fusce posuere congue tellus. Nullam ullamcorper sem ac urna. Etiam in urna. Aliquam arcu dui, varius ut, suscipit at, euismod id, ne que. +

+ Donec in dolor bibendum libero malesuada egestas. Phasellus laoreet pulvinar orci. Donec ac erat a velit hendrerit imperdiet. Donec nonummy nonummy dolor. Ut a erat. Fusce arcu metus, dictum ut, interdum id, ullamcorper sit amet, nulla. Nam ornare blandit tellus. Ut id velit. Morbi felis. Nullam tincidunt. Nam sollicitudin purus nec risus ullamcorper iaculis. Sed consectetuer. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Ut at wisi. Nam turpis neque, consequat sed, feugiat in, adipiscing nec, lectus. Nulla facilisi. Aenean nec metus ac quam commodo bibendum. Donec rhoncus arcu sed sem. Suspendisse lobortis dui hendrerit eros. +
+
+
+ + diff --git a/archive/version_01/en/jairus.js b/archive/version_01/en/jairus.js new file mode 100755 index 0000000..dd71065 --- /dev/null +++ b/archive/version_01/en/jairus.js @@ -0,0 +1,37 @@ +// JavaScript Document for Jairus Society : english + +if( document.images ) +{ + var ourmission_btn = PreLoad( 'ourmission' ); + var ourfamilies_btn = PreLoad( 'ourfamilies' ); + var support_btn = PreLoad( 'support' ); + var contactus_btn = PreLoad( 'contactus' ); + var links_btn = PreLoad( 'links' ); + +} + +function PreLoad( btn ) +{ + + var img_path = "./graphics/"; //file path to find button images + var temp = new Array(); + + temp[ 0 ] = new Image(); //don't know which image we're actually loading + temp[ 1 ] = new Image(); //so format temp to hold an image, any image + //then we can use .src to load each button img + temp[ 0 ].src = img_path + btn + "_btn" + ".gif"; //first version: no mouse over image + temp[ 1 ].src = img_path + btn + "_btn_2" + ".gif"; //second version: mouse over image + + return temp; +} + +function Swap( img, mouse_on ) +{ + if( document.images ) + { + var image_id = img + "_btn"; + var temp = eval( img + "_btn" ); + + document[ image_id ].src = temp[ mouse_on ].src; + } +} \ No newline at end of file diff --git a/archive/version_01/graphics/Jairus_Logo_e_small.jpg b/archive/version_01/graphics/Jairus_Logo_e_small.jpg new file mode 100755 index 0000000..586a9d9 Binary files /dev/null and b/archive/version_01/graphics/Jairus_Logo_e_small.jpg differ diff --git a/archive/version_01/graphics/orange_circle.jpg b/archive/version_01/graphics/orange_circle.jpg new file mode 100755 index 0000000..e4758cc Binary files /dev/null and b/archive/version_01/graphics/orange_circle.jpg differ diff --git a/archive/version_01/index.htm b/archive/version_01/index.htm new file mode 100755 index 0000000..c442c9a --- /dev/null +++ b/archive/version_01/index.htm @@ -0,0 +1,34 @@ + + + + +The International Jairus Society + + + + + + + + + diff --git a/archive/version_01/jairus_index.css b/archive/version_01/jairus_index.css new file mode 100755 index 0000000..437e0c0 --- /dev/null +++ b/archive/version_01/jairus_index.css @@ -0,0 +1,35 @@ +/* CSS Document for the Jairus Society*/ + +body +{ + font-family: "Futura Lt BT", Arial; +} + +.top_left_corn { background-image: url(en/graphics/top_left_corn.gif); background-repeat: no-repeat; } +.top_right_corn { background-image: url(en/graphics/top_right_corn.gif); background-repeat: no-repeat; } +.bottom_left_corn { background-image: url(en/graphics/bottom_left_corn.gif); background-repeat: no-repeat; } +.bottom_right_corn { background-image: url(en/graphics/bottom_right_corn.gif); background-repeat: no-repeat; } +.horz_top { background-image: url(en/graphics/horz_border_top.gif); background-repeat: repeat-x; height: 10px; } +.horz_bottom { background-image: url(en/graphics/horz_border_bottom.gif); background-repeat: repeat-x; height: 10px; } +.vert_left { background-image: url(en/graphics/vert_border_left.gif); background-repeat: repeat-y; width: 10px; } +.vert_right { background-image: url(en/graphics/vert_border_right.gif); background-repeat: repeat-y; width: 10px; } + +#logo { margin-bottom: 10px; } +#spacer +{ + margin-bottom: 5px; + border-width: 3px 0px 3px 0px; + border-style: solid; + border-color: #3366CC; + background-color: #3366CC; + height: 5px; + width: 631px; +} +#content_div +{ + padding: 10px 15px 10px 15px; + width: 581px; + background-color: #FFCC33; +} +.header { font-size: 18px; color: #3366FF; font-family: "Futura Md BT", "Arial Black"; } +.body_text { font-size: 12px; } \ No newline at end of file diff --git a/archive/version_02/admin/.htaccess b/archive/version_02/admin/.htaccess new file mode 100755 index 0000000..66f7496 --- /dev/null +++ b/archive/version_02/admin/.htaccess @@ -0,0 +1,5 @@ +AuthUserFile /home/users/web/b2107/pow.zebu58/.htpasswd +AuthGroupFile /dev/null +AuthName "Jairus Admin Page" +AuthType Basic +require user fmont diff --git a/archive/version_02/admin/Tie/File.pm b/archive/version_02/admin/Tie/File.pm new file mode 100755 index 0000000..851e63a --- /dev/null +++ b/archive/version_02/admin/Tie/File.pm @@ -0,0 +1,2616 @@ + +package Tie::File; +require 5.005; +use Carp ':DEFAULT', 'confess'; +use POSIX 'SEEK_SET'; +use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX', 'LOCK_SH', 'O_WRONLY', 'O_RDONLY'; +sub O_ACCMODE () { O_RDONLY | O_RDWR | O_WRONLY } + + +$VERSION = "0.96"; +my $DEFAULT_MEMORY_SIZE = 1<<21; # 2 megabytes +my $DEFAULT_AUTODEFER_THRESHHOLD = 3; # 3 records +my $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD = 65536; # 16 disk blocksful + +my %good_opt = map {$_ => 1, "-$_" => 1} + qw(memory dw_size mode recsep discipline + autodefer autochomp autodefer_threshhold); + +sub TIEARRAY { + if (@_ % 2 != 0) { + croak "usage: tie \@array, $_[0], filename, [option => value]..."; + } + my ($pack, $file, %opts) = @_; + + # transform '-foo' keys into 'foo' keys + for my $key (keys %opts) { + unless ($good_opt{$key}) { + croak("$pack: Unrecognized option '$key'\n"); + } + my $okey = $key; + if ($key =~ s/^-+//) { + $opts{$key} = delete $opts{$okey}; + } + } + + unless (defined $opts{memory}) { + # default is the larger of the default cache size and the + # deferred-write buffer size (if specified) + $opts{memory} = $DEFAULT_MEMORY_SIZE; + $opts{memory} = $opts{dw_size} + if defined $opts{dw_size} && $opts{dw_size} > $DEFAULT_MEMORY_SIZE; + # Dora Winifred Read + } + $opts{dw_size} = $opts{memory} unless defined $opts{dw_size}; + if ($opts{dw_size} > $opts{memory}) { + croak("$pack: dw_size may not be larger than total memory allocation\n"); + } + # are we in deferred-write mode? + $opts{defer} = 0 unless defined $opts{defer}; + $opts{deferred} = {}; # no records are presently deferred + $opts{deferred_s} = 0; # count of total bytes in ->{deferred} + $opts{deferred_max} = -1; # empty + + # What's a good way to arrange that this class can be overridden? + $opts{cache} = Tie::File::Cache->new($opts{memory}); + + # autodeferment is enabled by default + $opts{autodefer} = 1 unless defined $opts{autodefer}; + $opts{autodeferring} = 0; # but is not initially active + $opts{ad_history} = []; + $opts{autodefer_threshhold} = $DEFAULT_AUTODEFER_THRESHHOLD + unless defined $opts{autodefer_threshhold}; + $opts{autodefer_filelen_threshhold} = $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD + unless defined $opts{autodefer_filelen_threshhold}; + + $opts{offsets} = [0]; + $opts{filename} = $file; + unless (defined $opts{recsep}) { + $opts{recsep} = _default_recsep(); + } + $opts{recseplen} = length($opts{recsep}); + if ($opts{recseplen} == 0) { + croak "Empty record separator not supported by $pack"; + } + + $opts{autochomp} = 1 unless defined $opts{autochomp}; + + $opts{mode} = O_CREAT|O_RDWR unless defined $opts{mode}; + $opts{rdonly} = (($opts{mode} & O_ACCMODE) == O_RDONLY); + $opts{sawlastrec} = undef; + + my $fh; + + if (UNIVERSAL::isa($file, 'GLOB')) { + # We use 1 here on the theory that some systems + # may not indicate failure if we use 0. + # MSWin32 does not indicate failure with 0, but I don't know if + # it will indicate failure with 1 or not. + unless (seek $file, 1, SEEK_SET) { + croak "$pack: your filehandle does not appear to be seekable"; + } + seek $file, 0, SEEK_SET # put it back + $fh = $file; # setting binmode is the user's problem + } elsif (ref $file) { + croak "usage: tie \@array, $pack, filename, [option => value]..."; + } else { + # $fh = \do { local *FH }; # XXX this is buggy + if ($] < 5.006) { + # perl 5.005 and earlier don't autovivify filehandles + require Symbol; + $fh = Symbol::gensym(); + } + sysopen $fh, $file, $opts{mode}, 0666 or return; + binmode $fh; + ++$opts{ourfh}; + } + { my $ofh = select $fh; $| = 1; select $ofh } # autoflush on write + if (defined $opts{discipline} && $] >= 5.006) { + # This avoids a compile-time warning under 5.005 + eval 'binmode($fh, $opts{discipline})'; + croak $@ if $@ =~ /unknown discipline/i; + die if $@; + } + $opts{fh} = $fh; + + bless \%opts => $pack; +} + +sub FETCH { + my ($self, $n) = @_; + my $rec; + + # check the defer buffer + $rec = $self->{deferred}{$n} if exists $self->{deferred}{$n}; + $rec = $self->_fetch($n) unless defined $rec; + + # inlined _chomp1 + substr($rec, - $self->{recseplen}) = "" + if defined $rec && $self->{autochomp}; + $rec; +} + +# Chomp many records in-place; return nothing useful +sub _chomp { + my $self = shift; + return unless $self->{autochomp}; + if ($self->{autochomp}) { + for (@_) { + next unless defined; + substr($_, - $self->{recseplen}) = ""; + } + } +} + +# Chomp one record in-place; return modified record +sub _chomp1 { + my ($self, $rec) = @_; + return $rec unless $self->{autochomp}; + return unless defined $rec; + substr($rec, - $self->{recseplen}) = ""; + $rec; +} + +sub _fetch { + my ($self, $n) = @_; + + # check the record cache + { my $cached = $self->{cache}->lookup($n); + return $cached if defined $cached; + } + + if ($#{$self->{offsets}} < $n) { + return if $self->{eof}; # request for record beyond end of file + my $o = $self->_fill_offsets_to($n); + # If it's still undefined, there is no such record, so return 'undef' + return unless defined $o; + } + + my $fh = $self->{FH}; + $self->_seek($n); # we can do this now that offsets is populated + my $rec = $self->_read_record; + +# If we happen to have just read the first record, check to see if +# the length of the record matches what 'tell' says. If not, Tie::File +# won't work, and should drop dead. +# +# if ($n == 0 && defined($rec) && tell($self->{fh}) != length($rec)) { +# if (defined $self->{discipline}) { +# croak "I/O discipline $self->{discipline} not supported"; +# } else { +# croak "File encoding not supported"; +# } +# } + + $self->{cache}->insert($n, $rec) if defined $rec && not $self->{flushing}; + $rec; +} + +sub STORE { + my ($self, $n, $rec) = @_; + die "STORE called from _check_integrity!" if $DIAGNOSTIC; + + $self->_fixrecs($rec); + + if ($self->{autodefer}) { + $self->_annotate_ad_history($n); + } + + return $self->_store_deferred($n, $rec) if $self->_is_deferring; + + + # We need this to decide whether the new record will fit + # It incidentally populates the offsets table + # Note we have to do this before we alter the cache + # 20020324 Wait, but this DOES alter the cache. TODO BUG? + my $oldrec = $self->_fetch($n); + + if (not defined $oldrec) { + # We're storing a record beyond the end of the file + $self->_extend_file_to($n+1); + $oldrec = $self->{recsep}; + } +# return if $oldrec eq $rec; # don't bother + my $len_diff = length($rec) - length($oldrec); + + # length($oldrec) here is not consistent with text mode TODO XXX BUG + $self->_mtwrite($rec, $self->{offsets}[$n], length($oldrec)); + $self->_oadjust([$n, 1, $rec]); + $self->{cache}->update($n, $rec); +} + +sub _store_deferred { + my ($self, $n, $rec) = @_; + $self->{cache}->remove($n); + my $old_deferred = $self->{deferred}{$n}; + + if (defined $self->{deferred_max} && $n > $self->{deferred_max}) { + $self->{deferred_max} = $n; + } + $self->{deferred}{$n} = $rec; + + my $len_diff = length($rec); + $len_diff -= length($old_deferred) if defined $old_deferred; + $self->{deferred_s} += $len_diff; + $self->{cache}->adj_limit(-$len_diff); + if ($self->{deferred_s} > $self->{dw_size}) { + $self->_flush; + } elsif ($self->_cache_too_full) { + $self->_cache_flush; + } +} + +# Remove a single record from the deferred-write buffer without writing it +# The record need not be present +sub _delete_deferred { + my ($self, $n) = @_; + my $rec = delete $self->{deferred}{$n}; + return unless defined $rec; + + if (defined $self->{deferred_max} + && $n == $self->{deferred_max}) { + undef $self->{deferred_max}; + } + + $self->{deferred_s} -= length $rec; + $self->{cache}->adj_limit(length $rec); +} + +sub FETCHSIZE { + my $self = shift; + my $n = $self->{eof} ? $#{$self->{offsets}} : $self->_fill_offsets; + + my $top_deferred = $self->_defer_max; + $n = $top_deferred+1 if defined $top_deferred && $n < $top_deferred+1; + $n; +} + +sub STORESIZE { + my ($self, $len) = @_; + + if ($self->{autodefer}) { + $self->_annotate_ad_history('STORESIZE'); + } + + my $olen = $self->FETCHSIZE; + return if $len == $olen; # Woo-hoo! + + # file gets longer + if ($len > $olen) { + if ($self->_is_deferring) { + for ($olen .. $len-1) { + $self->_store_deferred($_, $self->{recsep}); + } + } else { + $self->_extend_file_to($len); + } + return; + } + + # file gets shorter + if ($self->_is_deferring) { + # TODO maybe replace this with map-plus-assignment? + for (grep $_ >= $len, keys %{$self->{deferred}}) { + $self->_delete_deferred($_); + } + $self->{deferred_max} = $len-1; + } + + $self->_seek($len); + $self->_chop_file; + $#{$self->{offsets}} = $len; +# $self->{offsets}[0] = 0; # in case we just chopped this + + $self->{cache}->remove(grep $_ >= $len, $self->{cache}->ckeys); +} + +### OPTIMIZE ME +### It should not be necessary to do FETCHSIZE +### Just seek to the end of the file. +sub PUSH { + my $self = shift; + $self->SPLICE($self->FETCHSIZE, scalar(@_), @_); + + # No need to return: + # $self->FETCHSIZE; # because av.c takes care of this for me +} + +sub POP { + my $self = shift; + my $size = $self->FETCHSIZE; + return if $size == 0; +# print STDERR "# POPPITY POP POP POP\n"; + scalar $self->SPLICE($size-1, 1); +} + +sub SHIFT { + my $self = shift; + scalar $self->SPLICE(0, 1); +} + +sub UNSHIFT { + my $self = shift; + $self->SPLICE(0, 0, @_); + # $self->FETCHSIZE; # av.c takes care of this for me +} + +sub CLEAR { + my $self = shift; + + if ($self->{autodefer}) { + $self->_annotate_ad_history('CLEAR'); + } + + $self->_seekb(0); + $self->_chop_file; + $self->{cache}->set_limit($self->{memory}); + $self->{cache}->empty; + @{$self->{offsets}} = (0); + %{$self->{deferred}}= (); + $self->{deferred_s} = 0; + $self->{deferred_max} = -1; +} + +sub EXTEND { + my ($self, $n) = @_; + + # No need to pre-extend anything in this case + return if $self->_is_deferring; + + $self->_fill_offsets_to($n); + $self->_extend_file_to($n); +} + +sub DELETE { + my ($self, $n) = @_; + + if ($self->{autodefer}) { + $self->_annotate_ad_history('DELETE'); + } + + my $lastrec = $self->FETCHSIZE-1; + my $rec = $self->FETCH($n); + $self->_delete_deferred($n) if $self->_is_deferring; + if ($n == $lastrec) { + $self->_seek($n); + $self->_chop_file; + $#{$self->{offsets}}--; + $self->{cache}->remove($n); + # perhaps in this case I should also remove trailing null records? + # 20020316 + # Note that delete @a[-3..-1] deletes the records in the wrong order, + # so we only chop the very last one out of the file. We could repair this + # by tracking deleted records inside the object. + } elsif ($n < $lastrec) { + $self->STORE($n, ""); + } + $rec; +} + +sub EXISTS { + my ($self, $n) = @_; + return 1 if exists $self->{deferred}{$n}; + $n < $self->FETCHSIZE; +} + +sub SPLICE { + my $self = shift; + + if ($self->{autodefer}) { + $self->_annotate_ad_history('SPLICE'); + } + + $self->_flush if $self->_is_deferring; # move this up? + if (wantarray) { + $self->_chomp(my @a = $self->_splice(@_)); + @a; + } else { + $self->_chomp1(scalar $self->_splice(@_)); + } +} + +sub DESTROY { + my $self = shift; + $self->flush if $self->_is_deferring; + $self->{cache}->delink if defined $self->{cache}; # break circular link + if ($self->{fh} and $self->{ourfh}) { + delete $self->{ourfh}; + close delete $self->{fh}; + } +} + +sub _splice { + my ($self, $pos, $nrecs, @data) = @_; + my @result; + + $pos = 0 unless defined $pos; + + # Deal with negative and other out-of-range positions + # Also set default for $nrecs + { + my $oldsize = $self->FETCHSIZE; + $nrecs = $oldsize unless defined $nrecs; + my $oldpos = $pos; + + if ($pos < 0) { + $pos += $oldsize; + if ($pos < 0) { + croak "Modification of non-creatable array value attempted, subscript $oldpos"; + } + } + + if ($pos > $oldsize) { + return unless @data; + $pos = $oldsize; # This is what perl does for normal arrays + } + + # The manual is very unclear here + if ($nrecs < 0) { + $nrecs = $oldsize - $pos + $nrecs; + $nrecs = 0 if $nrecs < 0; + } + + # nrecs is too big---it really means "until the end" + # 20030507 + if ($nrecs + $pos > $oldsize) { + $nrecs = $oldsize - $pos; + } + } + + $self->_fixrecs(@data); + my $data = join '', @data; + my $datalen = length $data; + my $oldlen = 0; + + # compute length of data being removed + for ($pos .. $pos+$nrecs-1) { + last unless defined $self->_fill_offsets_to($_); + my $rec = $self->_fetch($_); + last unless defined $rec; + push @result, $rec; + + # Why don't we just use length($rec) here? + # Because that record might have come from the cache. _splice + # might have been called to flush out the deferred-write records, + # and in this case length($rec) is the length of the record to be + # *written*, not the length of the actual record in the file. But + # the offsets are still true. 20020322 + $oldlen += $self->{offsets}[$_+1] - $self->{offsets}[$_] + if defined $self->{offsets}[$_+1]; + } + $self->_fill_offsets_to($pos+$nrecs); + + # Modify the file + $self->_mtwrite($data, $self->{offsets}[$pos], $oldlen); + # Adjust the offsets table + $self->_oadjust([$pos, $nrecs, @data]); + + { # Take this read cache stuff out into a separate function + # You made a half-attempt to put it into _oadjust. + # Finish something like that up eventually. + # STORE also needs to do something similarish + + # update the read cache, part 1 + # modified records + for ($pos .. $pos+$nrecs-1) { + my $new = $data[$_-$pos]; + if (defined $new) { + $self->{cache}->update($_, $new); + } else { + $self->{cache}->remove($_); + } + } + + # update the read cache, part 2 + # moved records - records past the site of the change + # need to be renumbered + # Maybe merge this with the previous block? + { + my @oldkeys = grep $_ >= $pos + $nrecs, $self->{cache}->ckeys; + my @newkeys = map $_-$nrecs+@data, @oldkeys; + $self->{cache}->rekey(\@oldkeys, \@newkeys); + } + + # Now there might be too much data in the cache, if we spliced out + # some short records and spliced in some long ones. If so, flush + # the cache. + $self->_cache_flush; + } + + # Yes, the return value of 'splice' *is* actually this complicated + wantarray ? @result : @result ? $result[-1] : undef; +} + + +# write data into the file +# $data is the data to be written. +# it should be written at position $pos, and should overwrite +# exactly $len of the following bytes. +# Note that if length($data) > $len, the subsequent bytes will have to +# be moved up, and if length($data) < $len, they will have to +# be moved down +sub _twrite { + my ($self, $data, $pos, $len) = @_; + + unless (defined $pos) { + die "\$pos was undefined in _twrite"; + } + + my $len_diff = length($data) - $len; + + if ($len_diff == 0) { # Woo-hoo! + my $fh = $self->{fh}; + $self->_seekb($pos); + $self->_write_record($data); + return; # well, that was easy. + } + + # the two records are of different lengths + # our strategy here: rewrite the tail of the file, + # reading ahead one buffer at a time + # $bufsize is required to be at least as large as the data we're overwriting + my $bufsize = _bufsize($len_diff); + my ($writepos, $readpos) = ($pos, $pos+$len); + my $next_block; + my $more_data; + + # Seems like there ought to be a way to avoid the repeated code + # and the special case here. The read(1) is also a little weird. + # Think about this. + do { + $self->_seekb($readpos); + my $br = read $self->{fh}, $next_block, $bufsize; + $more_data = read $self->{fh}, my($dummy), 1; + $self->_seekb($writepos); + $self->_write_record($data); + $readpos += $br; + $writepos += length $data; + $data = $next_block; + } while $more_data; + $self->_seekb($writepos); + $self->_write_record($next_block); + + # There might be leftover data at the end of the file + $self->_chop_file if $len_diff < 0; +} + +# _iwrite(D, S, E) +# Insert text D at position S. +# Let C = E-S-|D|. If C < 0; die. +# Data in [S,S+C) is copied to [S+D,S+D+C) = [S+D,E). +# Data in [S+C = E-D, E) is returned. Data in [E, oo) is untouched. +# +# In a later version, don't read the entire intervening area into +# memory at once; do the copying block by block. +sub _iwrite { + my $self = shift; + my ($D, $s, $e) = @_; + my $d = length $D; + my $c = $e-$s-$d; + local *FH = $self->{fh}; + confess "Not enough space to insert $d bytes between $s and $e" + if $c < 0; + confess "[$s,$e) is an invalid insertion range" if $e < $s; + + $self->_seekb($s); + read FH, my $buf, $e-$s; + + $D .= substr($buf, 0, $c, ""); + + $self->_seekb($s); + $self->_write_record($D); + + return $buf; +} + +# Like _twrite, but the data-pos-len triple may be repeated; you may +# write several chunks. All the writing will be done in +# one pass. Chunks SHALL be in ascending order and SHALL NOT overlap. +sub _mtwrite { + my $self = shift; + my $unwritten = ""; + my $delta = 0; + + @_ % 3 == 0 + or die "Arguments to _mtwrite did not come in groups of three"; + + while (@_) { + my ($data, $pos, $len) = splice @_, 0, 3; + my $end = $pos + $len; # The OLD end of the segment to be replaced + $data = $unwritten . $data; + $delta -= length($unwritten); + $unwritten = ""; + $pos += $delta; # This is where the data goes now + my $dlen = length $data; + $self->_seekb($pos); + if ($len >= $dlen) { # the data will fit + $self->_write_record($data); + $delta += ($dlen - $len); # everything following moves down by this much + $data = ""; # All the data in the buffer has been written + } else { # won't fit + my $writable = substr($data, 0, $len - $delta, ""); + $self->_write_record($writable); + $delta += ($dlen - $len); # everything following moves down by this much + } + + # At this point we've written some but maybe not all of the data. + # There might be a gap to close up, or $data might still contain a + # bunch of unwritten data that didn't fit. + my $ndlen = length $data; + if ($delta == 0) { + $self->_write_record($data); + } elsif ($delta < 0) { + # upcopy (close up gap) + if (@_) { + $self->_upcopy($end, $end + $delta, $_[1] - $end); + } else { + $self->_upcopy($end, $end + $delta); + } + } else { + # downcopy (insert data that didn't fit; replace this data in memory + # with _later_ data that doesn't fit) + if (@_) { + $unwritten = $self->_downcopy($data, $end, $_[1] - $end); + } else { + # Make the file longer to accomodate the last segment that doesn' + $unwritten = $self->_downcopy($data, $end); + } + } + } +} + +# Copy block of data of length $len from position $spos to position $dpos +# $dpos must be <= $spos +# +# If $len is undefined, go all the way to the end of the file +# and then truncate it ($spos - $dpos bytes will be removed) +sub _upcopy { + my $blocksize = 8192; + my ($self, $spos, $dpos, $len) = @_; + if ($dpos > $spos) { + die "source ($spos) was upstream of destination ($dpos) in _upcopy"; + } elsif ($dpos == $spos) { + return; + } + + while (! defined ($len) || $len > 0) { + my $readsize = ! defined($len) ? $blocksize + : $len > $blocksize ? $blocksize + : $len; + + my $fh = $self->{fh}; + $self->_seekb($spos); + my $bytes_read = read $fh, my($data), $readsize; + $self->_seekb($dpos); + if ($data eq "") { + $self->_chop_file; + last; + } + $self->_write_record($data); + $spos += $bytes_read; + $dpos += $bytes_read; + $len -= $bytes_read if defined $len; + } +} + +# Write $data into a block of length $len at position $pos, +# moving everything in the block forwards to make room. +# Instead of writing the last length($data) bytes from the block +# (because there isn't room for them any longer) return them. +sub _downcopy { + my $blocksize = 8192; + my ($self, $data, $pos, $len) = @_; + my $fh = $self->{fh}; + + while (! defined $len || $len > 0) { + my $readsize = ! defined($len) ? $blocksize + : $len > $blocksize? $blocksize : $len; + $self->_seekb($pos); + read $fh, my($old), $readsize; + $data .= $old; + $self->_seekb($pos); + my $writable = substr($data, 0, $readsize, ""); + last if $writable eq ""; + $self->_write_record($writable); + $len -= $readsize if defined $len; + $pos += $readsize; + } + return $data; +} + +# Adjust the object data structures following an '_mtwrite' +# Arguments are +# [$pos, $nrecs, @length] items +# indicating that $nrecs records were removed at $recpos (a record offset) +# and replaced with records of length @length... +# Arguments guarantee that $recpos is strictly increasing. +# No return value +sub _oadjust { + my $self = shift; + my $delta = 0; + my $delta_recs = 0; + my $prev_end = -1; + my %newkeys; + + for (@_) { + my ($pos, $nrecs, @data) = @$_; + $pos += $delta_recs; + + # Adjust the offsets of the records after the previous batch up + # to the first new one of this batch + for my $i ($prev_end+2 .. $pos - 1) { + $self->{offsets}[$i] += $delta; + $newkey{$i} = $i + $delta_recs; + } + + $prev_end = $pos + @data - 1; # last record moved on this pass + + # Remove the offsets for the removed records; + # replace with the offsets for the inserted records + my @newoff = ($self->{offsets}[$pos] + $delta); + for my $i (0 .. $#data) { + my $newlen = length $data[$i]; + push @newoff, $newoff[$i] + $newlen; + $delta += $newlen; + } + + for my $i ($pos .. $pos+$nrecs-1) { + last if $i+1 > $#{$self->{offsets}}; + my $oldlen = $self->{offsets}[$i+1] - $self->{offsets}[$i]; + $delta -= $oldlen; + } + +# # also this data has changed, so update it in the cache +# for (0 .. $#data) { +# $self->{cache}->update($pos + $_, $data[$_]); +# } +# if ($delta_recs) { +# my @oldkeys = grep $_ >= $pos + @data, $self->{cache}->ckeys; +# my @newkeys = map $_ + $delta_recs, @oldkeys; +# $self->{cache}->rekey(\@oldkeys, \@newkeys); +# } + + # replace old offsets with new + splice @{$self->{offsets}}, $pos, $nrecs+1, @newoff; + # What if we just spliced out the end of the offsets table? + # shouldn't we clear $self->{eof}? Test for this XXX BUG TODO + + $delta_recs += @data - $nrecs; # net change in total number of records + } + + # The trailing records at the very end of the file + if ($delta) { + for my $i ($prev_end+2 .. $#{$self->{offsets}}) { + $self->{offsets}[$i] += $delta; + } + } + + # If we scrubbed out all known offsets, regenerate the trivial table + # that knows that the file does indeed start at 0. + $self->{offsets}[0] = 0 unless @{$self->{offsets}}; + # If the file got longer, the offsets table is no longer complete + # $self->{eof} = 0 if $delta_recs > 0; + + # Now there might be too much data in the cache, if we spliced out + # some short records and spliced in some long ones. If so, flush + # the cache. + $self->_cache_flush; +} + +# If a record does not already end with the appropriate terminator +# string, append one. +sub _fixrecs { + my $self = shift; + for (@_) { + $_ = "" unless defined $_; + $_ .= $self->{recsep} + unless substr($_, - $self->{recseplen}) eq $self->{recsep}; + } +} + + +################################################################ +# +# Basic read, write, and seek +# + +# seek to the beginning of record #$n +# Assumes that the offsets table is already correctly populated +# +# Note that $n=-1 has a special meaning here: It means the start of +# the last known record; this may or may not be the very last record +# in the file, depending on whether the offsets table is fully populated. +# +sub _seek { + my ($self, $n) = @_; + my $o = $self->{offsets}[$n]; + defined($o) + or confess("logic error: undefined offset for record $n"); + seek $self->{fh}, $o, SEEK_SET + or confess "Couldn't seek filehandle: $!"; # "Should never happen." +} + +# seek to byte $b in the file +sub _seekb { + my ($self, $b) = @_; + seek $self->{fh}, $b, SEEK_SET + or die "Couldn't seek filehandle: $!"; # "Should never happen." +} + +# populate the offsets table up to the beginning of record $n +# return the offset of record $n +sub _fill_offsets_to { + my ($self, $n) = @_; + + return $self->{offsets}[$n] if $self->{eof}; + + my $fh = $self->{fh}; + local *OFF = $self->{offsets}; + my $rec; + + until ($#OFF >= $n) { + $self->_seek(-1); # tricky -- see comment at _seek + $rec = $self->_read_record; + if (defined $rec) { + push @OFF, int(tell $fh); # Tels says that int() saves memory here + } else { + $self->{eof} = 1; + return; # It turns out there is no such record + } + } + + # we have now read all the records up to record n-1, + # so we can return the offset of record n + $OFF[$n]; +} + +sub _fill_offsets { + my ($self) = @_; + + my $fh = $self->{fh}; + local *OFF = $self->{offsets}; + + $self->_seek(-1); # tricky -- see comment at _seek + + # Tels says that inlining read_record() would make this loop + # five times faster. 20030508 + while ( defined $self->_read_record()) { + # int() saves us memory here + push @OFF, int(tell $fh); + } + + $self->{eof} = 1; + $#OFF; +} + +# assumes that $rec is already suitably terminated +sub _write_record { + my ($self, $rec) = @_; + my $fh = $self->{fh}; + local $\ = ""; + print $fh $rec + or die "Couldn't write record: $!"; # "Should never happen." +# $self->{_written} += length($rec); +} + +sub _read_record { + my $self = shift; + my $rec; + { local $/ = $self->{recsep}; + my $fh = $self->{fh}; + $rec = <$fh>; + } + return unless defined $rec; + if (substr($rec, -$self->{recseplen}) ne $self->{recsep}) { + # improperly terminated final record --- quietly fix it. +# my $ac = substr($rec, -$self->{recseplen}); +# $ac =~ s/\n/\\n/g; + $self->{sawlastrec} = 1; + unless ($self->{rdonly}) { + local $\ = ""; + my $fh = $self->{fh}; + print $fh $self->{recsep}; + } + $rec .= $self->{recsep}; + } +# $self->{_read} += length($rec) if defined $rec; + $rec; +} + +sub _rw_stats { + my $self = shift; + @{$self}{'_read', '_written'}; +} + +################################################################ +# +# Read cache management + +sub _cache_flush { + my ($self) = @_; + $self->{cache}->reduce_size_to($self->{memory} - $self->{deferred_s}); +} + +sub _cache_too_full { + my $self = shift; + $self->{cache}->bytes + $self->{deferred_s} >= $self->{memory}; +} + +################################################################ +# +# File custodial services +# + + +# We have read to the end of the file and have the offsets table +# entirely populated. Now we need to write a new record beyond +# the end of the file. We prepare for this by writing +# empty records into the file up to the position we want +# +# assumes that the offsets table already contains the offset of record $n, +# if it exists, and extends to the end of the file if not. +sub _extend_file_to { + my ($self, $n) = @_; + $self->_seek(-1); # position after the end of the last record + my $pos = $self->{offsets}[-1]; + + # the offsets table has one entry more than the total number of records + my $extras = $n - $#{$self->{offsets}}; + + # Todo : just use $self->{recsep} x $extras here? + while ($extras-- > 0) { + $self->_write_record($self->{recsep}); + push @{$self->{offsets}}, int(tell $self->{fh}); + } +} + +# Truncate the file at the current position +sub _chop_file { + my $self = shift; + truncate $self->{fh}, tell($self->{fh}); +} + + +# compute the size of a buffer suitable for moving +# all the data in a file forward $n bytes +# ($n may be negative) +# The result should be at least $n. +sub _bufsize { + my $n = shift; + return 8192 if $n <= 0; + my $b = $n & ~8191; + $b += 8192 if $n & 8191; + $b; +} + +################################################################ +# +# Miscellaneous public methods +# + +# Lock the file +sub flock { + my ($self, $op) = @_; + unless (@_ <= 3) { + my $pack = ref $self; + croak "Usage: $pack\->flock([OPERATION])"; + } + my $fh = $self->{fh}; + $op = LOCK_EX unless defined $op; + my $locked = flock $fh, $op; + + if ($locked && ($op & (LOCK_EX | LOCK_SH))) { + # If you're locking the file, then presumably it's because + # there might have been a write access by another process. + # In that case, the read cache contents and the offsets table + # might be invalid, so discard them. 20030508 + $self->{offsets} = [0]; + $self->{cache}->empty; + } + + $locked; +} + +# Get/set autochomp option +sub autochomp { + my $self = shift; + if (@_) { + my $old = $self->{autochomp}; + $self->{autochomp} = shift; + $old; + } else { + $self->{autochomp}; + } +} + +# Get offset table entries; returns offset of nth record +sub offset { + my ($self, $n) = @_; + + if ($#{$self->{offsets}} < $n) { + return if $self->{eof}; # request for record beyond the end of file + my $o = $self->_fill_offsets_to($n); + # If it's still undefined, there is no such record, so return 'undef' + return unless defined $o; + } + + $self->{offsets}[$n]; +} + +sub discard_offsets { + my $self = shift; + $self->{offsets} = [0]; +} + +################################################################ +# +# Matters related to deferred writing +# + +# Defer writes +sub defer { + my $self = shift; + $self->_stop_autodeferring; + @{$self->{ad_history}} = (); + $self->{defer} = 1; +} + +# Flush deferred writes +# +# This could be better optimized to write the file in one pass, instead +# of one pass per block of records. But that will require modifications +# to _twrite, so I should have a good _twrite test suite first. +sub flush { + my $self = shift; + + $self->_flush; + $self->{defer} = 0; +} + +sub _old_flush { + my $self = shift; + my @writable = sort {$a<=>$b} (keys %{$self->{deferred}}); + + while (@writable) { + # gather all consecutive records from the front of @writable + my $first_rec = shift @writable; + my $last_rec = $first_rec+1; + ++$last_rec, shift @writable while @writable && $last_rec == $writable[0]; + --$last_rec; + $self->_fill_offsets_to($last_rec); + $self->_extend_file_to($last_rec); + $self->_splice($first_rec, $last_rec-$first_rec+1, + @{$self->{deferred}}{$first_rec .. $last_rec}); + } + + $self->_discard; # clear out defered-write-cache +} + +sub _flush { + my $self = shift; + my @writable = sort {$a<=>$b} (keys %{$self->{deferred}}); + my @args; + my @adjust; + + while (@writable) { + # gather all consecutive records from the front of @writable + my $first_rec = shift @writable; + my $last_rec = $first_rec+1; + ++$last_rec, shift @writable while @writable && $last_rec == $writable[0]; + --$last_rec; + my $end = $self->_fill_offsets_to($last_rec+1); + if (not defined $end) { + $self->_extend_file_to($last_rec); + $end = $self->{offsets}[$last_rec]; + } + my ($start) = $self->{offsets}[$first_rec]; + push @args, + join("", @{$self->{deferred}}{$first_rec .. $last_rec}), # data + $start, # position + $end-$start; # length + push @adjust, [$first_rec, # starting at this position... + $last_rec-$first_rec+1, # this many records... + # are replaced with these... + @{$self->{deferred}}{$first_rec .. $last_rec}, + ]; + } + + $self->_mtwrite(@args); # write multiple record groups + $self->_discard; # clear out defered-write-cache + $self->_oadjust(@adjust); +} + +# Discard deferred writes and disable future deferred writes +sub discard { + my $self = shift; + $self->_discard; + $self->{defer} = 0; +} + +# Discard deferred writes, but retain old deferred writing mode +sub _discard { + my $self = shift; + %{$self->{deferred}} = (); + $self->{deferred_s} = 0; + $self->{deferred_max} = -1; + $self->{cache}->set_limit($self->{memory}); +} + +# Deferred writing is enabled, either explicitly ($self->{defer}) +# or automatically ($self->{autodeferring}) +sub _is_deferring { + my $self = shift; + $self->{defer} || $self->{autodeferring}; +} + +# The largest record number of any deferred record +sub _defer_max { + my $self = shift; + return $self->{deferred_max} if defined $self->{deferred_max}; + my $max = -1; + for my $key (keys %{$self->{deferred}}) { + $max = $key if $key > $max; + } + $self->{deferred_max} = $max; + $max; +} + +################################################################ +# +# Matters related to autodeferment +# + +# Get/set autodefer option +sub autodefer { + my $self = shift; + if (@_) { + my $old = $self->{autodefer}; + $self->{autodefer} = shift; + if ($old) { + $self->_stop_autodeferring; + @{$self->{ad_history}} = (); + } + $old; + } else { + $self->{autodefer}; + } +} + +# The user is trying to store record #$n Record that in the history, +# and then enable (or disable) autodeferment if that seems useful. +# Note that it's OK for $n to be a non-number, as long as the function +# is prepared to deal with that. Nobody else looks at the ad_history. +# +# Now, what does the ad_history mean, and what is this function doing? +# Essentially, the idea is to enable autodeferring when we see that the +# user has made three consecutive STORE calls to three consecutive records. +# ("Three" is actually ->{autodefer_threshhold}.) +# A STORE call for record #$n inserts $n into the autodefer history, +# and if the history contains three consecutive records, we enable +# autodeferment. An ad_history of [X, Y] means that the most recent +# STOREs were for records X, X+1, ..., Y, in that order. +# +# Inserting a nonconsecutive number erases the history and starts over. +# +# Performing a special operation like SPLICE erases the history. +# +# There's one special case: CLEAR means that CLEAR was just called. +# In this case, we prime the history with [-2, -1] so that if the next +# write is for record 0, autodeferring goes on immediately. This is for +# the common special case of "@a = (...)". +# +sub _annotate_ad_history { + my ($self, $n) = @_; + return unless $self->{autodefer}; # feature is disabled + return if $self->{defer}; # already in explicit defer mode + return unless $self->{offsets}[-1] >= $self->{autodefer_filelen_threshhold}; + + local *H = $self->{ad_history}; + if ($n eq 'CLEAR') { + @H = (-2, -1); # prime the history with fake records + $self->_stop_autodeferring; + } elsif ($n =~ /^\d+$/) { + if (@H == 0) { + @H = ($n, $n); + } else { # @H == 2 + if ($H[1] == $n-1) { # another consecutive record + $H[1]++; + if ($H[1] - $H[0] + 1 >= $self->{autodefer_threshhold}) { + $self->{autodeferring} = 1; + } + } else { # nonconsecutive- erase and start over + @H = ($n, $n); + $self->_stop_autodeferring; + } + } + } else { # SPLICE or STORESIZE or some such + @H = (); + $self->_stop_autodeferring; + } +} + +# If autodeferring was enabled, cut it out and discard the history +sub _stop_autodeferring { + my $self = shift; + if ($self->{autodeferring}) { + $self->_flush; + } + $self->{autodeferring} = 0; +} + +################################################################ + + +# This is NOT a method. It is here for two reasons: +# 1. To factor a fairly complicated block out of the constructor +# 2. To provide access for the test suite, which need to be sure +# files are being written properly. +sub _default_recsep { + my $recsep = $/; + if ($^O eq 'MSWin32') { # Dos too? + # Windows users expect files to be terminated with \r\n + # But $/ is set to \n instead + # Note that this also transforms \n\n into \r\n\r\n. + # That is a feature. + $recsep =~ s/\n/\r\n/g; + } + $recsep; +} + +# Utility function for _check_integrity +sub _ci_warn { + my $msg = shift; + $msg =~ s/\n/\\n/g; + $msg =~ s/\r/\\r/g; + print "# $msg\n"; +} + +# Given a file, make sure the cache is consistent with the +# file contents and the internal data structures are consistent with +# each other. Returns true if everything checks out, false if not +# +# The $file argument is no longer used. It is retained for compatibility +# with the existing test suite. +sub _check_integrity { + my ($self, $file, $warn) = @_; + my $rsl = $self->{recseplen}; + my $rs = $self->{recsep}; + my $good = 1; + local *_; # local $_ does not work here + local $DIAGNOSTIC = 1; + + if (not defined $rs) { + _ci_warn("recsep is undef!"); + $good = 0; + } elsif ($rs eq "") { + _ci_warn("recsep is empty!"); + $good = 0; + } elsif ($rsl != length $rs) { + my $ln = length $rs; + _ci_warn("recsep <$rs> has length $ln, should be $rsl"); + $good = 0; + } + + if (not defined $self->{offsets}[0]) { + _ci_warn("offset 0 is missing!"); + $good = 0; + + } elsif ($self->{offsets}[0] != 0) { + _ci_warn("rec 0: offset <$self->{offsets}[0]> s/b 0!"); + $good = 0; + } + + my $cached = 0; + { + local *F = $self->{fh}; + seek F, 0, SEEK_SET; + local $. = 0; + local $/ = $rs; + + while () { + my $n = $. - 1; + my $cached = $self->{cache}->_produce($n); + my $offset = $self->{offsets}[$.]; + my $ao = tell F; + if (defined $offset && $offset != $ao) { + _ci_warn("rec $n: offset <$offset> actual <$ao>"); + $good = 0; + } + if (defined $cached && $_ ne $cached && ! $self->{deferred}{$n}) { + $good = 0; + _ci_warn("rec $n: cached <$cached> actual <$_>"); + } + if (defined $cached && substr($cached, -$rsl) ne $rs) { + $good = 0; + _ci_warn("rec $n in the cache is missing the record separator"); + } + if (! defined $offset && $self->{eof}) { + $good = 0; + _ci_warn("The offset table was marked complete, but it is missing element $."); + } + } + if (@{$self->{offsets}} > $.+1) { + $good = 0; + my $n = @{$self->{offsets}}; + _ci_warn("The offset table has $n items, but the file has only $."); + } + + my $deferring = $self->_is_deferring; + for my $n ($self->{cache}->ckeys) { + my $r = $self->{cache}->_produce($n); + $cached += length($r); + next if $n+1 <= $.; # checked this already + _ci_warn("spurious caching of record $n"); + $good = 0; + } + my $b = $self->{cache}->bytes; + if ($cached != $b) { + _ci_warn("cache size is $b, should be $cached"); + $good = 0; + } + } + + # That cache has its own set of tests + $good = 0 unless $self->{cache}->_check_integrity; + + # Now let's check the deferbuffer + # Unless deferred writing is enabled, it should be empty + if (! $self->_is_deferring && %{$self->{deferred}}) { + _ci_warn("deferred writing disabled, but deferbuffer nonempty"); + $good = 0; + } + + # Any record in the deferbuffer should *not* be present in the readcache + my $deferred_s = 0; + while (my ($n, $r) = each %{$self->{deferred}}) { + $deferred_s += length($r); + if (defined $self->{cache}->_produce($n)) { + _ci_warn("record $n is in the deferbuffer *and* the readcache"); + $good = 0; + } + if (substr($r, -$rsl) ne $rs) { + _ci_warn("rec $n in the deferbuffer is missing the record separator"); + $good = 0; + } + } + + # Total size of deferbuffer should match internal total + if ($deferred_s != $self->{deferred_s}) { + _ci_warn("buffer size is $self->{deferred_s}, should be $deferred_s"); + $good = 0; + } + + # Total size of deferbuffer should not exceed the specified limit + if ($deferred_s > $self->{dw_size}) { + _ci_warn("buffer size is $self->{deferred_s} which exceeds the limit of $self->{dw_size}"); + $good = 0; + } + + # Total size of cached data should not exceed the specified limit + if ($deferred_s + $cached > $self->{memory}) { + my $total = $deferred_s + $cached; + _ci_warn("total stored data size is $total which exceeds the limit of $self->{memory}"); + $good = 0; + } + + # Stuff related to autodeferment + if (!$self->{autodefer} && @{$self->{ad_history}}) { + _ci_warn("autodefer is disabled, but ad_history is nonempty"); + $good = 0; + } + if ($self->{autodeferring} && $self->{defer}) { + _ci_warn("both autodeferring and explicit deferring are active"); + $good = 0; + } + if (@{$self->{ad_history}} == 0) { + # That's OK, no additional tests required + } elsif (@{$self->{ad_history}} == 2) { + my @non_number = grep !/^-?\d+$/, @{$self->{ad_history}}; + if (@non_number) { + my $msg; + { local $" = ')('; + $msg = "ad_history contains non-numbers (@{$self->{ad_history}})"; + } + _ci_warn($msg); + $good = 0; + } elsif ($self->{ad_history}[1] < $self->{ad_history}[0]) { + _ci_warn("ad_history has nonsensical values @{$self->{ad_history}}"); + $good = 0; + } + } else { + _ci_warn("ad_history has bad length <@{$self->{ad_history}}>"); + $good = 0; + } + + $good; +} + +################################################################ +# +# Tie::File::Cache +# +# Read cache + +package Tie::File::Cache; +$Tie::File::Cache::VERSION = $Tie::File::VERSION; +use Carp ':DEFAULT', 'confess'; + +sub HEAP () { 0 } +sub HASH () { 1 } +sub MAX () { 2 } +sub BYTES() { 3 } +#sub STAT () { 4 } # Array with request statistics for each record +#sub MISS () { 5 } # Total number of cache misses +#sub REQ () { 6 } # Total number of cache requests +use strict 'vars'; + +sub new { + my ($pack, $max) = @_; + local *_; + croak "missing argument to ->new" unless defined $max; + my $self = []; + bless $self => $pack; + @$self = (Tie::File::Heap->new($self), {}, $max, 0); + $self; +} + +sub adj_limit { + my ($self, $n) = @_; + $self->[MAX] += $n; +} + +sub set_limit { + my ($self, $n) = @_; + $self->[MAX] = $n; +} + +# For internal use only +# Will be called by the heap structure to notify us that a certain +# piece of data has moved from one heap element to another. +# $k is the hash key of the item +# $n is the new index into the heap at which it is stored +# If $n is undefined, the item has been removed from the heap. +sub _heap_move { + my ($self, $k, $n) = @_; + if (defined $n) { + $self->[HASH]{$k} = $n; + } else { + delete $self->[HASH]{$k}; + } +} + +sub insert { + my ($self, $key, $val) = @_; + local *_; + croak "missing argument to ->insert" unless defined $key; + unless (defined $self->[MAX]) { + confess "undefined max" ; + } + confess "undefined val" unless defined $val; + return if length($val) > $self->[MAX]; + +# if ($self->[STAT]) { +# $self->[STAT][$key] = 1; +# return; +# } + + my $oldnode = $self->[HASH]{$key}; + if (defined $oldnode) { + my $oldval = $self->[HEAP]->set_val($oldnode, $val); + $self->[BYTES] -= length($oldval); + } else { + $self->[HEAP]->insert($key, $val); + } + $self->[BYTES] += length($val); + $self->flush if $self->[BYTES] > $self->[MAX]; +} + +sub expire { + my $self = shift; + my $old_data = $self->[HEAP]->popheap; + return unless defined $old_data; + $self->[BYTES] -= length $old_data; + $old_data; +} + +sub remove { + my ($self, @keys) = @_; + my @result; + +# if ($self->[STAT]) { +# for my $key (@keys) { +# $self->[STAT][$key] = 0; +# } +# return; +# } + + for my $key (@keys) { + next unless exists $self->[HASH]{$key}; + my $old_data = $self->[HEAP]->remove($self->[HASH]{$key}); + $self->[BYTES] -= length $old_data; + push @result, $old_data; + } + @result; +} + +sub lookup { + my ($self, $key) = @_; + local *_; + croak "missing argument to ->lookup" unless defined $key; + +# if ($self->[STAT]) { +# $self->[MISS]++ if $self->[STAT][$key]++ == 0; +# $self->[REQ]++; +# my $hit_rate = 1 - $self->[MISS] / $self->[REQ]; +# # Do some testing to determine this threshhold +# $#$self = STAT - 1 if $hit_rate > 0.20; +# } + + if (exists $self->[HASH]{$key}) { + $self->[HEAP]->lookup($self->[HASH]{$key}); + } else { + return; + } +} + +# For internal use only +sub _produce { + my ($self, $key) = @_; + my $loc = $self->[HASH]{$key}; + return unless defined $loc; + $self->[HEAP][$loc][2]; +} + +# For internal use only +sub _promote { + my ($self, $key) = @_; + $self->[HEAP]->promote($self->[HASH]{$key}); +} + +sub empty { + my ($self) = @_; + %{$self->[HASH]} = (); + $self->[BYTES] = 0; + $self->[HEAP]->empty; +# @{$self->[STAT]} = (); +# $self->[MISS] = 0; +# $self->[REQ] = 0; +} + +sub is_empty { + my ($self) = @_; + keys %{$self->[HASH]} == 0; +} + +sub update { + my ($self, $key, $val) = @_; + local *_; + croak "missing argument to ->update" unless defined $key; + if (length($val) > $self->[MAX]) { + my ($oldval) = $self->remove($key); + $self->[BYTES] -= length($oldval) if defined $oldval; + } elsif (exists $self->[HASH]{$key}) { + my $oldval = $self->[HEAP]->set_val($self->[HASH]{$key}, $val); + $self->[BYTES] += length($val); + $self->[BYTES] -= length($oldval) if defined $oldval; + } else { + $self->[HEAP]->insert($key, $val); + $self->[BYTES] += length($val); + } + $self->flush; +} + +sub rekey { + my ($self, $okeys, $nkeys) = @_; + local *_; + my %map; + @map{@$okeys} = @$nkeys; + croak "missing argument to ->rekey" unless defined $nkeys; + croak "length mismatch in ->rekey arguments" unless @$nkeys == @$okeys; + my %adjusted; # map new keys to heap indices + # You should be able to cut this to one loop TODO XXX + for (0 .. $#$okeys) { + $adjusted{$nkeys->[$_]} = delete $self->[HASH]{$okeys->[$_]}; + } + while (my ($nk, $ix) = each %adjusted) { + # @{$self->[HASH]}{keys %adjusted} = values %adjusted; + $self->[HEAP]->rekey($ix, $nk); + $self->[HASH]{$nk} = $ix; + } +} + +sub ckeys { + my $self = shift; + my @a = keys %{$self->[HASH]}; + @a; +} + +# Return total amount of cached data +sub bytes { + my $self = shift; + $self->[BYTES]; +} + +# Expire oldest item from cache until cache size is smaller than $max +sub reduce_size_to { + my ($self, $max) = @_; + until ($self->[BYTES] <= $max) { + # Note that Tie::File::Cache::expire has been inlined here + my $old_data = $self->[HEAP]->popheap; + return unless defined $old_data; + $self->[BYTES] -= length $old_data; + } +} + +# Why not just $self->reduce_size_to($self->[MAX])? +# Try this when things stabilize TODO XXX +# If the cache is too full, expire the oldest records +sub flush { + my $self = shift; + $self->reduce_size_to($self->[MAX]) if $self->[BYTES] > $self->[MAX]; +} + +# For internal use only +sub _produce_lru { + my $self = shift; + $self->[HEAP]->expire_order; +} + +BEGIN { *_ci_warn = \&Tie::File::_ci_warn } + +sub _check_integrity { # For CACHE + my $self = shift; + my $good = 1; + + # Test HEAP + $self->[HEAP]->_check_integrity or $good = 0; + + # Test HASH + my $bytes = 0; + for my $k (keys %{$self->[HASH]}) { + if ($k ne '0' && $k !~ /^[1-9][0-9]*$/) { + $good = 0; + _ci_warn "Cache hash key <$k> is non-numeric"; + } + + my $h = $self->[HASH]{$k}; + if (! defined $h) { + $good = 0; + _ci_warn "Heap index number for key $k is undefined"; + } elsif ($h == 0) { + $good = 0; + _ci_warn "Heap index number for key $k is zero"; + } else { + my $j = $self->[HEAP][$h]; + if (! defined $j) { + $good = 0; + _ci_warn "Heap contents key $k (=> $h) are undefined"; + } else { + $bytes += length($j->[2]); + if ($k ne $j->[1]) { + $good = 0; + _ci_warn "Heap contents key $k (=> $h) is $j->[1], should be $k"; + } + } + } + } + + # Test BYTES + if ($bytes != $self->[BYTES]) { + $good = 0; + _ci_warn "Total data in cache is $bytes, expected $self->[BYTES]"; + } + + # Test MAX + if ($bytes > $self->[MAX]) { + $good = 0; + _ci_warn "Total data in cache is $bytes, exceeds maximum $self->[MAX]"; + } + + return $good; +} + +sub delink { + my $self = shift; + $self->[HEAP] = undef; # Bye bye heap +} + +################################################################ +# +# Tie::File::Heap +# +# Heap data structure for use by cache LRU routines + +package Tie::File::Heap; +use Carp ':DEFAULT', 'confess'; +$Tie::File::Heap::VERSION = $Tie::File::Cache::VERSION; +sub SEQ () { 0 }; +sub KEY () { 1 }; +sub DAT () { 2 }; + +sub new { + my ($pack, $cache) = @_; + die "$pack: Parent cache object $cache does not support _heap_move method" + unless eval { $cache->can('_heap_move') }; + my $self = [[0,$cache,0]]; + bless $self => $pack; +} + +# Allocate a new sequence number, larger than all previously allocated numbers +sub _nseq { + my $self = shift; + $self->[0][0]++; +} + +sub _cache { + my $self = shift; + $self->[0][1]; +} + +sub _nelts { + my $self = shift; + $self->[0][2]; +} + +sub _nelts_inc { + my $self = shift; + ++$self->[0][2]; +} + +sub _nelts_dec { + my $self = shift; + --$self->[0][2]; +} + +sub is_empty { + my $self = shift; + $self->_nelts == 0; +} + +sub empty { + my $self = shift; + $#$self = 0; + $self->[0][2] = 0; + $self->[0][0] = 0; # might as well reset the sequence numbers +} + +# notify the parent cache object that we moved something +sub _heap_move { + my $self = shift; + $self->_cache->_heap_move(@_); +} + +# Insert a piece of data into the heap with the indicated sequence number. +# The item with the smallest sequence number is always at the top. +# If no sequence number is specified, allocate a new one and insert the +# item at the bottom. +sub insert { + my ($self, $key, $data, $seq) = @_; + $seq = $self->_nseq unless defined $seq; + $self->_insert_new([$seq, $key, $data]); +} + +# Insert a new, fresh item at the bottom of the heap +sub _insert_new { + my ($self, $item) = @_; + my $i = @$self; + $i = int($i/2) until defined $self->[$i/2]; + $self->[$i] = $item; + $self->[0][1]->_heap_move($self->[$i][KEY], $i); + $self->_nelts_inc; +} + +# Insert [$data, $seq] pair at or below item $i in the heap. +# If $i is omitted, default to 1 (the top element.) +sub _insert { + my ($self, $item, $i) = @_; +# $self->_check_loc($i) if defined $i; + $i = 1 unless defined $i; + until (! defined $self->[$i]) { + if ($self->[$i][SEQ] > $item->[SEQ]) { # inserted item is older + ($self->[$i], $item) = ($item, $self->[$i]); + $self->[0][1]->_heap_move($self->[$i][KEY], $i); + } + # If either is undefined, go that way. Otherwise, choose at random + my $dir; + $dir = 0 if !defined $self->[2*$i]; + $dir = 1 if !defined $self->[2*$i+1]; + $dir = int(rand(2)) unless defined $dir; + $i = 2*$i + $dir; + } + $self->[$i] = $item; + $self->[0][1]->_heap_move($self->[$i][KEY], $i); + $self->_nelts_inc; +} + +# Remove the item at node $i from the heap, moving child items upwards. +# The item with the smallest sequence number is always at the top. +# Moving items upwards maintains this condition. +# Return the removed item. Return undef if there was no item at node $i. +sub remove { + my ($self, $i) = @_; + $i = 1 unless defined $i; + my $top = $self->[$i]; + return unless defined $top; + while (1) { + my $ii; + my ($L, $R) = (2*$i, 2*$i+1); + + # If either is undefined, go the other way. + # Otherwise, go towards the smallest. + last unless defined $self->[$L] || defined $self->[$R]; + $ii = $R if not defined $self->[$L]; + $ii = $L if not defined $self->[$R]; + unless (defined $ii) { + $ii = $self->[$L][SEQ] < $self->[$R][SEQ] ? $L : $R; + } + + $self->[$i] = $self->[$ii]; # Promote child to fill vacated spot + $self->[0][1]->_heap_move($self->[$i][KEY], $i); + $i = $ii; # Fill new vacated spot + } + $self->[0][1]->_heap_move($top->[KEY], undef); + undef $self->[$i]; + $self->_nelts_dec; + return $top->[DAT]; +} + +sub popheap { + my $self = shift; + $self->remove(1); +} + +# set the sequence number of the indicated item to a higher number +# than any other item in the heap, and bubble the item down to the +# bottom. +sub promote { + my ($self, $n) = @_; +# $self->_check_loc($n); + $self->[$n][SEQ] = $self->_nseq; + my $i = $n; + while (1) { + my ($L, $R) = (2*$i, 2*$i+1); + my $dir; + last unless defined $self->[$L] || defined $self->[$R]; + $dir = $R unless defined $self->[$L]; + $dir = $L unless defined $self->[$R]; + unless (defined $dir) { + $dir = $self->[$L][SEQ] < $self->[$R][SEQ] ? $L : $R; + } + @{$self}[$i, $dir] = @{$self}[$dir, $i]; + for ($i, $dir) { + $self->[0][1]->_heap_move($self->[$_][KEY], $_) if defined $self->[$_]; + } + $i = $dir; + } +} + +# Return item $n from the heap, promoting its LRU status +sub lookup { + my ($self, $n) = @_; +# $self->_check_loc($n); + my $val = $self->[$n]; + $self->promote($n); + $val->[DAT]; +} + + +# Assign a new value for node $n, promoting it to the bottom of the heap +sub set_val { + my ($self, $n, $val) = @_; +# $self->_check_loc($n); + my $oval = $self->[$n][DAT]; + $self->[$n][DAT] = $val; + $self->promote($n); + return $oval; +} + +# The hask key has changed for an item; +# alter the heap's record of the hash key +sub rekey { + my ($self, $n, $new_key) = @_; +# $self->_check_loc($n); + $self->[$n][KEY] = $new_key; +} + +sub _check_loc { + my ($self, $n) = @_; + unless (1 || defined $self->[$n]) { + confess "_check_loc($n) failed"; + } +} + +BEGIN { *_ci_warn = \&Tie::File::_ci_warn } + +sub _check_integrity { + my $self = shift; + my $good = 1; + my %seq; + + unless (eval {$self->[0][1]->isa("Tie::File::Cache")}) { + _ci_warn "Element 0 of heap corrupt"; + $good = 0; + } + $good = 0 unless $self->_satisfies_heap_condition(1); + for my $i (2 .. $#{$self}) { + my $p = int($i/2); # index of parent node + if (defined $self->[$i] && ! defined $self->[$p]) { + _ci_warn "Element $i of heap defined, but parent $p isn't"; + $good = 0; + } + + if (defined $self->[$i]) { + if ($seq{$self->[$i][SEQ]}) { + my $seq = $self->[$i][SEQ]; + _ci_warn "Nodes $i and $seq{$seq} both have SEQ=$seq"; + $good = 0; + } else { + $seq{$self->[$i][SEQ]} = $i; + } + } + } + + return $good; +} + +sub _satisfies_heap_condition { + my $self = shift; + my $n = shift || 1; + my $good = 1; + for (0, 1) { + my $c = $n*2 + $_; + next unless defined $self->[$c]; + if ($self->[$n][SEQ] >= $self->[$c]) { + _ci_warn "Node $n of heap does not predate node $c"; + $good = 0 ; + } + $good = 0 unless $self->_satisfies_heap_condition($c); + } + return $good; +} + +# Return a list of all the values, sorted by expiration order +sub expire_order { + my $self = shift; + my @nodes = sort {$a->[SEQ] <=> $b->[SEQ]} $self->_nodes; + map { $_->[KEY] } @nodes; +} + +sub _nodes { + my $self = shift; + my $i = shift || 1; + return unless defined $self->[$i]; + ($self->[$i], $self->_nodes($i*2), $self->_nodes($i*2+1)); +} + +"Cogito, ergo sum."; # don't forget to return a true value from the file + +__END__ + +=head1 NAME + +Tie::File - Access the lines of a disk file via a Perl array + +=head1 SYNOPSIS + + # This file documents Tie::File version 0.96 + use Tie::File; + + tie @array, 'Tie::File', filename or die ...; + + $array[13] = 'blah'; # line 13 of the file is now 'blah' + print $array[42]; # display line 42 of the file + + $n_recs = @array; # how many records are in the file? + $#array -= 2; # chop two records off the end + + + for (@array) { + s/PERL/Perl/g; # Replace PERL with Perl everywhere in the file + } + + # These are just like regular push, pop, unshift, shift, and splice + # Except that they modify the file in the way you would expect + + push @array, new recs...; + my $r1 = pop @array; + unshift @array, new recs...; + my $r2 = shift @array; + @old_recs = splice @array, 3, 7, new recs...; + + untie @array; # all finished + + +=head1 DESCRIPTION + +C represents a regular text file as a Perl array. Each +element in the array corresponds to a record in the file. The first +line of the file is element 0 of the array; the second line is element +1, and so on. + +The file is I loaded into memory, so this will work even for +gigantic files. + +Changes to the array are reflected in the file immediately. + +Lazy people and beginners may now stop reading the manual. + +=head2 C + +What is a 'record'? By default, the meaning is the same as for the +C...E> operator: It's a string terminated by C<$/>, which is +probably C<"\n">. (Minor exception: on DOS and Win32 systems, a +'record' is a string terminated by C<"\r\n">.) You may change the +definition of "record" by supplying the C option in the C +call: + + tie @array, 'Tie::File', $file, recsep => 'es'; + +This says that records are delimited by the string C. If the file +contained the following data: + + Curse these pesky flies!\n + +then the C<@array> would appear to have four elements: + + "Curse th" + "e p" + "ky fli" + "!\n" + +An undefined value is not permitted as a record separator. Perl's +special "paragraph mode" semantics (E la C<$/ = "">) are not +emulated. + +Records read from the tied array do not have the record separator +string on the end; this is to allow + + $array[17] .= "extra"; + +to work as expected. + +(See L<"autochomp">, below.) Records stored into the array will have +the record separator string appended before they are written to the +file, if they don't have one already. For example, if the record +separator string is C<"\n">, then the following two lines do exactly +the same thing: + + $array[17] = "Cherry pie"; + $array[17] = "Cherry pie\n"; + +The result is that the contents of line 17 of the file will be +replaced with "Cherry pie"; a newline character will separate line 17 +from line 18. This means that this code will do nothing: + + chomp $array[17]; + +Because the Ced value will have the separator reattached when +it is written back to the file. There is no way to create a file +whose trailing record separator string is missing. + +Inserting records that I the record separator string is not +supported by this module. It will probably produce a reasonable +result, but what this result will be may change in a future version. +Use 'splice' to insert records or to replace one record with several. + +=head2 C + +Normally, array elements have the record separator removed, so that if +the file contains the text + + Gold + Frankincense + Myrrh + +the tied array will appear to contain C<("Gold", "Frankincense", +"Myrrh")>. If you set C to a false value, the record +separator will not be removed. If the file above was tied with + + tie @gifts, "Tie::File", $gifts, autochomp => 0; + +then the array C<@gifts> would appear to contain C<("Gold\n", +"Frankincense\n", "Myrrh\n")>, or (on Win32 systems) C<("Gold\r\n", +"Frankincense\r\n", "Myrrh\r\n")>. + +=head2 C + +Normally, the specified file will be opened for read and write access, +and will be created if it does not exist. (That is, the flags +C are supplied in the C call.) If you want to +change this, you may supply alternative flags in the C option. +See L for a listing of available flags. +For example: + + # open the file if it exists, but fail if it does not exist + use Fcntl 'O_RDWR'; + tie @array, 'Tie::File', $file, mode => O_RDWR; + + # create the file if it does not exist + use Fcntl 'O_RDWR', 'O_CREAT'; + tie @array, 'Tie::File', $file, mode => O_RDWR | O_CREAT; + + # open an existing file in read-only mode + use Fcntl 'O_RDONLY'; + tie @array, 'Tie::File', $file, mode => O_RDONLY; + +Opening the data file in write-only or append mode is not supported. + +=head2 C + +This is an upper limit on the amount of memory that C will +consume at any time while managing the file. This is used for two +things: managing the I and managing the I. + +Records read in from the file are cached, to avoid having to re-read +them repeatedly. If you read the same record twice, the first time it +will be stored in memory, and the second time it will be fetched from +the I. The amount of data in the read cache will not +exceed the value you specified for C. If C wants +to cache a new record, but the read cache is full, it will make room +by expiring the least-recently visited records from the read cache. + +The default memory limit is 2Mib. You can adjust the maximum read +cache size by supplying the C option. The argument is the +desired cache size, in bytes. + + # I have a lot of memory, so use a large cache to speed up access + tie @array, 'Tie::File', $file, memory => 20_000_000; + +Setting the memory limit to 0 will inhibit caching; records will be +fetched from disk every time you examine them. + +The C value is not an absolute or exact limit on the memory +used. C objects contains some structures besides the read +cache and the deferred write buffer, whose sizes are not charged +against C. + +The cache itself consumes about 310 bytes per cached record, so if +your file has many short records, you may want to decrease the cache +memory limit, or else the cache overhead may exceed the size of the +cached data. + + +=head2 C + +(This is an advanced feature. Skip this section on first reading.) + +If you use deferred writing (See L<"Deferred Writing">, below) then +data you write into the array will not be written directly to the +file; instead, it will be saved in the I to be +written out later. Data in the deferred write buffer is also charged +against the memory limit you set with the C option. + +You may set the C option to limit the amount of data that can +be saved in the deferred write buffer. This limit may not exceed the +total memory limit. For example, if you set C to 1000 and +C to 2500, that means that no more than 1000 bytes of deferred +writes will be saved up. The space available for the read cache will +vary, but it will always be at least 1500 bytes (if the deferred write +buffer is full) and it could grow as large as 2500 bytes (if the +deferred write buffer is empty.) + +If you don't specify a C, it defaults to the entire memory +limit. + +=head2 Option Format + +C<-mode> is a synonym for C. C<-recsep> is a synonym for +C. C<-memory> is a synonym for C. You get the +idea. + +=head1 Public Methods + +The C call returns an object, say C<$o>. You may call + + $rec = $o->FETCH($n); + $o->STORE($n, $rec); + +to fetch or store the record at line C<$n>, respectively; similarly +the other tied array methods. (See L for details.) You may +also call the following methods on this object: + +=head2 C + + $o->flock(MODE) + +will lock the tied file. C has the same meaning as the second +argument to the Perl built-in C function; for example +C or C. (These constants are provided by +the C declaration.) + +C is optional; the default is C. + +C maintains an internal table of the byte offset of each +record it has seen in the file. + +When you use C to lock the file, C assumes that the +read cache is no longer trustworthy, because another process might +have modified the file since the last time it was read. Therefore, a +successful call to C discards the contents of the read cache +and the internal record offset table. + +C promises that the following sequence of operations will +be safe: + + my $o = tie @array, "Tie::File", $filename; + $o->flock; + +In particular, C will I read or write the file during +the C call. (Exception: Using C O_TRUNC> will, of +course, erase the file during the C call. If you want to do this +safely, then open the file without C, lock the file, and use +C<@array = ()>.) + +The best way to unlock a file is to discard the object and untie the +array. It is probably unsafe to unlock the file without also untying +it, because if you do, changes may remain unwritten inside the object. +That is why there is no shortcut for unlocking. If you really want to +unlock the file prematurely, you know what to do; if you don't know +what to do, then don't do it. + +All the usual warnings about file locking apply here. In particular, +note that file locking in Perl is B, which means that +holding a lock will not prevent anyone else from reading, writing, or +erasing the file; it only prevents them from getting another lock at +the same time. Locks are analogous to green traffic lights: If you +have a green light, that does not prevent the idiot coming the other +way from plowing into you sideways; it merely guarantees to you that +the idiot does not also have a green light at the same time. + +=head2 C + + my $old_value = $o->autochomp(0); # disable autochomp option + my $old_value = $o->autochomp(1); # enable autochomp option + + my $ac = $o->autochomp(); # recover current value + +See L<"autochomp">, above. + +=head2 C, C, C, and C + +See L<"Deferred Writing">, below. + +=head2 C + + $off = $o->offset($n); + +This method returns the byte offset of the start of the C<$n>th record +in the file. If there is no such record, it returns an undefined +value. + +=head1 Tying to an already-opened filehandle + +If C<$fh> is a filehandle, such as is returned by C or one +of the other C modules, you may use: + + tie @array, 'Tie::File', $fh, ...; + +Similarly if you opened that handle C with regular C or +C, you may use: + + tie @array, 'Tie::File', \*FH, ...; + +Handles that were opened write-only won't work. Handles that were +opened read-only will work as long as you don't try to modify the +array. Handles must be attached to seekable sources of data---that +means no pipes or sockets. If C can detect that you +supplied a non-seekable handle, the C call will throw an +exception. (On Unix systems, it can detect this.) + +Note that Tie::File will only close any filehandles that it opened +internally. If you passed it a filehandle as above, you "own" the +filehandle, and are responsible for closing it after you have untied +the @array. + +=head1 Deferred Writing + +(This is an advanced feature. Skip this section on first reading.) + +Normally, modifying a C array writes to the underlying file +immediately. Every assignment like C<$a[3] = ...> rewrites as much of +the file as is necessary; typically, everything from line 3 through +the end will need to be rewritten. This is the simplest and most +transparent behavior. Performance even for large files is reasonably +good. + +However, under some circumstances, this behavior may be excessively +slow. For example, suppose you have a million-record file, and you +want to do: + + for (@FILE) { + $_ = "> $_"; + } + +The first time through the loop, you will rewrite the entire file, +from line 0 through the end. The second time through the loop, you +will rewrite the entire file from line 1 through the end. The third +time through the loop, you will rewrite the entire file from line 2 to +the end. And so on. + +If the performance in such cases is unacceptable, you may defer the +actual writing, and then have it done all at once. The following loop +will perform much better for large files: + + (tied @a)->defer; + for (@a) { + $_ = "> $_"; + } + (tied @a)->flush; + +If C's memory limit is large enough, all the writing will +done in memory. Then, when you call C<-Eflush>, the entire file +will be rewritten in a single pass. + +(Actually, the preceding discussion is something of a fib. You don't +need to enable deferred writing to get good performance for this +common case, because C will do it for you automatically +unless you specifically tell it not to. See L<"autodeferring">, +below.) + +Calling C<-Eflush> returns the array to immediate-write mode. If +you wish to discard the deferred writes, you may call C<-Ediscard> +instead of C<-Eflush>. Note that in some cases, some of the data +will have been written already, and it will be too late for +C<-Ediscard> to discard all the changes. Support for +C<-Ediscard> may be withdrawn in a future version of C. + +Deferred writes are cached in memory up to the limit specified by the +C option (see above). If the deferred-write buffer is full +and you try to write still more deferred data, the buffer will be +flushed. All buffered data will be written immediately, the buffer +will be emptied, and the now-empty space will be used for future +deferred writes. + +If the deferred-write buffer isn't yet full, but the total size of the +buffer and the read cache would exceed the C limit, the oldest +records will be expired from the read cache until the total size is +under the limit. + +C, C, C, C, and C cannot be +deferred. When you perform one of these operations, any deferred data +is written to the file and the operation is performed immediately. +This may change in a future version. + +If you resize the array with deferred writing enabled, the file will +be resized immediately, but deferred records will not be written. +This has a surprising consequence: C<@a = (...)> erases the file +immediately, but the writing of the actual data is deferred. This +might be a bug. If it is a bug, it will be fixed in a future version. + +=head2 Autodeferring + +C tries to guess when deferred writing might be helpful, +and to turn it on and off automatically. + + for (@a) { + $_ = "> $_"; + } + +In this example, only the first two assignments will be done +immediately; after this, all the changes to the file will be deferred +up to the user-specified memory limit. + +You should usually be able to ignore this and just use the module +without thinking about deferring. However, special applications may +require fine control over which writes are deferred, or may require +that all writes be immediate. To disable the autodeferment feature, +use + + (tied @o)->autodefer(0); + +or + + tie @array, 'Tie::File', $file, autodefer => 0; + + +Similarly, C<-Eautodefer(1)> re-enables autodeferment, and +C<-Eautodefer()> recovers the current value of the autodefer setting. + + +=head1 CONCURRENT ACCESS TO FILES + +Caching and deferred writing are inappropriate if you want the same +file to be accessed simultaneously from more than one process. You +will want to disable these features. You should do that by including +the C 0> option in your C calls; this will inhibit +caching and deferred writing. + +You will also want to lock the file while reading or writing it. You +can use the C<-Eflock> method for this. A future version of this +module may provide an 'autolocking' mode. + +=head1 CAVEATS + +(That's Latin for 'warnings'.) + +=over 4 + +=item * + +Reasonable effort was made to make this module efficient. Nevertheless, +changing the size of a record in the middle of a large file will +always be fairly slow, because everything after the new record must be +moved. + +=item * + +The behavior of tied arrays is not precisely the same as for regular +arrays. For example: + + # This DOES print "How unusual!" + undef $a[10]; print "How unusual!\n" if defined $a[10]; + +C-ing a C array element just blanks out the +corresponding record in the file. When you read it back again, you'll +get the empty string, so the supposedly-C'ed value will be +defined. Similarly, if you have C disabled, then + + # This DOES print "How unusual!" if 'autochomp' is disabled + undef $a[10]; + print "How unusual!\n" if $a[10]; + +Because when C is disabled, C<$a[10]> will read back as +C<"\n"> (or whatever the record separator string is.) + +There are other minor differences, particularly regarding C +and C, but in general, the correspondence is extremely close. + +=item * + +I have supposed that since this module is concerned with file I/O, +almost all normal use of it will be heavily I/O bound. This means +that the time to maintain complicated data structures inside the +module will be dominated by the time to actually perform the I/O. +When there was an opportunity to spend CPU time to avoid doing I/O, I +usually tried to take it. + +=item * + +You might be tempted to think that deferred writing is like +transactions, with C as C and C as +C, but it isn't, so don't. + +=item * + +There is a large memory overhead for each record offset and for each +cache entry: about 310 bytes per cached data record, and about 21 bytes per offset table entry. + +The per-record overhead will limit the maximum number of records you +can access per file. Note that I the length of the array +via C<$x = scalar @tied_file> accesses B records and stores their +offsets. The same for C, even if you exit the +loop early. + +=back + +=head1 SUBCLASSING + +This version promises absolutely nothing about the internals, which +may change without notice. A future version of the module will have a +well-defined and stable subclassing API. + +=head1 WHAT ABOUT C? + +People sometimes point out that L will do something similar, +and ask why C module is necessary. + +There are a number of reasons that you might prefer C. +A list is available at C. + +=head1 AUTHOR + +Mark Jason Dominus + +To contact the author, send email to: C + +To receive an announcement whenever a new version of this module is +released, send a blank email message to +C. + +The most recent version of this module, including documentation and +any news of importance, will be available at + + http://perl.plover.com/TieFile/ + + +=head1 LICENSE + +C version 0.96 is copyright (C) 2002 Mark Jason Dominus. + +This library is free software; you may redistribute it and/or modify +it under the same terms as Perl itself. + +These terms are your choice of any of (1) the Perl Artistic Licence, +or (2) version 2 of the GNU General Public License as published by the +Free Software Foundation, or (3) any later version of the GNU General +Public License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this library program; it should be in the file C. +If not, write to the Free Software Foundation, Inc., 59 Temple Place, +Suite 330, Boston, MA 02111 USA + +For licensing inquiries, contact the author at: + + Mark Jason Dominus + 255 S. Warnock St. + Philadelphia, PA 19107 + +=head1 WARRANTY + +C version 0.96 comes with ABSOLUTELY NO WARRANTY. +For details, see the license. + +=head1 THANKS + +Gigantic thanks to Jarkko Hietaniemi, for agreeing to put this in the +core when I hadn't written it yet, and for generally being helpful, +supportive, and competent. (Usually the rule is "choose any one.") +Also big thanks to Abhijit Menon-Sen for all of the same things. + +Special thanks to Craig Berry and Peter Prymmer (for VMS portability +help), Randy Kobes (for Win32 portability help), Clinton Pierce and +Autrijus Tang (for heroic eleventh-hour Win32 testing above and beyond +the call of duty), Michael G Schwern (for testing advice), and the +rest of the CPAN testers (for testing generally). + +Special thanks to Tels for suggesting several speed and memory +optimizations. + +Additional thanks to: +Edward Avis / +Mattia Barbon / +Tom Christiansen / +Gerrit Haase / +Gurusamy Sarathy / +Jarkko Hietaniemi (again) / +Nikola Knezevic / +John Kominetz / +Nick Ing-Simmons / +Tassilo von Parseval / +H. Dieter Pearcey / +Slaven Rezic / +Eric Roode / +Peter Scott / +Peter Somu / +Autrijus Tang (again) / +Tels (again) / +Juerd Waalboer + +=head1 TODO + +More tests. (Stuff I didn't think of yet.) + +Paragraph mode? + +Fixed-length mode. Leave-blanks mode. + +Maybe an autolocking mode? + +For many common uses of the module, the read cache is a liability. +For example, a program that inserts a single record, or that scans the +file once, will have a cache hit rate of zero. This suggests a major +optimization: The cache should be initially disabled. Here's a hybrid +approach: Initially, the cache is disabled, but the cache code +maintains statistics about how high the hit rate would be *if* it were +enabled. When it sees the hit rate get high enough, it enables +itself. The STAT comments in this code are the beginning of an +implementation of this. + +Record locking with fcntl()? Then the module might support an undo +log and get real transactions. What a tour de force that would be. + +Keeping track of the highest cached record. This would allow reads-in-a-row +to skip the cache lookup faster (if reading from 1..N with empty cache at +start, the last cached value will be always N-1). + +More tests. + +=cut + diff --git a/archive/version_02/admin/index.htm b/archive/version_02/admin/index.htm new file mode 100755 index 0000000..a23541c --- /dev/null +++ b/archive/version_02/admin/index.htm @@ -0,0 +1,79 @@ + + + + +The International Jairus Society + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Upload Child Update PDF +

+ +
+ Which child is this file for? + +
+
+ For which language? German + or English +
+
+ File to upload: +

+ +
+
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/admin/pdf_upload.pl b/archive/version_02/admin/pdf_upload.pl new file mode 100755 index 0000000..c0adef8 --- /dev/null +++ b/archive/version_02/admin/pdf_upload.pl @@ -0,0 +1,802 @@ +#! /usr/bin/perl -w + +# Installation Instructions +# http://www.perlscriptsjavascripts.com/perl/upload_lite/users_guide.html + +# To order a custom install, please visit our "Secure order" page +# and enter the standard installation fee in the "Custom Quote" field + +#################################################################### +# +# Upload Lite. +# ©2002, PerlscriptsJavaScripts.com +# +# Requirements: Perl5 WINDOWS NT or UNIX +# Created: Febuary , 2001 +# Author: John Krinelos +# Version: 3.22 +# +# Based on Upload Gold, first release : September 2001 +# +# This script is free, as long as this header and any copyright messages +# remains in tact. To remove copyright messages from public web pages you +# must purchase copyright removal. +# http://www.perlscriptsjavascripts.com/copyright_fees.html +# +# Agent for copyright : +# Gene Volovich +# Law Partners, +# 140 Queen St. +# Melbourne +# Ph. +61 3 9602 2266 +# gvolovich@lawpartners.com.au +# http://www.lawpartners.com.au/ +# +#################################################################### + +# START USER EDITS + +# absolute path to folder files will be uploaded to. +# WINDOWS users, your path would like something like : images\\uploads +# UNIX users, your path would like something like : /home/www/images/uploads +# do not end the path with any slashes and if you're on a UNIX serv, make sure +# you CHMOD each folder in the path to 777 + +$dir = "/home/users/web/b2107/pow.zebu58/htdocs/en/ourfamilies/updates/"; +#$dir = "d:\\html\\users\\html\\images"; + +# absolute URL to folder files will be uploaded to +$folder = "http://www.jasoc.org/en/ourfamilies/updates"; + +# maximum file size allowed (kilo bytes) +$max = 50000; + +# for security reasons, enter your domain name. +# this is so uploads may only occur from your domain +# enter any part of your domain name, or leave this +# blank if you don't mind other web sites using your copy +$domain = ""; + +# if a file is successfully uploaded, enter a URL to redirect to. +# leave this blank to have the default message printed +$redirect = "success.htm"; + +# if you would like to be notified of uploads, enter your email address +# between the SINGLE quotes. leave this blank if you would not like to be notified +$notify = ''; + +# UNIX users, if you entered a value for $notify, you must also enter your +# server's sendmail path. It usually looks something like : /usr/sbin/sendmail +$send_mail_path = "/usr/sbin/sendmail"; + +# WINDOWS users, if you entered a value for $notify, you must also enter your +# server's SMTP path. It usually looks something like : mail.servername.com +$smtp_path = "mail.yourserver.com"; + +# set to 1 if you would like all files in the directory printed to the web page +# after a successful upload (only printed if redirect is off). Set to 0 if you +# do not want filenames printed to web page +$print_contents = 1; + +# allow overwrites? 1 = yes, 0 = no (0 will rename file with a number on the end, the +# highest number is the latest file) +$overwrite = 1; + +# file types allowed, enter each type on a new line +# Enter the word "ALL" in uppercase, to accept all file types. +@types = qw~ + +ALL + +~; + +#################################################################### +# END USER EDITS +#################################################################### + +$folder =~ s/(\/|\\)$//ig; + +$OS = $^O; # operating system name +if($OS =~ /darwin/i) { $isUNIX = 1; } +elsif($OS =~ /win/i) { $isWIN = 1; } +else {$isUNIX = 1;} + +if($isWIN){ $S{S} = "\\\\"; } +else { $S{S} = "/";} # seperator used in paths + +$ScriptURL = "http://$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}"; + +unless (-d "$dir"){ + mkdir ("$dir", 0777); # unless the dir exists, make it ( and chmod it on UNIX ) + chmod(0777, "$dir"); +} + +unless (-d "$dir"){ + # if there still is no dir, the path entered by the user is wrong and the upload will fail + &PrintHead; #print the header + + # get the Win root + $ENV{PATH_INFO} =~ s/\//$S{S}/gi; + $ENV{PATH_TRANSLATED} =~ s/$ENV{PATH_INFO}//i; + + print qq~ + + + + +
+ + + The path you entered is incorrect. You entered : "$dir" +

+ Your root path is (UNIX): $ENV{DOCUMENT_ROOT} +

+ Your root path is (WINDOWS): $ENV{PATH_TRANSLATED} +

+ Your path should contain your root path followed by a slash followed by the + destination folder's name. If you are on a WINDOWS server, each slash should + be escaped. Eg. each seperator should look like this : \\\\ +

+ Sometimes, the root returned is not the full path to your web space. In this case + you should either check with your host or if you are using an FTP client such as + CuteFTP, change to the folder you are trying to upload to and look at the path you + have taken. You can see this just above the list of files on your server. + You must use the same path in the \$dir variable. + + +

+ ~; + + &PrintFoot; # print the footer + exit; +} + +use CGI; # load the CGI.pm module +my $GET = new CGI; # create a new object +my @VAL = $GET->param; #get all form field names + +foreach(@VAL){ + $FORM{$_} = $GET->param($_); # put all fields and values in hash +} + +#################added by me (ben ramey) +if( $FORM{ 'language' } eq 'german' ) +{ + $dir = "/home/users/web/b2107/pow.zebu58/htdocs/de/ourfamilies/updates/"; + $folder = "http://www.jasoc.org/de/ourfamilies/updates/"; +} +$dir .= $FORM{ 'child' }; +$folder .= $FORM{ 'child' }; +################# + +my @files; +foreach(keys %FORM){ + if($_ =~ /^FILE/){ + push(@files, $_); # place the field NAME in an array + } +} + +if(!$VAL[0]){ + # no form fields + &PrintHead; #print the header + + print qq~ + + + + +
+ + + This script must be called using a form. Your form should point to this script. Your form tag must contain the following attributes : +

+ <form action="$ScriptURL" method="post" enctype="multipart/form-data"> +

+ The method must equal post and the enctype must equal multipart/form-data. The action has to point to this script (on your server). If you are reading this, copy and paste the example above. It has the correct values. + + +

+ ~; + + &PrintFoot; # print the footer + exit; +} + +# check domain +if($domain =~ /\w+/){ + if($ENV{HTTP_REFERER} !~ /$domain/i){ + &PrintHead; #print the header + + print qq~ + + + + +
+ + + Invalid referrer. + + +
+ ~; + + &PrintFoot; # print the footer + exit; + } +} + +my $failed; # results string = false +my $selected; # num of files selected by user + +#################################################################### + +#################################################################### + +foreach (@files){ + # upload each file, pass the form field NAME if it has a value + if($GET->param($_)){ + + # if the form field contains a file name &psjs_upload subroutine + # the file's name and path are passed to the subroutine + $returned = &psjs_upload($_); + + if($returned =~ /^Success/i){ + # if the $returned message begins with "Success" the upload was succssful + # remove the word "Success" and any spaces and we're left with the filename + $returned =~ s/^Success\s+//; + push(@success, $returned); + } else { + # else if the word "success" is not returned, the message is the error encountered. + # add the error to the $failed scalar + $failed .= $returned; + } + $selected++; # increment num of files selected for uploading by user + } +} + +if(!$selected){ + # no files were selected by user, so nothing is returned to either variable + $failed .= qq~No files were selected for uploading~; +} + +# if no error message is return ed, the upload was successful + +my ($fNames, $aa, $bb, @current, @currentfiles ); + +if($failed){ + + &PrintHead; + + print qq~ + + + + +
+ + One or more files failed to upload. The reasons returned are: +

+ + $failed + ~; + + if($success[0]){ + # send email if valid email was entered + if(check_email($notify)){ + + # enter the message you would like to receive + my $message = qq~ + The following files were uploaded to your server : + ~; + + $folder =~ s/(\/|\\)$//ig; + foreach(@success){ + $message .= qq~ + $folder/$_ + ~; + } + + if($isUNIX){ + $CONFIG{mailprogram} = $send_mail_path; + # enter your e-mail name here if you like + # from e-mail, from name, to e-mail, to name, subject, body + &send_mail($notify, 'Demo Upload', $notify, 'Demo Upload', 'Upload Notification', $message); + + } else { + $CONFIG{smtppath} = $smtp_path; + &send_mail_NT($notify, 'Your Name', $notify, 'Your Name', 'Upload Notification', $message); + } + } + + print qq~ +

+ The following files were successfully uploaded : +

+ ~; + foreach(@success){ + print qq~ + $_

~; + } + } + + print qq~ +

+ ~; + + &PrintFoot; + +} else { + # upload was successful + # add a link to the file + $folder =~ s/(\/|\\)$//ig; + + # send email if valid email was entered + if(check_email($notify)){ + + # enter the message you would like to receive + my $message = qq~ + The following files were uploaded to your server : + ~; + + foreach(@success){ + $message .= qq~ + $folder/$_ + ~; + } + + if($isUNIX){ + $CONFIG{mailprogram} = $send_mail_path; + # enter your e-mail name here if you like + # from e-mail, from name, to e-mail, to name, subject, body + &send_mail($notify, 'Demo Upload', $notify, 'Demo Upload', 'Upload Notification', $message); + + } else { + $CONFIG{smtppath} = $smtp_path; + &send_mail_NT($notify, 'Your Name', $notify, 'Your Name', 'Upload Notification', $message); + } + } + + if($redirect){ + # redirect user + print qq~Location: $redirect\n\n~; + } else { + # print success page + + &PrintHead; + + print qq~ + + + + + + + +
Success
The following files were successfully uploaded : +

+ ~; + + foreach(@success){ + print qq~ + $_

~; + } + + print qq~ +

+
+ ~; + + if($print_contents){ + print qq~ + + + + + +
Current files in folder
+ + ~; + + opendir(DIR, "$dir"); + @current = readdir(DIR); + closedir(DIR); + + foreach(@current){ + unless($_ eq '.' || $_ eq '..'){ + push(@currentfiles, $_); + } + } + + @currentfiles = sort { uc($a) cmp uc($b) } @currentfiles; + + for($aa = 0; $aa <= int($#currentfiles / 2); $aa++){ + print qq~ + + $currentfiles[$aa]
+ ~; + } + + print qq~
~; + + for($bb = $aa; $bb < @currentfiles; $bb++){ + print qq~ + + $currentfiles[$bb]
+ ~; + } + + + print qq~ +
~; + } + + print qq~ +
+
+© PerlScriptsJavaScripts.com +    +F.A.Q. +    +Users Guide +
+~; + + &PrintFoot; + + } +} + +#################################################################### + +#################################################################### + +sub psjs_upload { + + my ( $type_ok, $file_contents, $buffer, $destination ); # declare some vars + + my $file = $GET->param($_[0]); # get the FILE name. $_[0] is the arg passed + + $destination = $dir; + + my $limit = $max; + $limit *= 1024; # convert limit from bytes to kilobytes + + # create another instance of the $file var. This will allow the script to play + # with the new instance, without effecting the first instance. This was a major + # flaw I found in the psupload script. The author was replacing spaces in the path + # with underscores, so the script could not find a file to upload. He blammed the + # error on browser problems. + my $fileName = $file; + + # get the extension + my @file_type = split(/\./, $fileName); + # we can assume everything after the last . found is the extension + my $file_type = $file_type[$#file_type]; + + # get the file name, this removes everything up to and including the + # last slash found ( be it a forward or back slash ) + $fileName =~ s/^.*(\\|\/)//; + + # remove all spaces from new instance of filename var + $fileName =~ s/\s+//ig; + + # check for any any non alpha numeric characters in filename (allow dots and dahses) + $fileName =~ s/\./PsJsDoT/g; + $fileName =~ s/\-/PsJsDaSh/g; + if($fileName =~ /\W/){ + $fileName =~ s/\W/n/ig; # replace any bad chars with the letter "n" + } + $fileName =~ s/PsJsDoT/\./g; + $fileName =~ s/PsJsDaSh/\-/g; + + # if $file_type matchs one of the types specified, make the $type_ok var true + for($b = 0; $b < @types; $b++){ + if($file_type =~ /^$types[$b]$/i){ + $type_ok++; + } + if($types[$b] eq "ALL"){ + $type_ok++; # if ALL keyword is found, increment $type_ok var. + } + } + + # if ok, check if overwrite is allowed + if($type_ok){ + if(!$overwrite){ # if $overwite = 0 or flase, rename file using the checkex sub + $fileName = check_existence($destination,$fileName); + } + # create a new file on the server using the formatted ( new instance ) filename + if(open(NEW, ">$destination$S{S}$fileName")){ + if($isWIN){binmode NEW;} # if it's a WIN server, switch to binary mode + # start reading users HD 1 kb at a time. + while (read($file, $buffer, 1024)){ + # print each kb to the new file on the server + print NEW $buffer; + } + # close the new file on the server and we're done + close NEW; + } else { + # return the server's error message if the new file could not be created + return qq~Error: Could not open new file on server. $!~; + } + + # check limit hasn't just been overshot + if(-s "$destination$S{S}$fileName" > $limit){ # -s is the file size + unlink("$destination$S{S}$fileName"); # delete it if it's over the specified limit + return qq~File exceeded limitations : $fileName~; + } + } else { + return qq~Bad file type : $file_type~; + } + + # check if file has actually been uploaded, by checking the file has a size + if(-s "$destination$S{S}$fileName"){ + &AddLinkToPage( $fileName ); + return qq~Success $fileName~; #success + } else { + # delete the file as it has no content + unlink("$destination$S{S}$fileName"); + # user probably entered an incorrect path to file + return qq~Upload failed : No data in $fileName. No size on server's copy of file. + Check the path entered.~; + } +} + +#################################################################### + +#################################################################### + +sub check_existence { + # $dir,$filename,$newnum are the args passed to this sub + my ($dir,$filename,$newnum) = @_; + + my (@file_type, $file_type, $exists, $bareName); + # declare some vars we will use later on in this sub always use paranthesis + # when declaring more than one var! Some novice programmers will tell you + # this is not necessary. Tell them to learn how to program. + + if(!$newnum){$newnum = "0";} # new num is empty in first call, so set it to 0 + + # read dir and put all files in an array (list) + opendir(DIR, "$dir"); + @existing_files = readdir(DIR); + closedir(DIR); + + # if the filename passed exists, set $exists to true or 1 + foreach(@existing_files){ + if($_ eq $filename){ + $exists = 1; + } + } + + # if it exists, we need to rename the file being uploaded and then recheck it to + # make sure the new name does not exist + if($exists){ + $newnum++; # increment new number (add 1) + + # get the extension + @file_type = split(/\./, $filename); # split the dots and add inbetweens to a list + # put the first element in the $barename var + $bareName = $file_type[0]; + # we can assume everything after the last . found is the extension + $file_type = $file_type[$#file_type]; + # $#file_type is the last element (note the pound or hash is used) + + # remove all numbers from the end of the $bareName + $bareName =~ s/\d+$//ig; + + # concatenate a new name using the barename + newnum + extension + $filename = $bareName . $newnum . '.' . $file_type; + + # reset $exists to 0 because the new file name is now being checked + $exists = 0; + + # recall this subroutine + &check_existence($dir,$filename,$newnum); + } else { + # the $filename, whether the first or one hundreth call, now does not exist + # so return the name to be used + return ($filename); + } +} + +#################################################################### + +#################################################################### + +sub send_mail { + my ($from_email, $from_name, $to_email, $to_name, $subject, $message ) = @_; + + if(open(MAIL, "|$CONFIG{mailprogram} -t")) { + print MAIL "From: $from_email ($from_name)\n"; + print MAIL "To: $to_email ($to_name)\n"; + print MAIL "Subject: $subject\n"; + print MAIL "$message\n\n$ENV{REMOTE_ADDR}"; + close MAIL; + return(1); + } else { + return; + } +} + +#################################################################### + +#################################################################### + +sub send_mail_NT { + + my ($from_email, $from_name, $to_email, $to_name, $subject, $message ) = @_; + + my ($SMTP_SERVER, $WEB_SERVER, $status, $err_message); + use Socket; + $SMTP_SERVER = "$CONFIG{smtppath}"; + + # correct format for "\n" + local($CRLF) = "\015\012"; + local($SMTP_SERVER_PORT) = 25; + local($AF_INET) = ($] > 5 ? AF_INET : 2); + local($SOCK_STREAM) = ($] > 5 ? SOCK_STREAM : 1); + local(@bad_addresses) = (); + $, = ', '; + $" = ', '; + + $WEB_SERVER = "$CONFIG{smtppath}\n"; + chop ($WEB_SERVER); + + local($local_address) = (gethostbyname($WEB_SERVER))[4]; + local($local_socket_address) = pack('S n a4 x8', $AF_INET, 0, $local_address); + + local($server_address) = (gethostbyname($SMTP_SERVER))[4]; + local($server_socket_address) = pack('S n a4 x8', $AF_INET, $SMTP_SERVER_PORT, $server_address); + + # Translate protocol name to corresponding number + local($protocol) = (getprotobyname('tcp'))[2]; + + # Make the socket filehandle + if (!socket(SMTP, $AF_INET, $SOCK_STREAM, $protocol)) { + return; + } + + # Give the socket an address + bind(SMTP, $local_socket_address); + + # Connect to the server + if (!(connect(SMTP, $server_socket_address))) { + return; + } + + # Set the socket to be line buffered + local($old_selected) = select(SMTP); + $| = 1; + select($old_selected); + + # Set regex to handle multiple line strings + $* = 1; + + # Read first response from server (wait for .75 seconds first) + select(undef, undef, undef, .75); + sysread(SMTP, $_, 1024); + #print "

1:$_"; + + print SMTP "HELO $WEB_SERVER$CRLF"; + sysread(SMTP, $_, 1024); + #print "

2:$_"; + + while (/(^|(\r?\n))[^0-9]*((\d\d\d).*)$/g) { $status = $4; $err_message = $3} + if ($status != 250) { + return; + } + + print SMTP "MAIL FROM:<$from_email>$CRLF"; + + sysread(SMTP, $_, 1024); + #print "

3:$_"; + if (!/[^0-9]*250/) { + return; + } + + # Tell the server where we're sending to + print SMTP "RCPT TO:<$to_email>$CRLF"; + sysread(SMTP, $_, 1024); + #print "

4:$_"; + /[^0-9]*(\d\d\d)/; + + # Give the server the message header + print SMTP "DATA$CRLF"; + sysread(SMTP, $_, 1024); + #print "

5:$_"; + if (!/[^0-9]*354/) { + return; + } + + print SMTP qq~From: $from_email ($from_name)$CRLF~; + print SMTP qq~To: $to_email ($to_name)$CRLF~; + if($cc){ + print SMTP "CC: $cc ($cc_name)\n"; + } + print SMTP qq~Subject: $subject$CRLF$CRLF~; + print SMTP qq~$message~; + + print SMTP "$CRLF.$CRLF"; + sysread(SMTP, $_, 1024); + #print "

6:$_"; + if (!/[^0-9]*250/) { + return; + } else { + return(1); + } + + if (!shutdown(SMTP, 2)) { + return; + } +} + +#################################################################### + +#################################################################### + +sub PrintHead { + print qq~Content-type: text/html\n\n~; + print qq~ + + PerlScriptsJavascript.com Free upload utility + + ~; +} + +#################################################################### + +#################################################################### + +sub PrintFoot { + print qq~ + + + ~; +} + +#################################################################### + +#################################################################### + +sub check_email { + my($fe_email) = $_[0]; + if($fe_email) { + if(($fe_email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/) || + ($fe_email !~ /^.+@\[?(\w|[-.])+\.[a-zA-Z]{2,3}|[0-9]{1,3}\]?$/)) { + return; + } else { return(1) } + } else { + return; + } +} + +#################################################################### + +#################################################################### +sub AddLinkToPage() +{ + require Tie::File; + + my $fileName = $_[0]; + + if( $FORM{'language'} eq 'german' ) { $lang = "de"; } + else { $lang = "en"; } + my $child_name = $FORM{ 'child' }; + + my $file_to_edit = "../$lang/ourfamilies/$child_name.htm"; + my $new_link = qq~$fileName
~; + + tie( my @flines, 'Tie::File', $file_to_edit ); + + for( my $c = $#flines; $c >= 0; $c-- ) #count from bottom of file, since update section will always be nearer to the bottom + { + if( $flines[$c] =~ m[] ) + { + splice( @flines, $c, 1, ("", $new_link) ); + $c = 0; + } + } + + untie( @flines ); +} \ No newline at end of file diff --git a/archive/version_02/admin/success.htm b/archive/version_02/admin/success.htm new file mode 100755 index 0000000..81f2476 --- /dev/null +++ b/archive/version_02/admin/success.htm @@ -0,0 +1,65 @@ + + + + +The International Jairus Society + + + + + + +

+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Upload Child Update PDF +

+ + The file was uploaded successfully! +

+ Click here to upload another file. +
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/captchas/captchasnet-random-strings/5rdpzw1jmkkkrxuh9dqtzqv7t4cgevuaeyp4lgex b/archive/version_02/captchas/captchasnet-random-strings/5rdpzw1jmkkkrxuh9dqtzqv7t4cgevuaeyp4lgex new file mode 100755 index 0000000..e69de29 diff --git a/archive/version_02/captchas/captchasnet-random-strings/__time_stamp__ b/archive/version_02/captchas/captchasnet-random-strings/__time_stamp__ new file mode 100755 index 0000000..e69de29 diff --git a/archive/version_02/captchas/captchasnet-random-strings/awzvwdmwtoq2isnd4l5hj78w7sogsjks6aesdrfx b/archive/version_02/captchas/captchasnet-random-strings/awzvwdmwtoq2isnd4l5hj78w7sogsjks6aesdrfx new file mode 100755 index 0000000..e69de29 diff --git a/archive/version_02/captchas/captchasnet-random-strings/jjcb2caqwpmxhp6dsajmd4hjmcjhgekqnmsfpswc b/archive/version_02/captchas/captchasnet-random-strings/jjcb2caqwpmxhp6dsajmd4hjmcjhgekqnmsfpswc new file mode 100755 index 0000000..e69de29 diff --git a/archive/version_02/captchas/captchasnet-random-strings/r2foy8cujumrtth8ixg3zdt4zxblkfc37iiwgkip b/archive/version_02/captchas/captchasnet-random-strings/r2foy8cujumrtth8ixg3zdt4zxblkfc37iiwgkip new file mode 100755 index 0000000..e69de29 diff --git a/archive/version_02/captchas/captchasnet-random-strings/t8vjqcgz61x6l67cn2ll19etycohnao78bhodnf9 b/archive/version_02/captchas/captchasnet-random-strings/t8vjqcgz61x6l67cn2ll19etycohnao78bhodnf9 new file mode 100755 index 0000000..e69de29 diff --git a/archive/version_02/captchas/captchasnet-random-strings/ui39i154u5p44d16nq3ea2vr88vy9i7tq1szrotd b/archive/version_02/captchas/captchasnet-random-strings/ui39i154u5p44d16nq3ea2vr88vy9i7tq1szrotd new file mode 100755 index 0000000..e69de29 diff --git a/archive/version_02/de/abr_unterstuetzung.htm b/archive/version_02/de/abr_unterstuetzung.htm new file mode 100755 index 0000000..54f62b1 --- /dev/null +++ b/archive/version_02/de/abr_unterstuetzung.htm @@ -0,0 +1,86 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Finanzielle Unterstützung für ABR Austria-Familien +

+ Der internationale Verein Jairus freut sich sehr, finanzielle Hilfeleistung für Familien anzubieten, die bei ABR Austria gelernte Techniken bei ihren hirnverletzten Familienmitgliedern anwenden. +

+ Wenn Sie: +
    +
  • Ihren Hauptwohnsitz in Österreich haben
  • +
  • bei ABR Austria die ABR-Techniken erlernen bzw. erlernen werden
  • +
  • ein ABR Programm mit 20 Stunden/Woche gemeinsam mit Ihrem hirnverletzten Familienmitglied ausführen/ausführen werden
  • +
+ + dann können Sie beim Verein Jairus um finanzielle Unterstützung ansuchen! +

+ Kontakt:
+ E-mail – office@jasoc.org
+ Post – Don Bosco-g. 39a 1230 Wien
+
+ Telephonische Anfragen sind leider nicht möglich. +

+ Antragsformular auf finanzielle Unterstützung (PDF) +

+ Bestimmungen zur Finanziellen Hilfeleistung (PDF) + +
+
+ + + + + + +
+ + diff --git a/archive/version_02/de/docs/ApplicationFormABRAustria.pdf b/archive/version_02/de/docs/ApplicationFormABRAustria.pdf new file mode 100755 index 0000000..bdbd1e1 Binary files /dev/null and b/archive/version_02/de/docs/ApplicationFormABRAustria.pdf differ diff --git a/archive/version_02/de/docs/BestimmungenABRAustria.pdf b/archive/version_02/de/docs/BestimmungenABRAustria.pdf new file mode 100755 index 0000000..31e8ac0 Binary files /dev/null and b/archive/version_02/de/docs/BestimmungenABRAustria.pdf differ diff --git a/archive/version_02/de/familien.htm b/archive/version_02/de/familien.htm new file mode 100755 index 0000000..4d01a4d --- /dev/null +++ b/archive/version_02/de/familien.htm @@ -0,0 +1,122 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Die Familien +
+
+ +
+
+ + Gerard Montocchio +
+
+ Gerard Montocchio, geboren am 10. Oktober 1995 in Wien/Österreich. +

+ +Ich kam mit einem schweren Herzfehler zur Welt, wodurch die +Sauerstoffzufuhr zu meinem Gehirn unterbrochen wurde...
+ lese mehr über mich +
+ +
+
+
+
+ +
+ + Trenton Gruber +
+
+ Trenton Gruber, geboren am 8. Juni 1997 in Denver, Colorado, USA.

+ Mein Name ist Trenton Gruber, ich bin 7 Jahre alt (2005), meine Mutter heißt Rebecca Gruber (Becci), mein + Vater Charles Gruber (Chuck). +
+ lese mehr über mich
+ +
+
+
+
+ +
+ + Helena Prosser +

+ Ich wurde am 12. November 1993 geboren, bin ein Einzelkind und lebe mit meiner Mamma und meinen Großeltern in Oamaru, der südlichen Insel von Neuseeland. +
+ lese mehr über mich
+
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/de/familien/gerardm.htm b/archive/version_02/de/familien/gerardm.htm new file mode 100755 index 0000000..0dbebf3 --- /dev/null +++ b/archive/version_02/de/familien/gerardm.htm @@ -0,0 +1,148 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
Sie sind Hier : + Die Familien + / Gerard Montocchio +
+ Die Familien: Gerard Montocchio +
+
+ +
+
+ + Gerard Montocchio +
+
+ Gerard Montocchio, geboren am 10. Oktober 1995 in Wien/Österreich. +

+ +Ich kam mit einem schweren Herzfehler zur Welt, wodurch die +Sauerstoffzufuhr zu meinem Gehirn unterbrochen wurde und ich +einen schweren diffusen Gehirnschaden erlitt. In den ersten +vier Jahren meines Lebens probierten Mama und Papa alle +Behandlungsmethoden aus, die sie nur finden konnten, aber die in +den Krankenhäusern unserer Stadt angebotenen Therapien waren wenig +erfolgreich und ich machte eigentlich keine Fortschritte. +
+
+ +Ich war vier Jahre alt, als meine Eltern die „Institutes“ (IAHP) +entdeckten und ich dort mit meiner Intensivbehandlung begann. Damals +war ich praktisch blind, vollständig taub und ich konnte eigentlich +nur auf dem Bauch kriechen, gerade mal jeweils einen Meter, und ich +spürte keine Schmerzen, keine Wärme und keine Kälte. Ich litt auch +schrecklich unter Verdauungsproblemen – Essen war ein Problem und das +Essen im Magen zu behalten war noch schwieriger. +
+
+ +Nach vier Jahren Behandlung mit dem Programm des IAHP hatte ich große +neurologische Fortschritte gemacht, konnte lesen, ein bisschen rechnen, +Briefchen an meine Eltern auf ein Facilitated Communication Board +(Buchstabentafel zur Kommunikation) schreiben, daheim umher kriechen – +ich konnte hören und begann mich sehr viel besser zu fühlen. Zu dem + Zeitpunkt wechselten wir auf ABR (Advanced Biomechanical Rehabilitation) + über, nicht weil wir mit den IAHP unglücklich gewesen wären – + ganz im Gegenteil. Uns ging es um meinen körperlichen Fortschritt + und die verbesserte Mobilität, und wir entschlossen uns, auf ABR umzusteigen. +
+
+ +Jetzt mache ich ein ABR-Programm und da gibt es eine Menge +schwerwiegender Änderungen. Ich fliege fünfmal im Jahr nach +Belgien und lerne bei jedem Besuch neue Techniken. +
+
+ +Wenn Sie mehr über mich wissen wollen, über mein Programm, meine +Fortschritte und meine Familie, dann schauen Sie meine Web-Seite an. +
+
+ +Danke, dass Sie meine Geschichte gelesen haben und sich überlegen, +ein Mitglied unserer Gesellschaft zu werden, um gehirnverletzten +Menschen, wie ich einer bin, zu helfen.
+
+Updates +für Gerard:

+
+ + +
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/de/familien/helenap.htm b/archive/version_02/de/familien/helenap.htm new file mode 100755 index 0000000..2bb60ef --- /dev/null +++ b/archive/version_02/de/familien/helenap.htm @@ -0,0 +1,187 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
Sie sind Hier: + Die Familien + / Helena Prosser
+ Die Familien : Helena Prosser +
+
+ +
+
+ + Helena Prosser +
+
+Ich wurde am 12. November 1993 geboren, bin ein Einzelkind und lebe mit meiner Mamma und meinen Großeltern in Oamaru, der südlichen Insel von Neuseeland.
+
+Am Anfang
+Bei meiner Geburt atmete ich nicht – ein deutlicher Hinweis auf eine Verletzung, +obwohl ich 4,75 kg wog und meine Haut gut durchblutet war. Nach einer Überdosis +an Sedativen, die man mir im Krankenhaus in den ersten 48 Stunden verabreicht hatte, +dauerte es drei Wochen, bis ich endlich „aufwachte“ und zu schreien begann. +Die nächsten fünf Monate schrie ich praktisch ununterbrochen – den ganzen Tag +und drei bis vier Stunden in der Nacht. Verzeih mir, Mamma! +
+
+ +Beginn der Anfälle
+Im Alter von fünf Monaten, gerade als ich meine ersten zwei Zähne bekam, +begannen die Anfälle. Am ersten Tage hatte ich 12 Anfälle, jeweils 10 Minuten +lang. Zumindest schrie ich nicht, während ich diese Anfälle hatte! Ich weiß +nicht, was schlimmer ist. Meine Anfälle kamen in wechselnder Intensität, +Häufigkeit und Dauer, an jedem Tag in meinem Leben, ausgenommen ein Jahr, +als ich sieben Jahre alt war und ein ganzes Jahr anfallfrei war. Glücklicherweise +und dank meinem Heimprogramm habe ich seit dem 21. Februar 2005 bis heute, da ich +das schreibe (April 2005), keinen Anfall mehr! +
+
+ +Ich began, langsam ruhiger zu werden. Als Einjährige litt ich zwar immer noch +schwer an Anfällen, war aber bereits viel ruhiger. Aber ich reagierte auf nichts + und niemanden, konnte mich nicht selbstständig bewegen und kommunizierte nicht + mit meiner Umgebung. +
+
+ +Was können wir tun? Das Institut
+Meine Mamma hatte vergeblich nach einer Behandlung gesucht, aber als +ich ein Jahr alt war, entdeckten sie und Nana (meine Omi) die Institutes +for the Achievement for Human Potential. +Ich kam an die „Institutes for the Development of Human Potential“ in +Melbourne/Australien, wo man das Ausmaß meiner Verletzung feststellte. +
+
+ +Die Diagnose lautete auf profunde, diffuse, bilaterale Mittelhirnverletzung. Es wurde entdeckt, dass ich blind und taub war und kaum Sinnesempfindungen hatte: viel zu empfindlich in einigen Bereichen und zu wenig empfindlich in anderen. +
+
+ +Mit 15 Monaten begann ich in dem australischen Institut mit dem Intensivprogramm: sieben Tage die Woche und 12 Stunden am Tag. Die nächsten fünf Jahre arbeitete ich sehr schwer; mit einer Bewertung alle sechs Monate und einen Programmwechsel, um die Veränderungen in meiner Entwicklung einzubeziehen. +
+
+ +Während dieser Zeit erlebte ich einige wunderbare und außerordentliche Veränderungen. Mein Seh-, Hör- und Tastvermögen besserte sich enorm. Ich lernte lesen und rechnen und begann, die Welt um mich zu verstehen. Obwohl meine Fähigkeit zu Sinnesempfindungen immer noch schwankte, war die Lage doch besser. +
+
+ +Als ich sechs war, wurde es klar, dass ich zwar Fortschritte machte, aber nicht schnell genug. Es wurde entschieden, mich zu den Instituten in Philadelphia zu bringen, um in den Genuss der neuesten Forschungsergebnisse und Trainingsmethoden zu gelangen. +
+
+ +Die Institute in Philadelphia – mein großes Programm
+Sechs Monate, nachdem ich im IAHP in Philadelphia begonnen hatte und im Alter von sieben Jahren kam ich in ein Programm für eine Beatmungsmustertherapie, in dem ich 18 Stunden am Tag Atmungsübungen machte. Innerhalb von drei Monaten hörten meine Anfälle auf – das erste Mal seit der Zeit, als ich fünf Monate alt war. Das war eine gewaltige Umwälzung für mich: Mein Gesicht entspannte sich, das permanente Stirnrunzeln hörte auf und hervor kam, was meine Mamma als das schönste Lächeln in der ganzen Welt nennt! Ich begann, sanfte Geräusche zu machen, die von allen als entzückend bewertet wurden, und konnte mich sogar etwas bewegen. +
+
+ +Fortschritte
+In den nächsten fünf Jahren verbesserte sich mein Seh- und Hörvermögen gewaltig, und meine geistige Entwicklung ging stürmisch voran. Heute kann ich Erwachsenenbücher schnell lesen, mache Mathematikübungen auf Universitätsniveau und habe enorme geistige Kenntnisse von der Welt. Ich liebe Musik in vielen Stilrichtungen. +
+
+ +Ich wurde immer ausgezeichnet ernährt und konnte zusammen mit meinem physiologischen Programm alle ernstlichen Erkrankungen vermeiden. Im Laufe der Jahre hatte ich zwar ein paarmal einen Schnupfen, aber nichts Außergewöhnliches. Die Ärzte hatten mir häufige Spitalsaufenthalte, Brustkorbinfektionen und chirurgische Eingriffe vorausgesagt. Bisher konnte ich all das vermeiden, ausgenommen diverser Zahnbehandlungen auf Grund von hypoplastischen Zähnen. +
+
+ +Komplikationen
+ +Im November 2004, kurz nachdem ich meinen 11. Geburtstag gefeiert hatte, wurde festgestellt, dass meine Leber nicht funktionierte und ich diverse Bluterkrankungen habe. Es wurde entschieden, dass ich während der Behandlung dieser Probleme nicht an die Institute in Philadelphia zurückkehren würde, sondern ohne die Anstrengung eines physischen Programmes, dass meine ganze Kraft fordert, Zeit haben sollte, wieder gesund zu werden. +
+
+ +Zu dieser Zeit hörte meine Mamma von einem neuen Programm, das von anderen Familien empfohlen wurde. Also flogen Mamma und ich im März 2005 nach Singapur zu einer ABR-Bewertung. Dank ABR habe ich die Ruhe, die ich für meine Genesung brauche, weil diese Therapie für mich passiv ist. Gleichzeitig ist sie auch eine positive Kraft für unser Leben, die mehr Antworten gibt, als ursprünglich gefragt wurden. +
+
+ +Fortschritte mit ABR
+Nach nur einem Monat im ABR-Programm konnte meine Familie schon eine ganze Reihe von grundlegenden Änderungen in mir feststellen, darunter auch ein Mehr an Plaudern und Lachen! Wir sind alle voller Hoffnung, dass dieses neue Programm eine Antwort auf mein massives Mobilitätsproblem bringt. So fliege ich jetzt dreimal pro Jahr nach Singapur, wo ich mich einer Bewertung unterziehe und meine Familie neue Trainingsfähigkeiten lernt. +
+
+ +Und das sagt meine Mamma über mich: „Helena ist ein kooperatives und sanftes Kind, das sehr mitfühlend mit dem Leid anderer ist. Sie lächelt gerne und beginnt schon zu kichern und zu lachen.“ + + + I was born on November 12th 1993. I am an only child, and I live with my +Mum, and my grandparents in Oamaru, in the South Island of New Zealand.
+
+Updates für +Helena:
+
+ + +
+
+
+ + + + + + +
+ + diff --git a/archive/version_02/de/familien/trentong.htm b/archive/version_02/de/familien/trentong.htm new file mode 100755 index 0000000..000359d --- /dev/null +++ b/archive/version_02/de/familien/trentong.htm @@ -0,0 +1,198 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
Sie Sind Hier: + Die Familien + / Trenton Gruber
+ Die Familien: Trenton Gruber +
+
+ +
+
+ + Trenton Gruber +
+
+ Meine Familie
+Mein Name ist Trenton Gruber, ich bin 7 Jahre alt (2005), meine Mutter heißt Rebecca Gruber (Becci), mein Vater Charles Gruber (Chuck). Ich habe 5 Geschwister, Jeremy Meyers (24 Jahre alt), Gabriel Meyers (22 Jahre), Adam Meyers (21 Jahre) und dann noch Mikayla und Sidney, meine 7 Jahre alten Drillingsgeschwister. +
+
+ +Zwei Hirnschäden in unserer Familie
+Zwei Kinder unserer Mutter sind hirnverletzt, mein Bruder Adam und ich. +
+
+ +Unsere Geburt
+Die Drillinge, 2 Mädchen und ein Bub (ich), wurden nach 29 Schwangerschaftswochen geboren, und zwar zuerst +Mikayla (2 lb 6 oz), dann ich (3 lb 1 oz), und zuletzt Sydney (3lb 6 oz). Unsere Lungen waren noch nicht +fertig entwickelt und wir wurden über Schläuche und die Haut versorgt und am Leben erhalten. Während des ersten Monats löste eine lebensbedrohende Krise die andere ab. Man hätte glauben können, dass es eine besondere Art der Verständigung zwischen uns gibt. Wir waren glücklich als wir dann nach etwas mehr als einem Monat aus unseren Brutkästen in ein behaglicheres Bett übersiedelt wurden. Alle drei litten wir an Gelbsucht und einer Laktoseintoleranz (besonders Sydney und ich) und wir wurden noch für weitere sechs Monate mit Sauerstoff beatmet und in dieser Zeit der Mutterbrust entwöhnt. +
+
+ +Mein Fortschritt
+Am Anfang wurde bei mir eine periventrikuläre Leukomyelase (PVL) als Folge einer intraventrikulären Blutung +bei der Geburt diagnostiziert, ein Blutpfropfen im vierten Ventrikel. Dies erfuhren wir erst einige Tage +vor meiner Entlassung aus dem Spital. Die Ärzte erwähnten, dass ich einige Behinderungen entwickeln werde, +sagten aber nicht in welchem Ausmaß. Es schien +jedoch so, dass ich mich am schnellsten von all diesen kritischen Gefahren am schnellsten erholen konnte. +Ich war ruhig und weinte wenig. Nach dem ersten Lebensjahr wurde ich an meinem ersten Geburtstag vom „Child +Find“ untersucht und es wurden konventionelle Therapien angeordnet. Zweimal pro Woche je eine physikalische, +Beschäftigungs- und Sprechtherapie. Dies dauerte sechs Monate und brachte nur sehr wenig Erfolg. +Meine Mutter, die schon einmal als Mutter eines hirnverletzten Kindes die damit verbundenen Probleme +kennen gelernt hatte, war mit den konventionellen Therapien unzufrieden und suchte deshalb Hilfe bei +anderen Müttern mit ähnlichen Problemen. Sie kam dabei mit dem Buch von Glenn Doman „ Was kann man für +ein hirnverletztes Kind tun“ in Berührung, und fühlte, dass darin die Antwort auf ihre Hoffnung für ihr +Kind enthalten sei. Nach ihrem Anruf bei den „Institutes for the Achievement of Human Potential“ (IAHP)unterschrieb sie einen Kurs für „Was kann man für ein hirnverletztes Kind tun“. Schon während der 3-monatigen +Wartezeit auf diesen Kurs begann sie mit mir ein Heimprogramm in Angriff zu nehmen (ich war damals 21 +Monate alt und buchstäblich ein am Boden liegendes Bündel Mensch, das seinen Kopf nicht in die Höhe bringen +konnte). Die Informationen aus dem Buch waren ausreichend, um daraus ein Tastsinn- und Sprechprogramm +und ein Programm für „Übungen auf einer geneigten Ebene“ zusammenstellen zu können. Ich fiel vom Bauch +auf den Rücken und umgekehrt, und meine Beine waren stocksteif. Bei 99% meiner Fütterungen verspürte +ich einen würgenden Brechreiz. Zu dieser Zeit trug ich Beinstützen und die Ärzte sprachen von einer Hüftoperation +und der Möglichkeit, mich für eine spätere Verwendung einer Geh-Hilfe (Walker) geeignet machen zu können. +Da ich schielte, erhielt ich eine Augenbinde, und ich kann heute deshalb nur mit einem Auge sehen. +
+
+ +Die IAHP
+Mama besuchte den Kurs „Was kann man für ein hirnverletztes Kind tun“ und sie und ich waren so begeistert, dass sie mich aus dem konventionellen Therapieprogramm herausnahm – nicht ohne einer Menge Kritik und Skepsis seitens der Therapeuten. Wir wussten, dass wir das richtige Programm hatten und begannen innerhalb einer Woche mit neurologischen Musterübungen. Mama benötigte 2 Monate um genügend Hilfswillige für 3 Serien mit je 5 Musterübungen zu finden. Ich stemmte mich 3 Monate lang gegen die jeweils volle 5 Minuten dauernden Übungen. Viele der Hilfswilligen gaben auf, da sie der Meinung waren, dass das Programm zu anstrengend sei. Wir aber zogen es durch und machten es schließlich zur Routine, und übten an jedem Tage der Woche. Das erste Jahr unseres Programms bestand aus Tast- und Sprechübungen, neurologischen Musterübungen, 15 mal pro Tag, aus einzelnen Intelligenzübungen, aus Übungen mit Pferden (die nicht hilfreich waren), aus Balanceübungen, und aus Atemreflexübungen. Ich benötigte ungefähr 6 Monate um von der „geneigten Ebene“ wegkrabbeln zu können wobei mir nur der rechte Arm gehorchte und erst allmählich dann auch mein anderer Arm und meine Beine. Es dauerte fast 2 Jahre bis wir unser Krabbelziel von 500 Metern erreichten. Wir hätten gerne das IAHP „Aspirant Program“ gemacht, konnten es uns aber nicht leisten. +
+
+ +Weiterer Fortschritt
+Im November 2000 begab ich mich in die Kriechstellung. Meine Sprechleistung war sehr gut. Wir reduzierten unser Programm auf jeweils 6 neurologische Musterübungen, auf täglich 20 Atemreflex-Übungen, auf Balanceübungen, und Atmungs-Musterübungen (30 Minuten pro Tag), und verbrachten den Rest des Tages mit spielerischen Kriechen. Wir übten Stiegengehen und besuchten zweimal pro Woche die Vorschule (was sich als Fehler herausstellte). +
+
+ +Anfälle und Ernährung
+Im April 2001 bemerkte Mama, dass ich Anfälle bekam. Vom Jänner bis Mai 2001war ich sehr krank. Zuerst eine Streptokokken-Infektion, dann Scharlach. Ich bekam eine glutenfreie, zuckerfreie und milchfreie Ernährung und wurde wieder gesund. Während des Sommers machte ich große Fortschritte. Wir verbrachten kriechend einen Teil des Tages in einer Kirche und am Rasen in einem Park. Mama machte mit mir wieder neurologische Musterübungen und Balanceübungen, und intensivierte die Atemreflexübungen auf 40 mal pro Tag und die Atem-Musterübungen auf 2 Stunden pro Tag. Wir machten auch gewisse Intelligenz-Übungen. Im August besuchte Mama den 2. Teil des IAHP Kurses und wir begannen mit einem 6 Wochen dauernden medullären Stimulationsprogramm. Wir benötigten 7 Wochen, brachten es aber trotzdem in jedem Tag auf 800 „Rollen“. Das Ergebnis rechtfertigte unsere Anstrengung. Meine Augen wurden klarer, das Essen funktionierte besser, ich saß aufrechter und war aufmerksamer, und meine Kriechlänge verlängerte sich innerhalb von nur 7 Wochen von 400 Meter pro Tag auf 1600 Meter einmal oder zweimal pro Woche. Mama besuchte dann im Oktober den dritten Teil des Kurses und ergänzte mit Enthusiasmus das weitere Programm. +
+
+ +Wir bauten unsere „schwerelose Umgebung“ und bestellten den Atmungsmuster-Apparat (der im Dezember 2001 in Betrieb genommen wurde). Es kam dann noch das „unterstützte Gehen“ mit der „Überkopfleiter“ dazu, mit 60 bis 70 Wiederholungen pro Tag, weitere 600 Meter kriechend, 5 Tage pro Woche, und ein intensiviertes Reflexatmen, 65 bis 80 mal am Tag. +
+
+ +Von IAHP zum Family Hope Centre
+Im Februar 2002 verließen wir IAHP und wechselten im April zum Family Hope Centre. Mit Hilfe dieses Zentrums absolvierten wir ein ähnliches Programm. +
+
+ +Das Trenton-Programm innerhalb von 5 ½ Jahren (4 ½ Jahre mit Programm 8, mehrere Stunden am Tage und 7 Tage pro Woche, später auf 6 Tage und letztlich auf 5 Tage pro Woche reduziert) umfasste: +12 neurologische Musterübungen +Üben auf geneigter Ebene +30 Gänge auf der Überkopfleiter +65-80 Atemreflex-Übungen +20 Tastsinn-Übungen +Medulläres Rollbrett +6 Schwerefrei-Übungen, 2 mal pro Tag (unregelmäßig) +5 Übungen mit Wortkarten, 3 mal pro Tag +2 selbstgemachte Büchlein pro Woche +Mathematik-Punkte, 3 mal pro Tag +Atmungsapparat, 10 Stunden pro Nacht +CO2/O2 Inhalationen, 20 mal pro Tag, jede für 60 Sekunden +400 –800 m Kriechen, 5 Tage pro Woche +Milch-, gluten- und zuckerfreie Diät, fortlaufend + +Mama musste auch für jede meiner Schwestern, die an leichteren Schädigungen leiden, Programme absolvieren. Jetzt im April 2004 hat sich mein Fortschritt verlangsamt und wir suchen nach Alternativen die mir bei der Verbesserung meiner körperlichen Verfassung und bei meinen Anfällen helfen können. +
+
+ +ABR
+Mama kann sich aus persönlichen Gründen nur 6 Stunden pro Tag und 5 mal pro Woche meinem Programm widmen. +Es ist deshalb wichtig, dass wir ein sehr effektives Programm absolvieren. Wir machen das ABR +Programm aber da wir nicht genügend finanziellen Rückhalt haben, konnten wir zu keiner Überprüfung +gehen und sind deshalb auch nicht sicher, ob wir auch das Richtige machen. +
+
+ +Ich arbeite viel an mir und ich bin auch alt genug, um zu sehen wie sehr sich mein Leben von dem anderer gleichaltriger Kinder unterscheidet. Ich bin oft sehr traurig, wenn ich anderen Kindern beim Laufen und Spielen zusehe, oder wenn sie ihren Namen schreiben, und ich mich hart anstrengen muss, um einfache Aufgaben meistern zu können. +
+
+ +Mama und ich wären glücklich, wenn wir die Mittel für eine ABR Überprüfung aufbringen könnten. + + Born June 8, 1997 in Denver, Colorado, USA. +
+
+ Updates für Trenton:
+
+ + +
+
+
+ + + + + + +
+ + diff --git a/archive/version_02/de/graphics/Jairus_Logo_d.jpg b/archive/version_02/de/graphics/Jairus_Logo_d.jpg new file mode 100755 index 0000000..329f628 Binary files /dev/null and b/archive/version_02/de/graphics/Jairus_Logo_d.jpg differ diff --git a/archive/version_02/de/graphics/_notes/contactus_btn.gif.mno b/archive/version_02/de/graphics/_notes/contactus_btn.gif.mno new file mode 100755 index 0000000..6d747ad --- /dev/null +++ b/archive/version_02/de/graphics/_notes/contactus_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/contactus_btn_2.gif.mno b/archive/version_02/de/graphics/_notes/contactus_btn_2.gif.mno new file mode 100755 index 0000000..6d747ad --- /dev/null +++ b/archive/version_02/de/graphics/_notes/contactus_btn_2.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/guestbook_btn.gif.mno b/archive/version_02/de/graphics/_notes/guestbook_btn.gif.mno new file mode 100755 index 0000000..64a8e20 --- /dev/null +++ b/archive/version_02/de/graphics/_notes/guestbook_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/guestbook_btn_2.gif.mno b/archive/version_02/de/graphics/_notes/guestbook_btn_2.gif.mno new file mode 100755 index 0000000..64a8e20 --- /dev/null +++ b/archive/version_02/de/graphics/_notes/guestbook_btn_2.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/home_btn.gif.mno b/archive/version_02/de/graphics/_notes/home_btn.gif.mno new file mode 100755 index 0000000..e638aec --- /dev/null +++ b/archive/version_02/de/graphics/_notes/home_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/home_btn_2.gif.mno b/archive/version_02/de/graphics/_notes/home_btn_2.gif.mno new file mode 100755 index 0000000..e638aec --- /dev/null +++ b/archive/version_02/de/graphics/_notes/home_btn_2.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/legal_btn.gif.mno b/archive/version_02/de/graphics/_notes/legal_btn.gif.mno new file mode 100755 index 0000000..4409905 --- /dev/null +++ b/archive/version_02/de/graphics/_notes/legal_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/legal_btn_2.gif.mno b/archive/version_02/de/graphics/_notes/legal_btn_2.gif.mno new file mode 100755 index 0000000..4409905 --- /dev/null +++ b/archive/version_02/de/graphics/_notes/legal_btn_2.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/links_btn.gif.mno b/archive/version_02/de/graphics/_notes/links_btn.gif.mno new file mode 100755 index 0000000..f8d0775 --- /dev/null +++ b/archive/version_02/de/graphics/_notes/links_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/links_btn_2.gif.mno b/archive/version_02/de/graphics/_notes/links_btn_2.gif.mno new file mode 100755 index 0000000..f8d0775 --- /dev/null +++ b/archive/version_02/de/graphics/_notes/links_btn_2.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/ourfamilies_btn.gif.mno b/archive/version_02/de/graphics/_notes/ourfamilies_btn.gif.mno new file mode 100755 index 0000000..0756586 --- /dev/null +++ b/archive/version_02/de/graphics/_notes/ourfamilies_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/ourfamilies_btn_2.gif.mno b/archive/version_02/de/graphics/_notes/ourfamilies_btn_2.gif.mno new file mode 100755 index 0000000..0756586 --- /dev/null +++ b/archive/version_02/de/graphics/_notes/ourfamilies_btn_2.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/ourmission_btn.gif.mno b/archive/version_02/de/graphics/_notes/ourmission_btn.gif.mno new file mode 100755 index 0000000..268a30a --- /dev/null +++ b/archive/version_02/de/graphics/_notes/ourmission_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/ourmission_btn_2.gif.mno b/archive/version_02/de/graphics/_notes/ourmission_btn_2.gif.mno new file mode 100755 index 0000000..268a30a --- /dev/null +++ b/archive/version_02/de/graphics/_notes/ourmission_btn_2.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/support_btn.gif.mno b/archive/version_02/de/graphics/_notes/support_btn.gif.mno new file mode 100755 index 0000000..f77da33 --- /dev/null +++ b/archive/version_02/de/graphics/_notes/support_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/_notes/support_btn_2.gif.mno b/archive/version_02/de/graphics/_notes/support_btn_2.gif.mno new file mode 100755 index 0000000..f77da33 --- /dev/null +++ b/archive/version_02/de/graphics/_notes/support_btn_2.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/de/graphics/contactus_btn.gif b/archive/version_02/de/graphics/contactus_btn.gif new file mode 100755 index 0000000..ea8b3c1 Binary files /dev/null and b/archive/version_02/de/graphics/contactus_btn.gif differ diff --git a/archive/version_02/de/graphics/contactus_btn_2.gif b/archive/version_02/de/graphics/contactus_btn_2.gif new file mode 100755 index 0000000..f53ff8b Binary files /dev/null and b/archive/version_02/de/graphics/contactus_btn_2.gif differ diff --git a/archive/version_02/de/graphics/guestbook_btn.gif b/archive/version_02/de/graphics/guestbook_btn.gif new file mode 100755 index 0000000..b837bbb Binary files /dev/null and b/archive/version_02/de/graphics/guestbook_btn.gif differ diff --git a/archive/version_02/de/graphics/guestbook_btn_2.gif b/archive/version_02/de/graphics/guestbook_btn_2.gif new file mode 100755 index 0000000..62da335 Binary files /dev/null and b/archive/version_02/de/graphics/guestbook_btn_2.gif differ diff --git a/archive/version_02/de/graphics/home_btn.gif b/archive/version_02/de/graphics/home_btn.gif new file mode 100755 index 0000000..29bae9c Binary files /dev/null and b/archive/version_02/de/graphics/home_btn.gif differ diff --git a/archive/version_02/de/graphics/home_btn_2.gif b/archive/version_02/de/graphics/home_btn_2.gif new file mode 100755 index 0000000..ab10e8f Binary files /dev/null and b/archive/version_02/de/graphics/home_btn_2.gif differ diff --git a/archive/version_02/de/graphics/jairus_logotext_de.jpg b/archive/version_02/de/graphics/jairus_logotext_de.jpg new file mode 100755 index 0000000..97a0042 Binary files /dev/null and b/archive/version_02/de/graphics/jairus_logotext_de.jpg differ diff --git a/archive/version_02/de/graphics/legal_btn.gif b/archive/version_02/de/graphics/legal_btn.gif new file mode 100755 index 0000000..fd9f84f Binary files /dev/null and b/archive/version_02/de/graphics/legal_btn.gif differ diff --git a/archive/version_02/de/graphics/legal_btn_2.gif b/archive/version_02/de/graphics/legal_btn_2.gif new file mode 100755 index 0000000..42e20ee Binary files /dev/null and b/archive/version_02/de/graphics/legal_btn_2.gif differ diff --git a/archive/version_02/de/graphics/links_btn.gif b/archive/version_02/de/graphics/links_btn.gif new file mode 100755 index 0000000..d5c398d Binary files /dev/null and b/archive/version_02/de/graphics/links_btn.gif differ diff --git a/archive/version_02/de/graphics/links_btn_2.gif b/archive/version_02/de/graphics/links_btn_2.gif new file mode 100755 index 0000000..bc6a5ae Binary files /dev/null and b/archive/version_02/de/graphics/links_btn_2.gif differ diff --git a/archive/version_02/de/graphics/ourfamilies_btn.gif b/archive/version_02/de/graphics/ourfamilies_btn.gif new file mode 100755 index 0000000..c3337fa Binary files /dev/null and b/archive/version_02/de/graphics/ourfamilies_btn.gif differ diff --git a/archive/version_02/de/graphics/ourfamilies_btn_2.gif b/archive/version_02/de/graphics/ourfamilies_btn_2.gif new file mode 100755 index 0000000..6661e27 Binary files /dev/null and b/archive/version_02/de/graphics/ourfamilies_btn_2.gif differ diff --git a/archive/version_02/de/graphics/ourmission_btn.gif b/archive/version_02/de/graphics/ourmission_btn.gif new file mode 100755 index 0000000..d259bfd Binary files /dev/null and b/archive/version_02/de/graphics/ourmission_btn.gif differ diff --git a/archive/version_02/de/graphics/ourmission_btn_2.gif b/archive/version_02/de/graphics/ourmission_btn_2.gif new file mode 100755 index 0000000..be00c68 Binary files /dev/null and b/archive/version_02/de/graphics/ourmission_btn_2.gif differ diff --git a/archive/version_02/de/graphics/support_btn.gif b/archive/version_02/de/graphics/support_btn.gif new file mode 100755 index 0000000..f3f037b Binary files /dev/null and b/archive/version_02/de/graphics/support_btn.gif differ diff --git a/archive/version_02/de/graphics/support_btn_2.gif b/archive/version_02/de/graphics/support_btn_2.gif new file mode 100755 index 0000000..5bc6045 Binary files /dev/null and b/archive/version_02/de/graphics/support_btn_2.gif differ diff --git a/archive/version_02/de/graphics/zuruck_btn.gif b/archive/version_02/de/graphics/zuruck_btn.gif new file mode 100755 index 0000000..e957ce6 Binary files /dev/null and b/archive/version_02/de/graphics/zuruck_btn.gif differ diff --git a/archive/version_02/de/graphics/zuruck_btn_2.gif b/archive/version_02/de/graphics/zuruck_btn_2.gif new file mode 100755 index 0000000..b064f4d Binary files /dev/null and b/archive/version_02/de/graphics/zuruck_btn_2.gif differ diff --git a/archive/version_02/de/guestbook.php b/archive/version_02/de/guestbook.php new file mode 100755 index 0000000..5db8840 --- /dev/null +++ b/archive/version_02/de/guestbook.php @@ -0,0 +1,241 @@ + + + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Gästebuch +

+ + + + + +
+validate($random_string)) + { echo '!! You cannot use the same captcha image twice, please try again.
'; } + + # Check, that the right CAPTCHA password has been entered and + # return an error message otherwise. + elseif (!$captchas->verify($password)) + { echo '!! You entered the wrong text from the image. Please try again.
'; } + + # everything is OK if we get here, so add message + else + { + # english dating dd/mm/yyy + $date = date("j/n/Y"); + $new_id = count($guestbook['guestbook']['entry']) + 1; + $message = implode('
', explode("\n",$_POST['message'])); + $new_entry = "\t + $date + {$_POST['name']} + $message + \n"; + + # file returns and array: one element per file line + $gb_file = file($guestbook_xml); + # the last line of the xml file is the closing guestbook tag, take it out + # so that we just append the new entry (which has the closing tag) + array_pop($gb_file); + # collapse the file array and append the new entry + $gb_file = implode('',$gb_file).$new_entry; + # write the few xml file to the file + file_put_contents($guestbook_xml,$gb_file); + + $guestbook['guestbook']['entry'][] = array( 'id' => $new_id, + 'date' => $date, + 'name' => $_POST['name'], + 'message' => $message ); + # the message and name are always printed back into the form + # but we only want this if the captcha failed + # if we're here, the captcha was successful, so we clear these values + $_POST['message'] = ''; + $_POST['name'] = ''; + } +} +?> +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Name: + ' /> +
+ Nachricht: + + +
  + Bitte gib den Text vom Bild ein:
+ +
  + image() ?> +
  + +
+
+
+ + +
+
+ +
+ + + + + + +
+ 0) +{ + $previous_page = $page - 1; + print "neue einträge"; +} +?> + +alte einträge"; +} + +?> +
+
+
+ +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/de/guestbook.xml b/archive/version_02/de/guestbook.xml new file mode 100755 index 0000000..a196585 --- /dev/null +++ b/archive/version_02/de/guestbook.xml @@ -0,0 +1,13 @@ + + + + April 27, 2005 + Francis Montocchio + Herzlich wilkommen beim Jairus Verein Gästebuch! Als erstes möchte ich meinen Dank an Benjamin Ramey für seine Mitarbeit an diese wunderschöne WebSeiten ausdrücken! Danke, Ben, für eine super Leistung! Francis. + + + mai 17, 2006 + Manuel, Markus und Brigitte + Familie Kisser ist sehr froh, einen so tollen Verein kennengelernt zu haben und ist sehr dankbar für das große Vertrauen das in uns gesetzt wird! Durch diesen Verein ist es uns möglich an der ABR-Therapie in Österreich teilnehmen zu können in die wir sehr viel Hoffnung gesetzt haben! Tausend Dank an Euch!! Ganz liebe Grüße
+
+
\ No newline at end of file diff --git a/archive/version_02/de/helfen.htm b/archive/version_02/de/helfen.htm new file mode 100755 index 0000000..27216f1 --- /dev/null +++ b/archive/version_02/de/helfen.htm @@ -0,0 +1,102 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Helfen Sie Uns +
+

Sie können durch Ihren Beitrag unsere Familien unterstützen.

+

BEITRAGSMÖGLICHKEITEN

+ +

Patenschaft – Unterstützung bestimmter + Familien
+ Personen oder Organisationen, die monatlich einen Beitrag zur Unterstützung einer bestimmten Familie + leisten.

+

Sponsor – Unterstützung aller Familien
+ Personen oder Organisationen, die monatlich einen Beitrag zum Verein insgesamt leisten.

+

AirMiles-Spender – Unterstützung von Familien, die mit dem Flugzeug reisen müssen
+ Personen oder Organisationen, die ihre Flugmeilen aus Frequent-Flyer-Programmen an Familien geben, + die zu Therapien reisen müssen.

+

Einzel-Spender – Unterstützung aller + oder bestimmter Familien
+ Personen oder Organisationen, die ein- oder mehrmals unsere Familien unterstützen. Der Geber bestimmt, + ob seine Spende allen Familien oder einer von ihm benannten Familie zugute kommt.

+

Spezial-Spender – außerordentliche + Zuwendungen
+ Personen oder Organisationen, die außerordentliche finanzielle oder sonstige Beiträge leisten.

+

+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/de/helfen_airmiles.htm b/archive/version_02/de/helfen_airmiles.htm new file mode 100755 index 0000000..16def9c --- /dev/null +++ b/archive/version_02/de/helfen_airmiles.htm @@ -0,0 +1,111 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
Sie sind hier: + Helfen Sie Uns + / AirMiles-Spender
+

AirMiles-Spender – Unterstützung von Familien, die mit dem Flugzeug reisen + müssen

+

Was ist ein AirMiles-Spender?
+ AirMiles-Spender sind Personen oder Organisationen, die bei Frequent-Flyer-Programmen von Fluggesellschaften + (wie z.B. der Star Alliance) mitmachen und einen Beitrag leisten möchten, indem sie einer der + + gehirnverletzten Personen ihre gesammelten Meilen spenden. Die meisten unserer Familien müssen + nach Philadelphia, Kanada, Singapur oder Beringen fliegen, um an Vorträgen, Therapie-Einweisungen + und ähnlichen teilzunehmen.

+

Wie spende ich meine gesammelten Frequent Flyer-Meilen?
+ Die meisten Frequent Flyer-Programme ermöglichen es ihren Mitgliedern, Meilen an bestimmte Personen + für einen bestimmten Flug weiterzugeben. Wenn Sie Meilen haben, die Sie auf diese Weise spenden + wollen, können Sie bitte unser Büro per E-Mail kontaktieren. Wir rufen Sie zurück und + vereinbaren die Übergabe dieser Meilen an eine Familie, die per Flugzeug reisen muss.

+

Werde ich über den Fortschritt und die + Ergebnisse der Behandlung informiert?
+ Alle AirMiles-Spender werden regelmäßig (im allgemeinen per E-Mail) über den Fortschritt + + der Behandlung informiert.

+

Kontakten Sie uns einfach, wenn Sie Meilen spenden wollen.

+

Eine interessante Web-Seite: www.webflyer.com
+

+

+

+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/de/helfen_paten.htm b/archive/version_02/de/helfen_paten.htm new file mode 100755 index 0000000..4f26e2a --- /dev/null +++ b/archive/version_02/de/helfen_paten.htm @@ -0,0 +1,119 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
Sie sind hier: + Helfen Sie Uns + / + + + Patenschaft
+ Patenschaft – Unterstützung bestimmter Familien +

Was ist eine Patenschaft?
+ Ein Pate (oder Patin!) hat ein besonderes Interesse an einem bestimmten Kind oder Erwachsenen. Als + Pate/Patin des Internationalen Vereins Jairus wählen Sie eine bestimmte Familie (oder mehrere), + die Sie unterstützen möchten. Lesen Sie bitte unser Informationsblatt über unsere Familien oder besuchen Sie unsere Webseite, wo Sie nähere Informationen über die Kinder/Erwachsenen + erhalten, die Sie unterstützen können. +

+

Was passiert mit meinen Beiträgen?
+ Die von Ihnen gewählte Familie kann diese speziellen Gelder beziehen, wenn sie sich an den Rechnungsprüfer + des Vereins wendet, um folgende Kosten ersetzt zu bekommen:
+• Flugtickets oder andere Fahrkarten für die Reise zu den IAHP oder ein ABR-Zentrum,
+• Mietauto,
+• Unterkunft und Verpflegung,
+• Zahlungen an IAHP oder ABR,
+• für die Behandlung notwendige Geräte (z.B. Behandlungstische).

+

Werde ich über den Fortschritt und die Ergebnisse + der Behandlung informiert?
+ Die Paten werden regelmäßig (im allgemeinen per E-Mail) über den Fortschritt der + Behandlung informiert.

+ +

Beitrag Paten
+• Paten spenden regelmäßig 10–150 Euro pro Monat.
+• Besondere Paten spenden regelmäßig mehr als 150 Euro pro Monat.
+
+Bitte kontaktieren Sie uns, wenn Sie ein Pate/Patin werden und ein bestimmtes Kind unterstützen + möchten.

+

+ +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/de/helfen_spender.htm b/archive/version_02/de/helfen_spender.htm new file mode 100755 index 0000000..849ccc9 --- /dev/null +++ b/archive/version_02/de/helfen_spender.htm @@ -0,0 +1,125 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
Sie sind Hier : + Helfen Sie Uns / Einzel-Spender
+ Einzel-Spender – Unterstützung aller oder bestimmter Familien +
+

Was ist ein Einzel-Spender?
+ + Als Einzel-Spender des Internationalen Vereins Jairus leisten Sie einen oder mehrere Beiträge – nicht + notwendigerweise regelmäßig – entweder an eine bestimmte Familie oder an alle Familien. + Lesen Sie bitte unser Informationsblatt über unsere Familien oder holen Sie auf unserer Web-Seite + weitere Informationen über die Familien, die Sie unterstützen können, ein.

+

Welche Arten von Einzel-Spender gibt es?
+ * Personen oder Organisationen, die entweder Einzelspenden oder unregelmäßige Spenden + an den Verein richten. Diese Gelder kommen ALLEN Familien des Vereins zugute.
+ * Personen oder Organisationen, die entweder Einzelspenden oder unregelmäßige Spenden + an bestimmte Familien richten. Diese Gelder kommen BESTIMMTEN Familien des Vereins + zugute.

+

Was passiert mit meinen Beiträgen?
+ Als Einzel-Spender stellen Sie Ihre Beiträge speziellen oder bestimmten Familien zur Verfügung, + die sich an den Rechnungsprüfer des Vereins wenden können.

+

Die Familien können folgende Kosten ersetzt bekommen:
+• Flugtickets oder andere Fahrkarten für die Reise zu den IAHP oder ein ABR-Zentrum,
+• Mietauto,
+• Unterkunft und Verpflegung,
+• Zahlungen an IAHP oder ABR,
+• für die Behandlung notwendige Geräte (z.B. Behandlungstische).

+ +

Werde ich über den Fortschritt und die Ergebnisse + der Behandlung informiert?
+ Alle Einzel-Spender werden regelmäßig (im allgemeinen per E-Mail) über den Fortschritt + der Behandlung informiert.

+

Beitrag Einzel-Spender
+• Einzel-Spender geben 10–150 Euro pro Spende.
+• Besondere Einzel-Spender geben mehr als 150 Euro pro Spende.
+ Einzel-Spender, die mehr als 1.700 Euro spenden, werden automatisch zu Spezial-Spender des Vereins + ernannt.

+

Bitte kontaktieren Sie uns, wenn Sie ein Spendermitglied werden und + unsere Familien unterstützen + möchten.
+

+ +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/de/helfen_spezialspender.htm b/archive/version_02/de/helfen_spezialspender.htm new file mode 100755 index 0000000..e60ff23 --- /dev/null +++ b/archive/version_02/de/helfen_spezialspender.htm @@ -0,0 +1,84 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
Sie sind hier: + Helfen Sie Uns + / Spezial-Spender
+ Spezial-Spender – außerordentliche Zuwendungen
+
+ Zur Zeit gibt es keine Spezial-Spender. + +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/de/helfen_sponsor.htm b/archive/version_02/de/helfen_sponsor.htm new file mode 100755 index 0000000..43d914d --- /dev/null +++ b/archive/version_02/de/helfen_sponsor.htm @@ -0,0 +1,114 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +

 

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
Sie sind hier: + Unterstütze Uns + / Sponsor
+ Sponsor– Unterstützung aller Familien +
+

Was ist ein Sponsor?
+ + Sponsoren interessieren sich für den Fortschritt aller unserer gehirnverletzten Kinder/Erwachsenen, + die in einem häuslichen Behandlungsprogramm stehen. Als Sponsor des Internationalen Vereins Jairus + kommen Ihre Beiträge allen unseren Familien gleichmäßig zugute. Lesen Sie bitte das + spezielle Informationsblatt über unsere Familien oder besuchen Sie unsere Webseite, wo Sie nähere + Informationen über die Familien erhalten, die Sie unterstützen können.

+

Was passiert mit meinen Beiträgen?
+ Alle Familien können Ihre Beiträge beziehen, wenn sie sich an den Rechnungsprüfer des + Vereins wenden, um folgende Kosten ersetzt zu bekommen:
+• Flugtickets oder andere Fahrkarten für die Reise zu den IAHP oder ein ABR-Zentrum (Therapieorganisation),
+• Mietauto,
+• Unterkunft und Verpflegung,
+• Zahlungen an IAHP oder ABR,
+ für die Behandlung notwendige Geräte (z.B. Behandlungstische).
+
+ Werde ich über den Fortschritt und die Ergebnisse der Behandlung + informiert?
+Alle Sponsoren werden regelmäßig (im allgemeinen per E-Mail) über den Fortschritt der + Behandlung informiert.

+

Beitrag Sponsor
+• Sponsoren spenden regelmäßig 10–150 Euro pro Monat.
+• Besondere Sponsoren spenden regelmäßig mehr als 150 Euro pro Monat.
+
+Bitte kontaktieren Sie uns, wenn Sie ein Sponsor werden und alle unsere Familien unterstützen möchten.

+ + +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/de/index.htm b/archive/version_02/de/index.htm new file mode 100755 index 0000000..cf1ff15 --- /dev/null +++ b/archive/version_02/de/index.htm @@ -0,0 +1,115 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + Gehirnschäden +
+
+ + + Obwohl tausende Kinder (und Erwachsene) mit Gehirnschäden + leben und hunderte von Symptomen bekannt sind, die aus + Gehirnverletzungen entstehen, scheint es doch nur wenige + Behandlungsmethoden zu geben, die Erfolge bringen. Zahlreiche + Eltern und Familien, die sich von der Schulmedizin Antworten + erhoffen, meinen, dass die existierenden Behandlungsmethoden + palliativ sind, also die Symptome und nicht die Ursachen behandeln, + und ihnen keine echte Hoffnung geben. +
+
+ Über diese Seite
+
Missions-Seite: Das Wesen + und die Mission des Jairus Vereins
+ Familien-Seite: Vorstellung der Familien in unserem Verein, + deren Schwierigkeiten und letzte Erfolge.
+ Unterstützungs-Seite: Möglichkeiten + der Unterstützung unseres Vereins
+ Rechtsform-Seite: Rechtliche Basis unseres Vereins + und seiner Unterstützungen
+ Kontakt-Seite: + Kontaktaufnahme mit dem Verein
+ Links-Seite: Informationen über Hirnschäden + und bezughabende Themen
+ Gästebuch: + Ersuchen um nützliche Kommentare

Bitte klicken Sie auf die gezeigten Bilder, wenn Sie + weitere Informationen wünschen.

+ + +
+
+ + + + + + +
+ + diff --git a/archive/version_02/de/inter.htm b/archive/version_02/de/inter.htm new file mode 100755 index 0000000..59d880c --- /dev/null +++ b/archive/version_02/de/inter.htm @@ -0,0 +1,55 @@ + + + + + + +The International Jairus Society + + + + + + +
+ +
+ + + diff --git a/archive/version_02/de/kontakt.htm b/archive/version_02/de/kontakt.htm new file mode 100755 index 0000000..ca4b54e --- /dev/null +++ b/archive/version_02/de/kontakt.htm @@ -0,0 +1,114 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Kontakt
+
+ + + + + +
+ Österreich
+ Kontakperson: Francis Montocchio
+
+ Internationaler Verein Jairus
+ Don Bosco-Gasse 39A
+ A-1230 Vienna
+ Österreich
+
+ Tel: +43 1 665 09 89
+ Fax: +43 1 665 09 897
+
+ E-mail: office@jasoc.org +
+
+ USA
+ Kontaktperson: Steve Ramey
+
+ The International Jairus Society
+ 3400 N.W. 58th Ter
+ Kansas City, MO 64151
+ USA
+
+ Tel: +1 816 505 1126
+ Cell: +1 816 830 3570
+
+ E-mail: office@jasoc.org
+
+
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/de/links.htm b/archive/version_02/de/links.htm new file mode 100755 index 0000000..2c29278 --- /dev/null +++ b/archive/version_02/de/links.htm @@ -0,0 +1,122 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Links + +
+
+ + Links zu anerkannten Behandlungsprogrammen + + +

Links zu den Web-Seiten betroffener Familien
+

+

+ +

Links zu Foren, in denen Gehirnverletzungen diskutiert werden +

+

+ +

Links zu Frequent Flyer-Programmen
+

    +
  • WebFlyer.com +
    + Dieser Link enthält alle wichtigen Frequent Flyer-Programme
  • +
+

+
+ +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/de/rechtliches.htm b/archive/version_02/de/rechtliches.htm new file mode 100755 index 0000000..a759610 --- /dev/null +++ b/archive/version_02/de/rechtliches.htm @@ -0,0 +1,89 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Rechtliches
+
+ + + Der Internationale Verein Jairus ist eine gemeinnützige Organisation, die sowohl in Österreich + als auch in den USA eingetragen ist. + + +
+
+ + + + + + +
+ + diff --git a/archive/version_02/de/rechtliches_austria.htm b/archive/version_02/de/rechtliches_austria.htm new file mode 100755 index 0000000..b795912 --- /dev/null +++ b/archive/version_02/de/rechtliches_austria.htm @@ -0,0 +1,134 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
Sie sind hier: + Rechtliches + / Österreich +
+ Rechtliches: Österreich +
+
+ Rechtsform des Vereins
+ + Der Internationale Verein Jairus ist als Verein konstituiert, +dessen Statuten von den österreichischen Behörden (Bundespolizeidirektion Wien) +am 20. April 2004 unter der Vereinsregisternummer XV-6454 Wien genehmigt wurden.
+
+
Vereinsstruktur
+
Vorsitz: Francis Montocchio
+Stellvertretender Vorsitz: Ilse Montocchio
+Rechnungsprüfung: Dr. Manfred Schwarz (Moore Stephens Austria)
+
+ + +
Adresse in Österreich +
+Don-Bosco-Gasse 39A
+A-1230 Wien
+Österreich
+Tel.: +43 1 665 09 89
+Fax: +43 1 665 09 897
+
+
Wo werden Spendengelder eingezahlt
+ +Finanzielle Beiträge an die Gesellschaft werden in +das Bankkonto des Vereins in Wien eingezahlt.
+
+
Bankverbindung
+Bank Austria-Creditanstalt
+Kontonummer 50787111444
+IBAN: AT77 1200 0507 8711 1444
+Swift: BKAUATWW
+

+Wie werden Spendengelder verteilt

+Die Auszahlung von Geldern erfolgt ausschließlich +durch den Rechnungsprüfer, sobald Mitgliedsfamilien die entsprechenden Belege im Wiener Büro eingereicht +haben.
+
+
Statuten des Vereins
+Auf Anfrage erhältlich.

+
+ + +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/de/rechtliches_us.htm b/archive/version_02/de/rechtliches_us.htm new file mode 100755 index 0000000..72cfa57 --- /dev/null +++ b/archive/version_02/de/rechtliches_us.htm @@ -0,0 +1,135 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
Sie sind hier: + Rechtliches + / USA +
+ Rechtliches: USA +
+
+
Rechtsform
+
+ + Die International Jairus Society wurde als gemeinnützige Organisation (N00643215) + am 22. Februar 2005 im Staate Missouri errichtet.
+
+ +
Steuerstatus +
+ Die International Jairus Society hat um Steuerbefreiung gemäß 501(c) (3) angesucht. Alle Beiträge + sind steuerfrei.
+
+
Adresse +
+ 3400 N.W. 58th Ter
+ Kansas City, MO 64151
+ USA
+ Tel.: +1 816 505 1126
+ Mobil: +1 816 830 3570
+
+
Vereinsstruktur +
+ President: Francis Montocchio
+ Secretary/Treasurer: James S. Ramey
+
+
Wo werden Spendengelder eingezahlt +
+ + Finanzielle Beiträge werden (hauptsächlich mit Scheck) in das International Jairus + Society -Konto in Kansas City, Missouri, eingezahlt.
+
+
Zahlungen/Schecks +
+ Schecks bitte ausstellen an die „International Jairus Society“. Sie werden auf das + Konto der Gesellschaft in Kansas City, Missouri, eingezahlt.
+
+
Wie werden Spendengelder verteilt +
+ Die Auszahlung von Geldern erfolgt ausschließlich durch den Treasurer, sobald Mitgliedsfamilien die entsprechenden Belege im US-Büro +eingereicht haben.
+
+
Statuten +
+Auf Anfrage erhältlich.
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/de/uberuns.htm b/archive/version_02/de/uberuns.htm new file mode 100755 index 0000000..aa4ffc2 --- /dev/null +++ b/archive/version_02/de/uberuns.htm @@ -0,0 +1,142 @@ + + + + +Die Internationale Verein Jairus + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Über Uns +
+
+ + + Als Eltern eines schwer gehirnverletzten Kindes haben wir, + Ilse und Francis + Montocchio, die Gründer des Internationalen Vereins Jairus, + durch persönliche Erfahrungen mit Hausbehandlungsprogrammen erkannt, + dass Gehirnverletzungen behandelbar sind und auch, was das Wichtigste + im Leben mit einem gehirnverletzten Menschen ist: + +
    +
  • WAS MÜSSEN WIR MACHEN?
  • +
  • DAS MACHEN WIR.
  • +
  • WIR SEHEN DIE RESULTATE – und die HOFFNUNG erwacht.
  • +
+

Wir haben auch erkannt: Die Therapiechancen für gehirngeschädigte + Kinder sind am höchsten, wenn die Eltern agieren oder, wenn das nicht + möglich ist, am besten Personen, die eng mit dem Kind verwandt ist. Das + heißt also, dass Mama oder Papa oder die Schwester oder die Tante (manchmal + gibt es nur Mama und Papa und die Schwester) die Erwerbsarbeit ganz + oder teilweise aufgibt und sich ganz dem Hausbehandlungsprogramm widmet.

+ +

Der Internationale Verein Jairus anerkennt zur Zeit zwei Behandlungsprogramme:

+
    +
  1. Das Intensivbehandlungsprogramm (Intensive Treatment Program) + an den Institutes for the Achievement of Human Potential, Philadelphia/USA,
  2. +
  3. Advanced Biomechanical Rehabilitation, mit Sitz in Beringen/Belgien
  4. +
+ +

Familien, die ein intensives Behandlungsprogramm an den IAHP durchführen, müssen + + zweimal im Jahr nach Philadelphia; Familien im ABR müssen bis zu fünfmal im Jahr in + das nächstgelegene ABR-Zentrum nach Beringen, Kanada oder Singapur. Das bedeutet Kosten + für, u.a., Arzthonorare, Flüge, Unterkunft, Verpflegung, Geräte und Helfer, die mit der + Familie reisen müssen.

+ +

Die Doppelbelastung eines verringerten Familieneinkommens + zusätzlich zu den Kosten für Reisen und Behandlungsprogramme führt bei den + meisten Familien zu einem enormen finanziellen Druck.

+ + +

Der Internationale Verein Jairus wurde in der Absicht gegründet, die + immer größere Zahl von Familien mit gehirngeschädigten, häuslich behandelten Mitgliedern + zu unterstützen. Er verfolgt zwei Hauptaktivitäten:

+ +
    +
  1. Geld auftreiben, um die Kosten dieser Behandlung zu bezahlen, weil diese von den üblichen Versicherungen kaum abgedeckt werden.
  2. +
  3. Austausch von Informationen und Erfahrungen über die häusliche Behandlung von gehirnverletzten Familienmitgliedern.
  4. +
+
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/en/Tie/File.pm b/archive/version_02/en/Tie/File.pm new file mode 100755 index 0000000..851e63a --- /dev/null +++ b/archive/version_02/en/Tie/File.pm @@ -0,0 +1,2616 @@ + +package Tie::File; +require 5.005; +use Carp ':DEFAULT', 'confess'; +use POSIX 'SEEK_SET'; +use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX', 'LOCK_SH', 'O_WRONLY', 'O_RDONLY'; +sub O_ACCMODE () { O_RDONLY | O_RDWR | O_WRONLY } + + +$VERSION = "0.96"; +my $DEFAULT_MEMORY_SIZE = 1<<21; # 2 megabytes +my $DEFAULT_AUTODEFER_THRESHHOLD = 3; # 3 records +my $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD = 65536; # 16 disk blocksful + +my %good_opt = map {$_ => 1, "-$_" => 1} + qw(memory dw_size mode recsep discipline + autodefer autochomp autodefer_threshhold); + +sub TIEARRAY { + if (@_ % 2 != 0) { + croak "usage: tie \@array, $_[0], filename, [option => value]..."; + } + my ($pack, $file, %opts) = @_; + + # transform '-foo' keys into 'foo' keys + for my $key (keys %opts) { + unless ($good_opt{$key}) { + croak("$pack: Unrecognized option '$key'\n"); + } + my $okey = $key; + if ($key =~ s/^-+//) { + $opts{$key} = delete $opts{$okey}; + } + } + + unless (defined $opts{memory}) { + # default is the larger of the default cache size and the + # deferred-write buffer size (if specified) + $opts{memory} = $DEFAULT_MEMORY_SIZE; + $opts{memory} = $opts{dw_size} + if defined $opts{dw_size} && $opts{dw_size} > $DEFAULT_MEMORY_SIZE; + # Dora Winifred Read + } + $opts{dw_size} = $opts{memory} unless defined $opts{dw_size}; + if ($opts{dw_size} > $opts{memory}) { + croak("$pack: dw_size may not be larger than total memory allocation\n"); + } + # are we in deferred-write mode? + $opts{defer} = 0 unless defined $opts{defer}; + $opts{deferred} = {}; # no records are presently deferred + $opts{deferred_s} = 0; # count of total bytes in ->{deferred} + $opts{deferred_max} = -1; # empty + + # What's a good way to arrange that this class can be overridden? + $opts{cache} = Tie::File::Cache->new($opts{memory}); + + # autodeferment is enabled by default + $opts{autodefer} = 1 unless defined $opts{autodefer}; + $opts{autodeferring} = 0; # but is not initially active + $opts{ad_history} = []; + $opts{autodefer_threshhold} = $DEFAULT_AUTODEFER_THRESHHOLD + unless defined $opts{autodefer_threshhold}; + $opts{autodefer_filelen_threshhold} = $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD + unless defined $opts{autodefer_filelen_threshhold}; + + $opts{offsets} = [0]; + $opts{filename} = $file; + unless (defined $opts{recsep}) { + $opts{recsep} = _default_recsep(); + } + $opts{recseplen} = length($opts{recsep}); + if ($opts{recseplen} == 0) { + croak "Empty record separator not supported by $pack"; + } + + $opts{autochomp} = 1 unless defined $opts{autochomp}; + + $opts{mode} = O_CREAT|O_RDWR unless defined $opts{mode}; + $opts{rdonly} = (($opts{mode} & O_ACCMODE) == O_RDONLY); + $opts{sawlastrec} = undef; + + my $fh; + + if (UNIVERSAL::isa($file, 'GLOB')) { + # We use 1 here on the theory that some systems + # may not indicate failure if we use 0. + # MSWin32 does not indicate failure with 0, but I don't know if + # it will indicate failure with 1 or not. + unless (seek $file, 1, SEEK_SET) { + croak "$pack: your filehandle does not appear to be seekable"; + } + seek $file, 0, SEEK_SET # put it back + $fh = $file; # setting binmode is the user's problem + } elsif (ref $file) { + croak "usage: tie \@array, $pack, filename, [option => value]..."; + } else { + # $fh = \do { local *FH }; # XXX this is buggy + if ($] < 5.006) { + # perl 5.005 and earlier don't autovivify filehandles + require Symbol; + $fh = Symbol::gensym(); + } + sysopen $fh, $file, $opts{mode}, 0666 or return; + binmode $fh; + ++$opts{ourfh}; + } + { my $ofh = select $fh; $| = 1; select $ofh } # autoflush on write + if (defined $opts{discipline} && $] >= 5.006) { + # This avoids a compile-time warning under 5.005 + eval 'binmode($fh, $opts{discipline})'; + croak $@ if $@ =~ /unknown discipline/i; + die if $@; + } + $opts{fh} = $fh; + + bless \%opts => $pack; +} + +sub FETCH { + my ($self, $n) = @_; + my $rec; + + # check the defer buffer + $rec = $self->{deferred}{$n} if exists $self->{deferred}{$n}; + $rec = $self->_fetch($n) unless defined $rec; + + # inlined _chomp1 + substr($rec, - $self->{recseplen}) = "" + if defined $rec && $self->{autochomp}; + $rec; +} + +# Chomp many records in-place; return nothing useful +sub _chomp { + my $self = shift; + return unless $self->{autochomp}; + if ($self->{autochomp}) { + for (@_) { + next unless defined; + substr($_, - $self->{recseplen}) = ""; + } + } +} + +# Chomp one record in-place; return modified record +sub _chomp1 { + my ($self, $rec) = @_; + return $rec unless $self->{autochomp}; + return unless defined $rec; + substr($rec, - $self->{recseplen}) = ""; + $rec; +} + +sub _fetch { + my ($self, $n) = @_; + + # check the record cache + { my $cached = $self->{cache}->lookup($n); + return $cached if defined $cached; + } + + if ($#{$self->{offsets}} < $n) { + return if $self->{eof}; # request for record beyond end of file + my $o = $self->_fill_offsets_to($n); + # If it's still undefined, there is no such record, so return 'undef' + return unless defined $o; + } + + my $fh = $self->{FH}; + $self->_seek($n); # we can do this now that offsets is populated + my $rec = $self->_read_record; + +# If we happen to have just read the first record, check to see if +# the length of the record matches what 'tell' says. If not, Tie::File +# won't work, and should drop dead. +# +# if ($n == 0 && defined($rec) && tell($self->{fh}) != length($rec)) { +# if (defined $self->{discipline}) { +# croak "I/O discipline $self->{discipline} not supported"; +# } else { +# croak "File encoding not supported"; +# } +# } + + $self->{cache}->insert($n, $rec) if defined $rec && not $self->{flushing}; + $rec; +} + +sub STORE { + my ($self, $n, $rec) = @_; + die "STORE called from _check_integrity!" if $DIAGNOSTIC; + + $self->_fixrecs($rec); + + if ($self->{autodefer}) { + $self->_annotate_ad_history($n); + } + + return $self->_store_deferred($n, $rec) if $self->_is_deferring; + + + # We need this to decide whether the new record will fit + # It incidentally populates the offsets table + # Note we have to do this before we alter the cache + # 20020324 Wait, but this DOES alter the cache. TODO BUG? + my $oldrec = $self->_fetch($n); + + if (not defined $oldrec) { + # We're storing a record beyond the end of the file + $self->_extend_file_to($n+1); + $oldrec = $self->{recsep}; + } +# return if $oldrec eq $rec; # don't bother + my $len_diff = length($rec) - length($oldrec); + + # length($oldrec) here is not consistent with text mode TODO XXX BUG + $self->_mtwrite($rec, $self->{offsets}[$n], length($oldrec)); + $self->_oadjust([$n, 1, $rec]); + $self->{cache}->update($n, $rec); +} + +sub _store_deferred { + my ($self, $n, $rec) = @_; + $self->{cache}->remove($n); + my $old_deferred = $self->{deferred}{$n}; + + if (defined $self->{deferred_max} && $n > $self->{deferred_max}) { + $self->{deferred_max} = $n; + } + $self->{deferred}{$n} = $rec; + + my $len_diff = length($rec); + $len_diff -= length($old_deferred) if defined $old_deferred; + $self->{deferred_s} += $len_diff; + $self->{cache}->adj_limit(-$len_diff); + if ($self->{deferred_s} > $self->{dw_size}) { + $self->_flush; + } elsif ($self->_cache_too_full) { + $self->_cache_flush; + } +} + +# Remove a single record from the deferred-write buffer without writing it +# The record need not be present +sub _delete_deferred { + my ($self, $n) = @_; + my $rec = delete $self->{deferred}{$n}; + return unless defined $rec; + + if (defined $self->{deferred_max} + && $n == $self->{deferred_max}) { + undef $self->{deferred_max}; + } + + $self->{deferred_s} -= length $rec; + $self->{cache}->adj_limit(length $rec); +} + +sub FETCHSIZE { + my $self = shift; + my $n = $self->{eof} ? $#{$self->{offsets}} : $self->_fill_offsets; + + my $top_deferred = $self->_defer_max; + $n = $top_deferred+1 if defined $top_deferred && $n < $top_deferred+1; + $n; +} + +sub STORESIZE { + my ($self, $len) = @_; + + if ($self->{autodefer}) { + $self->_annotate_ad_history('STORESIZE'); + } + + my $olen = $self->FETCHSIZE; + return if $len == $olen; # Woo-hoo! + + # file gets longer + if ($len > $olen) { + if ($self->_is_deferring) { + for ($olen .. $len-1) { + $self->_store_deferred($_, $self->{recsep}); + } + } else { + $self->_extend_file_to($len); + } + return; + } + + # file gets shorter + if ($self->_is_deferring) { + # TODO maybe replace this with map-plus-assignment? + for (grep $_ >= $len, keys %{$self->{deferred}}) { + $self->_delete_deferred($_); + } + $self->{deferred_max} = $len-1; + } + + $self->_seek($len); + $self->_chop_file; + $#{$self->{offsets}} = $len; +# $self->{offsets}[0] = 0; # in case we just chopped this + + $self->{cache}->remove(grep $_ >= $len, $self->{cache}->ckeys); +} + +### OPTIMIZE ME +### It should not be necessary to do FETCHSIZE +### Just seek to the end of the file. +sub PUSH { + my $self = shift; + $self->SPLICE($self->FETCHSIZE, scalar(@_), @_); + + # No need to return: + # $self->FETCHSIZE; # because av.c takes care of this for me +} + +sub POP { + my $self = shift; + my $size = $self->FETCHSIZE; + return if $size == 0; +# print STDERR "# POPPITY POP POP POP\n"; + scalar $self->SPLICE($size-1, 1); +} + +sub SHIFT { + my $self = shift; + scalar $self->SPLICE(0, 1); +} + +sub UNSHIFT { + my $self = shift; + $self->SPLICE(0, 0, @_); + # $self->FETCHSIZE; # av.c takes care of this for me +} + +sub CLEAR { + my $self = shift; + + if ($self->{autodefer}) { + $self->_annotate_ad_history('CLEAR'); + } + + $self->_seekb(0); + $self->_chop_file; + $self->{cache}->set_limit($self->{memory}); + $self->{cache}->empty; + @{$self->{offsets}} = (0); + %{$self->{deferred}}= (); + $self->{deferred_s} = 0; + $self->{deferred_max} = -1; +} + +sub EXTEND { + my ($self, $n) = @_; + + # No need to pre-extend anything in this case + return if $self->_is_deferring; + + $self->_fill_offsets_to($n); + $self->_extend_file_to($n); +} + +sub DELETE { + my ($self, $n) = @_; + + if ($self->{autodefer}) { + $self->_annotate_ad_history('DELETE'); + } + + my $lastrec = $self->FETCHSIZE-1; + my $rec = $self->FETCH($n); + $self->_delete_deferred($n) if $self->_is_deferring; + if ($n == $lastrec) { + $self->_seek($n); + $self->_chop_file; + $#{$self->{offsets}}--; + $self->{cache}->remove($n); + # perhaps in this case I should also remove trailing null records? + # 20020316 + # Note that delete @a[-3..-1] deletes the records in the wrong order, + # so we only chop the very last one out of the file. We could repair this + # by tracking deleted records inside the object. + } elsif ($n < $lastrec) { + $self->STORE($n, ""); + } + $rec; +} + +sub EXISTS { + my ($self, $n) = @_; + return 1 if exists $self->{deferred}{$n}; + $n < $self->FETCHSIZE; +} + +sub SPLICE { + my $self = shift; + + if ($self->{autodefer}) { + $self->_annotate_ad_history('SPLICE'); + } + + $self->_flush if $self->_is_deferring; # move this up? + if (wantarray) { + $self->_chomp(my @a = $self->_splice(@_)); + @a; + } else { + $self->_chomp1(scalar $self->_splice(@_)); + } +} + +sub DESTROY { + my $self = shift; + $self->flush if $self->_is_deferring; + $self->{cache}->delink if defined $self->{cache}; # break circular link + if ($self->{fh} and $self->{ourfh}) { + delete $self->{ourfh}; + close delete $self->{fh}; + } +} + +sub _splice { + my ($self, $pos, $nrecs, @data) = @_; + my @result; + + $pos = 0 unless defined $pos; + + # Deal with negative and other out-of-range positions + # Also set default for $nrecs + { + my $oldsize = $self->FETCHSIZE; + $nrecs = $oldsize unless defined $nrecs; + my $oldpos = $pos; + + if ($pos < 0) { + $pos += $oldsize; + if ($pos < 0) { + croak "Modification of non-creatable array value attempted, subscript $oldpos"; + } + } + + if ($pos > $oldsize) { + return unless @data; + $pos = $oldsize; # This is what perl does for normal arrays + } + + # The manual is very unclear here + if ($nrecs < 0) { + $nrecs = $oldsize - $pos + $nrecs; + $nrecs = 0 if $nrecs < 0; + } + + # nrecs is too big---it really means "until the end" + # 20030507 + if ($nrecs + $pos > $oldsize) { + $nrecs = $oldsize - $pos; + } + } + + $self->_fixrecs(@data); + my $data = join '', @data; + my $datalen = length $data; + my $oldlen = 0; + + # compute length of data being removed + for ($pos .. $pos+$nrecs-1) { + last unless defined $self->_fill_offsets_to($_); + my $rec = $self->_fetch($_); + last unless defined $rec; + push @result, $rec; + + # Why don't we just use length($rec) here? + # Because that record might have come from the cache. _splice + # might have been called to flush out the deferred-write records, + # and in this case length($rec) is the length of the record to be + # *written*, not the length of the actual record in the file. But + # the offsets are still true. 20020322 + $oldlen += $self->{offsets}[$_+1] - $self->{offsets}[$_] + if defined $self->{offsets}[$_+1]; + } + $self->_fill_offsets_to($pos+$nrecs); + + # Modify the file + $self->_mtwrite($data, $self->{offsets}[$pos], $oldlen); + # Adjust the offsets table + $self->_oadjust([$pos, $nrecs, @data]); + + { # Take this read cache stuff out into a separate function + # You made a half-attempt to put it into _oadjust. + # Finish something like that up eventually. + # STORE also needs to do something similarish + + # update the read cache, part 1 + # modified records + for ($pos .. $pos+$nrecs-1) { + my $new = $data[$_-$pos]; + if (defined $new) { + $self->{cache}->update($_, $new); + } else { + $self->{cache}->remove($_); + } + } + + # update the read cache, part 2 + # moved records - records past the site of the change + # need to be renumbered + # Maybe merge this with the previous block? + { + my @oldkeys = grep $_ >= $pos + $nrecs, $self->{cache}->ckeys; + my @newkeys = map $_-$nrecs+@data, @oldkeys; + $self->{cache}->rekey(\@oldkeys, \@newkeys); + } + + # Now there might be too much data in the cache, if we spliced out + # some short records and spliced in some long ones. If so, flush + # the cache. + $self->_cache_flush; + } + + # Yes, the return value of 'splice' *is* actually this complicated + wantarray ? @result : @result ? $result[-1] : undef; +} + + +# write data into the file +# $data is the data to be written. +# it should be written at position $pos, and should overwrite +# exactly $len of the following bytes. +# Note that if length($data) > $len, the subsequent bytes will have to +# be moved up, and if length($data) < $len, they will have to +# be moved down +sub _twrite { + my ($self, $data, $pos, $len) = @_; + + unless (defined $pos) { + die "\$pos was undefined in _twrite"; + } + + my $len_diff = length($data) - $len; + + if ($len_diff == 0) { # Woo-hoo! + my $fh = $self->{fh}; + $self->_seekb($pos); + $self->_write_record($data); + return; # well, that was easy. + } + + # the two records are of different lengths + # our strategy here: rewrite the tail of the file, + # reading ahead one buffer at a time + # $bufsize is required to be at least as large as the data we're overwriting + my $bufsize = _bufsize($len_diff); + my ($writepos, $readpos) = ($pos, $pos+$len); + my $next_block; + my $more_data; + + # Seems like there ought to be a way to avoid the repeated code + # and the special case here. The read(1) is also a little weird. + # Think about this. + do { + $self->_seekb($readpos); + my $br = read $self->{fh}, $next_block, $bufsize; + $more_data = read $self->{fh}, my($dummy), 1; + $self->_seekb($writepos); + $self->_write_record($data); + $readpos += $br; + $writepos += length $data; + $data = $next_block; + } while $more_data; + $self->_seekb($writepos); + $self->_write_record($next_block); + + # There might be leftover data at the end of the file + $self->_chop_file if $len_diff < 0; +} + +# _iwrite(D, S, E) +# Insert text D at position S. +# Let C = E-S-|D|. If C < 0; die. +# Data in [S,S+C) is copied to [S+D,S+D+C) = [S+D,E). +# Data in [S+C = E-D, E) is returned. Data in [E, oo) is untouched. +# +# In a later version, don't read the entire intervening area into +# memory at once; do the copying block by block. +sub _iwrite { + my $self = shift; + my ($D, $s, $e) = @_; + my $d = length $D; + my $c = $e-$s-$d; + local *FH = $self->{fh}; + confess "Not enough space to insert $d bytes between $s and $e" + if $c < 0; + confess "[$s,$e) is an invalid insertion range" if $e < $s; + + $self->_seekb($s); + read FH, my $buf, $e-$s; + + $D .= substr($buf, 0, $c, ""); + + $self->_seekb($s); + $self->_write_record($D); + + return $buf; +} + +# Like _twrite, but the data-pos-len triple may be repeated; you may +# write several chunks. All the writing will be done in +# one pass. Chunks SHALL be in ascending order and SHALL NOT overlap. +sub _mtwrite { + my $self = shift; + my $unwritten = ""; + my $delta = 0; + + @_ % 3 == 0 + or die "Arguments to _mtwrite did not come in groups of three"; + + while (@_) { + my ($data, $pos, $len) = splice @_, 0, 3; + my $end = $pos + $len; # The OLD end of the segment to be replaced + $data = $unwritten . $data; + $delta -= length($unwritten); + $unwritten = ""; + $pos += $delta; # This is where the data goes now + my $dlen = length $data; + $self->_seekb($pos); + if ($len >= $dlen) { # the data will fit + $self->_write_record($data); + $delta += ($dlen - $len); # everything following moves down by this much + $data = ""; # All the data in the buffer has been written + } else { # won't fit + my $writable = substr($data, 0, $len - $delta, ""); + $self->_write_record($writable); + $delta += ($dlen - $len); # everything following moves down by this much + } + + # At this point we've written some but maybe not all of the data. + # There might be a gap to close up, or $data might still contain a + # bunch of unwritten data that didn't fit. + my $ndlen = length $data; + if ($delta == 0) { + $self->_write_record($data); + } elsif ($delta < 0) { + # upcopy (close up gap) + if (@_) { + $self->_upcopy($end, $end + $delta, $_[1] - $end); + } else { + $self->_upcopy($end, $end + $delta); + } + } else { + # downcopy (insert data that didn't fit; replace this data in memory + # with _later_ data that doesn't fit) + if (@_) { + $unwritten = $self->_downcopy($data, $end, $_[1] - $end); + } else { + # Make the file longer to accomodate the last segment that doesn' + $unwritten = $self->_downcopy($data, $end); + } + } + } +} + +# Copy block of data of length $len from position $spos to position $dpos +# $dpos must be <= $spos +# +# If $len is undefined, go all the way to the end of the file +# and then truncate it ($spos - $dpos bytes will be removed) +sub _upcopy { + my $blocksize = 8192; + my ($self, $spos, $dpos, $len) = @_; + if ($dpos > $spos) { + die "source ($spos) was upstream of destination ($dpos) in _upcopy"; + } elsif ($dpos == $spos) { + return; + } + + while (! defined ($len) || $len > 0) { + my $readsize = ! defined($len) ? $blocksize + : $len > $blocksize ? $blocksize + : $len; + + my $fh = $self->{fh}; + $self->_seekb($spos); + my $bytes_read = read $fh, my($data), $readsize; + $self->_seekb($dpos); + if ($data eq "") { + $self->_chop_file; + last; + } + $self->_write_record($data); + $spos += $bytes_read; + $dpos += $bytes_read; + $len -= $bytes_read if defined $len; + } +} + +# Write $data into a block of length $len at position $pos, +# moving everything in the block forwards to make room. +# Instead of writing the last length($data) bytes from the block +# (because there isn't room for them any longer) return them. +sub _downcopy { + my $blocksize = 8192; + my ($self, $data, $pos, $len) = @_; + my $fh = $self->{fh}; + + while (! defined $len || $len > 0) { + my $readsize = ! defined($len) ? $blocksize + : $len > $blocksize? $blocksize : $len; + $self->_seekb($pos); + read $fh, my($old), $readsize; + $data .= $old; + $self->_seekb($pos); + my $writable = substr($data, 0, $readsize, ""); + last if $writable eq ""; + $self->_write_record($writable); + $len -= $readsize if defined $len; + $pos += $readsize; + } + return $data; +} + +# Adjust the object data structures following an '_mtwrite' +# Arguments are +# [$pos, $nrecs, @length] items +# indicating that $nrecs records were removed at $recpos (a record offset) +# and replaced with records of length @length... +# Arguments guarantee that $recpos is strictly increasing. +# No return value +sub _oadjust { + my $self = shift; + my $delta = 0; + my $delta_recs = 0; + my $prev_end = -1; + my %newkeys; + + for (@_) { + my ($pos, $nrecs, @data) = @$_; + $pos += $delta_recs; + + # Adjust the offsets of the records after the previous batch up + # to the first new one of this batch + for my $i ($prev_end+2 .. $pos - 1) { + $self->{offsets}[$i] += $delta; + $newkey{$i} = $i + $delta_recs; + } + + $prev_end = $pos + @data - 1; # last record moved on this pass + + # Remove the offsets for the removed records; + # replace with the offsets for the inserted records + my @newoff = ($self->{offsets}[$pos] + $delta); + for my $i (0 .. $#data) { + my $newlen = length $data[$i]; + push @newoff, $newoff[$i] + $newlen; + $delta += $newlen; + } + + for my $i ($pos .. $pos+$nrecs-1) { + last if $i+1 > $#{$self->{offsets}}; + my $oldlen = $self->{offsets}[$i+1] - $self->{offsets}[$i]; + $delta -= $oldlen; + } + +# # also this data has changed, so update it in the cache +# for (0 .. $#data) { +# $self->{cache}->update($pos + $_, $data[$_]); +# } +# if ($delta_recs) { +# my @oldkeys = grep $_ >= $pos + @data, $self->{cache}->ckeys; +# my @newkeys = map $_ + $delta_recs, @oldkeys; +# $self->{cache}->rekey(\@oldkeys, \@newkeys); +# } + + # replace old offsets with new + splice @{$self->{offsets}}, $pos, $nrecs+1, @newoff; + # What if we just spliced out the end of the offsets table? + # shouldn't we clear $self->{eof}? Test for this XXX BUG TODO + + $delta_recs += @data - $nrecs; # net change in total number of records + } + + # The trailing records at the very end of the file + if ($delta) { + for my $i ($prev_end+2 .. $#{$self->{offsets}}) { + $self->{offsets}[$i] += $delta; + } + } + + # If we scrubbed out all known offsets, regenerate the trivial table + # that knows that the file does indeed start at 0. + $self->{offsets}[0] = 0 unless @{$self->{offsets}}; + # If the file got longer, the offsets table is no longer complete + # $self->{eof} = 0 if $delta_recs > 0; + + # Now there might be too much data in the cache, if we spliced out + # some short records and spliced in some long ones. If so, flush + # the cache. + $self->_cache_flush; +} + +# If a record does not already end with the appropriate terminator +# string, append one. +sub _fixrecs { + my $self = shift; + for (@_) { + $_ = "" unless defined $_; + $_ .= $self->{recsep} + unless substr($_, - $self->{recseplen}) eq $self->{recsep}; + } +} + + +################################################################ +# +# Basic read, write, and seek +# + +# seek to the beginning of record #$n +# Assumes that the offsets table is already correctly populated +# +# Note that $n=-1 has a special meaning here: It means the start of +# the last known record; this may or may not be the very last record +# in the file, depending on whether the offsets table is fully populated. +# +sub _seek { + my ($self, $n) = @_; + my $o = $self->{offsets}[$n]; + defined($o) + or confess("logic error: undefined offset for record $n"); + seek $self->{fh}, $o, SEEK_SET + or confess "Couldn't seek filehandle: $!"; # "Should never happen." +} + +# seek to byte $b in the file +sub _seekb { + my ($self, $b) = @_; + seek $self->{fh}, $b, SEEK_SET + or die "Couldn't seek filehandle: $!"; # "Should never happen." +} + +# populate the offsets table up to the beginning of record $n +# return the offset of record $n +sub _fill_offsets_to { + my ($self, $n) = @_; + + return $self->{offsets}[$n] if $self->{eof}; + + my $fh = $self->{fh}; + local *OFF = $self->{offsets}; + my $rec; + + until ($#OFF >= $n) { + $self->_seek(-1); # tricky -- see comment at _seek + $rec = $self->_read_record; + if (defined $rec) { + push @OFF, int(tell $fh); # Tels says that int() saves memory here + } else { + $self->{eof} = 1; + return; # It turns out there is no such record + } + } + + # we have now read all the records up to record n-1, + # so we can return the offset of record n + $OFF[$n]; +} + +sub _fill_offsets { + my ($self) = @_; + + my $fh = $self->{fh}; + local *OFF = $self->{offsets}; + + $self->_seek(-1); # tricky -- see comment at _seek + + # Tels says that inlining read_record() would make this loop + # five times faster. 20030508 + while ( defined $self->_read_record()) { + # int() saves us memory here + push @OFF, int(tell $fh); + } + + $self->{eof} = 1; + $#OFF; +} + +# assumes that $rec is already suitably terminated +sub _write_record { + my ($self, $rec) = @_; + my $fh = $self->{fh}; + local $\ = ""; + print $fh $rec + or die "Couldn't write record: $!"; # "Should never happen." +# $self->{_written} += length($rec); +} + +sub _read_record { + my $self = shift; + my $rec; + { local $/ = $self->{recsep}; + my $fh = $self->{fh}; + $rec = <$fh>; + } + return unless defined $rec; + if (substr($rec, -$self->{recseplen}) ne $self->{recsep}) { + # improperly terminated final record --- quietly fix it. +# my $ac = substr($rec, -$self->{recseplen}); +# $ac =~ s/\n/\\n/g; + $self->{sawlastrec} = 1; + unless ($self->{rdonly}) { + local $\ = ""; + my $fh = $self->{fh}; + print $fh $self->{recsep}; + } + $rec .= $self->{recsep}; + } +# $self->{_read} += length($rec) if defined $rec; + $rec; +} + +sub _rw_stats { + my $self = shift; + @{$self}{'_read', '_written'}; +} + +################################################################ +# +# Read cache management + +sub _cache_flush { + my ($self) = @_; + $self->{cache}->reduce_size_to($self->{memory} - $self->{deferred_s}); +} + +sub _cache_too_full { + my $self = shift; + $self->{cache}->bytes + $self->{deferred_s} >= $self->{memory}; +} + +################################################################ +# +# File custodial services +# + + +# We have read to the end of the file and have the offsets table +# entirely populated. Now we need to write a new record beyond +# the end of the file. We prepare for this by writing +# empty records into the file up to the position we want +# +# assumes that the offsets table already contains the offset of record $n, +# if it exists, and extends to the end of the file if not. +sub _extend_file_to { + my ($self, $n) = @_; + $self->_seek(-1); # position after the end of the last record + my $pos = $self->{offsets}[-1]; + + # the offsets table has one entry more than the total number of records + my $extras = $n - $#{$self->{offsets}}; + + # Todo : just use $self->{recsep} x $extras here? + while ($extras-- > 0) { + $self->_write_record($self->{recsep}); + push @{$self->{offsets}}, int(tell $self->{fh}); + } +} + +# Truncate the file at the current position +sub _chop_file { + my $self = shift; + truncate $self->{fh}, tell($self->{fh}); +} + + +# compute the size of a buffer suitable for moving +# all the data in a file forward $n bytes +# ($n may be negative) +# The result should be at least $n. +sub _bufsize { + my $n = shift; + return 8192 if $n <= 0; + my $b = $n & ~8191; + $b += 8192 if $n & 8191; + $b; +} + +################################################################ +# +# Miscellaneous public methods +# + +# Lock the file +sub flock { + my ($self, $op) = @_; + unless (@_ <= 3) { + my $pack = ref $self; + croak "Usage: $pack\->flock([OPERATION])"; + } + my $fh = $self->{fh}; + $op = LOCK_EX unless defined $op; + my $locked = flock $fh, $op; + + if ($locked && ($op & (LOCK_EX | LOCK_SH))) { + # If you're locking the file, then presumably it's because + # there might have been a write access by another process. + # In that case, the read cache contents and the offsets table + # might be invalid, so discard them. 20030508 + $self->{offsets} = [0]; + $self->{cache}->empty; + } + + $locked; +} + +# Get/set autochomp option +sub autochomp { + my $self = shift; + if (@_) { + my $old = $self->{autochomp}; + $self->{autochomp} = shift; + $old; + } else { + $self->{autochomp}; + } +} + +# Get offset table entries; returns offset of nth record +sub offset { + my ($self, $n) = @_; + + if ($#{$self->{offsets}} < $n) { + return if $self->{eof}; # request for record beyond the end of file + my $o = $self->_fill_offsets_to($n); + # If it's still undefined, there is no such record, so return 'undef' + return unless defined $o; + } + + $self->{offsets}[$n]; +} + +sub discard_offsets { + my $self = shift; + $self->{offsets} = [0]; +} + +################################################################ +# +# Matters related to deferred writing +# + +# Defer writes +sub defer { + my $self = shift; + $self->_stop_autodeferring; + @{$self->{ad_history}} = (); + $self->{defer} = 1; +} + +# Flush deferred writes +# +# This could be better optimized to write the file in one pass, instead +# of one pass per block of records. But that will require modifications +# to _twrite, so I should have a good _twrite test suite first. +sub flush { + my $self = shift; + + $self->_flush; + $self->{defer} = 0; +} + +sub _old_flush { + my $self = shift; + my @writable = sort {$a<=>$b} (keys %{$self->{deferred}}); + + while (@writable) { + # gather all consecutive records from the front of @writable + my $first_rec = shift @writable; + my $last_rec = $first_rec+1; + ++$last_rec, shift @writable while @writable && $last_rec == $writable[0]; + --$last_rec; + $self->_fill_offsets_to($last_rec); + $self->_extend_file_to($last_rec); + $self->_splice($first_rec, $last_rec-$first_rec+1, + @{$self->{deferred}}{$first_rec .. $last_rec}); + } + + $self->_discard; # clear out defered-write-cache +} + +sub _flush { + my $self = shift; + my @writable = sort {$a<=>$b} (keys %{$self->{deferred}}); + my @args; + my @adjust; + + while (@writable) { + # gather all consecutive records from the front of @writable + my $first_rec = shift @writable; + my $last_rec = $first_rec+1; + ++$last_rec, shift @writable while @writable && $last_rec == $writable[0]; + --$last_rec; + my $end = $self->_fill_offsets_to($last_rec+1); + if (not defined $end) { + $self->_extend_file_to($last_rec); + $end = $self->{offsets}[$last_rec]; + } + my ($start) = $self->{offsets}[$first_rec]; + push @args, + join("", @{$self->{deferred}}{$first_rec .. $last_rec}), # data + $start, # position + $end-$start; # length + push @adjust, [$first_rec, # starting at this position... + $last_rec-$first_rec+1, # this many records... + # are replaced with these... + @{$self->{deferred}}{$first_rec .. $last_rec}, + ]; + } + + $self->_mtwrite(@args); # write multiple record groups + $self->_discard; # clear out defered-write-cache + $self->_oadjust(@adjust); +} + +# Discard deferred writes and disable future deferred writes +sub discard { + my $self = shift; + $self->_discard; + $self->{defer} = 0; +} + +# Discard deferred writes, but retain old deferred writing mode +sub _discard { + my $self = shift; + %{$self->{deferred}} = (); + $self->{deferred_s} = 0; + $self->{deferred_max} = -1; + $self->{cache}->set_limit($self->{memory}); +} + +# Deferred writing is enabled, either explicitly ($self->{defer}) +# or automatically ($self->{autodeferring}) +sub _is_deferring { + my $self = shift; + $self->{defer} || $self->{autodeferring}; +} + +# The largest record number of any deferred record +sub _defer_max { + my $self = shift; + return $self->{deferred_max} if defined $self->{deferred_max}; + my $max = -1; + for my $key (keys %{$self->{deferred}}) { + $max = $key if $key > $max; + } + $self->{deferred_max} = $max; + $max; +} + +################################################################ +# +# Matters related to autodeferment +# + +# Get/set autodefer option +sub autodefer { + my $self = shift; + if (@_) { + my $old = $self->{autodefer}; + $self->{autodefer} = shift; + if ($old) { + $self->_stop_autodeferring; + @{$self->{ad_history}} = (); + } + $old; + } else { + $self->{autodefer}; + } +} + +# The user is trying to store record #$n Record that in the history, +# and then enable (or disable) autodeferment if that seems useful. +# Note that it's OK for $n to be a non-number, as long as the function +# is prepared to deal with that. Nobody else looks at the ad_history. +# +# Now, what does the ad_history mean, and what is this function doing? +# Essentially, the idea is to enable autodeferring when we see that the +# user has made three consecutive STORE calls to three consecutive records. +# ("Three" is actually ->{autodefer_threshhold}.) +# A STORE call for record #$n inserts $n into the autodefer history, +# and if the history contains three consecutive records, we enable +# autodeferment. An ad_history of [X, Y] means that the most recent +# STOREs were for records X, X+1, ..., Y, in that order. +# +# Inserting a nonconsecutive number erases the history and starts over. +# +# Performing a special operation like SPLICE erases the history. +# +# There's one special case: CLEAR means that CLEAR was just called. +# In this case, we prime the history with [-2, -1] so that if the next +# write is for record 0, autodeferring goes on immediately. This is for +# the common special case of "@a = (...)". +# +sub _annotate_ad_history { + my ($self, $n) = @_; + return unless $self->{autodefer}; # feature is disabled + return if $self->{defer}; # already in explicit defer mode + return unless $self->{offsets}[-1] >= $self->{autodefer_filelen_threshhold}; + + local *H = $self->{ad_history}; + if ($n eq 'CLEAR') { + @H = (-2, -1); # prime the history with fake records + $self->_stop_autodeferring; + } elsif ($n =~ /^\d+$/) { + if (@H == 0) { + @H = ($n, $n); + } else { # @H == 2 + if ($H[1] == $n-1) { # another consecutive record + $H[1]++; + if ($H[1] - $H[0] + 1 >= $self->{autodefer_threshhold}) { + $self->{autodeferring} = 1; + } + } else { # nonconsecutive- erase and start over + @H = ($n, $n); + $self->_stop_autodeferring; + } + } + } else { # SPLICE or STORESIZE or some such + @H = (); + $self->_stop_autodeferring; + } +} + +# If autodeferring was enabled, cut it out and discard the history +sub _stop_autodeferring { + my $self = shift; + if ($self->{autodeferring}) { + $self->_flush; + } + $self->{autodeferring} = 0; +} + +################################################################ + + +# This is NOT a method. It is here for two reasons: +# 1. To factor a fairly complicated block out of the constructor +# 2. To provide access for the test suite, which need to be sure +# files are being written properly. +sub _default_recsep { + my $recsep = $/; + if ($^O eq 'MSWin32') { # Dos too? + # Windows users expect files to be terminated with \r\n + # But $/ is set to \n instead + # Note that this also transforms \n\n into \r\n\r\n. + # That is a feature. + $recsep =~ s/\n/\r\n/g; + } + $recsep; +} + +# Utility function for _check_integrity +sub _ci_warn { + my $msg = shift; + $msg =~ s/\n/\\n/g; + $msg =~ s/\r/\\r/g; + print "# $msg\n"; +} + +# Given a file, make sure the cache is consistent with the +# file contents and the internal data structures are consistent with +# each other. Returns true if everything checks out, false if not +# +# The $file argument is no longer used. It is retained for compatibility +# with the existing test suite. +sub _check_integrity { + my ($self, $file, $warn) = @_; + my $rsl = $self->{recseplen}; + my $rs = $self->{recsep}; + my $good = 1; + local *_; # local $_ does not work here + local $DIAGNOSTIC = 1; + + if (not defined $rs) { + _ci_warn("recsep is undef!"); + $good = 0; + } elsif ($rs eq "") { + _ci_warn("recsep is empty!"); + $good = 0; + } elsif ($rsl != length $rs) { + my $ln = length $rs; + _ci_warn("recsep <$rs> has length $ln, should be $rsl"); + $good = 0; + } + + if (not defined $self->{offsets}[0]) { + _ci_warn("offset 0 is missing!"); + $good = 0; + + } elsif ($self->{offsets}[0] != 0) { + _ci_warn("rec 0: offset <$self->{offsets}[0]> s/b 0!"); + $good = 0; + } + + my $cached = 0; + { + local *F = $self->{fh}; + seek F, 0, SEEK_SET; + local $. = 0; + local $/ = $rs; + + while () { + my $n = $. - 1; + my $cached = $self->{cache}->_produce($n); + my $offset = $self->{offsets}[$.]; + my $ao = tell F; + if (defined $offset && $offset != $ao) { + _ci_warn("rec $n: offset <$offset> actual <$ao>"); + $good = 0; + } + if (defined $cached && $_ ne $cached && ! $self->{deferred}{$n}) { + $good = 0; + _ci_warn("rec $n: cached <$cached> actual <$_>"); + } + if (defined $cached && substr($cached, -$rsl) ne $rs) { + $good = 0; + _ci_warn("rec $n in the cache is missing the record separator"); + } + if (! defined $offset && $self->{eof}) { + $good = 0; + _ci_warn("The offset table was marked complete, but it is missing element $."); + } + } + if (@{$self->{offsets}} > $.+1) { + $good = 0; + my $n = @{$self->{offsets}}; + _ci_warn("The offset table has $n items, but the file has only $."); + } + + my $deferring = $self->_is_deferring; + for my $n ($self->{cache}->ckeys) { + my $r = $self->{cache}->_produce($n); + $cached += length($r); + next if $n+1 <= $.; # checked this already + _ci_warn("spurious caching of record $n"); + $good = 0; + } + my $b = $self->{cache}->bytes; + if ($cached != $b) { + _ci_warn("cache size is $b, should be $cached"); + $good = 0; + } + } + + # That cache has its own set of tests + $good = 0 unless $self->{cache}->_check_integrity; + + # Now let's check the deferbuffer + # Unless deferred writing is enabled, it should be empty + if (! $self->_is_deferring && %{$self->{deferred}}) { + _ci_warn("deferred writing disabled, but deferbuffer nonempty"); + $good = 0; + } + + # Any record in the deferbuffer should *not* be present in the readcache + my $deferred_s = 0; + while (my ($n, $r) = each %{$self->{deferred}}) { + $deferred_s += length($r); + if (defined $self->{cache}->_produce($n)) { + _ci_warn("record $n is in the deferbuffer *and* the readcache"); + $good = 0; + } + if (substr($r, -$rsl) ne $rs) { + _ci_warn("rec $n in the deferbuffer is missing the record separator"); + $good = 0; + } + } + + # Total size of deferbuffer should match internal total + if ($deferred_s != $self->{deferred_s}) { + _ci_warn("buffer size is $self->{deferred_s}, should be $deferred_s"); + $good = 0; + } + + # Total size of deferbuffer should not exceed the specified limit + if ($deferred_s > $self->{dw_size}) { + _ci_warn("buffer size is $self->{deferred_s} which exceeds the limit of $self->{dw_size}"); + $good = 0; + } + + # Total size of cached data should not exceed the specified limit + if ($deferred_s + $cached > $self->{memory}) { + my $total = $deferred_s + $cached; + _ci_warn("total stored data size is $total which exceeds the limit of $self->{memory}"); + $good = 0; + } + + # Stuff related to autodeferment + if (!$self->{autodefer} && @{$self->{ad_history}}) { + _ci_warn("autodefer is disabled, but ad_history is nonempty"); + $good = 0; + } + if ($self->{autodeferring} && $self->{defer}) { + _ci_warn("both autodeferring and explicit deferring are active"); + $good = 0; + } + if (@{$self->{ad_history}} == 0) { + # That's OK, no additional tests required + } elsif (@{$self->{ad_history}} == 2) { + my @non_number = grep !/^-?\d+$/, @{$self->{ad_history}}; + if (@non_number) { + my $msg; + { local $" = ')('; + $msg = "ad_history contains non-numbers (@{$self->{ad_history}})"; + } + _ci_warn($msg); + $good = 0; + } elsif ($self->{ad_history}[1] < $self->{ad_history}[0]) { + _ci_warn("ad_history has nonsensical values @{$self->{ad_history}}"); + $good = 0; + } + } else { + _ci_warn("ad_history has bad length <@{$self->{ad_history}}>"); + $good = 0; + } + + $good; +} + +################################################################ +# +# Tie::File::Cache +# +# Read cache + +package Tie::File::Cache; +$Tie::File::Cache::VERSION = $Tie::File::VERSION; +use Carp ':DEFAULT', 'confess'; + +sub HEAP () { 0 } +sub HASH () { 1 } +sub MAX () { 2 } +sub BYTES() { 3 } +#sub STAT () { 4 } # Array with request statistics for each record +#sub MISS () { 5 } # Total number of cache misses +#sub REQ () { 6 } # Total number of cache requests +use strict 'vars'; + +sub new { + my ($pack, $max) = @_; + local *_; + croak "missing argument to ->new" unless defined $max; + my $self = []; + bless $self => $pack; + @$self = (Tie::File::Heap->new($self), {}, $max, 0); + $self; +} + +sub adj_limit { + my ($self, $n) = @_; + $self->[MAX] += $n; +} + +sub set_limit { + my ($self, $n) = @_; + $self->[MAX] = $n; +} + +# For internal use only +# Will be called by the heap structure to notify us that a certain +# piece of data has moved from one heap element to another. +# $k is the hash key of the item +# $n is the new index into the heap at which it is stored +# If $n is undefined, the item has been removed from the heap. +sub _heap_move { + my ($self, $k, $n) = @_; + if (defined $n) { + $self->[HASH]{$k} = $n; + } else { + delete $self->[HASH]{$k}; + } +} + +sub insert { + my ($self, $key, $val) = @_; + local *_; + croak "missing argument to ->insert" unless defined $key; + unless (defined $self->[MAX]) { + confess "undefined max" ; + } + confess "undefined val" unless defined $val; + return if length($val) > $self->[MAX]; + +# if ($self->[STAT]) { +# $self->[STAT][$key] = 1; +# return; +# } + + my $oldnode = $self->[HASH]{$key}; + if (defined $oldnode) { + my $oldval = $self->[HEAP]->set_val($oldnode, $val); + $self->[BYTES] -= length($oldval); + } else { + $self->[HEAP]->insert($key, $val); + } + $self->[BYTES] += length($val); + $self->flush if $self->[BYTES] > $self->[MAX]; +} + +sub expire { + my $self = shift; + my $old_data = $self->[HEAP]->popheap; + return unless defined $old_data; + $self->[BYTES] -= length $old_data; + $old_data; +} + +sub remove { + my ($self, @keys) = @_; + my @result; + +# if ($self->[STAT]) { +# for my $key (@keys) { +# $self->[STAT][$key] = 0; +# } +# return; +# } + + for my $key (@keys) { + next unless exists $self->[HASH]{$key}; + my $old_data = $self->[HEAP]->remove($self->[HASH]{$key}); + $self->[BYTES] -= length $old_data; + push @result, $old_data; + } + @result; +} + +sub lookup { + my ($self, $key) = @_; + local *_; + croak "missing argument to ->lookup" unless defined $key; + +# if ($self->[STAT]) { +# $self->[MISS]++ if $self->[STAT][$key]++ == 0; +# $self->[REQ]++; +# my $hit_rate = 1 - $self->[MISS] / $self->[REQ]; +# # Do some testing to determine this threshhold +# $#$self = STAT - 1 if $hit_rate > 0.20; +# } + + if (exists $self->[HASH]{$key}) { + $self->[HEAP]->lookup($self->[HASH]{$key}); + } else { + return; + } +} + +# For internal use only +sub _produce { + my ($self, $key) = @_; + my $loc = $self->[HASH]{$key}; + return unless defined $loc; + $self->[HEAP][$loc][2]; +} + +# For internal use only +sub _promote { + my ($self, $key) = @_; + $self->[HEAP]->promote($self->[HASH]{$key}); +} + +sub empty { + my ($self) = @_; + %{$self->[HASH]} = (); + $self->[BYTES] = 0; + $self->[HEAP]->empty; +# @{$self->[STAT]} = (); +# $self->[MISS] = 0; +# $self->[REQ] = 0; +} + +sub is_empty { + my ($self) = @_; + keys %{$self->[HASH]} == 0; +} + +sub update { + my ($self, $key, $val) = @_; + local *_; + croak "missing argument to ->update" unless defined $key; + if (length($val) > $self->[MAX]) { + my ($oldval) = $self->remove($key); + $self->[BYTES] -= length($oldval) if defined $oldval; + } elsif (exists $self->[HASH]{$key}) { + my $oldval = $self->[HEAP]->set_val($self->[HASH]{$key}, $val); + $self->[BYTES] += length($val); + $self->[BYTES] -= length($oldval) if defined $oldval; + } else { + $self->[HEAP]->insert($key, $val); + $self->[BYTES] += length($val); + } + $self->flush; +} + +sub rekey { + my ($self, $okeys, $nkeys) = @_; + local *_; + my %map; + @map{@$okeys} = @$nkeys; + croak "missing argument to ->rekey" unless defined $nkeys; + croak "length mismatch in ->rekey arguments" unless @$nkeys == @$okeys; + my %adjusted; # map new keys to heap indices + # You should be able to cut this to one loop TODO XXX + for (0 .. $#$okeys) { + $adjusted{$nkeys->[$_]} = delete $self->[HASH]{$okeys->[$_]}; + } + while (my ($nk, $ix) = each %adjusted) { + # @{$self->[HASH]}{keys %adjusted} = values %adjusted; + $self->[HEAP]->rekey($ix, $nk); + $self->[HASH]{$nk} = $ix; + } +} + +sub ckeys { + my $self = shift; + my @a = keys %{$self->[HASH]}; + @a; +} + +# Return total amount of cached data +sub bytes { + my $self = shift; + $self->[BYTES]; +} + +# Expire oldest item from cache until cache size is smaller than $max +sub reduce_size_to { + my ($self, $max) = @_; + until ($self->[BYTES] <= $max) { + # Note that Tie::File::Cache::expire has been inlined here + my $old_data = $self->[HEAP]->popheap; + return unless defined $old_data; + $self->[BYTES] -= length $old_data; + } +} + +# Why not just $self->reduce_size_to($self->[MAX])? +# Try this when things stabilize TODO XXX +# If the cache is too full, expire the oldest records +sub flush { + my $self = shift; + $self->reduce_size_to($self->[MAX]) if $self->[BYTES] > $self->[MAX]; +} + +# For internal use only +sub _produce_lru { + my $self = shift; + $self->[HEAP]->expire_order; +} + +BEGIN { *_ci_warn = \&Tie::File::_ci_warn } + +sub _check_integrity { # For CACHE + my $self = shift; + my $good = 1; + + # Test HEAP + $self->[HEAP]->_check_integrity or $good = 0; + + # Test HASH + my $bytes = 0; + for my $k (keys %{$self->[HASH]}) { + if ($k ne '0' && $k !~ /^[1-9][0-9]*$/) { + $good = 0; + _ci_warn "Cache hash key <$k> is non-numeric"; + } + + my $h = $self->[HASH]{$k}; + if (! defined $h) { + $good = 0; + _ci_warn "Heap index number for key $k is undefined"; + } elsif ($h == 0) { + $good = 0; + _ci_warn "Heap index number for key $k is zero"; + } else { + my $j = $self->[HEAP][$h]; + if (! defined $j) { + $good = 0; + _ci_warn "Heap contents key $k (=> $h) are undefined"; + } else { + $bytes += length($j->[2]); + if ($k ne $j->[1]) { + $good = 0; + _ci_warn "Heap contents key $k (=> $h) is $j->[1], should be $k"; + } + } + } + } + + # Test BYTES + if ($bytes != $self->[BYTES]) { + $good = 0; + _ci_warn "Total data in cache is $bytes, expected $self->[BYTES]"; + } + + # Test MAX + if ($bytes > $self->[MAX]) { + $good = 0; + _ci_warn "Total data in cache is $bytes, exceeds maximum $self->[MAX]"; + } + + return $good; +} + +sub delink { + my $self = shift; + $self->[HEAP] = undef; # Bye bye heap +} + +################################################################ +# +# Tie::File::Heap +# +# Heap data structure for use by cache LRU routines + +package Tie::File::Heap; +use Carp ':DEFAULT', 'confess'; +$Tie::File::Heap::VERSION = $Tie::File::Cache::VERSION; +sub SEQ () { 0 }; +sub KEY () { 1 }; +sub DAT () { 2 }; + +sub new { + my ($pack, $cache) = @_; + die "$pack: Parent cache object $cache does not support _heap_move method" + unless eval { $cache->can('_heap_move') }; + my $self = [[0,$cache,0]]; + bless $self => $pack; +} + +# Allocate a new sequence number, larger than all previously allocated numbers +sub _nseq { + my $self = shift; + $self->[0][0]++; +} + +sub _cache { + my $self = shift; + $self->[0][1]; +} + +sub _nelts { + my $self = shift; + $self->[0][2]; +} + +sub _nelts_inc { + my $self = shift; + ++$self->[0][2]; +} + +sub _nelts_dec { + my $self = shift; + --$self->[0][2]; +} + +sub is_empty { + my $self = shift; + $self->_nelts == 0; +} + +sub empty { + my $self = shift; + $#$self = 0; + $self->[0][2] = 0; + $self->[0][0] = 0; # might as well reset the sequence numbers +} + +# notify the parent cache object that we moved something +sub _heap_move { + my $self = shift; + $self->_cache->_heap_move(@_); +} + +# Insert a piece of data into the heap with the indicated sequence number. +# The item with the smallest sequence number is always at the top. +# If no sequence number is specified, allocate a new one and insert the +# item at the bottom. +sub insert { + my ($self, $key, $data, $seq) = @_; + $seq = $self->_nseq unless defined $seq; + $self->_insert_new([$seq, $key, $data]); +} + +# Insert a new, fresh item at the bottom of the heap +sub _insert_new { + my ($self, $item) = @_; + my $i = @$self; + $i = int($i/2) until defined $self->[$i/2]; + $self->[$i] = $item; + $self->[0][1]->_heap_move($self->[$i][KEY], $i); + $self->_nelts_inc; +} + +# Insert [$data, $seq] pair at or below item $i in the heap. +# If $i is omitted, default to 1 (the top element.) +sub _insert { + my ($self, $item, $i) = @_; +# $self->_check_loc($i) if defined $i; + $i = 1 unless defined $i; + until (! defined $self->[$i]) { + if ($self->[$i][SEQ] > $item->[SEQ]) { # inserted item is older + ($self->[$i], $item) = ($item, $self->[$i]); + $self->[0][1]->_heap_move($self->[$i][KEY], $i); + } + # If either is undefined, go that way. Otherwise, choose at random + my $dir; + $dir = 0 if !defined $self->[2*$i]; + $dir = 1 if !defined $self->[2*$i+1]; + $dir = int(rand(2)) unless defined $dir; + $i = 2*$i + $dir; + } + $self->[$i] = $item; + $self->[0][1]->_heap_move($self->[$i][KEY], $i); + $self->_nelts_inc; +} + +# Remove the item at node $i from the heap, moving child items upwards. +# The item with the smallest sequence number is always at the top. +# Moving items upwards maintains this condition. +# Return the removed item. Return undef if there was no item at node $i. +sub remove { + my ($self, $i) = @_; + $i = 1 unless defined $i; + my $top = $self->[$i]; + return unless defined $top; + while (1) { + my $ii; + my ($L, $R) = (2*$i, 2*$i+1); + + # If either is undefined, go the other way. + # Otherwise, go towards the smallest. + last unless defined $self->[$L] || defined $self->[$R]; + $ii = $R if not defined $self->[$L]; + $ii = $L if not defined $self->[$R]; + unless (defined $ii) { + $ii = $self->[$L][SEQ] < $self->[$R][SEQ] ? $L : $R; + } + + $self->[$i] = $self->[$ii]; # Promote child to fill vacated spot + $self->[0][1]->_heap_move($self->[$i][KEY], $i); + $i = $ii; # Fill new vacated spot + } + $self->[0][1]->_heap_move($top->[KEY], undef); + undef $self->[$i]; + $self->_nelts_dec; + return $top->[DAT]; +} + +sub popheap { + my $self = shift; + $self->remove(1); +} + +# set the sequence number of the indicated item to a higher number +# than any other item in the heap, and bubble the item down to the +# bottom. +sub promote { + my ($self, $n) = @_; +# $self->_check_loc($n); + $self->[$n][SEQ] = $self->_nseq; + my $i = $n; + while (1) { + my ($L, $R) = (2*$i, 2*$i+1); + my $dir; + last unless defined $self->[$L] || defined $self->[$R]; + $dir = $R unless defined $self->[$L]; + $dir = $L unless defined $self->[$R]; + unless (defined $dir) { + $dir = $self->[$L][SEQ] < $self->[$R][SEQ] ? $L : $R; + } + @{$self}[$i, $dir] = @{$self}[$dir, $i]; + for ($i, $dir) { + $self->[0][1]->_heap_move($self->[$_][KEY], $_) if defined $self->[$_]; + } + $i = $dir; + } +} + +# Return item $n from the heap, promoting its LRU status +sub lookup { + my ($self, $n) = @_; +# $self->_check_loc($n); + my $val = $self->[$n]; + $self->promote($n); + $val->[DAT]; +} + + +# Assign a new value for node $n, promoting it to the bottom of the heap +sub set_val { + my ($self, $n, $val) = @_; +# $self->_check_loc($n); + my $oval = $self->[$n][DAT]; + $self->[$n][DAT] = $val; + $self->promote($n); + return $oval; +} + +# The hask key has changed for an item; +# alter the heap's record of the hash key +sub rekey { + my ($self, $n, $new_key) = @_; +# $self->_check_loc($n); + $self->[$n][KEY] = $new_key; +} + +sub _check_loc { + my ($self, $n) = @_; + unless (1 || defined $self->[$n]) { + confess "_check_loc($n) failed"; + } +} + +BEGIN { *_ci_warn = \&Tie::File::_ci_warn } + +sub _check_integrity { + my $self = shift; + my $good = 1; + my %seq; + + unless (eval {$self->[0][1]->isa("Tie::File::Cache")}) { + _ci_warn "Element 0 of heap corrupt"; + $good = 0; + } + $good = 0 unless $self->_satisfies_heap_condition(1); + for my $i (2 .. $#{$self}) { + my $p = int($i/2); # index of parent node + if (defined $self->[$i] && ! defined $self->[$p]) { + _ci_warn "Element $i of heap defined, but parent $p isn't"; + $good = 0; + } + + if (defined $self->[$i]) { + if ($seq{$self->[$i][SEQ]}) { + my $seq = $self->[$i][SEQ]; + _ci_warn "Nodes $i and $seq{$seq} both have SEQ=$seq"; + $good = 0; + } else { + $seq{$self->[$i][SEQ]} = $i; + } + } + } + + return $good; +} + +sub _satisfies_heap_condition { + my $self = shift; + my $n = shift || 1; + my $good = 1; + for (0, 1) { + my $c = $n*2 + $_; + next unless defined $self->[$c]; + if ($self->[$n][SEQ] >= $self->[$c]) { + _ci_warn "Node $n of heap does not predate node $c"; + $good = 0 ; + } + $good = 0 unless $self->_satisfies_heap_condition($c); + } + return $good; +} + +# Return a list of all the values, sorted by expiration order +sub expire_order { + my $self = shift; + my @nodes = sort {$a->[SEQ] <=> $b->[SEQ]} $self->_nodes; + map { $_->[KEY] } @nodes; +} + +sub _nodes { + my $self = shift; + my $i = shift || 1; + return unless defined $self->[$i]; + ($self->[$i], $self->_nodes($i*2), $self->_nodes($i*2+1)); +} + +"Cogito, ergo sum."; # don't forget to return a true value from the file + +__END__ + +=head1 NAME + +Tie::File - Access the lines of a disk file via a Perl array + +=head1 SYNOPSIS + + # This file documents Tie::File version 0.96 + use Tie::File; + + tie @array, 'Tie::File', filename or die ...; + + $array[13] = 'blah'; # line 13 of the file is now 'blah' + print $array[42]; # display line 42 of the file + + $n_recs = @array; # how many records are in the file? + $#array -= 2; # chop two records off the end + + + for (@array) { + s/PERL/Perl/g; # Replace PERL with Perl everywhere in the file + } + + # These are just like regular push, pop, unshift, shift, and splice + # Except that they modify the file in the way you would expect + + push @array, new recs...; + my $r1 = pop @array; + unshift @array, new recs...; + my $r2 = shift @array; + @old_recs = splice @array, 3, 7, new recs...; + + untie @array; # all finished + + +=head1 DESCRIPTION + +C represents a regular text file as a Perl array. Each +element in the array corresponds to a record in the file. The first +line of the file is element 0 of the array; the second line is element +1, and so on. + +The file is I loaded into memory, so this will work even for +gigantic files. + +Changes to the array are reflected in the file immediately. + +Lazy people and beginners may now stop reading the manual. + +=head2 C + +What is a 'record'? By default, the meaning is the same as for the +C...E> operator: It's a string terminated by C<$/>, which is +probably C<"\n">. (Minor exception: on DOS and Win32 systems, a +'record' is a string terminated by C<"\r\n">.) You may change the +definition of "record" by supplying the C option in the C +call: + + tie @array, 'Tie::File', $file, recsep => 'es'; + +This says that records are delimited by the string C. If the file +contained the following data: + + Curse these pesky flies!\n + +then the C<@array> would appear to have four elements: + + "Curse th" + "e p" + "ky fli" + "!\n" + +An undefined value is not permitted as a record separator. Perl's +special "paragraph mode" semantics (E la C<$/ = "">) are not +emulated. + +Records read from the tied array do not have the record separator +string on the end; this is to allow + + $array[17] .= "extra"; + +to work as expected. + +(See L<"autochomp">, below.) Records stored into the array will have +the record separator string appended before they are written to the +file, if they don't have one already. For example, if the record +separator string is C<"\n">, then the following two lines do exactly +the same thing: + + $array[17] = "Cherry pie"; + $array[17] = "Cherry pie\n"; + +The result is that the contents of line 17 of the file will be +replaced with "Cherry pie"; a newline character will separate line 17 +from line 18. This means that this code will do nothing: + + chomp $array[17]; + +Because the Ced value will have the separator reattached when +it is written back to the file. There is no way to create a file +whose trailing record separator string is missing. + +Inserting records that I the record separator string is not +supported by this module. It will probably produce a reasonable +result, but what this result will be may change in a future version. +Use 'splice' to insert records or to replace one record with several. + +=head2 C + +Normally, array elements have the record separator removed, so that if +the file contains the text + + Gold + Frankincense + Myrrh + +the tied array will appear to contain C<("Gold", "Frankincense", +"Myrrh")>. If you set C to a false value, the record +separator will not be removed. If the file above was tied with + + tie @gifts, "Tie::File", $gifts, autochomp => 0; + +then the array C<@gifts> would appear to contain C<("Gold\n", +"Frankincense\n", "Myrrh\n")>, or (on Win32 systems) C<("Gold\r\n", +"Frankincense\r\n", "Myrrh\r\n")>. + +=head2 C + +Normally, the specified file will be opened for read and write access, +and will be created if it does not exist. (That is, the flags +C are supplied in the C call.) If you want to +change this, you may supply alternative flags in the C option. +See L for a listing of available flags. +For example: + + # open the file if it exists, but fail if it does not exist + use Fcntl 'O_RDWR'; + tie @array, 'Tie::File', $file, mode => O_RDWR; + + # create the file if it does not exist + use Fcntl 'O_RDWR', 'O_CREAT'; + tie @array, 'Tie::File', $file, mode => O_RDWR | O_CREAT; + + # open an existing file in read-only mode + use Fcntl 'O_RDONLY'; + tie @array, 'Tie::File', $file, mode => O_RDONLY; + +Opening the data file in write-only or append mode is not supported. + +=head2 C + +This is an upper limit on the amount of memory that C will +consume at any time while managing the file. This is used for two +things: managing the I and managing the I. + +Records read in from the file are cached, to avoid having to re-read +them repeatedly. If you read the same record twice, the first time it +will be stored in memory, and the second time it will be fetched from +the I. The amount of data in the read cache will not +exceed the value you specified for C. If C wants +to cache a new record, but the read cache is full, it will make room +by expiring the least-recently visited records from the read cache. + +The default memory limit is 2Mib. You can adjust the maximum read +cache size by supplying the C option. The argument is the +desired cache size, in bytes. + + # I have a lot of memory, so use a large cache to speed up access + tie @array, 'Tie::File', $file, memory => 20_000_000; + +Setting the memory limit to 0 will inhibit caching; records will be +fetched from disk every time you examine them. + +The C value is not an absolute or exact limit on the memory +used. C objects contains some structures besides the read +cache and the deferred write buffer, whose sizes are not charged +against C. + +The cache itself consumes about 310 bytes per cached record, so if +your file has many short records, you may want to decrease the cache +memory limit, or else the cache overhead may exceed the size of the +cached data. + + +=head2 C + +(This is an advanced feature. Skip this section on first reading.) + +If you use deferred writing (See L<"Deferred Writing">, below) then +data you write into the array will not be written directly to the +file; instead, it will be saved in the I to be +written out later. Data in the deferred write buffer is also charged +against the memory limit you set with the C option. + +You may set the C option to limit the amount of data that can +be saved in the deferred write buffer. This limit may not exceed the +total memory limit. For example, if you set C to 1000 and +C to 2500, that means that no more than 1000 bytes of deferred +writes will be saved up. The space available for the read cache will +vary, but it will always be at least 1500 bytes (if the deferred write +buffer is full) and it could grow as large as 2500 bytes (if the +deferred write buffer is empty.) + +If you don't specify a C, it defaults to the entire memory +limit. + +=head2 Option Format + +C<-mode> is a synonym for C. C<-recsep> is a synonym for +C. C<-memory> is a synonym for C. You get the +idea. + +=head1 Public Methods + +The C call returns an object, say C<$o>. You may call + + $rec = $o->FETCH($n); + $o->STORE($n, $rec); + +to fetch or store the record at line C<$n>, respectively; similarly +the other tied array methods. (See L for details.) You may +also call the following methods on this object: + +=head2 C + + $o->flock(MODE) + +will lock the tied file. C has the same meaning as the second +argument to the Perl built-in C function; for example +C or C. (These constants are provided by +the C declaration.) + +C is optional; the default is C. + +C maintains an internal table of the byte offset of each +record it has seen in the file. + +When you use C to lock the file, C assumes that the +read cache is no longer trustworthy, because another process might +have modified the file since the last time it was read. Therefore, a +successful call to C discards the contents of the read cache +and the internal record offset table. + +C promises that the following sequence of operations will +be safe: + + my $o = tie @array, "Tie::File", $filename; + $o->flock; + +In particular, C will I read or write the file during +the C call. (Exception: Using C O_TRUNC> will, of +course, erase the file during the C call. If you want to do this +safely, then open the file without C, lock the file, and use +C<@array = ()>.) + +The best way to unlock a file is to discard the object and untie the +array. It is probably unsafe to unlock the file without also untying +it, because if you do, changes may remain unwritten inside the object. +That is why there is no shortcut for unlocking. If you really want to +unlock the file prematurely, you know what to do; if you don't know +what to do, then don't do it. + +All the usual warnings about file locking apply here. In particular, +note that file locking in Perl is B, which means that +holding a lock will not prevent anyone else from reading, writing, or +erasing the file; it only prevents them from getting another lock at +the same time. Locks are analogous to green traffic lights: If you +have a green light, that does not prevent the idiot coming the other +way from plowing into you sideways; it merely guarantees to you that +the idiot does not also have a green light at the same time. + +=head2 C + + my $old_value = $o->autochomp(0); # disable autochomp option + my $old_value = $o->autochomp(1); # enable autochomp option + + my $ac = $o->autochomp(); # recover current value + +See L<"autochomp">, above. + +=head2 C, C, C, and C + +See L<"Deferred Writing">, below. + +=head2 C + + $off = $o->offset($n); + +This method returns the byte offset of the start of the C<$n>th record +in the file. If there is no such record, it returns an undefined +value. + +=head1 Tying to an already-opened filehandle + +If C<$fh> is a filehandle, such as is returned by C or one +of the other C modules, you may use: + + tie @array, 'Tie::File', $fh, ...; + +Similarly if you opened that handle C with regular C or +C, you may use: + + tie @array, 'Tie::File', \*FH, ...; + +Handles that were opened write-only won't work. Handles that were +opened read-only will work as long as you don't try to modify the +array. Handles must be attached to seekable sources of data---that +means no pipes or sockets. If C can detect that you +supplied a non-seekable handle, the C call will throw an +exception. (On Unix systems, it can detect this.) + +Note that Tie::File will only close any filehandles that it opened +internally. If you passed it a filehandle as above, you "own" the +filehandle, and are responsible for closing it after you have untied +the @array. + +=head1 Deferred Writing + +(This is an advanced feature. Skip this section on first reading.) + +Normally, modifying a C array writes to the underlying file +immediately. Every assignment like C<$a[3] = ...> rewrites as much of +the file as is necessary; typically, everything from line 3 through +the end will need to be rewritten. This is the simplest and most +transparent behavior. Performance even for large files is reasonably +good. + +However, under some circumstances, this behavior may be excessively +slow. For example, suppose you have a million-record file, and you +want to do: + + for (@FILE) { + $_ = "> $_"; + } + +The first time through the loop, you will rewrite the entire file, +from line 0 through the end. The second time through the loop, you +will rewrite the entire file from line 1 through the end. The third +time through the loop, you will rewrite the entire file from line 2 to +the end. And so on. + +If the performance in such cases is unacceptable, you may defer the +actual writing, and then have it done all at once. The following loop +will perform much better for large files: + + (tied @a)->defer; + for (@a) { + $_ = "> $_"; + } + (tied @a)->flush; + +If C's memory limit is large enough, all the writing will +done in memory. Then, when you call C<-Eflush>, the entire file +will be rewritten in a single pass. + +(Actually, the preceding discussion is something of a fib. You don't +need to enable deferred writing to get good performance for this +common case, because C will do it for you automatically +unless you specifically tell it not to. See L<"autodeferring">, +below.) + +Calling C<-Eflush> returns the array to immediate-write mode. If +you wish to discard the deferred writes, you may call C<-Ediscard> +instead of C<-Eflush>. Note that in some cases, some of the data +will have been written already, and it will be too late for +C<-Ediscard> to discard all the changes. Support for +C<-Ediscard> may be withdrawn in a future version of C. + +Deferred writes are cached in memory up to the limit specified by the +C option (see above). If the deferred-write buffer is full +and you try to write still more deferred data, the buffer will be +flushed. All buffered data will be written immediately, the buffer +will be emptied, and the now-empty space will be used for future +deferred writes. + +If the deferred-write buffer isn't yet full, but the total size of the +buffer and the read cache would exceed the C limit, the oldest +records will be expired from the read cache until the total size is +under the limit. + +C, C, C, C, and C cannot be +deferred. When you perform one of these operations, any deferred data +is written to the file and the operation is performed immediately. +This may change in a future version. + +If you resize the array with deferred writing enabled, the file will +be resized immediately, but deferred records will not be written. +This has a surprising consequence: C<@a = (...)> erases the file +immediately, but the writing of the actual data is deferred. This +might be a bug. If it is a bug, it will be fixed in a future version. + +=head2 Autodeferring + +C tries to guess when deferred writing might be helpful, +and to turn it on and off automatically. + + for (@a) { + $_ = "> $_"; + } + +In this example, only the first two assignments will be done +immediately; after this, all the changes to the file will be deferred +up to the user-specified memory limit. + +You should usually be able to ignore this and just use the module +without thinking about deferring. However, special applications may +require fine control over which writes are deferred, or may require +that all writes be immediate. To disable the autodeferment feature, +use + + (tied @o)->autodefer(0); + +or + + tie @array, 'Tie::File', $file, autodefer => 0; + + +Similarly, C<-Eautodefer(1)> re-enables autodeferment, and +C<-Eautodefer()> recovers the current value of the autodefer setting. + + +=head1 CONCURRENT ACCESS TO FILES + +Caching and deferred writing are inappropriate if you want the same +file to be accessed simultaneously from more than one process. You +will want to disable these features. You should do that by including +the C 0> option in your C calls; this will inhibit +caching and deferred writing. + +You will also want to lock the file while reading or writing it. You +can use the C<-Eflock> method for this. A future version of this +module may provide an 'autolocking' mode. + +=head1 CAVEATS + +(That's Latin for 'warnings'.) + +=over 4 + +=item * + +Reasonable effort was made to make this module efficient. Nevertheless, +changing the size of a record in the middle of a large file will +always be fairly slow, because everything after the new record must be +moved. + +=item * + +The behavior of tied arrays is not precisely the same as for regular +arrays. For example: + + # This DOES print "How unusual!" + undef $a[10]; print "How unusual!\n" if defined $a[10]; + +C-ing a C array element just blanks out the +corresponding record in the file. When you read it back again, you'll +get the empty string, so the supposedly-C'ed value will be +defined. Similarly, if you have C disabled, then + + # This DOES print "How unusual!" if 'autochomp' is disabled + undef $a[10]; + print "How unusual!\n" if $a[10]; + +Because when C is disabled, C<$a[10]> will read back as +C<"\n"> (or whatever the record separator string is.) + +There are other minor differences, particularly regarding C +and C, but in general, the correspondence is extremely close. + +=item * + +I have supposed that since this module is concerned with file I/O, +almost all normal use of it will be heavily I/O bound. This means +that the time to maintain complicated data structures inside the +module will be dominated by the time to actually perform the I/O. +When there was an opportunity to spend CPU time to avoid doing I/O, I +usually tried to take it. + +=item * + +You might be tempted to think that deferred writing is like +transactions, with C as C and C as +C, but it isn't, so don't. + +=item * + +There is a large memory overhead for each record offset and for each +cache entry: about 310 bytes per cached data record, and about 21 bytes per offset table entry. + +The per-record overhead will limit the maximum number of records you +can access per file. Note that I the length of the array +via C<$x = scalar @tied_file> accesses B records and stores their +offsets. The same for C, even if you exit the +loop early. + +=back + +=head1 SUBCLASSING + +This version promises absolutely nothing about the internals, which +may change without notice. A future version of the module will have a +well-defined and stable subclassing API. + +=head1 WHAT ABOUT C? + +People sometimes point out that L will do something similar, +and ask why C module is necessary. + +There are a number of reasons that you might prefer C. +A list is available at C. + +=head1 AUTHOR + +Mark Jason Dominus + +To contact the author, send email to: C + +To receive an announcement whenever a new version of this module is +released, send a blank email message to +C. + +The most recent version of this module, including documentation and +any news of importance, will be available at + + http://perl.plover.com/TieFile/ + + +=head1 LICENSE + +C version 0.96 is copyright (C) 2002 Mark Jason Dominus. + +This library is free software; you may redistribute it and/or modify +it under the same terms as Perl itself. + +These terms are your choice of any of (1) the Perl Artistic Licence, +or (2) version 2 of the GNU General Public License as published by the +Free Software Foundation, or (3) any later version of the GNU General +Public License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this library program; it should be in the file C. +If not, write to the Free Software Foundation, Inc., 59 Temple Place, +Suite 330, Boston, MA 02111 USA + +For licensing inquiries, contact the author at: + + Mark Jason Dominus + 255 S. Warnock St. + Philadelphia, PA 19107 + +=head1 WARRANTY + +C version 0.96 comes with ABSOLUTELY NO WARRANTY. +For details, see the license. + +=head1 THANKS + +Gigantic thanks to Jarkko Hietaniemi, for agreeing to put this in the +core when I hadn't written it yet, and for generally being helpful, +supportive, and competent. (Usually the rule is "choose any one.") +Also big thanks to Abhijit Menon-Sen for all of the same things. + +Special thanks to Craig Berry and Peter Prymmer (for VMS portability +help), Randy Kobes (for Win32 portability help), Clinton Pierce and +Autrijus Tang (for heroic eleventh-hour Win32 testing above and beyond +the call of duty), Michael G Schwern (for testing advice), and the +rest of the CPAN testers (for testing generally). + +Special thanks to Tels for suggesting several speed and memory +optimizations. + +Additional thanks to: +Edward Avis / +Mattia Barbon / +Tom Christiansen / +Gerrit Haase / +Gurusamy Sarathy / +Jarkko Hietaniemi (again) / +Nikola Knezevic / +John Kominetz / +Nick Ing-Simmons / +Tassilo von Parseval / +H. Dieter Pearcey / +Slaven Rezic / +Eric Roode / +Peter Scott / +Peter Somu / +Autrijus Tang (again) / +Tels (again) / +Juerd Waalboer + +=head1 TODO + +More tests. (Stuff I didn't think of yet.) + +Paragraph mode? + +Fixed-length mode. Leave-blanks mode. + +Maybe an autolocking mode? + +For many common uses of the module, the read cache is a liability. +For example, a program that inserts a single record, or that scans the +file once, will have a cache hit rate of zero. This suggests a major +optimization: The cache should be initially disabled. Here's a hybrid +approach: Initially, the cache is disabled, but the cache code +maintains statistics about how high the hit rate would be *if* it were +enabled. When it sees the hit rate get high enough, it enables +itself. The STAT comments in this code are the beginning of an +implementation of this. + +Record locking with fcntl()? Then the module might support an undo +log and get real transactions. What a tour de force that would be. + +Keeping track of the highest cached record. This would allow reads-in-a-row +to skip the cache lookup faster (if reading from 1..N with empty cache at +start, the last cached value will be always N-1). + +More tests. + +=cut + diff --git a/archive/version_02/en/contactus.htm b/archive/version_02/en/contactus.htm new file mode 100755 index 0000000..b689ea8 --- /dev/null +++ b/archive/version_02/en/contactus.htm @@ -0,0 +1,116 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Contact Us +
+ +

+ + + + + +
+ AUSTRIA
+ Contact: Francis Montocchio
+
+ The International Jairus Society
+ Don Bosco-Gasse 39A
+ A-1230 Vienna
+ AUSTRIA
+
+ Tel: +43-6650989
+ Fax: +43-1-6650989/7 or 8
+
+ E-mail: office@jasoc.org +
+
+ UNITED STATES OF AMERICA
+ Contact: Steve Ramey
+
+ The International Jairus Society
+ 3400 N.W. 58th Ter
+ Kansas City, MO 64151
+ USA
+
+ Tel: (816) 505-1126
+ Cell: (816) 830-3570
+
+ E-mail: office@jasoc.org
+
+
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/en/graphics/Jairus_Logo_e.jpg b/archive/version_02/en/graphics/Jairus_Logo_e.jpg new file mode 100755 index 0000000..e1c8f2b Binary files /dev/null and b/archive/version_02/en/graphics/Jairus_Logo_e.jpg differ diff --git a/archive/version_02/en/graphics/_notes/contactus_btn.gif.mno b/archive/version_02/en/graphics/_notes/contactus_btn.gif.mno new file mode 100755 index 0000000..6d747ad --- /dev/null +++ b/archive/version_02/en/graphics/_notes/contactus_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/en/graphics/_notes/home_btn_2.gif.mno b/archive/version_02/en/graphics/_notes/home_btn_2.gif.mno new file mode 100755 index 0000000..e638aec --- /dev/null +++ b/archive/version_02/en/graphics/_notes/home_btn_2.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/en/graphics/_notes/jairus_logotext_en.jpg.mno b/archive/version_02/en/graphics/_notes/jairus_logotext_en.jpg.mno new file mode 100755 index 0000000..aacde25 --- /dev/null +++ b/archive/version_02/en/graphics/_notes/jairus_logotext_en.jpg.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/en/graphics/_notes/legal_btn.gif.mno b/archive/version_02/en/graphics/_notes/legal_btn.gif.mno new file mode 100755 index 0000000..4409905 --- /dev/null +++ b/archive/version_02/en/graphics/_notes/legal_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/en/graphics/_notes/links_btn.gif.mno b/archive/version_02/en/graphics/_notes/links_btn.gif.mno new file mode 100755 index 0000000..f8d0775 --- /dev/null +++ b/archive/version_02/en/graphics/_notes/links_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/en/graphics/_notes/ourfamilies_btn.gif.mno b/archive/version_02/en/graphics/_notes/ourfamilies_btn.gif.mno new file mode 100755 index 0000000..0756586 --- /dev/null +++ b/archive/version_02/en/graphics/_notes/ourfamilies_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/en/graphics/_notes/ourmission_btn.gif.mno b/archive/version_02/en/graphics/_notes/ourmission_btn.gif.mno new file mode 100755 index 0000000..268a30a --- /dev/null +++ b/archive/version_02/en/graphics/_notes/ourmission_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/en/graphics/_notes/support_btn.gif.mno b/archive/version_02/en/graphics/_notes/support_btn.gif.mno new file mode 100755 index 0000000..f77da33 --- /dev/null +++ b/archive/version_02/en/graphics/_notes/support_btn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/en/graphics/contactus_btn.gif b/archive/version_02/en/graphics/contactus_btn.gif new file mode 100755 index 0000000..e05bc0c Binary files /dev/null and b/archive/version_02/en/graphics/contactus_btn.gif differ diff --git a/archive/version_02/en/graphics/contactus_btn_2.gif b/archive/version_02/en/graphics/contactus_btn_2.gif new file mode 100755 index 0000000..ce3802b Binary files /dev/null and b/archive/version_02/en/graphics/contactus_btn_2.gif differ diff --git a/archive/version_02/en/graphics/guestbook_btn.gif b/archive/version_02/en/graphics/guestbook_btn.gif new file mode 100755 index 0000000..943c68f Binary files /dev/null and b/archive/version_02/en/graphics/guestbook_btn.gif differ diff --git a/archive/version_02/en/graphics/guestbook_btn_2.gif b/archive/version_02/en/graphics/guestbook_btn_2.gif new file mode 100755 index 0000000..1429c12 Binary files /dev/null and b/archive/version_02/en/graphics/guestbook_btn_2.gif differ diff --git a/archive/version_02/en/graphics/home_btn.gif b/archive/version_02/en/graphics/home_btn.gif new file mode 100755 index 0000000..29bae9c Binary files /dev/null and b/archive/version_02/en/graphics/home_btn.gif differ diff --git a/archive/version_02/en/graphics/home_btn_2.gif b/archive/version_02/en/graphics/home_btn_2.gif new file mode 100755 index 0000000..ab10e8f Binary files /dev/null and b/archive/version_02/en/graphics/home_btn_2.gif differ diff --git a/archive/version_02/en/graphics/horz_border_bottom.gif b/archive/version_02/en/graphics/horz_border_bottom.gif new file mode 100755 index 0000000..6f30de0 Binary files /dev/null and b/archive/version_02/en/graphics/horz_border_bottom.gif differ diff --git a/archive/version_02/en/graphics/jairus_logotext_en.jpg b/archive/version_02/en/graphics/jairus_logotext_en.jpg new file mode 100755 index 0000000..6a4d9c9 Binary files /dev/null and b/archive/version_02/en/graphics/jairus_logotext_en.jpg differ diff --git a/archive/version_02/en/graphics/legal_btn.gif b/archive/version_02/en/graphics/legal_btn.gif new file mode 100755 index 0000000..88cea13 Binary files /dev/null and b/archive/version_02/en/graphics/legal_btn.gif differ diff --git a/archive/version_02/en/graphics/legal_btn_2.gif b/archive/version_02/en/graphics/legal_btn_2.gif new file mode 100755 index 0000000..58ca0c1 Binary files /dev/null and b/archive/version_02/en/graphics/legal_btn_2.gif differ diff --git a/archive/version_02/en/graphics/links_btn.gif b/archive/version_02/en/graphics/links_btn.gif new file mode 100755 index 0000000..d5c398d Binary files /dev/null and b/archive/version_02/en/graphics/links_btn.gif differ diff --git a/archive/version_02/en/graphics/links_btn_2.gif b/archive/version_02/en/graphics/links_btn_2.gif new file mode 100755 index 0000000..bc6a5ae Binary files /dev/null and b/archive/version_02/en/graphics/links_btn_2.gif differ diff --git a/archive/version_02/en/graphics/ourfamilies_btn.gif b/archive/version_02/en/graphics/ourfamilies_btn.gif new file mode 100755 index 0000000..0a5aa8e Binary files /dev/null and b/archive/version_02/en/graphics/ourfamilies_btn.gif differ diff --git a/archive/version_02/en/graphics/ourfamilies_btn_2.gif b/archive/version_02/en/graphics/ourfamilies_btn_2.gif new file mode 100755 index 0000000..5b33381 Binary files /dev/null and b/archive/version_02/en/graphics/ourfamilies_btn_2.gif differ diff --git a/archive/version_02/en/graphics/ourmission_btn.gif b/archive/version_02/en/graphics/ourmission_btn.gif new file mode 100755 index 0000000..28d01bf Binary files /dev/null and b/archive/version_02/en/graphics/ourmission_btn.gif differ diff --git a/archive/version_02/en/graphics/ourmission_btn_2.gif b/archive/version_02/en/graphics/ourmission_btn_2.gif new file mode 100755 index 0000000..82b3dc7 Binary files /dev/null and b/archive/version_02/en/graphics/ourmission_btn_2.gif differ diff --git a/archive/version_02/en/graphics/support_btn.gif b/archive/version_02/en/graphics/support_btn.gif new file mode 100755 index 0000000..91f8a6d Binary files /dev/null and b/archive/version_02/en/graphics/support_btn.gif differ diff --git a/archive/version_02/en/graphics/support_btn_2.gif b/archive/version_02/en/graphics/support_btn_2.gif new file mode 100755 index 0000000..0522de5 Binary files /dev/null and b/archive/version_02/en/graphics/support_btn_2.gif differ diff --git a/archive/version_02/en/guestbook.php b/archive/version_02/en/guestbook.php new file mode 100755 index 0000000..f259ead --- /dev/null +++ b/archive/version_02/en/guestbook.php @@ -0,0 +1,241 @@ + + + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Guestbook +

+ + + + + +
+validate($random_string)) + { echo '!! You cannot use the same captcha image twice, please try again.
'; } + + # Check, that the right CAPTCHA password has been entered and + # return an error message otherwise. + elseif (!$captchas->verify($password)) + { echo '!! You entered the wrong text from the image. Please try again.
'; } + + # everything is OK if we get here, so add message + else + { + # english dating dd/mm/yyy + $date = date("n/j/Y"); + $new_id = count($guestbook['guestbook']['entry']) + 1; + $message = implode('
', explode("\n",$_POST['message'])); + $new_entry = "\t + $date + {$_POST['name']} + $message + \n"; + + # file returns and array: one element per file line + $gb_file = file($guestbook_xml); + # the last line of the xml file is the closing guestbook tag, take it out + # so that we just append the new entry (which has the closing tag) + array_pop($gb_file); + # collapse the file array and append the new entry + $gb_file = implode('',$gb_file).$new_entry; + # write the few xml file to the file + file_put_contents($guestbook_xml,$gb_file); + + $guestbook['guestbook']['entry'][] = array( 'id' => $new_id, + 'date' => $date, + 'name' => $_POST['name'], + 'message' => $message ); + # the message and name are always printed back into the form + # but we only want this if the captcha failed + # if we're here, the captcha was successful, so we clear these values + $_POST['message'] = ''; + $_POST['name'] = ''; + } +} +?> +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Name: + ' /> +
+ Message: + + +
  + Enter the text from the image below:
+ +
  + image() ?> +
  + +
+
+
+ + +
+
+ +
+ + + + + + +
+ 0) +{ + $previous_page = $page - 1; + print "newer entries"; +} +?> + +older entries"; +} + +?> +
+
+
+ +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/en/guestbook.xml b/archive/version_02/en/guestbook.xml new file mode 100755 index 0000000..3d1782c --- /dev/null +++ b/archive/version_02/en/guestbook.xml @@ -0,0 +1,33 @@ + + + + April 27, 2005 + Francis Montocchio + Welcome to the Jairus Society guest book. As the very first message to this guest book, I would like to thank Benjamin Ramey for his fabulous work on this incredible web site. Ben, it has been more than a pleasure working with you, and you've done a wonderful job. Thank you. Francis. + + + may 31, 2005 + Melanie Francis + It gives me great honour to be the first to sign this guestbook! Ilse and Francis this is a wonderful idea and I hope you can help many many families who are started out on this hard but very rewarding journey.
much love and respect Melanie sister to Gary brain injured in a car accident in 1993 age 17.
+
+ + june 19, 2005 + Pierre Montocchio + Great site. Good work. Best of luck!
+
+ + september 26, 2005 + Isabella Whiteway + I am reading this with my dad and i think its so brilliant!!!
good luck!
+
+ + 10/6/2006 + ALICIA BEATRIZ CANEPA + I WOULD LIKE TO KNOW MORE ABOUT THIS KIND OF TREATMENT, SINCE I HAVE A SON WITH BRAIN INJURY THAT I WOULD LIKE HIM TO BE ABLE TO PROGRESS MUCH MORE THAN HE IS NOW. THANK YOU. + + + 1/16/2007 + apache + good luck + +
\ No newline at end of file diff --git a/archive/version_02/en/index.htm b/archive/version_02/en/index.htm new file mode 100755 index 0000000..835322d --- /dev/null +++ b/archive/version_02/en/index.htm @@ -0,0 +1,113 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Brain Injury +
+
+ + + Although there are thousands of children (and adults) with brain injuries + and hundreds of recognised symptoms arising from injury to the brain, + there seem to be very few treatment methods available which result in tangible results. + A vast number of parents and families looking to mainstream medical practice for + answers feel that available treatment is palliative (treating symptoms rather than causes) + and fails to provide them with any real hope. + +

+ About This Site +
+
+ + The mission of the Jairus Society is explained in detail on the Our Mission page. + Take a look at the Our + Families page + to see the families that are in our society, and read about their histories and + latest updates on their progress. Make sure to read the Support Us page + to see how you can contribute to the Society. The Legal page explains + more of how the Society and contributions work. To learn how you can contact us, make your way + to the Contact + Us page. If you're looking for more information about brain injury and related topics, + see our collection of links on the Links page. Lastly, please feel free + to leave any comments you would like in our Guestbook!
+
+ You can also click on any of the pictures in this site for information on the picture. +
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/en/legal.htm b/archive/version_02/en/legal.htm new file mode 100755 index 0000000..65fbba3 --- /dev/null +++ b/archive/version_02/en/legal.htm @@ -0,0 +1,90 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Legal +
+
+ + + The International Jairus Society is a non-profit organisation incorporated separately in Austria and in the United + States. + + +
+
+ + + + + + +
+ + diff --git a/archive/version_02/en/legal_austria.htm b/archive/version_02/en/legal_austria.htm new file mode 100755 index 0000000..9b5aa69 --- /dev/null +++ b/archive/version_02/en/legal_austria.htm @@ -0,0 +1,135 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
You are here: + Legal + / Austria +
+ Legal: Austria +
+
+ Legal Form of the Society
+ + The International Jairus Society (IJS) exists in the form of a non-profit “Verein” (Society/Association) + and was registered and approved along with its statutes with the appropriate Austrian authorities + (Austrian Police Directorate, Vienna) on April 20, 2004 under the Associations Register Number + (Vereinsregisternummer) XV-6454 Wien.
+
+
Structure of the Society
+ Chairperson: Francis Montocchio
+ Vice Chairperson: Ilse Montocchio
+ Accountant/Auditor: Dr. Manfred Schwarz (Moore Stephens + Austria)
+
+
Address in Austria
+ Don Bosco-gasse 39A
+ A-1230 Vienna
+ Austria
+ Tel:+43-1-6650989
+ Fax+43-1-66509897
+
+
Where Collected Funds are Deposited
+ + Financial contributions to the Society are deposited into the Society Bank + account in Vienna, Austria.
+
+
Bank Details
+ Bank Austria-Creditanstalt
+ Mariahilfestrasse 54
+ A-1070 Vienna
+ AUSTRIA
+
+ A/C No. 50787111444
+ IBAN: AT77 1200 0507 8711 1444
+ Swift: BKAUATWW
+
+
How Funds are Distributed
+ Funds are distributed to receiving families solely by the Auditor on submission + of receipts by member families through the Society office in Vienna.
+
+
Statutes of the Society
+ On request, the Society Statutes may be made available for perusal by the public.

+ + +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/en/legal_us.htm b/archive/version_02/en/legal_us.htm new file mode 100755 index 0000000..4b8c108 --- /dev/null +++ b/archive/version_02/en/legal_us.htm @@ -0,0 +1,125 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
You are here: + Legal + / United States +
+ Legal: United States +
+
+ Legal Form of the Society
+ + The International Jairus Society was incorporated as a non-profit organisation + (N00643215) in the State of Missouri on February 22, 2005.
+
+
Tax Status of the Society
+ IJS has applied for 501(c)(3) tax-exempt status from the United States Government. + All contributions are tax-exempt.
+
+
The Address of the Society
+ 3400 N.W. 58th Ter
+ Kansas City, MO 64151
+ USA
+ Tel: (816) 505-1126
+ Cell: (816) 830-3570
+
+
The Structure of the Society
+ President: Francis Montocchio
+ Secretary/Treasurer: James S. Ramey
+
+ +
Where Collected Funds are Deposited
+ Checks made payable to the Society are deposited into the Society Bank account + in Kansas City, Missouri.
+
+
How Funds are Distributed
+ These funds are distributed to receiving families solely by the Treasurer + on submission of receipts by member families through the Society office in + the United States.
+
+
By-Laws of the Society
+ On request, the Society By Laws may be viewed by the public.
+ +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/en/links.htm b/archive/version_02/en/links.htm new file mode 100755 index 0000000..b8315cc --- /dev/null +++ b/archive/version_02/en/links.htm @@ -0,0 +1,121 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Links + +
+
+ + Recognised Treatment Programs + + +

Families’ Web Sites
+

+

+ +

Brain-Injury Forums +

+

+ +

Frequent Flyer Links
+

    +
  • WebFlyer.com +
    + This link has links to all major frequent flyer programs.
  • +
+

+
+ +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/en/ourfamilies.htm b/archive/version_02/en/ourfamilies.htm new file mode 100755 index 0000000..6d55a1e --- /dev/null +++ b/archive/version_02/en/ourfamilies.htm @@ -0,0 +1,130 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Our Families +
+
+ +
+
+ + Gerard Montocchio +
+
+ Born October 10, 1995 in Vienna, Austria. +

+ I was born with a serious heart defect and because of that, my brain + was starved of oxygen and I suffered a severe, diffuse brain injury. +
+ read more about me +
+ +
+
+
+
+ +
+ + Trenton Gruber +
+
+ Born June 8, 1997 in Denver, Colorado, USA. +

+ Hello, I am Trenton Gruber. I’m 7 (2005). My mom is Rebecca Gruber (Becci), + my dad is Charles Gruber (Chuck). +
+ read more about me +
+ +
+
+
+
+ +
+ + Helena Prosser +

+ I was born on November 12th 1993. I am an + only child, and I live with my Mum, and my grandparents + in Oamaru, in the South Island of New Zealand. +
+ read more about me +
+
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/en/ourfamilies/gerardm.htm b/archive/version_02/en/ourfamilies/gerardm.htm new file mode 100755 index 0000000..e6a3cbb --- /dev/null +++ b/archive/version_02/en/ourfamilies/gerardm.htm @@ -0,0 +1,133 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
You are here: + Our Families + / Gerard Montocchio +
+ Our Families: Gerard Montocchio +
+
+ +
+
+ + Gerard Montocchio +
+
+ Born October 10, 1995 in Vienna, Austria. +
+

I was born with a serious heart defect and because of that, my brain was + starved of oxygen and I suffered a severe, diffuse brain injury. For the + first four years of my life Mum and Dad tried everything they could to treat + me, but had little success from the treatment programs available at the + hospitals in our city, and I didn’t really progress at all.

+ +

I was four when my parents discovered the “Institutes” + and started doing my Intensive Treatment + Program. At this time I was functionally blind, totally deaf, I could only really + move on my tummy on the floor about one meter at a time, and I couldn’t feel pain or hot and + cold. I also suffered terribly from digestive problems and eating was + difficult and keeping my food down was even worse.

+ +

After four years of the Institutes’ Program I was growing neurologically much faster than before + the program, had learned to read, do some maths, write notes to my parents on an FC Board, get + around the house + + crawling, I could hear and I started feeling much better. At this time we changed + to ABR, not because we were unhappy about the Institutes, + to the contrary. We all felt concerned about my physical and mobility progress and decided + that we wanted to do ABR from then on.

+ +

Now I am doing an ABR Program and many significant changes have taken place. I fly to Belgium + five times a year and we learn new techniques at every visit.

+ +

If you would like to see more about me, my program, my progress so far and my family, + please look at my web site. + +

+ + Thank you for reading about me and considering the possibility of becoming a + member of our Society to help brain-injured people like me.

+ + Updates for Gerard: +

+ +GerardPullingHimselfUp.pdf
+ +
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/en/ourfamilies/helenap.htm b/archive/version_02/en/ourfamilies/helenap.htm new file mode 100755 index 0000000..83fd867 --- /dev/null +++ b/archive/version_02/en/ourfamilies/helenap.htm @@ -0,0 +1,213 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
You are here: + Our Families + / Helena Prosser
+ Our Families: Helena Prosser +
+
+ +
+
+ + Helena Prosser +
+
+ I was born on November 12th 1993. I am an only child, and I live with my +Mum, and my grandparents in Oamaru, in the South Island of New Zealand. + +

Early Days
+ I wasn't breathing at birth, which was an indication of existing injury +although I was 10.5lb, and a good colour. At three weeks old, after +recovering from the excessive application of sedatives given in hospital in +the first 48 hours, I finally woke up and started screaming, which I did +nearly constantly for the next five months, all day and three or four hours +each night. Sorry, Mum! +

+ +

Onset of Seizures
+ + At the age of five months, coming along with my first two teeth I began +having seizures. On that first day I had 12 seizures, lasting ten minutes +each. At least when having my seizures I didn¹t scream! I¹m not sure what¹s +worse. My seizures continued in varying intensity, frequency and duration +every day of my life excepting one year at the age of seven, which was +seizure free. Mercifully, and thanks to my home program at the time of +writing (April 2005) I have not had a seizure since February 21st 2005! +

+ +

+I slowly became less agitated, so that by a year old, although still heavily +seizuring, I was much calmer. I was however completely non-responsive, +showed no ability to move independently, nor interact with anyone in my +environment. +

+ +

What can we Do? The Institutes
+ My Mum had been searching for treatment with no success, until when I was +year old she and Nana discovered The Institutes For The Achievement For +Human Potential. +I went to The Institutes for The Development Of Human Potential, in +Melbourne Australia, where the extent of my injury was discovered. +

+ +

+ I was diagnosed with profound, diffuse, bilateral midbrain injury. It was +shown that I was both blind and deaf, with poor sensation: hypersensitive +(oversensitive) in some areas, and hypo (under-sensitive) in others. +

+ +

So at 15 months of age I began the Institutes' (Australia) intensive +program, working seven days a week and 12 hours a day. Over the next five +years I worked extremely hard with re-assessments every six months, and a +change in program, to accommodate the changes in my development. +

+ +

I made some wonderful and extraordinary changes during this time. Sight, +hearing and feeling much improved. I learned to read, and do maths, and I +was gaining a good understanding of the world around me. Though my +sensation was still varied, it was less so. +

+ +

At six years old it was becoming obvious that though the change was good, it +wasn¹t fast enough, and the decision was made to take me to the Institutes +in Philadelphia, in order to access the latest research information, and +training. + +

+ +

The Institutes in Philadelphia - my Big Program
+ Six months after starting with IAHP in Philadelphia, and at the age of seven +I went on to an 18 hours a day program of respiratory patterning. Within +three months my seizures had stopped for the first time since I was five +months old. This was a huge time of change for me, because it also saw my +face relax from its permanent frown, and the emergence of what my Mum calls +the most beautiful smile in the world! I started making soft sounds which +everyone said were lovely, and gained some small movements. +

+ +

Progress
+ + Over the next five years my vision and hearing improved enormously, and my +intellectual development was profound. Today I speed-read adult level +books, I do university level mathematics, and I have a vast intellectual +knowledge of the world. I have a great love of music, and enjoy a range of +styles. +

+ +

I have always been given an excellent diet, combined with my physiological +program, I have been able to avoid serious illness altogether. I have had a +few head colds over the years, but nothing out of the ordinary. Medical +prognosis was for multiple hospitalizations, chest infections and surgery. +So far I have avoided all of these, apart from a period of dental surgery, +due to hypoplastic teeth. (Better than real plastic!) +

+ +

Complications
+ In November 2004, shortly after turning eleven, it was discovered that I +have a liver dysfunction, and a number of blood disorders. It was decided +that whilst these problems were being dealt with, I would not return to the +Institutes in Philadelphia, but I would be given time to be treated, and +recover without the stress of a physical program demanding all my efforts. +

+ +

ABR
+ Early on in this time my Mum was impressed by a new program which had been +recommended by other families. So Mum and I traveled to Singapore in March +2005 for an ABR assessment. ABR allows the rest time that I require for my +recovery, as it is passive for me, but it is also turning out to be quite a +positive force for me, offering more answers than were originally sought +

+ +

Progress with ABR
+ + ABR allows me the time to rest that I require for my recovery + from my liver complaints, as it is passive for me. ABR is also turning out to be quite a +positive force in our lives, offering more answers than were originally +sought. +

+ +

This is what Mum says about me: "Helena is a co-operative and gentle child, +who is very sensitive to others' distress. She has a ready smile, and is +beginning to giggle and laugh."

+ + Updates for Helena: +

+ + +
+
+
+ + + + + + +
+ + diff --git a/archive/version_02/en/ourfamilies/trentong.htm b/archive/version_02/en/ourfamilies/trentong.htm new file mode 100755 index 0000000..3cead9f --- /dev/null +++ b/archive/version_02/en/ourfamilies/trentong.htm @@ -0,0 +1,257 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
You are here: + Our Families + / Trenton Gruber
+ Our Families: Trenton Gruber +
+
+ +
+
+ + Trenton Gruber +
+
+ Born June 8, 1997 in Denver, Colorado, USA. +
+

My Family
+ Hello, I am Trenton Gruber. I’m 7 (2005). My mom is Rebecca Gruber (Becci), + my dad is Charles Gruber (Chuck). I have five brothers and sisters; Jeremy Meyers + (24 yr), Gabriel Meyers (22), Adam Meyers (21) and last but not least, Mikayla and + Sydney, my 7-year-old triplet siblings.
+
+ Two Brain Injuries in the Family
+
+ Two of my Mom’s children have brain injuries - my brother Adam and me.
+
+ Our Birth
+
+ + The triplets, 2 girls and a boy (me), were born at 29 weeks gestation. The order of birth + was as follows: Mikayla (2 lb 14 oz) first, then me (3 lb 1 oz) second, and lastly Sydney + (3 lb 6 oz). Our lungs had not developed and we were all put on tubes and given surfaction. + We all had our critical moments switching off one right after the other struggling to sustain + our lives that first month. You'd have thought that we had some unique form of communication + between us. We were all happy to get out of our incubators after a little over a month and + gradually join each other in one cosy crib. All three of us had jaundice, we were lactose + intolerant (especially Sydney and me), and we were on oxygen for about 6 months, all of us + weaning at different times. + +
+
+ My Progress
+
+ Initially, + I was diagnosed with Periventricular Lukomylasia (PVL) caused by an intraventricular bleed at + birth (a blood clot in the 4th ventricle). We were not told this until a few days before my release + from the hospital. The doctors mentioned that I would have multiple delays but no idea to what + extent. However, I seemed to recover from my critical moments the quickest. I was very quiet and + seldom cried. During the first year of my life we waited so I could be tested on my first birthday + by Child Find (Resources for Young Children). At that time I began conventional therapy (Physical + therapy, Occupational therapy, and Speech therapy) two days a week. This continued for 6 months + with very little results. Well, my Mom, already having once before experienced being the mother + of a brain-injured child, was not satisfied with conventional therapies and seemed to gravitate + to other moms with similar problems for help. Through this she discovered the book "What to do about your brain injured child" by + Glenn Doman. For the first time, she felt this was the answer of hope for her child. She called + the Institutes + for the Achievement of Human Potential (IAHP) and registered for the “What to Do about your + Brain-Injured Child” course. During the 3-month wait for the course Mom started a home program + with me. (I was then 21 months old, literally a lump on the floor and not + able to lift my head). The information from the book gave Mom enough information to start with + a tactile and speech program, and the incline plane. I was flopping from my tummy to my back + and had extremely rigid legs. I gagged 99% of the time when I was being fed. At this time I was + in leg braces, and the doctors were talking about hip surgery, and eventually getting me into + a walker. I was also diagnosed with a strabismus (wandering eye) and was wearing an eye patch. + I currently only see using one eye because of this.
+
+ The Institutes (IAHP)
+
+ Mom + took the “What to do about your brain-injured child” class (April 99) by herself + and she and I were so inspired that she pulled me out of my conventional + program, but not without a lot of criticism and scepticism from the therapists. We knew this + was the right program for us and we started patterning within the week. + It took Mom 2 months to find enough volunteers to do 3 sessions of 5 patterns each day. I fought + against the patterning for the entire 5 minutes for 3 months. We lost a lot of volunteers during + that time as they thought this was so cruel. We stuck to it and eventually got into a good routine, + doing the program 7 days a week. The first year our program consisted of the tactile, speech program, + patterning (15 x day), inconsistent Intelligence program, horse therapy (which didn't help), hanging + from a dowel, vestibular activities, and masking sporadically. It took about 6 months for me to + learn to crawl off the inclined plane using my right arm only and gradually using my other limbs, + it took us almost 2 years to reach our crawling goal of 500 meters. We desperately wanted to do + the IAHP Aspirant + Program but we just couldn't afford it. +
+
+ + More Progress +
+ In November 2000 he started pushing into the creeping position. His speech and comments were excellent. + We then dropped one patterning session. Our program now consisted of two patterning sessions (six patterns + each), masking about 20 times each day, vestribular activities, hanging, manual respiratory patterning (30 min + a day) and playing creeping games the rest of the day. We practiced going up/down stairs and was going to + pre-school 2 mornings a week (this was a big mistake). +
+
+ + More Progress +
+ In November 2000 I started pushing into the creeping position. My speech and comments + were excellent. We then dropped one patterning session. Our program now consisted of + two patterning sessions (six patterns each), masking about 20 times each day, vestibular + activities, hanging, manual respiratory patterning (30 min a day) and playing creeping + games the rest of the day. We practiced going up/down stairs and was going to pre-school + 2 mornings a week (this was a big mistake). +
+
+ + Seizures and Nutrition +
+ In April 2001 Mom noticed I had started having seizures. I was very sick from January - + May 2001 with streptococcus leading into Scarlet fever in May. We began a gluten-free, sugar-free, + dairy-free diet to get me well. During the summer I progressed rapidly. We spent another part of + our day creeping at a local church and on the grass at the park. Mom continued to do patterning, + vestibular activities, increased masking to 40 a day, and respiratory patterning to 2 hours a day, + + and a rather inconsistent intelligence program. In August Mom attended the Lecture II at IAHP and began + the 6 week medullary reflex program. It ended up taking us 7 weeks but we were faithful doing 800 rolls + everyday 7 days a week. The results were worth the exhaustion we both experienced. My eyes looked better, + I ate better, I started sitting straighter, I was more alert, and my creeping went from 400 meters a day to + 1600 meters once or twice a week in only 7 weeks. Mom then attended Lecture III in October 2001 full of + enthusiasm that she needed to add more to our program. + patterning to 2 hours a day, and an inconsistent Intelligence program. +

+ +

We then built the gravity-free environment and ordered the respiratory patterning machine (started that in Dec 2001). + We then added assisted walking on the overhead ladder 60-70 trips on the ladder each day, continued 800 meters of + creeping 5 days each week, and increased masking to 65-80 a day.

+ + From IAHP to Family Hope Centre +
+ In February 2002 we left IAHP and joined + the team at The Family Hope Centre in April. We have continued a similar + program with the assistance of FHC. +

+ Here is what we have done in Trenton's (5 1/2 years) program (4 ½ years doing program + 8 plus hours a day 7 days a week, gradually decreasing to 6 days a week, and now 5 + days each week): + +
    +
  • 12 patterns
  • +
  • Incline plane
  • +
  • 30 laps on the overhead ladder (13 meters long)
  • +
  • 65-80 masks
  • +
  • 20 sessions tactile
  • +
  • Meduallary rolling board
  • +
  • 6 anti gravity activities 2x day (inconsistent)
  • +
  • 5 sets of 10 word cards 3x day
  • +
  • 2 homemade books a week
  • +
  • math dots 3x day
  • +
  • resp machine 10 hours at night
  • +
  • Co2/O2 inhalations 20x a day 60 seconds each
  • +
  • 400-800 mtrs creeping 5 days a week
  • +
  • Continuing a dairy free, gluten free, sugar free diet.
  • +
+ + Mom has also had to do programs for each of my sisters, who had mild issues. + Currently, April 2004, my progress has slowed down, we are now looking + into alternatives to help with my body structure, and seizures. +

+ + ABR +
+ Because of personal issues, Mom is only able to dedicate 6 hours each day 5 days each week to my program, + so it is extremely important to know that we are doing a program that is going to give us results. + We are doing ABR, + but not having the necessary resources, we have not been able to afford to attend evaluations + yet, and we are not really sure if we are doing it right. + + +

I work very hard and I am now old enough to see how different my life is around + other children my same age. I often feel very sad watching other children + run and play, even write their name, knowing that I struggle to perform + otherwise simple tasks.

+ +

Mom and I would so appreciate the resources to enable us to go for an ABR evaluation.

+ + Updates for Trenton: +

+ + +
+
+
+ + + + + + +
+ + diff --git a/archive/version_02/en/ourfamilies/updates/gerardm/GerardPullingHimselfUp.pdf b/archive/version_02/en/ourfamilies/updates/gerardm/GerardPullingHimselfUp.pdf new file mode 100755 index 0000000..64c6fce Binary files /dev/null and b/archive/version_02/en/ourfamilies/updates/gerardm/GerardPullingHimselfUp.pdf differ diff --git a/archive/version_02/en/ourmission.htm b/archive/version_02/en/ourmission.htm new file mode 100755 index 0000000..6d36429 --- /dev/null +++ b/archive/version_02/en/ourmission.htm @@ -0,0 +1,140 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Our Mission +
+
+ + + As parents of a severely brain-injured child, we, + Ilse and Francis Montocchio, the founders of the International + Jairus Society, have discovered through personal experience with home treatment + programs that brain injury is treatable, and that the single most important aspect + of life with a brain-injured person in the family is knowing: +
    +
  • WHAT TO DO
  • +
  • DOING IT
  • +
  • SEEING RESULTS – this amounts to HOPE.
  • +
+

We have also discovered that in order to DO something about a brain injury, the best + people to do this are the parents, and when this is not possible, the next best person + is a close relative. This means that Mum or Dad or Sister or Aunt (sometimes there is + only Mum or Dad or Sister alone!) stops or cuts down on working and dedicates his + or her time to the home treatment program.

+ +

The two treatment programs currently recognised by the International Jairus Society are:

+
    +
  1. The Intensive Treatment Program at the Institutes for Achievement of Human Potential, + Philadelphia, USA.
  2. +
  3. Advanced Biomechanical Rehabilitation, based in Beringen, + Belgium.
  4. +
+ +

Families on the Intensive Treatment Program at the IAHP + + need to travel to Philadelphia twice a year, and those doing ABR + need to travel to Beringen, Canada or Singapore, depending on the proximity of the + ABR Centre, up to five times a year. The costs involved include professional fees, airfares, accommodation, + board, equipment and helpers who need to travel with the family.

+ +

The double load of a reduced family income added to the costs of travelling and treatment programs + results in an enormous financial burden on most families.

+ + +

The International Jairus Society was founded to help support an increasing number of families with + brain-injured children and adults who are involved in home treatment programs, and is concerned with + two main activities:

+ +
    +
  1. Fund-Raising for the purposes of covering the costs of this treatment which are hardly ever covered + by mainstream medical insurance policies.
  2. +
  3. Sharing of information and experiences on home treatment of brain-injured children and adults to interested parties
  4. +
+
+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/en/support.htm b/archive/version_02/en/support.htm new file mode 100755 index 0000000..891c017 --- /dev/null +++ b/archive/version_02/en/support.htm @@ -0,0 +1,117 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + Support Our Families +
+ + +

You can support our families by BECOMING A CONTRIBUTOR to the International + Jairus Society.

+

CONTRIBUTION SCHEME

+ +

Foster Contributor – in + Support of Specific Families
+ + Individuals or organisations who make regular monthly financial contributions in support of specific + families.

+

Sponsor Contributor – in + Support of All our Families
+ Individuals or organisations who make regular monthly financial contributions to the Society as a + whole.

+

AirMiles Contributor – in + Support of Families who Fly
+ + Individuals or organisations who contribute accumulated frequent-flyer Air Miles to families who + need to fly for therapy purposes.

+

Donor Contributor – in + Support of All or Specific Families
+ Individuals or organisations who contribute, once or more regularly to our families. The Donor Contributor + + determines whether the funds are to be made available to all families or to any specified by the Donor.

+

Honorary Contributor – Extraordinary + Contributions
+ Individuals or organisations who make extraordinary financial or other contributions to the Society.

+

+ +
+
+ + + + + + +
+ + diff --git a/archive/version_02/en/support_airmiles.htm b/archive/version_02/en/support_airmiles.htm new file mode 100755 index 0000000..67f77a5 --- /dev/null +++ b/archive/version_02/en/support_airmiles.htm @@ -0,0 +1,107 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
You are here: + Support Our Families + / Airmiles Contributor
+

AirMiles Contributor – in Support of Families who Fly

+

What is an AirMiles Contributor? + +
+ AirMiles Contributors are individuals or organisations who are Contributors of airline group “Frequent + Flyer” programs (like the Star Alliance) who would like to make a contribution to the Society + by donating accumulated miles to a brain-injured person. Most of our families need to fly to Philadelphia, + Canada, Singapore or Beringen in order to attend lectures, therapy demonstrations etc.

+

How do I contribute my Accumulated Frequent Flyer Miles?
+ Most Frequent Flyer programs allow for their Contributors to give away miles to a specified person + for a specified flight. If you have miles that you would like to donate, please would you contact Francis + Montocchio or Steve Ramey by e-mail, and they will call you back to arrange the details of the transfer + of the miles to a family who needs to fly.

+

Will I be informed about the progress and results of the Treatment?
+ All Contributors will be regularly informed (generally by e-mail) of the progress of the individuals + receiving treatment.

+

Simply contact us if you have Air Miles to donate.

+

Interesting link: www.webflyer.com

+

If you would like to become an Airmiles Contributor and support a specific child, please e-mail + us.
+

+ + +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/en/support_donor.htm b/archive/version_02/en/support_donor.htm new file mode 100755 index 0000000..371b1f5 --- /dev/null +++ b/archive/version_02/en/support_donor.htm @@ -0,0 +1,129 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
You are here: + Support Our Families + / Donor Contributor
+
+ Donor Contributor – in Support of All or Specific Families

What is a Donor Contributor? + +
+ As a Donor Contributor of the International Jairus Society, you would make + one or more contributions – not + necessarily on a regular basis – to either a specific family or to all the families. See our + Families for more information on the children/adults in therapy.

+

What kinds of Donor Contributors are there?
+ * Sponsor Donors - Individuals or Organisations who make either “one-off” or + less regular donations to the Society as a whole. These funds will be made + available to ALL families in the Society.
+ * Foster Donors - Individuals or Organisations who make either “one-off” or + less regular donations to specific families. These funds will be made available + to specific families in the Society.

+

What happens to the contributions I make?
+ As a Foster Donor, specific families will be able to draw on your contributions by applying to the + Treasurer of the Society.
+ As a Sponsor Donor, all families will be able to draw on your contributions by applying to the Treasurer + of the Society.
+
+ Families may have funds reimbursed if spent on:
+• air or other tickets travelling to IAHP or an ABR Centre (treatment organisation)
+• car rental
+• board and accommodation
+• fees paid to the IAHP or ABR Centre
+• equipment necessary for treatment (e.g. therapy tables)

+

Will I be informed about the progress and results of the Treatment? +
+ All Contributors will be regularly informed (generally by e-mail) of the progress of the individuals + receiving treatment.

+

Donor Contributor Fees
+• Donor Contributors – make contributions up to $150.00 per donation
+• Special Sponsor Contributors – make contributions upward of $151.00 per donation
+ Donor Contributors contributing in excess of $1,700.00 automatically become Honorary + Contributors of the Society.

+

If you would like to become a Donor Contributor and support a specific child, + please e-mail us.
+ + +

+
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/en/support_foster.htm b/archive/version_02/en/support_foster.htm new file mode 100755 index 0000000..8d2e4b7 --- /dev/null +++ b/archive/version_02/en/support_foster.htm @@ -0,0 +1,116 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
You are here: + Support Our Families + / Foster Contributor +
+


+ Foster Contributor – in Support of Specific Families

+

What is a Foster Contributor? + +
+ Foster Contributors are like “Godparents” - they have a special interest in a special child/adult. + As a Foster Contributor of the International Jairus Society you would choose a specific family (or + more than one) who you would like to support. See our Families for more information on the child/adult + in therapy.

+

What happens to the contributions I make?
+ The family you choose will be able to draw on these specific funds by applying to the Treasurer of + the Society to reimburse funds spent on:
+• air or other tickets travelling to IAHP or an ABR +Centre (treatment organisation)
+• car rental
+• board and accommodation
+• fees paid to the IAHP or ABR
+• equipment necessary for treatment (e.g. therapy tables)

+

Will I be informed about the progress and results of the Treatment?
+ Foster Contributors will be regularly informed (generally by e-mail) of the progress of the individuals + receiving treatment.

+ +

Foster Contributor Fees
+• Foster Contributors – make regular contributions up to $150.00 per month
+• Special Foster Contributors – make regular contributions upward of $151.00 per month

+

If you would like to become a Foster Contributor and support a specific child, please e-mail + us.
+

+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/en/support_honorary.htm b/archive/version_02/en/support_honorary.htm new file mode 100755 index 0000000..bc6c074 --- /dev/null +++ b/archive/version_02/en/support_honorary.htm @@ -0,0 +1,85 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
You are here: + Support Our Families + / Honorary Contributor +
+ Honorary Contributor – Extraordinary Contributions
+
+ At this time there are no Honorary Contributors. + +
+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/en/support_sponsor.htm b/archive/version_02/en/support_sponsor.htm new file mode 100755 index 0000000..2358fd7 --- /dev/null +++ b/archive/version_02/en/support_sponsor.htm @@ -0,0 +1,114 @@ + + + + +The International Jairus Society + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
You are here: + Support Our Families + / Sponsor Contributor
+
+ Sponsor Contributor – in Support of All our Families +

What is a Sponsor Contributor?
+ + Sponsor Contributors are interested in the progress of all our brain-injured children/adults undergoing + a home treatment program. As a Sponsor Contributor of the International Jairus Society, your contributions + will be shared equally by all our families. See our Families for more information on the children/adults + in therapy.

+

What happens to the contributions I make?
+ All the families will be able to draw on your contributions by applying to the Treasurer of the Society + to reimburse funds spent on:
+• air or other tickets travelling to IAHP or an ABR Centre (treatment organisation)
+• car rental
+• board and accommodation
+• fees paid to the IAHP or ABR
+• equipment necessary for treatment (e.g. therapy tables)

+

Will I be informed about the progress and results of the Treatment?
+ All Contributors will be regularly informed (generally by e-mail) of the progress of the individuals + receiving treatment.

+

Sponsor Contributor Fees
+ +• Sponsor Contributors – make regular contributions up to $150.00 per month
+• Special Sponsor Contributors – make regular contributions upward of $151.00 per month

+

If you would like to become a Sponsor Contributor and support all our + families, please e-mail + us.
+

+
+ + + + + + +
+ + \ No newline at end of file diff --git a/archive/version_02/graphics/Jairus_Logo_d_small.jpg b/archive/version_02/graphics/Jairus_Logo_d_small.jpg new file mode 100755 index 0000000..2553904 Binary files /dev/null and b/archive/version_02/graphics/Jairus_Logo_d_small.jpg differ diff --git a/archive/version_02/graphics/Jairus_Logo_e_small.jpg b/archive/version_02/graphics/Jairus_Logo_e_small.jpg new file mode 100755 index 0000000..fceb9f3 Binary files /dev/null and b/archive/version_02/graphics/Jairus_Logo_e_small.jpg differ diff --git a/archive/version_02/graphics/_notes/bottom_left_corn.gif.mno b/archive/version_02/graphics/_notes/bottom_left_corn.gif.mno new file mode 100755 index 0000000..084ca2b --- /dev/null +++ b/archive/version_02/graphics/_notes/bottom_left_corn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/graphics/_notes/bottom_right_corn.gif.mno b/archive/version_02/graphics/_notes/bottom_right_corn.gif.mno new file mode 100755 index 0000000..1957dc7 --- /dev/null +++ b/archive/version_02/graphics/_notes/bottom_right_corn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/graphics/_notes/horz_border_bottom.gif.mno b/archive/version_02/graphics/_notes/horz_border_bottom.gif.mno new file mode 100755 index 0000000..a00329b --- /dev/null +++ b/archive/version_02/graphics/_notes/horz_border_bottom.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/graphics/_notes/horz_border_top.gif.mno b/archive/version_02/graphics/_notes/horz_border_top.gif.mno new file mode 100755 index 0000000..5a84e42 --- /dev/null +++ b/archive/version_02/graphics/_notes/horz_border_top.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/graphics/_notes/orange_circle.jpg.mno b/archive/version_02/graphics/_notes/orange_circle.jpg.mno new file mode 100755 index 0000000..fca36fc --- /dev/null +++ b/archive/version_02/graphics/_notes/orange_circle.jpg.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/graphics/_notes/thin_line.gif.mno b/archive/version_02/graphics/_notes/thin_line.gif.mno new file mode 100755 index 0000000..665a2da --- /dev/null +++ b/archive/version_02/graphics/_notes/thin_line.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/graphics/_notes/top_left_corn.gif.mno b/archive/version_02/graphics/_notes/top_left_corn.gif.mno new file mode 100755 index 0000000..abdaef2 --- /dev/null +++ b/archive/version_02/graphics/_notes/top_left_corn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/graphics/_notes/top_right_corn.gif.mno b/archive/version_02/graphics/_notes/top_right_corn.gif.mno new file mode 100755 index 0000000..1f9b42c --- /dev/null +++ b/archive/version_02/graphics/_notes/top_right_corn.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/graphics/_notes/vert_border_left.gif.mno b/archive/version_02/graphics/_notes/vert_border_left.gif.mno new file mode 100755 index 0000000..19dc876 --- /dev/null +++ b/archive/version_02/graphics/_notes/vert_border_left.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/graphics/_notes/vert_border_right.gif.mno b/archive/version_02/graphics/_notes/vert_border_right.gif.mno new file mode 100755 index 0000000..2768ba8 --- /dev/null +++ b/archive/version_02/graphics/_notes/vert_border_right.gif.mno @@ -0,0 +1,4 @@ + + + + diff --git a/archive/version_02/graphics/bottom_left_corn.gif b/archive/version_02/graphics/bottom_left_corn.gif new file mode 100755 index 0000000..045b5f6 Binary files /dev/null and b/archive/version_02/graphics/bottom_left_corn.gif differ diff --git a/archive/version_02/graphics/bottom_right_corn.gif b/archive/version_02/graphics/bottom_right_corn.gif new file mode 100755 index 0000000..8fa8fe3 Binary files /dev/null and b/archive/version_02/graphics/bottom_right_corn.gif differ diff --git a/archive/version_02/graphics/horz_border_bottom.gif b/archive/version_02/graphics/horz_border_bottom.gif new file mode 100755 index 0000000..c9a22f2 Binary files /dev/null and b/archive/version_02/graphics/horz_border_bottom.gif differ diff --git a/archive/version_02/graphics/horz_border_top.gif b/archive/version_02/graphics/horz_border_top.gif new file mode 100755 index 0000000..18ed426 Binary files /dev/null and b/archive/version_02/graphics/horz_border_top.gif differ diff --git a/archive/version_02/graphics/orange_circle.jpg b/archive/version_02/graphics/orange_circle.jpg new file mode 100755 index 0000000..ccb056c Binary files /dev/null and b/archive/version_02/graphics/orange_circle.jpg differ diff --git a/archive/version_02/graphics/random_imgs/random_img_1.jpg b/archive/version_02/graphics/random_imgs/random_img_1.jpg new file mode 100755 index 0000000..4e8b774 Binary files /dev/null and b/archive/version_02/graphics/random_imgs/random_img_1.jpg differ diff --git a/archive/version_02/graphics/thin_line.gif b/archive/version_02/graphics/thin_line.gif new file mode 100755 index 0000000..75f81f0 Binary files /dev/null and b/archive/version_02/graphics/thin_line.gif differ diff --git a/archive/version_02/graphics/top_left_corn.gif b/archive/version_02/graphics/top_left_corn.gif new file mode 100755 index 0000000..2c7eccc Binary files /dev/null and b/archive/version_02/graphics/top_left_corn.gif differ diff --git a/archive/version_02/graphics/top_right_corn.gif b/archive/version_02/graphics/top_right_corn.gif new file mode 100755 index 0000000..842a095 Binary files /dev/null and b/archive/version_02/graphics/top_right_corn.gif differ diff --git a/archive/version_02/graphics/vert_border_left.gif b/archive/version_02/graphics/vert_border_left.gif new file mode 100755 index 0000000..ef3d774 Binary files /dev/null and b/archive/version_02/graphics/vert_border_left.gif differ diff --git a/archive/version_02/graphics/vert_border_right.gif b/archive/version_02/graphics/vert_border_right.gif new file mode 100755 index 0000000..4692e99 Binary files /dev/null and b/archive/version_02/graphics/vert_border_right.gif differ diff --git a/archive/version_02/index.htm b/archive/version_02/index.htm new file mode 100755 index 0000000..a84a854 --- /dev/null +++ b/archive/version_02/index.htm @@ -0,0 +1,54 @@ + + + + + + +The International Jairus Society + + + + + + +
+ +
+
+ + + + + + + +
 englishdeutsch 
+
+ + diff --git a/archive/version_02/jairus.js b/archive/version_02/jairus.js new file mode 100755 index 0000000..6fddf11 --- /dev/null +++ b/archive/version_02/jairus.js @@ -0,0 +1,127 @@ +// JavaScript Document for Jairus Society : english + +if( document.images ) +{ + var home_btn = PreLoad( 'home' ); + var ourmission_btn = PreLoad( 'ourmission' ); + var ourfamilies_btn = PreLoad( 'ourfamilies' ); + var support_btn = PreLoad( 'support' ); + var legal_btn = PreLoad( 'legal' ); + var contactus_btn = PreLoad( 'contactus' ); + var guestbook_btn = PreLoad( 'guestbook' ); + var links_btn = PreLoad( 'links' ); + var zuruck_btn = PreLoad( 'zuruck' ); + +} + +function PreLoad( btn ) +{ + var loc_pattern = /.*\/(ourfamilies|familien)\//; + var img_path = "./graphics/"; //file path to find button images + + if( loc_pattern.test( document.location ) ) { img_path = "../graphics/"; } + + var temp = new Array(); + + temp[ 0 ] = new Image(); //don't know which image we're actually loading + temp[ 1 ] = new Image(); //so format temp to hold an image, any image + //then we can use .src to load each button img + temp[ 0 ].src = img_path + btn + "_btn" + ".gif"; //first version: no mouse over image + temp[ 1 ].src = img_path + btn + "_btn_2" + ".gif"; //second version: mouse over image + + return temp; +} + +function Swap( img, mouse_on ) +{ + if( document.images ) + { + var image_id = img + "_btn"; + var temp = eval( img + "_btn" ); + + document[ image_id ].src = temp[ mouse_on ].src; + } +} + +function Enlarge_Picture( link, language ) +{ + link = link.replace( "thumb_", "" ); + link = "../picture.htm?id=" + link + "+lang=" + language; + + var loc_pattern = /.*\/(ourfamilies|familien)\//; + if( loc_pattern.test( document.location ) ) { link = "../" + link; } + window.open( link, "_blank", "width=400, height=400, scrollbars=no, resizable=yes" ); +} + +function Random_Picture( where, placement ) +{ + var loc_pattern = /.*\/ourfamilies\//; + var img_path = "."; + + if( loc_pattern.test( document.location ) ) { img_path = "../."; } + + var doc_loc = document.location; + var lang_pattern = /.*\/(en|de)\/.*/; + lang_pattern.test(doc_loc); + var language = RegExp.$1; + + var random_num = Math.round( Math.random() * 1000 ); + random_num = random_num % (num_images + 1); + if( random_num == 0 ) { random_num = 1; } + var random_img = eval( "image_" + random_num ); + + if( where == "header" ) { document.write( "" ); } + else if( where == "body" ) { document.write( "" ); } +} +function According_Caption() +{ + var temp = new Array(); + var c = 0; + + var name_pattern = /.*\/pictures\/.*\/(.*\.\w{3})/; + name_pattern.test( document[ "picture" ].src ); + + for( c = 1; c <= num_images; c++ ) + { + temp = eval( "caption_" + c ); + if( temp[0] == RegExp.$1 ) + { + if( language == "en" ) { document.write( temp[1] + "

" ); } + else if( language == "de" ) { document.write( temp[2] + "

" ); } + break; + } + } +} +function According_Link() +{ + var src_pattern = /.*\/pictures\/(.*)\/.*\.\w{3}/; + src_pattern.test( document[ "picture" ].src ); + var child_name = RegExp.$1; + + var img_path = ""; + if( language == "en" ) { img_path = "en/ourfamilies/"; link_text = "Read more about me"; } + else if( language == "de" ) { img_path = "de/familien/"; link_text = "Lese mehr über mich"; } + + var loc_pattern = /.*\/ourfamilies|familien\//; + if( loc_pattern.test( document.location ) ) { img_path = "./"; } + + document.write( "" + link_text + "" ); +} + +function SendParent( link_to_parent ) +{ + winName=window.name; + parentName=opener.location.href=link_to_parent; + opener.focus(); + self.close(); +} + +function Check_GB_Fields() +{ + if( (document.getElementById( "name" ).value == "") || (document.getElementById( "message" ).value == "") ) + { + alert( "Please enter both a name AND message!!" ); + return false; + } + else { return true; } +} \ No newline at end of file diff --git a/archive/version_02/jairus_index.css b/archive/version_02/jairus_index.css new file mode 100755 index 0000000..83122e0 --- /dev/null +++ b/archive/version_02/jairus_index.css @@ -0,0 +1,221 @@ +/* CSS Document for the Jairus Society*/ + +body +{ + margin-top: 10px; + font-family: "Futura Lt BT", Arial; + background-color: #FFCC33; +} + +.top_left_corn { width: 10px; background-image: url("graphics/top_left_corn.gif"); background-repeat: no-repeat; } +.top_right_corn { width: 10px; background-image: url("graphics/top_right_corn.gif"); background-repeat: no-repeat; } +.bottom_left_corn { width: 10px; background-image: url("graphics/bottom_left_corn.gif"); background-repeat: no-repeat; } +.bottom_right_corn { width: 10px; background-image: url("graphics/bottom_right_corn.gif"); background-repeat: no-repeat; } +.horz_top { background-image: url("graphics/horz_border_top.gif"); background-repeat: repeat-x; height: 10px; } +.horz_bottom { background-image: url("graphics/horz_border_bottom.gif"); background-repeat: repeat-x; height: 10px; } +.vert_left { width: 10px; background-image: url("graphics/vert_border_left.gif"); background-repeat: repeat-y; width: 10px; } +.vert_right { width: 10px; background-image: url("graphics/vert_border_right.gif"); background-repeat: repeat-y; width: 10px; } + +#header +{ + position: relative; + top: -150px; + z-index: 1; + padding: 10px 0px 21px 0px; + width: 100%; + border-width: 2px 0px 0px 0px; + border-style: solid; + border-color: #3366CC; +} +#logo_img +{ + position: relative; + left: 250px; + width: 100%; + border: 0px solid #3366CC; + padding: 5px; + width: 160px; + position: relative; + z-index:2; +} +#logo_text +{ + position: relative; + top: -118px; + left: -100px; + z-index: 3; + width: 100%; +} +#main_links_div +{ + position: relative; + top: -60px; + padding: 10px 0px 0px 0px; + z-index: 3; +} +.main_link +{ + background-color: #FFCC33; + padding: 2px 5px 2px 0px; +} + #home_btn { left: 0px; top: 0px; } + #ourmission_btn { left: 0px; top: 0px; } + #ourfamilies_btn { left: 0px; top: 0px; } + #support_btn { left: 0px; top: 0px; } + #legal_btn { left: 0px; top: 0px; } + #contactus_btn { left: 0px; top: 0px; } + #links_btn { left: 0px; top: 0px; } + +#locator +{ + margin-bottom: 10px; + color: #FFFFFF; + font-weight: bold; + text-align: left; + text-transform: uppercase; + font-size: 12px; +} + a.locator_link:link { color: #FFFFFF; text-decoration: none; } + a.locator_link:visited { color: #FFFFFF; text-decoration: none; } + a.locator_link:hover { color: #3366FF; text-decoration: none; } + +#content_table +{ + position: relative; + top: -80px; + width: 800px; + background-color: #FFCC33; +} +.page_content_cell +{ + vertical-align: top; + padding: 30px 10px 10px 10px; + border-width: 0px 0px 0px 0px; + border-style: solid; + border-color: #000000; +} +.random_img_cell +{ + vertical-align: top; + padding: 0px 0px 0px 0px; +} +#random_img +{ + margin: 0px 20px 0px 20px; + border-width: 1px; + border-style: ridge; + border-color: #000000; +} +#caption +{ + font-size: 14px; + text-align: right; +} + +.header { font-size: 20px; color: #3366FF; font-family: "Futura Md BT", "Arial Black"; } +.body_text { font-size: 18px; } +.section_heading { font-variant: small-caps; font-size: 18px; font-weight: bold; } + +.family { height: 165px; } +.portrait +{ + position: relative; + z-index: 7; + margin: 0px 10px 0px 0px; + padding: 8px; + border-style: solid; + border-color: #3366CC; + border-width: 1px; + background-color: #FFCC33; +} +.portrait_alt +{ + position: relative; + z-index: 7; + margin: 0px 0px 0px 10px; + padding: 8px; + border-style: solid; + border-color: #3366CC; + border-width: 1px; + background-color: #FFCC33; +} +.families_link +{ + position: relative; + left: -10px; + padding: 0px 0px 0px 50px; + font-size: 30px; + border-style: solid; + border-color: #3366CC; + border-width: 0px 0px 1px 0px; +} +.families_link_alt +{ + position: relative; + left: 15px; + padding: 0px 50px 0px 0px; + font-size: 30px; + border-style: solid; + border-color: #3366CC; + border-width: 0px 0px 1px 0px; +} +.connection_lines +{ + width: 100%; + height: 41px; +} +.conn_left +{ + width: 90%; + height: 20px; + border-style: solid; + border-color: #3366CC; + border-width: 0px 0px 1px 1px; +} +.conn_left_alt +{ + width: 90%; + height: 20px; + border-style: solid; + border-color: #3366CC; + border-width: 1px 0px 0px 1px; +} +.conn_right +{ + width: 90%; + height: 20px; + border-right: 1px solid #3366CC; +} +.intext_img +{ + cursor: pointer; + margin: 10px; +} + +/*Stuff for guestbook page*/ + +.guestbook_header +{ + padding: 2px 2px 3px 0px; + margin-bottom: 10px; + border-width: 0px 0px 1px 0px; + border-style: solid; + border-color: #3366CC; + font-size: 12px; +} + +.guestbook_entry +{ + margin: 0px 0px 10px 20px; + padding: 5px 10px 10px 10px; + border-width: 0px 0px 0px 0px; + border-style: solid; + border-color: #3366CC; +} + +.gb_text +{ + margin-top: 0px; + font-size: 14px; + color: #333333; +} diff --git a/archive/version_02/php/CaptchasDotNet.php b/archive/version_02/php/CaptchasDotNet.php new file mode 100755 index 0000000..cbdcd0c --- /dev/null +++ b/archive/version_02/php/CaptchasDotNet.php @@ -0,0 +1,312 @@ + and +// Felix Holderied +// This file is in the public domain. +// +// ChangeLog: +// +// 2006-08-16: New optional features integrated +// +// 2006-03-01: Only delete the random string from the repository in +// case of a successful verification. +// +// 2006-02-14: Add new image() method returning an HTML/JavaScript +// snippet providing a fault tolerant service. +// +// 2005-06-02: Initial version. +// + +class CaptchasDotNet +{ + function CaptchasDotNet ($client, $secret, + $random_repository = '/tmp/captchasnet-random-strings', + $cleanup_time = 3600, + $alphabet = 'abcdefghijklmnopqrstuvwxyz', + $letters = 6, + $width = 240, + $height = 80 + ) + { + $this->__client = $client; + $this->__secret = $secret; + $this->__random_repository = $random_repository; + $this->__cleanup_time = $cleanup_time; + $this->__time_stamp_file = $random_repository . '/__time_stamp__'; + $this->__alphabet = $alphabet; + $this->__letters = $letters; + $this->__width = $width; + $this->__height = $height; + } + + function __random_string () + { + // The random string shall consist of small letters, big letters + // and digits. + $letters = "abcdefghijklmnopqrstuvwxyz"; + $letters .= strtoupper ($letters) + "0123456789"; + + // The random starts out empty, then 40 random possible characters + // are appended. + $random_string = ''; + for ($i = 0; $i < 40; $i++) + { + $random_string .= $letters{rand (0, strlen ($letters) - 1)}; + } + + // Return the random string. + return $random_string; + } + + // Create a new random string and register it. + function random () + { + // If the repository directory is does not yet exist, create it. + if (!is_dir ($this->__random_repository)) + { + mkdir ($this->__random_repository); + } + + // If the time stamp file does not yet exist, create it. + if (!is_file ($this->__time_stamp_file)) + { + touch ($this->__time_stamp_file); + } + + // Get the current time. + $now = time (); + + // Determine the time, before which to remove random strings. + $cleanup_time = $now - $this->__cleanup_time; + + // If the last cleanup is older than specified, cleanup the + // directory. + if (filemtime ($this->__time_stamp_file) < $cleanup_time) + { + $handle = opendir ($this->__random_repository); + while (true) + { + $filename = readdir ($handle); + if (!$filename) + { + break; + } + if ($filename != '.' && $filename != '..') + { + $filename = $this->__random_repository . '/' . $filename; + if (filemtime ($filename) < $cleanup_time) + { + unlink ($filename); + } + } + } + closedir ($handle); + + touch ($this->__time_stamp_file); + } + + // loop until a valid random string has been found and registered, + // but at most 20 times. If no valid random has been found during + // that time, there is something really wrong. Also show the error + // in the last run. + for ($remaining = 20; $remaining > 0; $remaining--) + { + // generate a new random string. + $random = $this->__random_string (); + + // open a file with the corresponding name in the repository + // directory in such a way, that the creation fails, when the + // file already exists. That should be near to impossible with + // good seeding of the random number generator, but it's better + // to play safe. If this is the last run, show the possible + // error message. + $filename = $this->__random_repository . '/' . $random; + + if ($remaining == 1) + { + $file = fopen ($filename, 'x'); + } + else + { + $file = @fopen ($filename, 'x'); + } + + if ($file) + { + fclose ($file); + break; + } + + // if the file already existed, rerun the loop to try the next + // string. + } + + // return the successfully registered random string. + $this->__random = $random; + return $random; + } + + // + // Generates image-URL Parameters are only atached if different from default + // + function image_url ($random = False, $base = 'http://image.captchas.net/') + { + if (!$random) + { + $random = $this->__random; + } + $image_url = $base; + $image_url .= '?client=' . $this->__client; + $image_url .= '&random=' . $random; + if ($this->__alphabet!='abcdefghijklmnopqrstuvwxyz') {$image_url .= '&alphabet=' . $this->__alphabet;}; + if ($this->__letters!=6) {$image_url .= '&letters=' . $this->__letters;}; + if ($this->__width!=240) {$image_url .= '&width=' . $this->__width;}; + if ($this->__height!=80) {$image_url .= '&height=' . $this->__height;}; + return $image_url; + } + + // + // Same as image_url but without width and height + // + function audio_url ($random = False, $base = 'http://audio.captchas.net/') + { + if (!$random) + { + $random = $this->__random; + } + $audio_url = $base; + $audio_url .= '?client=' . $this->__client; + $audio_url .= '&random=' . $random; + if ($this->__alphabet!='abcdefghijklmnopqrstuvwxyz') {$audio_url .= '&alphabet=' . $this->__alphabet;}; + if ($this->__letters!=6) {$audio_url .= '&letters=' . $this->__letters;}; + return $audio_url; + } + + // + // Generates complete html-sample with javascript to reload image from + // backup server + // + function image ($random = False, $id = 'captchas.net') + { + $image = <<The Captcha image + +EOT; + $image = str_replace ('@HEIGHT@', $this->__height, $image); + $image = str_replace ('@WIDTH@', $this->__width, $image); + $image = str_replace ('@ID@', $id, $image); + $image = str_replace ('@URL@', $this->image_url (), $image); + return $image; + } + + function validate ($random) + { + $this->__random = $random; + + $file_name = $this->__random_repository . '/' . $random; + + // Find out, whether the file exists + $result = is_file ($file_name); + + // if the file exists, remember it. + if ($result) + { + $this->__random_file = $file_name; + } + + // the random string was valid, if and only if the corresponding + // file existed. + return $result; + } + + function verify ($input, $random = False) + { + if (!$random) + { + $random = $this->__random; + } + $password_letters = $this->__alphabet; + $password_length = $this->__letters; + + // If the user input has the wrong lenght, it can't be correct. + if (strlen ($input) != $password_length) + { + return False; + } + + // Calculate the MD5 digest of the concatenation of secret key and + // random string. The digest is a hex string. + $encryption_base = $this->__secret . $random; + // This extension is needed for secure use of optional parameters + // In case of standard use we do not append the values, to be + // compatible to existing implementations + if(($password_letters != 'abcdefghijklmnopqrstuvwxyz') || ($password_length != '6')) + { + $encryption_base = $encryption_base . ':' . $password_letters . ':' . $password_length; + } + $digest = md5 ($encryption_base); + + // Check the password according to the rules from the first + // positions of the digest. + for ($pos = 0; $pos < $password_length; $pos++) + { + $letter_num + = hexdec (substr ($digest, 2 * $pos, 2)) % strlen ($password_letters); + + // If the letter at the current position is wrong, the user + // input isn't correct. + if ($input[$pos] != $password_letters[$letter_num]) + { + return False; + } + } + + // if the file exists, remove it. + if ($this->__random_file) + { + unlink ($this->__random_file); + unset ($this->__random_file); + } + + // The user input was correct. + return True; + } + +} + +?> diff --git a/archive/version_02/php/func_xml.php b/archive/version_02/php/func_xml.php new file mode 100755 index 0000000..23d356a --- /dev/null +++ b/archive/version_02/php/func_xml.php @@ -0,0 +1,221 @@ +/"; + + # try to find this mandatory opening ]*)>/"; + + # we continue through the xml until nothing is left in $xml_left + while(!empty($xml_left)) + { + # the last element of $xml_left is always the high priority, + # so process it next + $to_process = array_pop($xml_left); + # trim fore and aft spaces from the xml to process + $to_process = trim($to_process); + # the last index of our tmp_refs array, important later + $last_index = count($tmp_refs) - 1; + + # attempt the match the pattern that finds an opening xml tag + if(preg_match($patt,$to_process,$matches)) { + $element = $matches[1]; + $parameters = isset($matches[2]) ? $matches[2] : ''; + + if(isset($tmp_refs[$last_index][$element])) + { + if(is_array($tmp_refs[$last_index][$element])) + { + # case example: [biography]=>[0],[1]...[x]; $element = biography + # endsup: [biography]=>[0],[1]...[x+1] + if(isset($tmp_refs[$last_index][$element][0])) + { + array_push($tmp_refs[$last_index][$element],''); + $tmp_index = count($tmp_refs[$last_index][$element]) - 1; + $tmp_refs[] =& $tmp_refs[$last_index][$element][$tmp_index]; + } + # case example: [biography]=>[paragraph]; $element = biography + # endsup: [biography]=>[0]=>[paragraph] + # [1]=>'' + else + { + $tmp_ary = $tmp_refs[$last_index][$element]; + $tmp_refs[$last_index][$element] = array($tmp_ary,''); + $tmp_refs[] =& $tmp_refs[$last_index][$element][1]; + } + } + # case example: [biography]=>"string"; $element = biography + # endsup: [biography]=>[0]=>"string" + # [1]=>'' + else + { + $tmp_refs[$last_index][$element] = array($tmp_refs[$last_index][$element],''); + $tmp_refs[] =& $tmp_refs[$last_index][$element][1]; + } + } + # case example: [biography]=> NULL; $element = biography + # endsup: [biography]=>"" + else + { + $tmp_refs[$last_index][$element] = ''; + $tmp_refs[] =& $tmp_refs[$last_index][$element]; + } + + # if there are parameters, add them as if they were imbedded elements + if(!empty($parameters)) + { + $pairs = explode(' ',$parameters); + $last_index = count($tmp_refs) - 1; + + # we can do this, because we know the last element added + # is always fresh and new + $tmp_refs[$last_index] = array(); + + foreach($pairs as $pair) + { + # if a parameter is empty, just continue to next one + if(empty($pair)) { continue; } + + list($name,$value) = explode('=',$pair); + $value = str_replace("'",'',$value); + $value = str_replace('"','',$value); + + $tmp_refs[$last_index][$name] = $value; + } + } + + # we've already found an opening tag, now find the closing tag + $end_tag = strpos($to_process,""); + + # if there is not closing tag--oops! badly formatted xml doc + if($end_tag === FALSE) + { + return("XML document improperly formed. + No closing tag found for element: $element"); + } + + # get the string length of the opening tag and all the paramters + # inside, plus the opening and closing brackets + $element_len = strlen($matches[0]); + # then, the contents of this xml tag start after the above + # measured length to the end of the $to_process string, minus + # the length of the closing tag + $contents = substr($to_process,$element_len,$end_tag - $element_len); + + # if there is text in the $to_process string past this closing + # tag that we just found, put it on top of the $xml_left tag + # it's a sister element of the current one + if($extra = substr($to_process,$end_tag + strlen(""))) + { + array_push($xml_left,$extra); + } + # if not sister elements are found, we are at the end of this + # generation of elements, so place an END indicator in the + # $xml_left array + else + { + array_push($xml_left,'!~~END~~!'); + } + array_push($xml_left,$contents); + } + # we place the identifier END to indicate the end of an xml tag that + # has nested tags and no content itself, if this is NOT the case + # we have content to assign the current xml tag + else if($to_process != '!~~END~~!') + { + $tmp_refs[$last_index] = $to_process; + array_pop($tmp_refs); + } + # if we miss the above two ifs, we are at the end of an element + # but don't have content to assign, so step back one generation + # in the xml document + else + { + $tmp = array_pop($tmp_refs); + } + } + + # if all went well, we return an associative array with all the xml + # data in it, properly nested + return($data); +} + +##################################################### FUNCTION: xml_force_array # +# parameters: path to file to parse +# returns: associative array of xml file data +function xml_force_array($element) +{ + $array = array(); + if(is_array($element)) + { + if(isset($element[0])) { $array = $element; } + else { array_push($array,$element); } + } + else { array_push($array,$element); } + + return($array); +} +?> \ No newline at end of file diff --git a/archive/version_02/picture.htm b/archive/version_02/picture.htm new file mode 100755 index 0000000..4cd67e6 --- /dev/null +++ b/archive/version_02/picture.htm @@ -0,0 +1,49 @@ + + + + +Picture + + + + + + + +
+ +
+ + diff --git a/archive/version_02/pictures/gerardm/DSC00163.JPG b/archive/version_02/pictures/gerardm/DSC00163.JPG new file mode 100755 index 0000000..d226d89 Binary files /dev/null and b/archive/version_02/pictures/gerardm/DSC00163.JPG differ diff --git a/archive/version_02/pictures/gerardm/DSC00171.JPG b/archive/version_02/pictures/gerardm/DSC00171.JPG new file mode 100755 index 0000000..c7fbc41 Binary files /dev/null and b/archive/version_02/pictures/gerardm/DSC00171.JPG differ diff --git a/archive/version_02/pictures/gerardm/Gegi FP.01-14 July04.JPG b/archive/version_02/pictures/gerardm/Gegi FP.01-14 July04.JPG new file mode 100755 index 0000000..2090178 Binary files /dev/null and b/archive/version_02/pictures/gerardm/Gegi FP.01-14 July04.JPG differ diff --git a/archive/version_02/pictures/gerardm/Gegi FP.06-14 July 04.JPG b/archive/version_02/pictures/gerardm/Gegi FP.06-14 July 04.JPG new file mode 100755 index 0000000..f4f3810 Binary files /dev/null and b/archive/version_02/pictures/gerardm/Gegi FP.06-14 July 04.JPG differ diff --git a/archive/version_02/pictures/gerardm/Gegi kruip 2 - 2-03.JPG b/archive/version_02/pictures/gerardm/Gegi kruip 2 - 2-03.JPG new file mode 100755 index 0000000..bef07f8 Binary files /dev/null and b/archive/version_02/pictures/gerardm/Gegi kruip 2 - 2-03.JPG differ diff --git a/archive/version_02/pictures/gerardm/Gegi with GD.jpg b/archive/version_02/pictures/gerardm/Gegi with GD.jpg new file mode 100755 index 0000000..6ae43e1 Binary files /dev/null and b/archive/version_02/pictures/gerardm/Gegi with GD.jpg differ diff --git a/archive/version_02/pictures/gerardm/GegiDadSwim12.JPG b/archive/version_02/pictures/gerardm/GegiDadSwim12.JPG new file mode 100755 index 0000000..2cb5193 Binary files /dev/null and b/archive/version_02/pictures/gerardm/GegiDadSwim12.JPG differ diff --git a/archive/version_02/pictures/gerardm/GegiFC 4-04.JPG b/archive/version_02/pictures/gerardm/GegiFC 4-04.JPG new file mode 100755 index 0000000..a60f1e5 Binary files /dev/null and b/archive/version_02/pictures/gerardm/GegiFC 4-04.JPG differ diff --git a/archive/version_02/pictures/gerardm/GegiQuadNov04.JPG b/archive/version_02/pictures/gerardm/GegiQuadNov04.JPG new file mode 100755 index 0000000..f8b01f4 Binary files /dev/null and b/archive/version_02/pictures/gerardm/GegiQuadNov04.JPG differ diff --git a/archive/version_02/pictures/gerardm/GegiWalk1 - 10-02.jpg b/archive/version_02/pictures/gerardm/GegiWalk1 - 10-02.jpg new file mode 100755 index 0000000..2eefa09 Binary files /dev/null and b/archive/version_02/pictures/gerardm/GegiWalk1 - 10-02.jpg differ diff --git a/archive/version_02/pictures/gerardm/With the Prossers.jpg b/archive/version_02/pictures/gerardm/With the Prossers.jpg new file mode 100755 index 0000000..a1c5922 Binary files /dev/null and b/archive/version_02/pictures/gerardm/With the Prossers.jpg differ diff --git a/archive/version_02/pictures/gerardm/portrait.jpg b/archive/version_02/pictures/gerardm/portrait.jpg new file mode 100755 index 0000000..d482122 Binary files /dev/null and b/archive/version_02/pictures/gerardm/portrait.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_DSC00163.jpg b/archive/version_02/pictures/gerardm/thumb_DSC00163.jpg new file mode 100755 index 0000000..2d99223 Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_DSC00163.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_DSC00171.jpg b/archive/version_02/pictures/gerardm/thumb_DSC00171.jpg new file mode 100755 index 0000000..8d7a43d Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_DSC00171.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_Gegi FP.01-14 July04.jpg b/archive/version_02/pictures/gerardm/thumb_Gegi FP.01-14 July04.jpg new file mode 100755 index 0000000..3307ec2 Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_Gegi FP.01-14 July04.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_Gegi FP.06-14 July 04.jpg b/archive/version_02/pictures/gerardm/thumb_Gegi FP.06-14 July 04.jpg new file mode 100755 index 0000000..b8d3a53 Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_Gegi FP.06-14 July 04.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_Gegi kruip 2 - 2-03.jpg b/archive/version_02/pictures/gerardm/thumb_Gegi kruip 2 - 2-03.jpg new file mode 100755 index 0000000..2dc95be Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_Gegi kruip 2 - 2-03.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_Gegi with GD.jpg b/archive/version_02/pictures/gerardm/thumb_Gegi with GD.jpg new file mode 100755 index 0000000..d61c45b Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_Gegi with GD.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_GegiDadSwim12.jpg b/archive/version_02/pictures/gerardm/thumb_GegiDadSwim12.jpg new file mode 100755 index 0000000..a1609cb Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_GegiDadSwim12.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_GegiFC 4-04.jpg b/archive/version_02/pictures/gerardm/thumb_GegiFC 4-04.jpg new file mode 100755 index 0000000..96225b0 Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_GegiFC 4-04.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_GegiQuadNov04.jpg b/archive/version_02/pictures/gerardm/thumb_GegiQuadNov04.jpg new file mode 100755 index 0000000..7854c4e Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_GegiQuadNov04.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_GegiWalk1 - 10-02.jpg b/archive/version_02/pictures/gerardm/thumb_GegiWalk1 - 10-02.jpg new file mode 100755 index 0000000..033d812 Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_GegiWalk1 - 10-02.jpg differ diff --git a/archive/version_02/pictures/gerardm/thumb_With the Prossers.jpg b/archive/version_02/pictures/gerardm/thumb_With the Prossers.jpg new file mode 100755 index 0000000..438592c Binary files /dev/null and b/archive/version_02/pictures/gerardm/thumb_With the Prossers.jpg differ diff --git a/archive/version_02/pictures/helenap/portrait.jpg b/archive/version_02/pictures/helenap/portrait.jpg new file mode 100755 index 0000000..3518a96 Binary files /dev/null and b/archive/version_02/pictures/helenap/portrait.jpg differ diff --git a/archive/version_02/pictures/helenap/scan.jpg b/archive/version_02/pictures/helenap/scan.jpg new file mode 100755 index 0000000..7e54f20 Binary files /dev/null and b/archive/version_02/pictures/helenap/scan.jpg differ diff --git a/archive/version_02/pictures/helenap/scan0001.jpg b/archive/version_02/pictures/helenap/scan0001.jpg new file mode 100755 index 0000000..ce8885a Binary files /dev/null and b/archive/version_02/pictures/helenap/scan0001.jpg differ diff --git a/archive/version_02/pictures/helenap/scan0002.jpg b/archive/version_02/pictures/helenap/scan0002.jpg new file mode 100755 index 0000000..b61498e Binary files /dev/null and b/archive/version_02/pictures/helenap/scan0002.jpg differ diff --git a/archive/version_02/pictures/helenap/scan0003.jpg b/archive/version_02/pictures/helenap/scan0003.jpg new file mode 100755 index 0000000..123a578 Binary files /dev/null and b/archive/version_02/pictures/helenap/scan0003.jpg differ diff --git a/archive/version_02/pictures/helenap/scan0004.jpg b/archive/version_02/pictures/helenap/scan0004.jpg new file mode 100755 index 0000000..25747e5 Binary files /dev/null and b/archive/version_02/pictures/helenap/scan0004.jpg differ diff --git a/archive/version_02/pictures/helenap/scan0008.jpg b/archive/version_02/pictures/helenap/scan0008.jpg new file mode 100755 index 0000000..2f80ae3 Binary files /dev/null and b/archive/version_02/pictures/helenap/scan0008.jpg differ diff --git a/archive/version_02/pictures/helenap/scan0013.jpg b/archive/version_02/pictures/helenap/scan0013.jpg new file mode 100755 index 0000000..397576f Binary files /dev/null and b/archive/version_02/pictures/helenap/scan0013.jpg differ diff --git a/archive/version_02/pictures/helenap/thumb_scan.jpg b/archive/version_02/pictures/helenap/thumb_scan.jpg new file mode 100755 index 0000000..1c0165f Binary files /dev/null and b/archive/version_02/pictures/helenap/thumb_scan.jpg differ diff --git a/archive/version_02/pictures/helenap/thumb_scan0001.jpg b/archive/version_02/pictures/helenap/thumb_scan0001.jpg new file mode 100755 index 0000000..8e50a9e Binary files /dev/null and b/archive/version_02/pictures/helenap/thumb_scan0001.jpg differ diff --git a/archive/version_02/pictures/helenap/thumb_scan0002.jpg b/archive/version_02/pictures/helenap/thumb_scan0002.jpg new file mode 100755 index 0000000..2f848b8 Binary files /dev/null and b/archive/version_02/pictures/helenap/thumb_scan0002.jpg differ diff --git a/archive/version_02/pictures/helenap/thumb_scan0003.jpg b/archive/version_02/pictures/helenap/thumb_scan0003.jpg new file mode 100755 index 0000000..98ad791 Binary files /dev/null and b/archive/version_02/pictures/helenap/thumb_scan0003.jpg differ diff --git a/archive/version_02/pictures/helenap/thumb_scan0004.jpg b/archive/version_02/pictures/helenap/thumb_scan0004.jpg new file mode 100755 index 0000000..4c943d5 Binary files /dev/null and b/archive/version_02/pictures/helenap/thumb_scan0004.jpg differ diff --git a/archive/version_02/pictures/helenap/thumb_scan0008.jpg b/archive/version_02/pictures/helenap/thumb_scan0008.jpg new file mode 100755 index 0000000..6f00c19 Binary files /dev/null and b/archive/version_02/pictures/helenap/thumb_scan0008.jpg differ diff --git a/archive/version_02/pictures/helenap/thumb_scan0013.jpg b/archive/version_02/pictures/helenap/thumb_scan0013.jpg new file mode 100755 index 0000000..9999fca Binary files /dev/null and b/archive/version_02/pictures/helenap/thumb_scan0013.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton1.jpg b/archive/version_02/pictures/trentong/Trenton1.jpg new file mode 100755 index 0000000..543a7e4 Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton1.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton10.jpg b/archive/version_02/pictures/trentong/Trenton10.jpg new file mode 100755 index 0000000..db45721 Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton10.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton11.jpg b/archive/version_02/pictures/trentong/Trenton11.jpg new file mode 100755 index 0000000..3aa671f Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton11.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton2.jpg b/archive/version_02/pictures/trentong/Trenton2.jpg new file mode 100755 index 0000000..06532ab Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton2.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton3.jpg b/archive/version_02/pictures/trentong/Trenton3.jpg new file mode 100755 index 0000000..f92ab19 Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton3.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton4.jpg b/archive/version_02/pictures/trentong/Trenton4.jpg new file mode 100755 index 0000000..ecbb3ce Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton4.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton5.jpg b/archive/version_02/pictures/trentong/Trenton5.jpg new file mode 100755 index 0000000..42572b1 Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton5.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton6.jpg b/archive/version_02/pictures/trentong/Trenton6.jpg new file mode 100755 index 0000000..d73f6ba Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton6.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton7.jpg b/archive/version_02/pictures/trentong/Trenton7.jpg new file mode 100755 index 0000000..c5d107f Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton7.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton8.jpg b/archive/version_02/pictures/trentong/Trenton8.jpg new file mode 100755 index 0000000..b8e09ac Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton8.jpg differ diff --git a/archive/version_02/pictures/trentong/Trenton9.jpg b/archive/version_02/pictures/trentong/Trenton9.jpg new file mode 100755 index 0000000..3c70da7 Binary files /dev/null and b/archive/version_02/pictures/trentong/Trenton9.jpg differ diff --git a/archive/version_02/pictures/trentong/portrait.jpg b/archive/version_02/pictures/trentong/portrait.jpg new file mode 100755 index 0000000..d4d6a73 Binary files /dev/null and b/archive/version_02/pictures/trentong/portrait.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton1.jpg b/archive/version_02/pictures/trentong/thumb_Trenton1.jpg new file mode 100755 index 0000000..1397b47 Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton1.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton10.jpg b/archive/version_02/pictures/trentong/thumb_Trenton10.jpg new file mode 100755 index 0000000..d72dfb5 Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton10.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton11.jpg b/archive/version_02/pictures/trentong/thumb_Trenton11.jpg new file mode 100755 index 0000000..e2ed5a4 Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton11.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton2.jpg b/archive/version_02/pictures/trentong/thumb_Trenton2.jpg new file mode 100755 index 0000000..f34be37 Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton2.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton3.jpg b/archive/version_02/pictures/trentong/thumb_Trenton3.jpg new file mode 100755 index 0000000..7185523 Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton3.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton4.jpg b/archive/version_02/pictures/trentong/thumb_Trenton4.jpg new file mode 100755 index 0000000..83d68de Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton4.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton5.jpg b/archive/version_02/pictures/trentong/thumb_Trenton5.jpg new file mode 100755 index 0000000..e527246 Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton5.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton6.jpg b/archive/version_02/pictures/trentong/thumb_Trenton6.jpg new file mode 100755 index 0000000..253dbfd Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton6.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton7.jpg b/archive/version_02/pictures/trentong/thumb_Trenton7.jpg new file mode 100755 index 0000000..e4b2f30 Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton7.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton8.jpg b/archive/version_02/pictures/trentong/thumb_Trenton8.jpg new file mode 100755 index 0000000..5fcc427 Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton8.jpg differ diff --git a/archive/version_02/pictures/trentong/thumb_Trenton9.jpg b/archive/version_02/pictures/trentong/thumb_Trenton9.jpg new file mode 100755 index 0000000..0f68189 Binary files /dev/null and b/archive/version_02/pictures/trentong/thumb_Trenton9.jpg differ diff --git a/archive/version_02/random_images.js b/archive/version_02/random_images.js new file mode 100755 index 0000000..18f8402 --- /dev/null +++ b/archive/version_02/random_images.js @@ -0,0 +1,192 @@ +// JavaScript Document containing all random image paths and their captions + +//IMAGES +var image_1 = "./pictures/gerardm/thumb_DSC00163.jpg"; +var image_2 = "./pictures/gerardm/thumb_DSC00171.jpg"; +var image_3 = "./pictures/gerardm/thumb_Gegi FP.01-14 July04.jpg"; +var image_4 = "./pictures/gerardm/thumb_Gegi FP.06-14 July 04.jpg"; +var image_5 = "./pictures/gerardm/thumb_Gegi kruip 2 - 2-03.jpg"; +var image_6 = "./pictures/gerardm/thumb_Gegi with GD.jpg"; +var image_7 = "./pictures/gerardm/thumb_GegiDadSwim12.jpg"; +var image_8 = "./pictures/gerardm/thumb_GegiFC 4-04.jpg"; +var image_9 = "./pictures/gerardm/thumb_GegiQuadNov04.jpg"; +var image_10 = "./pictures/gerardm/thumb_GegiWalk1 - 10-02.jpg"; +var image_12 = "./pictures/helenap/thumb_scan0008.jpg"; +var image_13 = "./pictures/helenap/thumb_scan0013.jpg"; +var image_11 = "./pictures/gerardm/thumb_With the Prossers.jpg"; +var image_12 = "./pictures/helenap/thumb_scan.jpg"; +var image_13 = "./pictures/helenap/thumb_scan0001.jpg"; +var image_14 = "./pictures/helenap/thumb_scan0002.jpg"; +var image_15 = "./pictures/helenap/thumb_scan0003.jpg"; +var image_16 = "./pictures/helenap/thumb_scan0004.jpg"; +var image_17 = "./pictures/helenap/thumb_scan0008.jpg"; +var image_18 = "./pictures/helenap/thumb_scan0013.jpg"; +var image_19 = "./pictures/trentong/thumb_Trenton1.jpg"; +var image_20 = "./pictures/trentong/thumb_Trenton10.jpg"; +var image_21 = "./pictures/trentong/thumb_Trenton11.jpg"; +var image_22 = "./pictures/trentong/thumb_Trenton2.jpg"; +var image_23 = "./pictures/trentong/thumb_Trenton3.jpg"; +var image_24 = "./pictures/trentong/thumb_Trenton4.jpg"; +var image_25 = "./pictures/trentong/thumb_Trenton5.jpg"; +var image_26 = "./pictures/trentong/thumb_Trenton6.jpg"; +var image_27 = "./pictures/trentong/thumb_Trenton7.jpg"; +var image_28 = "./pictures/trentong/thumb_Trenton8.jpg"; +var image_29 = "./pictures/trentong/thumb_Trenton9.jpg"; + + +var num_images = 29; +//ENDIMAGES + + +//LINKS +var link_gerardm = "gerardm.htm"; +var link_trentong = "trentong.htm"; +var link_helenap = "helenap.htm"; +//ENDLINKS + +//CAPTIONS [1] is english caption [2] is german caption +var caption_1 = new Array(); + caption_1[0] = "DSC00163.jpg"; + caption_1[1] = "Me in Dad’s office sitting on my own on a chair – this was the first time I ever sat on my own on a chair"; + caption_1[2] = ""; + +var caption_2 = new Array(); + caption_2[0] = "DSC00171.jpg"; + caption_2[1] = "Me in Dad’s office sitting on my own on a chair – this was the first time I ever sat on my own on a chair"; + caption_2[2] = ""; + +var caption_3 = new Array(); + caption_3[0] = "Gegi%20FP.01-14%20July04.jpg"; + caption_3[1] = "Me in an assessment in Belgium"; + caption_3[2] = ""; + +var caption_4 = new Array(); + caption_4[0] = "Gegi%20FP.06-14%20July%2004.jpg"; + caption_4[1] = "Another one of me in an assessment in Belgium"; + caption_4[2] = ""; + +var caption_5 = new Array(); + caption_5[0] = "Gegi%20kruip%202%20-%202-03.jpg"; + caption_5[1] = "Me creeping at home in Feb 2003"; + caption_5[2] = ""; + +var caption_6 = new Array(); + caption_6[0] = "Gegi%20with%20GD.jpg"; + caption_6[1] = "Me and my family with Glenn Doman, founder of the Institutes in Philadelphia"; + caption_6[2] = ""; + +var caption_7 = new Array(); + caption_7[0] = "GegiDadSwim12.jpg"; + caption_7[1] = "Me swimming with Dad in 2004"; + caption_7[2] = ""; + +var caption_8 = new Array(); + caption_8[0] = "GegiFC%204-04.jpg"; + caption_8[1] = "Me writing messages to Mum with Facilitated Communication 2004"; + caption_8[2] = ""; + +var caption_9 = new Array(); + caption_9[0] = "GegiQuadNov04.jpg"; + caption_9[1] = "Me learning the Quad position in 2004"; + caption_9[2] = ""; + +var caption_10 = new Array(); + caption_10[0] = "GegiWalk1%20-%2010-02.jpg"; + caption_10[1] = "Me learning to walk on my track 2002"; + caption_10[2] = ""; + +var caption_11 = new Array(); + caption_11[0] = "With%20the%20Prossers.jpg"; + caption_11[1] = "Me with Clara and the Prossers in Philadelphia – Helena is also Brain-injured"; + caption_11[2] = ""; + +var caption_12 = new Array(); + caption_12[0] = "can.jpg"; + caption_12[1] = "Helena 7years old, these are Helenas first smiles!"; + caption_12[2] = ""; + +var caption_13 = new Array(); + caption_13[0] = "scan0001.jpg"; + caption_13[1] = "Helena 7years old, these are Helenas first smiles!"; + caption_13[2] = ""; + +var caption_14 = new Array(); + caption_14[0] = "scan0002.jpg"; + caption_14[1] = "Helena 10 years, ready for autumn snow"; + caption_14[2] = ""; + +var caption_15 = new Array(); + caption_15[0] = "scan0003.jpg"; + caption_15[1] = "In Singapore, during first ABR evaluation, Helena 11 years"; + caption_15[2] = ""; + +var caption_16 = new Array(); + caption_16[0] = "scan0004.jpg"; + caption_16[1] = "With mum Angela, enjoying a joke, and learning to laugh for the first time, Helena 10 years."; + caption_16[2] = ""; + +var caption_17 = new Array(); + caption_17[0] = "scan0008.jpg"; + caption_17[1] = ""; + caption_17[2] = ""; + +var caption_18 = new Array(); + caption_18[0] = "scan0013.jpg"; + caption_18[1] = ""; + caption_18[2] = ""; + +var caption_19 = new Array(); + caption_19[0] = "Trenton1.jpg"; + caption_19[1] = "Trenton aged 7, playing baseball in his wheelchair"; + caption_19[2] = ""; + +var caption_20 = new Array(); + caption_20[0] = "Trenton10.jpg"; + caption_20[1] = "Trenton aged 5 learning to walk under the overhead ladder"; + caption_20[2] = ""; + +var caption_21 = new Array(); + caption_21[0] = "Trenton11.jpg"; + caption_21[1] = "Middle photo: Trenton aged 2,5 years learning to crawl in his anti-roll device. Photo on right bottom: Trenton aged 2 with his left eye patched."; + caption_21[2] = ""; + +var caption_22 = new Array(); + caption_22[0] = "Trenton2.jpg"; + caption_22[1] = ""; + caption_22[2] = ""; + +var caption_23 = new Array(); + caption_23[0] = "Trenton3.jpg"; + caption_23[1] = "Trenton aged 6 with his oldest brother Jeremy"; + caption_23[2] = ""; + +var caption_24 = new Array(); + caption_24[0] = "Trenton4.jpg"; + caption_24[1] = "Becci with the triplets:Sydney, Trenton and Mikayla aged 6"; + caption_24[2] = ""; + +var caption_25 = new Array(); + caption_25[0] = "Trenton5.jpg"; + caption_25[1] = "Trenton aged 5 in his anti-gravity harness"; + caption_25[2] = ""; + +var caption_26 = new Array(); + caption_26[0] = "Trenton6.jpg"; + caption_26[1] = "Trenton aged 7"; + caption_26[2] = ""; + +var caption_27 = new Array(); + caption_27[0] = "Trenton7.jpg"; + caption_27[1] = "Trenton aged 7, playing baseball in his wheelchair"; + caption_27[2] = ""; + +var caption_28 = new Array(); + caption_28[0] = "Trenton8.jpg"; + caption_28[1] = ""; + caption_28[2] = ""; + +var caption_29 = new Array(); + caption_29[0] = "Trenton9.jpg"; + caption_29[1] = "Trenton aged 5 in his anti-gravity harness"; + caption_29[2] = ""; + //ENDCAPTIONS \ No newline at end of file diff --git a/production/contactus.php b/production/contactus.php new file mode 100755 index 0000000..2d502f6 --- /dev/null +++ b/production/contactus.php @@ -0,0 +1,11 @@ +attr('title','The International Jairus Society : Contact Us'); +$page->content('contactus.php'); +$page->process(); + +?> \ No newline at end of file diff --git a/production/guestbook.php b/production/guestbook.php new file mode 100755 index 0000000..d6308d3 --- /dev/null +++ b/production/guestbook.php @@ -0,0 +1,73 @@ +attr('title','The International Jairus Society : Guestbook'); +$page->content('guestbook.php'); + +# produces a captcha for the guestbook form +# create the captcha object to display one and validate one if a post +# is being added +$captcha = new CaptchasDotNet('bramey', 'vgcR8s11vH8bQZIsPISiiCCu3buXgCVkV4AOdRmV', + 'site/data/captchas','1800', + 'abcdefghkmnopqrstuvwxyz','6','200','80'); + +# gets the guestbook data for this language +$file_name = "site/data/guestbook_".$page->attr('lang').".xml"; +$file = file_get_contents($file_name); +$xml = new SimpleXMLElement($file); + +# if we should add an entry to the list +if(isset($_POST['cmd']) && $_POST['cmd'] == 'add') +{ + # check that captcha worked + # Check the random string to be valid and return an error message otherwise. + if(!$captcha->validate($_POST['captcha_random'])) + $page->addError('You cannot use the same captcha image twice, please try again.'); + # Check, that the right CAPTCHA password has been entered and + # return an error message otherwise. + elseif (!$captcha->verify($_POST['captcha_password'])) + $page->addError('You entered the wrong text from the image, please try again.'); + # else, we are OK and can add the message + else + { + # add the message to the xml + $last_id = $xml->entry[count($xml->entry) - 1]['id']; + $new_entry = $xml->addChild('entry'); + $new_entry->addAttribute('id',$last_id + 1); + $new_entry->addChild('date',date("n/j/Y")); + $new_entry->addChild('name',htmlentities($_POST['name'])); + $new_entry->addChild('message',htmlentities($_POST['message'])); + + $page->addMessage('Entry successfully added!'); + + # update the guestbook file + file_put_contents($file_name,$xml->asXML()); + } +} + +# the page to display of guestbook entries +$per_page = 7; +$gb_page = isset($_GET['page']) ? $_GET['page'] : 1; +# we start at the back of the list since the latest entries +# are last in the file +$start_at = (count($xml->entry) - 1) - (($gb_page - 1) * $per_page); +$stop_at = (($start_at - $per_page) < 0) ? 0 : $start_at - $per_page + 1; + +# get the entries for this page and determine if +# there should be a link to newer and/or older posts +$entries = $xml->entry; +$older = $stop_at != 0 ? $gb_page + 1 : 0; +$newer = $xml->entry[$start_at + 1] ? $gb_page - 1 : 0; + +$page->data('captcha',$captcha); +$page->data('guestbook',$entries); +$page->data('older',$older); +$page->data('newer',$newer); +$page->data('start_at',$start_at); +$page->data('stop_at',$stop_at); +$page->process(); + +?> \ No newline at end of file diff --git a/production/home.php b/production/home.php new file mode 100755 index 0000000..beeb8c0 --- /dev/null +++ b/production/home.php @@ -0,0 +1,10 @@ +attr('title','The International Jairus Society : Home'); +$page->process(); + +?> \ No newline at end of file diff --git a/production/index.php b/production/index.php new file mode 100755 index 0000000..ac430fd --- /dev/null +++ b/production/index.php @@ -0,0 +1,23 @@ +attr('title','The International Jairus Society : Language Choice'); +$page->attr('lang','en'); +$page->display('header',false); +$page->display('footer',false); +$page->display('menu',false); + +$page->content('intro.php'); +$page->useCSSFile('intro.css'); + +$page->process(); + +?> \ No newline at end of file diff --git a/production/legal.php b/production/legal.php new file mode 100755 index 0000000..a0db199 --- /dev/null +++ b/production/legal.php @@ -0,0 +1,25 @@ +attr('title','The International Jairus Society : Legal : United States'); + $page->content('legal_us.php'); + break; + case 'austria': + $page->attr('title','The International Jairus Society : Legal : Austria'); + $page->content('legal_austria.php'); + break; + default: + $page->attr('title','The International Jairus Society : Legal'); + $page->content('legal.php'); + break; +} + +$page->process(); + +?> \ No newline at end of file diff --git a/production/links.php b/production/links.php new file mode 100755 index 0000000..3ff562f --- /dev/null +++ b/production/links.php @@ -0,0 +1,11 @@ +attr('title','The International Jairus Society : Links'); +$page->content('links.php'); +$page->process(); + +?> \ No newline at end of file diff --git a/production/ourfamilies.php b/production/ourfamilies.php new file mode 100755 index 0000000..105ae69 --- /dev/null +++ b/production/ourfamilies.php @@ -0,0 +1,29 @@ +attr('title','The International Jairus Society : Our Families : Gerard Montocchio'); + $page->content('ourfamilies_gerardm.php'); + break; + case 'trentong': + $page->attr('title','The International Jairus Society : Our Families : Trenton Gruber'); + $page->content('ourfamilies_trentong.php'); + break; + case 'helenap': + $page->attr('title','The International Jairus Society : Our Families : Helena Prosser'); + $page->content('ourfamilies_helenap.php'); + break; + default: + $page->attr('title','The International Jairus Society : Our Families'); + $page->content('ourfamilies.php'); + break; +} + +$page->process(); + +?> \ No newline at end of file diff --git a/production/ourmission.php b/production/ourmission.php new file mode 100755 index 0000000..3666f3c --- /dev/null +++ b/production/ourmission.php @@ -0,0 +1,11 @@ +attr('title','The International Jairus Society : Our Mission'); +$page->content('ourmission.php'); +$page->process(); + +?> \ No newline at end of file diff --git a/production/php/.htaccess b/production/php/.htaccess new file mode 100644 index 0000000..546bb3c --- /dev/null +++ b/production/php/.htaccess @@ -0,0 +1 @@ +Options -indexes \ No newline at end of file diff --git a/production/php/classes/CaptchasDotNet.php b/production/php/classes/CaptchasDotNet.php new file mode 100755 index 0000000..329525e --- /dev/null +++ b/production/php/classes/CaptchasDotNet.php @@ -0,0 +1,312 @@ + and +// Felix Holderied +// This file is in the public domain. +// +// ChangeLog: +// +// 2006-08-16: New optional features integrated +// +// 2006-03-01: Only delete the random string from the repository in +// case of a successful verification. +// +// 2006-02-14: Add new image() method returning an HTML/JavaScript +// snippet providing a fault tolerant service. +// +// 2005-06-02: Initial version. +// + +class CaptchasDotNet +{ + function CaptchasDotNet ($client, $secret, + $random_repository = '/tmp/captchasnet-random-strings', + $cleanup_time = 3600, + $alphabet = 'abcdefghijklmnopqrstuvwxyz', + $letters = 6, + $width = 240, + $height = 80 + ) + { + $this->__client = $client; + $this->__secret = $secret; + $this->__random_repository = $random_repository; + $this->__cleanup_time = $cleanup_time; + $this->__time_stamp_file = $random_repository . '/__time_stamp__'; + $this->__alphabet = $alphabet; + $this->__letters = $letters; + $this->__width = $width; + $this->__height = $height; + } + + function __random_string () + { + // The random string shall consist of small letters, big letters + // and digits. + $letters = "abcdefghijklmnopqrstuvwxyz"; + $letters .= strtoupper ($letters) + "0123456789"; + + // The random starts out empty, then 40 random possible characters + // are appended. + $random_string = ''; + for ($i = 0; $i < 40; $i++) + { + $random_string .= $letters{rand (0, strlen ($letters) - 1)}; + } + + // Return the random string. + return $random_string; + } + + // Create a new random string and register it. + function random () + { + // If the repository directory is does not yet exist, create it. + if (!is_dir ($this->__random_repository)) + { + mkdir ($this->__random_repository); + } + + // If the time stamp file does not yet exist, create it. + if (!is_file ($this->__time_stamp_file)) + { + touch ($this->__time_stamp_file); + } + + // Get the current time. + $now = time (); + + // Determine the time, before which to remove random strings. + $cleanup_time = $now - $this->__cleanup_time; + + // If the last cleanup is older than specified, cleanup the + // directory. + if (filemtime ($this->__time_stamp_file) < $cleanup_time) + { + $handle = opendir ($this->__random_repository); + while (true) + { + $filename = readdir ($handle); + if (!$filename) + { + break; + } + if ($filename != '.' && $filename != '..') + { + $filename = $this->__random_repository . '/' . $filename; + if (filemtime ($filename) < $cleanup_time) + { + unlink ($filename); + } + } + } + closedir ($handle); + + touch ($this->__time_stamp_file); + } + + // loop until a valid random string has been found and registered, + // but at most 20 times. If no valid random has been found during + // that time, there is something really wrong. Also show the error + // in the last run. + for ($remaining = 20; $remaining > 0; $remaining--) + { + // generate a new random string. + $random = $this->__random_string (); + + // open a file with the corresponding name in the repository + // directory in such a way, that the creation fails, when the + // file already exists. That should be near to impossible with + // good seeding of the random number generator, but it's better + // to play safe. If this is the last run, show the possible + // error message. + $filename = $this->__random_repository . '/' . $random; + + if ($remaining == 1) + { + $file = fopen ($filename, 'x'); + } + else + { + $file = @fopen ($filename, 'x'); + } + + if ($file) + { + fclose ($file); + break; + } + + // if the file already existed, rerun the loop to try the next + // string. + } + + // return the successfully registered random string. + $this->__random = $random; + return $random; + } + + // + // Generates image-URL Parameters are only atached if different from default + // + function image_url ($random = False, $base = 'http://image.captchas.net/') + { + if (!$random) + { + $random = $this->__random; + } + $image_url = $base; + $image_url .= '?client=' . $this->__client; + $image_url .= '&random=' . $random; + if ($this->__alphabet!='abcdefghijklmnopqrstuvwxyz') {$image_url .= '&alphabet=' . $this->__alphabet;}; + if ($this->__letters!=6) {$image_url .= '&letters=' . $this->__letters;}; + if ($this->__width!=240) {$image_url .= '&width=' . $this->__width;}; + if ($this->__height!=80) {$image_url .= '&height=' . $this->__height;}; + return $image_url; + } + + // + // Same as image_url but without width and height + // + function audio_url ($random = False, $base = 'http://audio.captchas.net/') + { + if (!$random) + { + $random = $this->__random; + } + $audio_url = $base; + $audio_url .= '?client=' . $this->__client; + $audio_url .= '&random=' . $random; + if ($this->__alphabet!='abcdefghijklmnopqrstuvwxyz') {$audio_url .= '&alphabet=' . $this->__alphabet;}; + if ($this->__letters!=6) {$audio_url .= '&letters=' . $this->__letters;}; + return $audio_url; + } + + // + // Generates complete html-sample with javascript to reload image from + // backup server + // + function image ($random = False, $id = 'captchas.net') + { + $image = <<The Captcha image + +EOT; + $image = str_replace ('@HEIGHT@', $this->__height, $image); + $image = str_replace ('@WIDTH@', $this->__width, $image); + $image = str_replace ('@ID@', $id, $image); + $image = str_replace ('@URL@', $this->image_url (), $image); + return $image; + } + + function validate ($random) + { + $this->__random = $random; + + $file_name = $this->__random_repository . '/' . $random; + + // Find out, whether the file exists + $result = is_file ($file_name); + + // if the file exists, remember it. + if ($result) + { + $this->__random_file = $file_name; + } + + // the random string was valid, if and only if the corresponding + // file existed. + return $result; + } + + function verify ($input, $random = False) + { + if (!$random) + { + $random = $this->__random; + } + $password_letters = $this->__alphabet; + $password_length = $this->__letters; + + // If the user input has the wrong lenght, it can't be correct. + if (strlen ($input) != $password_length) + { + return False; + } + + // Calculate the MD5 digest of the concatenation of secret key and + // random string. The digest is a hex string. + $encryption_base = $this->__secret . $random; + // This extension is needed for secure use of optional parameters + // In case of standard use we do not append the values, to be + // compatible to existing implementations + if(($password_letters != 'abcdefghijklmnopqrstuvwxyz') || ($password_length != '6')) + { + $encryption_base = $encryption_base . ':' . $password_letters . ':' . $password_length; + } + $digest = md5 ($encryption_base); + + // Check the password according to the rules from the first + // positions of the digest. + for ($pos = 0; $pos < $password_length; $pos++) + { + $letter_num + = hexdec (substr ($digest, 2 * $pos, 2)) % strlen ($password_letters); + + // If the letter at the current position is wrong, the user + // input isn't correct. + if ($input[$pos] != $password_letters[$letter_num]) + { + return False; + } + } + + // if the file exists, remove it. + if ($this->__random_file) + { + unlink ($this->__random_file); + unset ($this->__random_file); + } + + // The user input was correct. + return True; + } + +} + +?> diff --git a/production/php/classes/page.php b/production/php/classes/page.php new file mode 100755 index 0000000..c416942 --- /dev/null +++ b/production/php/classes/page.php @@ -0,0 +1,252 @@ +absPath = preg_replace('/^(.*)\/\w+\.php$/','$1',$_SERVER['SCRIPT_FILENAME']).'/'; + $this->absURL = preg_replace('/^(.*)\/\w+\.php$/','$1',$_SERVER['SCRIPT_NAME']).'/'; + $this->site = 'site/'; + $this->templates = $this->site; + $this->js = $this->site . 'javascript/'; + $this->css = $this->site . 'css/'; + $this->graphics = $this->site . 'graphics/'; + + # the page language is automatically pulled from a language + # cookie names 'lang' + if(isset($_GET['lang'])) + { + $this->lang = $_GET['lang']; + setcookie('lang',$_GET['lang'],time() + 60*60*24*365); + + # if the lang parameter is empty, we want to get rid of the cookie + if(empty($_GET['lang'])) + unset($_COOKIE['lang']); + } + else if(isset($_COOKIE['lang']) && !empty($_COOKIE['lang'])) + $this->lang = $_COOKIE['lang']; + else + $this->lang = 'en'; + + $this->templates .= $this->lang .'/'; + $this->graphics .= $this->lang .'/'; + + # default values for title and pageName + $this->title = 'Welcome!'; + $this->pageName = preg_replace('/^.*\/(\w+)\.php$/','$1',$_SERVER['SCRIPT_NAME']); + + # elements of our page + $this->header = $this->templates . 'header.php'; + $this->footer = $this->templates . 'footer.php'; + $this->content = $this->templates . 'home.php'; + + # by default, the header, footer and content are all displayed + $this->display = array( + 'header' => true, + 'footer' => true, + 'content' => true, + 'menu' => true + ); + + # load default css and js files + array_push($this->cssFiles,$this->css . '/default.css'); + array_push($this->jsFiles,$this->js . '/default.js'); + } + + # automatically load all css files from folder + public function autoloadCSS() + { + # find all CSS files in css folder + $this->cssFiles = preg_grep('/\.css$/',scandir($this->absPath . $this->css)); + + # make each path relative to absURL + foreach($this->cssFiles as $key => $value) + $this->cssFiles[$key] = $this->css . $value; + } + + # automatically load all javascript files from folder + public function autoloadJS() + { + # find all js files in javascript folder + $this->jsFiles = preg_grep('/\.js$/',scandir($this->absPath . $this->js)); + + # make each path relative to absURL + foreach($this->jsFiles as $key => $value) + $this->jsFiles[$key] = $this->js . $value; + } + + # processes all or part of the page + public function process($part = NULL) + { + # it is possible to process the header or footer by + # itself or just the content, or the entire page + if($part == 'header') + $this->_processHeader(); + else if($part == 'footer') + $this->_processFooter(); + else if($part == 'content') + $this->_processContent(); + else + $this->_processPage(); + } + + # adds a js file to ones already pulled from standard + # folder + public function addJSFile($new_file) + { + # add file with relative path + array_push($this->jsFiles, $this->js . $new_file); + } + + # replaces all other js files with this one + public function useJSFile($new_file) + { + $this->jsFiles = array($this->js . $new_file); + } + + # adds a css file to ones already pulled from standard folder + public function addCSSFile($new_file) + { + # add file with relative path + array_push($this->cssFiles, $this->css . $new_file); + } + + # replaces all other css files with this one + public function useCSSFile($new_file) + { + $this->cssFiles = array($this->css . $new_file); + } + + # adds an error message to the array + public function addError($err) + { + array_push($this->errors,$err); + } + + # adds non-error message to the array + public function addMessage($msg) + { + array_push($this->messages,$msg); + } + +################################################################################ +# SETTERS/GETTERS + # you can pass data to the template via this variable + public function data($key,&$value = NULL) + { + if(!is_null($value)) + $this->data[$key] = $value; + else + return($this->data[$key]); + } + # you can turn off parts of the page by setting it's + # corresponding display element to false + public function display($page_element,$value = NULL) + { + if(!is_null($value)) + $this->display[$page_element] = $value; + else + return($this->display[$page_element]); + } + # setter/getter for header file + public function header($new_header = NULL) + { + if(!is_null($new_header)) + $this->header = $this->templates . $new_header; + else + return $this->header; + } + + # setter/getter for footer file + public function footer($new_footer = NULL) + { + if(!is_null($new_footer)) + $this->footer = $this->templates . $new_footer; + else + return $this->footer; + } + + # setter/getter for content file + public function content($new_content = NULL) + { + if(!is_null($new_content)) + $this->content = $this->templates . $new_content; + else + return $this->content; + } + + # accessor/modifier for page attributes + public function attr($attr,$value = NULL) + { + # the case when we are setting an attribute + if(!is_null($value)) + { + switch($attr) + { + case 'lang': + $this->lang = $value; + $this->templates = $this->site; + $this->templates .= $this->lang .'/'; + $this->graphics .= $this->lang .'/'; + $this->header = $this->templates . 'header.php'; + $this->footer = $this->templates . 'footer.php'; + $this->content = $this->templates . 'home.php'; + break; + case 'title': + $this->title = $value; + break; + default: + break; + } + } + # the case when we are getting an attribute + else + { + switch($attr) + { + case 'lang': + return $this->lang; + break; + case 'title': + return $this->title; + break; + default: + break; + } + } + } + +################################################################################ +# PRIVATE FUNCTIONS + private function _processPage() + { + include $this->absPath . $this->site . 'layout/html.php'; + } + private function _processHeader() + { + include $this->header; + } + private function _processFooter() + { + include $this->footer; + } + private function _processContent() + { + include $this->content; + } +} + +?> \ No newline at end of file diff --git a/production/php/functions/func_filesystem.php b/production/php/functions/func_filesystem.php new file mode 100755 index 0000000..cba9c3c --- /dev/null +++ b/production/php/functions/func_filesystem.php @@ -0,0 +1,150 @@ + + + $element + +
"; + $folderhtml .= filesys_get_folder_tree("$path/$element"); + $folderhtml .= " +
\n\n"; + } + else + { + # get the size of this file in kilobytes + $file_size_kb = intval(filesize($path.'/'.$element) / 1024); + $folderhtml .= " + + $element + ($file_size_kb Kb)
\n"; + } + } + } + + return $folderhtml; +} + +################################################ FUNCTION: filesys_dirs_present # +# returns: true or false +# parameters: path to directory to inspect, pattern to match directory name +# against +function filesys_dirs_present($path,$pattern = "/.*/") +{ + # make sure the path passed here is really a directory we can't + # check anything but a directory, since only directory will contain + # other directories, duh + $handle = is_dir($path) ? opendir($path) : NULL ; + if(empty($handle)) + { return(NULL); } + + # set through each child in this directory and see if the child + # is directory but not the parent or current directory + # readdir returns FALSE when no children are left to inspect + while($child = readdir($handle) and $child !== false) + { + # make sure each is_dir call is not using cached information + # from last is_dir check + clearstatcache(); + # check if this child is directory and whether it + # matches the user given pattern or not + if(is_dir($path.'/'.$child) + and ($child !== '..') + and ($child !== '.') + and (preg_match($pattern,$child)) ) + { + # we can return true with the first matching folder we find + # this is an OR operation + return(true); + } + } + + # if we get here, no matching folders were found, so none exist + # so we return false + return(false); +} + +######################################### FUNCTION: filesys_get_wanted_children # +# returns: array of wanted dir children +# parameters: 1) path to directory; 2) command to remove [files,folders] +# 3) a pattern to match folder/file names against +function filesys_get_wanted_children($path,$cmd,$pattern = "/.*/") +{ + # the cmd can be passed as either all cap or not, so conform it + # here to lower case + $cmd = strtolower($cmd); + + # fill an array full of the directory children, but only, of course if + # the passed path is really to a directory + $children = is_dir($path) ? scandir($path) : NULL ; + if(empty($children)) + { return(NULL); } + + # remove the current and parent directories + $children = preg_grep("/^\.{1,2}$/",$children,PREG_GREP_INVERT); + # get only the children that match the pattern + $children = preg_grep($pattern,$children); + + # if files are to be removed, remove them + if($cmd == 'files') + { + foreach($children as $child) + { + if(!is_dir($path.'/'.$child)) + { array_splice($children,array_search($child,$children),1); } + } + } + # if folders are to be removed, remove them + else if($cmd == 'folders') + { + foreach($children as $child) + { + if(is_dir($path.'/'.$child)) + { array_splice($children,array_search($child,$children),1); } + } + } + + # return the array of directory children, free of the bad little ones + return($children); +} + +?> \ No newline at end of file diff --git a/production/php/functions/func_images.php b/production/php/functions/func_images.php new file mode 100755 index 0000000..f94c860 --- /dev/null +++ b/production/php/functions/func_images.php @@ -0,0 +1,50 @@ + $value) + { + $folder_info[$key]['name'] = $value; + $folder_info[$key]['pictures'] = filesys_get_wanted_children($value,'folders',$patt); + } + + # get pictures until we have enough! + for($k = 0; $k < $num; $k++) + { + $folder = $folder_info[array_rand($folder_info)]; + $image = $folder['pictures'][array_rand($folder['pictures'])]; + array_push($images,$folder['name'].'/'.$image); + } + + return($images); +} + +################################################# FUNCTION: images_print_strip # +function images_print_strip($images,$absPath) +{ + print "
\n"; + foreach($images as $image) + { + $image = str_replace($absPath,'',$image); + print "\n"; + } + print "
"; +} + +?> \ No newline at end of file diff --git a/production/site/.htaccess b/production/site/.htaccess new file mode 100644 index 0000000..546bb3c --- /dev/null +++ b/production/site/.htaccess @@ -0,0 +1 @@ +Options -indexes \ No newline at end of file diff --git a/production/site/css/default.css b/production/site/css/default.css new file mode 100755 index 0000000..a0f3448 --- /dev/null +++ b/production/site/css/default.css @@ -0,0 +1,324 @@ +/* CSS Document for the Jairus Society*/ + +/*************************************** + ELEMENT STYLES + ***********************************/ +body { + margin: 0px; + font-family: "Futura Lt BT", Arial; + background: #FFCC33; +} +h1 { + margin: 0px; + padding: 0px; +} +h1.en { + background: url(/site/graphics/en/logo_en.jpg) no-repeat center bottom; +} +h1.de { + background: url(/site/graphics/de/logo_de.jpg) no-repeat center bottom; +} +h1 a { + position: relative; + z-index: 2; + display: block; + text-indent: -10000px; + width: 740px; + height: 210px; + margin: 0px auto; +} +h2 { + margin: 0px 0px 10px; + font-size: 1.4em; + color: #3366FF; + font-family: "Futura Lt BT", "Arial Black", "Arial"; +} +h3 { + font-size: 1.2em; + margin: 20px 0px 0px; +} +h4 { + margin: 20px 0px 0px; +} +p { + margin: 5px 0px 10px; +} +p table { + border-spacing: 0px; +} + +div.column { + float: left; + margin: 0px 20px; +} +form { + margin: 0px 10px; +} +label { + position: relative; + display: block; + margin: 5px 0px; + width: 150px; +} +label.wide { + width: 260px; +} +label input { + position: absolute; + left: 100%; +} +label textarea { +} + +/*************************************** + HEADER STYLES + ***********************************/ +#header { + margin: 0px; + width: 100%; + background: url(/site/graphics/horz_drop_shadow.jpg) repeat-x center center; +} +#family-div { + position: absolute; + top: 115px; + right: 40px; + width: 100%; + text-align: center; +} + #family-div div { + position: relative; + z-index: 5; + width: 600px; + margin: 0px auto; + } + #family-div img { + float: left; + height: 80px; + padding: 2px; + background: transparent; + border: 1px #3366FF solid; + margin: 0px 10px; + } + #family-div p { + float: left; + text-align: left; + vertical-align: top; + width: 400px; + } +#menu { + position: relative; + z-index: 4; + margin: 10px auto 0px; + display: block; +} + #menu ul { + margin: 0px; + padding: 0px; + list-style-type: none; + text-align: center; + height: 22px; + } + #menu li { + position: relative; + z-index: 4; + display: inline; + padding: 0px; + margin: 0px; + } + #menu a { + padding: 3px 8px 14px; + display: inline; + text-decoration: none; + color: #0079BE; + font-weight: bold; + font-size: 0.9em; + } + #menu a:hover { + background: #0079BE; + color: white; + } + #menu a.active { + background: #0079BE; + color: white; + } + +/*************************************** + CONTENT STYLES + ***********************************/ +#content { + position: relative; + top: -12px; +} + #content table { + width: 780px; + margin: 0px auto; + border-spacing: 0px; + border-collapse: collapse; + } + #content table td { + padding: 0px; + } + #content table td.content { + padding: 10px; + text-align: left; + } + #content table td.top_left_corn { background: url("/site/graphics/top_left_corn.gif") no-repeat bottom right; } + #content table td.top_right_corn { background: url("/site/graphics/top_right_corn.gif") no-repeat bottom left; } + #content table td.bottom_left_corn { background: url("/site/graphics/bottom_left_corn.gif") no-repeat top right; } + #content table td.bottom_right_corn { background: url("/site/graphics/bottom_right_corn.gif") no-repeat top left; } + #content table td.vert_left { + background: url("/site/graphics/vert_border_left.gif") repeat-y right; + width: 14px; + } + #content table td.vert_right { + background: url("/site/graphics/vert_border_right.gif") repeat-y left; + width: 14px; + } + #content table td.horz_top { + background: url("/site/graphics/horz_border_top.gif") repeat-x bottom; + height: 14px; + } + #content table td.horz_bottom { + background: url("/site/graphics/horz_border_bottom.gif") repeat-x top; + height: 14px; + } + +#errors { + background: red; + color: white; + border: 1px black solid; +} + #errors ul { + margin: 6px auto; + list-style-type: none; + } +#messages { + background: white; + border: 1px black solid; +} + #messages ul { + margin: 6px auto; + list-style-type: none; + } + +/*************************************** + FOOTER STYLES + ***********************************/ +#footer { + width: 100%; + text-align: center; +} + +/*************************************** + FAMILY STYLES + ***********************************/ +img.intext-img-right, img.intext-img-left { + margin: 10px; + padding: 8px; + border: solid #3366CC 1px; + background: #FFCC33; +} +img.intext-img-right { + float: right; +} +img.intext-img-left { + float: left; +} +div.family, div.family_alt { + position: relative; + margin: 0px; + height: 165px; +} +div.family h3 { + position: absolute; + left: 138px; + padding: 0px 10px 0px 50px; + border: solid #3366CC; + border-width: 0px 0px 1px 0px; +} +div.family_alt h3 { + position: absolute; + right: 138px; + padding: 0px 50px 0px 10px; + border: solid #3366CC; + border-width: 0px 0px 1px 0px; +} +div.family p { + position: relative; + top: 60px; + margin-top: 0px; +} +div.family_alt p { + position: relative; + top: 60px; + text-align: right; + margin-top: 0px; +} +div.connection_lines { + margin: 0px; +} + div.conn_left { + position: relative; + left: 30px; + width: 90%; + height: 20px; + border: solid #3366CC; + border-width: 0px 0px 1px 1px; + } + div.conn_left_alt { + position: relative; + left: 30px; + width: 90%; + height: 20px; + border: solid #3366CC; + border-width: 1px 0px 0px 1px; + } + div.conn_right { + position: relative; + left: 30px; + width: 90%; + height: 20px; + border-right: 1px solid #3366CC; + } +img.portrait { + float: left; + margin: 0px 10px 0px 0px; + padding: 8px; + border: solid #3366CC 1px; + background: #FFCC33; +} +img.portrait_alt { + float: right; + margin: 0px 0px 0px 10px; + padding: 8px; + border: solid #3366CC 1px; + background: #FFCC33; +} + +/*************************************** + GUESTBOOK STYLES + ***********************************/ +h4.gb_header { + padding: 2px 2px 3px 0px; + margin-bottom: 10px; + border-width: 0px 0px 1px 0px; + border-style: solid; + border-color: #3366CC; + font-size: 12px; +} +p.gb_text { + margin-top: 0px; + font-size: 14px; + color: #333333; +} +div.gb_pager { + display: block; + height: 30px; + clear: both; +} +div.gb_newer { + float: left; +} +div.gb_older { + float: right; +} \ No newline at end of file diff --git a/production/site/css/intro.css b/production/site/css/intro.css new file mode 100755 index 0000000..40e705b --- /dev/null +++ b/production/site/css/intro.css @@ -0,0 +1,85 @@ +/* CSS for Jasoc.org Intro page (language selection) */ + +body { + margin: 0px; + background: #FFCC33; + font-family: "Futura Md BT", "Arial Black"; +} +h1 { + position: absolute; + display: none; +} +a:link { + color: #3366FF; + text-decoration: none; +} +a:visited { + color: #3366FF; + text-decoration: none; +} +a:hover { + color: #FFFFFF; + text-decoration: none; +} +#content{ + padding: 0px; + width: 780px; + margin: 0px auto; + background: url(/site/graphics/orange_circle.jpg) no-repeat center center; +} + #content table { + border-spacing: 0px; + } + #content table td.content { + width: 100%; + } + #content td { + padding: 0px; + } +#language_choice { + height: 500px; + background: url(/site/graphics/intro_logo-en.jpg) no-repeat center center; + font-size: 24px; +} +#german-intermediate { + height: 500px; + background: url(/site/graphics/intro_logo-de.jpg) no-repeat center center; + font-size: 24px; +} + #language_choice ul { + position: relative; + top: 230px; + list-style-type: none; + margin: 0px; + padding: 0px; + text-align: center; + } + #german-intermediate ul { + position: relative; + top: 215px; + list-style-type: none; + margin: 0px; + padding: 0px; + text-align: center; + } + #language_choice li, #german-intermediate li { + margin: 0px; + padding: 0px; + text-align: center; + } + #language_choice li.english { + float: left; + margin-left: 86px; + } + #german-intermediate li.left { + float: left; + margin-left: 50px; + } + #language_choice li.german { + float: right; + margin-right: 86px; + } + #german-intermediate li.right { + float: right; + margin-right: -40px; + } \ No newline at end of file diff --git a/production/site/data/.htaccess b/production/site/data/.htaccess new file mode 100644 index 0000000..896fbc5 --- /dev/null +++ b/production/site/data/.htaccess @@ -0,0 +1,2 @@ +Order deny,allow +Deny from all \ No newline at end of file diff --git a/production/site/data/captchas/__time_stamp__ b/production/site/data/captchas/__time_stamp__ new file mode 100755 index 0000000..e69de29 diff --git a/production/site/data/captchas/abcplw8xatfcuram6b4bj67q456osrwssy95l8tm b/production/site/data/captchas/abcplw8xatfcuram6b4bj67q456osrwssy95l8tm new file mode 100644 index 0000000..e69de29 diff --git a/production/site/data/captchas/erxh75klpm652o3g2wftp2hlvqgrf3wkllsig4tw b/production/site/data/captchas/erxh75klpm652o3g2wftp2hlvqgrf3wkllsig4tw new file mode 100755 index 0000000..e69de29 diff --git a/production/site/data/captchas/wqfgp3xexqhptmpgj4vufzpigiuesllf2qmijan7 b/production/site/data/captchas/wqfgp3xexqhptmpgj4vufzpigiuesllf2qmijan7 new file mode 100644 index 0000000..e69de29 diff --git a/production/site/data/guestbook_de.xml b/production/site/data/guestbook_de.xml new file mode 100755 index 0000000..796e147 --- /dev/null +++ b/production/site/data/guestbook_de.xml @@ -0,0 +1,13 @@ + + + + April 27, 2005 + Francis Montocchio + Herzlich wilkommen beim Jairus Verein Gästebuch! Als erstes möchte ich meinen Dank an Benjamin Ramey für seine Mitarbeit an diese wunderschöne WebSeiten ausdrücken! Danke, Ben, für eine super Leistung! Francis. + + + mai 17, 2006 + Manuel, Markus und Brigitte + Familie Kisser ist sehr froh, einen so tollen Verein kennengelernt zu haben und ist sehr dankbar für das große Vertrauen das in uns gesetzt wird! Durch diesen Verein ist es uns möglich an der ABR-Therapie in Österreich teilnehmen zu können in die wir sehr viel Hoffnung gesetzt haben! Tausend Dank an Euch!! Ganz liebe Grüße + + \ No newline at end of file diff --git a/production/site/data/guestbook_en.xml b/production/site/data/guestbook_en.xml new file mode 100755 index 0000000..f74b66e --- /dev/null +++ b/production/site/data/guestbook_en.xml @@ -0,0 +1,37 @@ + + + + April 27, 2005 + Francis Montocchio + Welcome to the Jairus Society guest book. As the very first message to this guest book, I would like to thank Benjamin Ramey for his fabulous work on this incredible web site. Ben, it has been more than a pleasure working with you, and you've done a wonderful job. Thank you. Francis. + + + may 31, 2005 + Melanie Francis + It gives me great honour to be the first to sign this guestbook! Ilse and Francis this is a wonderful idea and I hope you can help many many families who are started out on this hard but very rewarding journey. + much love and respect Melanie sister to Gary brain injured in a car accident in 1993 age 17. + + + + june 19, 2005 + Pierre Montocchio + Great site. Good work. Best of luck!
+
+ + september 26, 2005 + Isabella Whiteway + I am reading this with my dad and i think its so brilliant!!! + good luck! + + + + 10/6/2006 + ALICIA BEATRIZ CANEPA + I WOULD LIKE TO KNOW MORE ABOUT THIS KIND OF TREATMENT, SINCE I HAVE A SON WITH BRAIN INJURY THAT I WOULD LIKE HIM TO BE ABLE TO PROGRESS MUCH MORE THAN HE IS NOW. THANK YOU. + + + 1/16/2007 + apache + good luck + +
diff --git a/production/site/de/contactus.php b/production/site/de/contactus.php new file mode 100755 index 0000000..d4a555a --- /dev/null +++ b/production/site/de/contactus.php @@ -0,0 +1,39 @@ +

Kontakt

+
+

Österreich

+

+ Kontakperson: Francis Montocchio +

+

+ Internationaler Verein Jairus
+ Don Bosco-Gasse 39A
+ A-1230 Vienna
+ AUSTRIA +

+

+ Tel: +43-6650989
+ Fax: +43-1-6650989/7 or 8 +

+

+ E-mail: office@jasoc.org +

+
+
+

USA

+

+ Kontaktperson: Steve Ramey +

+

+ The International Jairus Society
+ 3400 N.W. 58th Ter
+ Kansas City, MO 64151
+ USA +

+

+ Tel: (816) 505-1126
+ Cell: (816) 830-3570 +

+

+ E-mail: office@jasoc.org +

+
diff --git a/production/site/de/footer.php b/production/site/de/footer.php new file mode 100755 index 0000000..e305dbb --- /dev/null +++ b/production/site/de/footer.php @@ -0,0 +1,7 @@ + + + diff --git a/production/site/de/guestbook.php b/production/site/de/guestbook.php new file mode 100755 index 0000000..0723243 --- /dev/null +++ b/production/site/de/guestbook.php @@ -0,0 +1,61 @@ + +

Gästebuch

+

Neue Einträge

+data['start_at']; $c >= $this->data['stop_at']; $c--) +{ +?> +

data['guestbook'][$c]->name.' || '.$this->data['guestbook'][$c]->date ?>

+

data['guestbook'][$c]->message) ?>

+ +
+data['newer']) { +?> + +data['older']) { +?> + + +
+ +

Ihren Eintrag Hinzufügen

+
+ + + +
+ data['captcha']->image() ?> +
+ +
+ +
+
\ No newline at end of file diff --git a/production/site/de/header.php b/production/site/de/header.php new file mode 100755 index 0000000..274a67f --- /dev/null +++ b/production/site/de/header.php @@ -0,0 +1,50 @@ +absPath.'site/pictures/'; +# get a list of those folders +$folders = filesys_get_wanted_children($pictures_path,'files'); +# make each folder a full path +foreach($folders as $key => $value) +{ + $folders[$key] = $pictures_path.$value; +} +$image = images_get_random($folders,1,"/thumb_/"); +$image = str_replace($this->absPath,'',$image[0]); +$children = filesys_get_wanted_children($this->templates,'folders',"/ourfamilies_/"); +$text = ''; + +foreach($children as $child) +{ + $name = preg_replace('/ourfamilies_(\w+)\.php/','$1',$child); + if(strstr($image,$name)) + { + $text = file_get_contents($this->templates.$child); + $first_p = strpos($text,'

') + 3; + # we want the second paragraph + $open_p = strpos($text,'

',$first_p) + 3; + $num_chars = strpos($text,'

',$open_p) - $open_p; + $text = preg_replace('//','',substr($text,$open_p,$num_chars)); + $text = substr(strip_tags($text),0,170).'...'; + break; + } +} + +?> + +
+
+ +

+ +
+ mehr lesen +

+
+
+

+ Internationale Jairus Verein +

diff --git a/production/site/de/home.php b/production/site/de/home.php new file mode 100755 index 0000000..a438233 --- /dev/null +++ b/production/site/de/home.php @@ -0,0 +1,55 @@ +

Willkommen bei dem Internationalen Jairus Verein

+

Gehirnschäden

+

+ Obwohl tausende Kinder (und Erwachsene) mit Gehirnschäden leben und hunderte + von Symptomen bekannt sind, die aus Gehirnverletzungen entstehen, scheint es + doch nur wenige Behandlungsmethoden zu geben, die Erfolge bringen. Zahlreiche + Eltern und Familien, die sich von der Schulmedizin Antworten erhoffen, meinen, + dass die existierenden Behandlungsmethoden palliativ sind, also die Symptome + und nicht die Ursachen behandeln, und ihnen keine echte Hoffnung geben. +

+

Über diese Seite

+

+ Missions-Seite: Das Wesen und die Mission des Jairus Vereins
+ Familien-Seite: Vorstellung der Familien in unserem Verein, deren Schwierigkeiten und letzte Erfolge.
+ Unterstützungs-Seite: Möglichkeiten der Unterstützung unseres Vereins
+ Rechtsform-Seite: Rechtliche Basis unseres Vereins und seiner Unterstützungen
+ Kontakt-Seite: Kontaktaufnahme mit dem Verein
+ Links-Seite: Informationen über Hirnschäden und bezughabende Themen
+ Gästebuch: Ersuchen um nützliche Kommentare
+

+ +

Finanzielle Unterstützung für ABR Austria-Familien

+

+ Der internationale Verein Jairus freut sich sehr, finanzielle Hilfeleistung für Familien anzubieten, die bei ABR Austria gelernte Techniken bei ihren hirnverletzten Familienmitgliedern anwenden. +

+

+ Wenn Sie: +

+
    +
  • Ihren Hauptwohnsitz in Österreich haben
  • +
  • bei ABR Austria die ABR-Techniken erlernen bzw. erlernen werden
  • +
  • ein ABR Programm mit 20 Stunden/Woche gemeinsam mit Ihrem hirnverletzten Familienmitglied ausführen/ausführen werden
  • +
+

+ dann können Sie beim Verein Jairus um finanzielle Unterstützung ansuchen! +

+ +

Kontakt

+

+ E-mail – office@jasoc.org
+ Post – Don Bosco-g. 39a 1230 Wien +

+

+ Telephonische Anfragen sind leider nicht möglich. +

+

+ + Antragsformular auf finanzielle Unterstützung + (PDF) +

+

+ + Bestimmungen zur Finanziellen Hilfeleistung + (PDF) +

diff --git a/production/site/de/legal.php b/production/site/de/legal.php new file mode 100755 index 0000000..6cdd2ea --- /dev/null +++ b/production/site/de/legal.php @@ -0,0 +1,6 @@ +

Rechtliches

+

+ Der Internationale Verein Jairus ist eine gemeinnützige + Organisation, die sowohl in Österreich + als auch in den USA eingetragen ist. +

\ No newline at end of file diff --git a/production/site/de/legal_austria.php b/production/site/de/legal_austria.php new file mode 100755 index 0000000..2a93117 --- /dev/null +++ b/production/site/de/legal_austria.php @@ -0,0 +1,56 @@ + +

Rechtliches: Österreich

+

Rechtsform des Vereins

+

+ Der Internationale Verein Jairus ist als Verein konstituiert, dessen Statuten + von den österreichischen Behörden (Bundespolizeidirektion Wien) am 20. April 2004 unter der + Vereinsregisternummer XV-6454 Wien genehmigt wurden. +

+ +

Vereinsstruktur

+

+ Vorsitz: Francis Montocchio
+ Stellvertretender Vorsitz: Ilse Montocchio
+ Rechnungsprüfung: Dr. Manfred Schwarz + (Moore Stephens Austria) +

+ +

Adresse in Österreich

+

+ Don Bosco-gasse 39A
+ A-1230 Vienna
+ Austria
+ Tel:+43-1-6650989
+ Fax+43-1-66509897 +

+ +

Wo werden Spendengelder eingezahlt

+

+ Finanzielle Beiträge an die Gesellschaft werden in das Bankkonto + des Vereins in Wien eingezahlt. +

+ +

Bankverbindung

+

+ Bank Austria-Creditanstalt
+ Mariahilfestrasse 54
+ A-1070 Vienna
+ AUSTRIA +

+

+ A/C No. 50787111444
+ IBAN: AT77 1200 0507 8711 1444
+ Swift: BKAUATWW +

+ +

Wie werden Spendengelder verteilt

+

+ Die Auszahlung von Geldern erfolgt ausschließlich durch den Rechnungsprüfer, + sobald Mitgliedsfamilien die entsprechenden Belege im Wiener Büro eingereicht + haben. +

+ +

Statuten des Vereins

+

+ Auf Anfrage erhältlich. +

diff --git a/production/site/de/legal_us.php b/production/site/de/legal_us.php new file mode 100755 index 0000000..2756a06 --- /dev/null +++ b/production/site/de/legal_us.php @@ -0,0 +1,45 @@ + +

Rechtliches: USA

+

Rechtsform

+

+ Die International Jairus Society wurde als gemeinnützige + Organisation (N00643215) am 22. Februar 2005 im Staate Missouri errichtet. +

+

Steuerstatus

+

+ Die International Jairus Society hat um Steuerbefreiung gemäß + 501(c) (3) angesucht. Alle Beiträge sind steuerfrei. +

+

Adresse

+

+ 3400 N.W. 58th Ter
+ Kansas City, MO 64151
+ USA
+ Tel: (816) 505-1126
+ Mobil: (816) 830-3570 +

+

Vereinsstruktur

+

+ President: Francis Montocchio
+ Secretary/Treasurer: James S. Ramey +

+

Wo werden Spendengelder eingezahlt

+

+ Finanzielle Beiträge werden (hauptsächlich mit Scheck) in das + International Jairus Society -Konto in Kansas City, Missouri, eingezahlt. +

+

Zahlungen/Schecks

+

+ Schecks bitte ausstellen an die „International Jairus Society“. Sie werden + auf das Konto der Gesellschaft in Kansas City, Missouri, eingezahlt. +

+

Wie werden Spendengelder verteilt

+

+ Die Auszahlung von Geldern erfolgt ausschließlich durch den Treasurer, sobald + Mitgliedsfamilien die entsprechenden Belege im US-Büro eingereicht haben. +

+

Statuten

+

+ Auf Anfrage erhältlich. +

+ \ No newline at end of file diff --git a/production/site/de/links.php b/production/site/de/links.php new file mode 100755 index 0000000..6d4214f --- /dev/null +++ b/production/site/de/links.php @@ -0,0 +1,39 @@ +

Links

+ +

Links zu anerkannten Behandlungsprogrammen

+ + +

Links zu den Web-Seiten betroffener Familien

+ + +

Links zu den Web-Seiten betroffener Familien

+ + +

Links zu Frequent Flyer-Programmen

+
    +
  • + WebFlyer.com
    + This link has links to all major frequent flyer programs. +
  • +
\ No newline at end of file diff --git a/production/site/de/ourfamilies.php b/production/site/de/ourfamilies.php new file mode 100755 index 0000000..0bc632f --- /dev/null +++ b/production/site/de/ourfamilies.php @@ -0,0 +1,52 @@ +

Die Familien

+
+ +

Gerard Montocchio

+

+ Gerard Montocchio, geboren am 10. Oktober 1995 in Wien/Österreich. +

+

+ Ich kam mit einem schweren Herzfehler zur Welt, + wodurch die Sauerstoffzufuhr zu meinem Gehirn unterbrochen wurde. +

+

+ lese mehr über mich +

+
+ +
+
+
+
+ +
+ +

Trenton Gruber

+

+ Trenton Gruber, geboren am 8. Juni 1997 in Denver, Colorado, USA. +

+

+ Mein Name ist Trenton Gruber, ich bin 7 Jahre alt (2005), meine Mutter heißt + Rebecca Gruber (Becci), mein Vater Charles Gruber (Chuck). +

+

+ lese mehr über mich +

+
+ +
+
+
+
+ +
+ +

Helena Prosser

+

+ Ich wurde am 12. November 1993 geboren, bin ein Einzelkind und lebe mit meiner + Mamma und meinen Großeltern in Oamaru, der südlichen Insel von Neuseeland. +

+

+ lese mehr über mich +

+
\ No newline at end of file diff --git a/production/site/de/ourfamilies_gerardm.php b/production/site/de/ourfamilies_gerardm.php new file mode 100755 index 0000000..d352d03 --- /dev/null +++ b/production/site/de/ourfamilies_gerardm.php @@ -0,0 +1,48 @@ +

Die Familien: Gerard Montocchio

+ + +

+ Gerard Montocchio, geboren am 10. Oktober 1995 in Wien/Österreich. +

+

+ + Ich kam mit einem schweren Herzfehler zur Welt, wodurch die Sauerstoffzufuhr zu meinem + Gehirn unterbrochen wurde und ich einen schweren diffusen Gehirnschaden erlitt. In den + ersten vier Jahren meines Lebens probierten Mama und Papa alle Behandlungsmethoden aus, + die sie nur finden konnten, aber die in den Krankenhäusern unserer Stadt angebotenen + Therapien waren wenig erfolgreich und ich machte eigentlich keine Fortschritte. +

+

+ Ich war vier Jahre alt, als meine Eltern die „Institutes“ + (IAHP) entdeckten und ich dort mit meiner Intensivbehandlung. + begann. Damals war ich praktisch blind, vollständig taub und ich konnte eigentlich + nur auf dem Bauch kriechen, gerade mal jeweils einen Meter, und ich spürte keine + Schmerzen, keine Wärme und keine Kälte. Ich litt auch schrecklich unter Verdauungsproblemen – + Essen war ein Problem und das Essen im Magen zu behalten war noch schwieriger. +

+

+ Nach vier Jahren Behandlung mit dem Programm des IAHP hatte ich große neurologische + Fortschritte gemacht, konnte lesen, ein bisschen rechnen, Briefchen an meine Eltern + auf ein Facilitated Communication Board (Buchstabentafel zur Kommunikation) schreiben, + + daheim umher kriechen – ich konnte hören und begann mich sehr viel besser zu fühlen. + Zu dem Zeitpunkt wechselten wir auf ABR (Advanced Biomechanical Rehabilitation) über, + nicht weil wir mit den IAHP unglücklich gewesen wären – ganz im Gegenteil. Uns ging es + um meinen körperlichen Fortschritt und die verbesserte Mobilität, und wir entschlossen + uns, auf ABR umzusteigen. +

+

+ Jetzt mache ich ein ABR-Programm und da gibt es eine Menge schwerwiegender Änderungen. Ich fliege + fünfmal im Jahr nach Belgien und lerne bei jedem Besuch neue Techniken. +

+

+ Wenn Sie mehr über mich wissen wollen, über mein Programm, meine Fortschritte und meine + Familie, dann schauen Sie meine Web-Seite an. +

+

+ + Danke, dass Sie meine Geschichte gelesen haben und sich überlegen, ein Mitglied unserer + Gesellschaft zu werden, um gehirnverletzten Menschen, wie ich einer bin, zu helfen. +

+ +

Updates for Gerard:

\ No newline at end of file diff --git a/production/site/de/ourfamilies_helenap.php b/production/site/de/ourfamilies_helenap.php new file mode 100755 index 0000000..d291661 --- /dev/null +++ b/production/site/de/ourfamilies_helenap.php @@ -0,0 +1,132 @@ + +

Die Familien: Helena Prosser

+

+ + Ich wurde am 12. November 1993 geboren, bin ein Einzelkind und lebe mit meiner + Mamma und meinen Großeltern in Oamaru, der südlichen Insel von Neuseeland. +

+ +

Am Anfang

+

+ Bei meiner Geburt atmete ich nicht – ein deutlicher Hinweis auf eine Verletzung, + obwohl ich 4,75 kg wog und meine Haut gut durchblutet war. Nach einer Überdosis + an Sedativen, die man mir im Krankenhaus in den ersten 48 Stunden verabreicht + hatte, dauerte es drei Wochen, bis ich endlich „aufwachte“ und zu schreien begann. + Die nächsten fünf Monate schrie ich praktisch ununterbrochen – den ganzen Tag und + drei bis vier Stunden in der Nacht. Verzeih mir, Mamma! +

+ +

Beginn der Anfälle

+

+ + Im Alter von fünf Monaten, gerade als ich meine ersten zwei Zähne bekam, + begannen die Anfälle. Am ersten Tage hatte ich 12 Anfälle, jeweils 10 Minuten + lang. Zumindest schrie ich nicht, während ich diese Anfälle hatte! Ich weiß + nicht, was schlimmer ist. Meine Anfälle kamen in wechselnder Intensität, + Häufigkeit und Dauer, an jedem Tag in meinem Leben, ausgenommen ein Jahr, + als ich sieben Jahre alt war und ein ganzes Jahr anfallfrei war. Glücklicherweise + und dank meinem Heimprogramm habe ich seit dem 21. Februar 2005 bis heute, da ich + das schreibe (April 2005), keinen Anfall mehr! +

+

+ Ich began, langsam ruhiger zu werden. Als Einjährige litt ich zwar immer noch + schwer an Anfällen, war aber bereits viel ruhiger. Aber ich reagierte auf nichts + und niemanden, konnte mich nicht selbstständig bewegen und kommunizierte nicht mit + meiner Umgebung. +

+ +

Was können wir tun? Das Institut

+

+ Meine Mamma hatte vergeblich nach einer Behandlung gesucht, aber als ich + ein Jahr alt war, entdeckten sie und Nana (meine Omi) die Institutes for + the Achievement for Human Potential. Ich kam an die „Institutes for the + Development of Human Potential“ in Melbourne/Australien, wo man das Ausmaß + meiner Verletzung feststellte. +

+

+ + Die Diagnose lautete auf profunde, diffuse, bilaterale Mittelhirnverletzung. Es wurde + entdeckt, dass ich blind und taub war und kaum Sinnesempfindungen hatte: viel zu + empfindlich in einigen Bereichen und zu wenig empfindlich in anderen. +

+

+ Mit 15 Monaten begann ich in dem australischen Institut mit dem Intensivprogramm: + sieben Tage die Woche und 12 Stunden am Tag. Die nächsten fünf Jahre arbeitete ich + sehr schwer; mit einer Bewertung alle sechs Monate und einen Programmwechsel, um + die Veränderungen in meiner Entwicklung einzubeziehen. +

+

+ Während dieser Zeit erlebte ich einige wunderbare und außerordentliche Veränderungen. + Mein Seh-, Hör- und Tastvermögen besserte sich enorm. Ich lernte lesen und rechnen + und begann, die Welt um mich zu verstehen. Obwohl meine Fähigkeit zu Sinnesempfindungen + immer noch schwankte, war die Lage doch besser. +

+

+ Als ich sechs war, wurde es klar, dass ich zwar Fortschritte machte, aber nicht schnell + genug. Es wurde entschieden, mich zu den Instituten in Philadelphia zu bringen, um in + den Genuss der neuesten Forschungsergebnisse und Trainingsmethoden zu gelangen. + +

+ +

Die Institute in Philadelphia – mein großes Programm

+

+ Sechs Monate, nachdem ich im IAHP in Philadelphia + begonnen hatte und im Alter von sieben Jahren kam ich in ein Programm für eine + Beatmungsmustertherapie, in dem ich 18 Stunden am Tag Atmungsübungen machte. + Innerhalb von drei Monaten hörten meine Anfälle auf – das erste Mal seit der Zeit, + als ich fünf Monate alt war. Das war eine gewaltige Umwälzung für mich: Mein Gesicht + entspannte sich, das permanente Stirnrunzeln hörte auf und hervor kam, was meine Mamma + als das schönste Lächeln in der ganzen Welt nennt! Ich begann, sanfte Geräusche zu machen, + die von allen als entzückend bewertet wurden, und konnte mich sogar etwas bewegen. +

+ +

Fortschritte

+

+ In den nächsten fünf Jahren verbesserte sich mein Seh- und Hörvermögen gewaltig, und meine + geistige Entwicklung ging stürmisch voran. Heute kann ich Erwachsenenbücher schnell + lesen, mache Mathematikübungen auf Universitätsniveau und habe enorme geistige Kenntnisse + von der Welt. Ich liebe Musik in vielen Stilrichtungen. + +

+

+ ch wurde immer ausgezeichnet ernährt und konnte zusammen mit meinem physiologischen Programm + alle ernstlichen Erkrankungen vermeiden. Im Laufe der Jahre hatte ich zwar ein paarmal einen + Schnupfen, aber nichts Außergewöhnliches. Die Ärzte hatten mir häufige Spitalsaufenthalte, + Brustkorbinfektionen und chirurgische Eingriffe vorausgesagt. Bisher konnte ich all das + vermeiden, ausgenommen diverser Zahnbehandlungen auf Grund von hypoplastischen Zähnen. +

+ +

Komplikationen

+

+ Im November 2004, kurz nachdem ich meinen 11. Geburtstag gefeiert hatte, wurde festgestellt, + dass meine Leber nicht funktionierte und ich diverse Bluterkrankungen habe. Es wurde + entschieden, dass ich während der Behandlung dieser Probleme nicht an die Institute in + Philadelphia zurückkehren würde, sondern ohne die Anstrengung eines physischen Programmes, + dass meine ganze Kraft fordert, Zeit haben sollte, wieder gesund zu werden. +

+

+ Zu dieser Zeit hörte meine Mamma von einem neuen Programm, das von anderen Familien + empfohlen wurde. Also flogen Mamma und ich im März 2005 nach Singapur zu einer ABR-Bewertung. + Dank ABR habe ich die Ruhe, die ich für meine Genesung brauche, weil diese Therapie für + mich passiv ist. Gleichzeitig ist sie auch eine positive Kraft für unser Leben, die mehr + Antworten gibt, als ursprünglich gefragt wurden. +

+ +

Fortschritte mit ABR

+

+ + Nach nur einem Monat im ABR-Programm konnte meine Familie schon eine ganze Reihe + von grundlegenden Änderungen in mir feststellen, darunter auch ein Mehr an Plaudern + und Lachen! Wir sind alle voller Hoffnung, dass dieses neue Programm eine Antwort + auf mein massives Mobilitätsproblem bringt. So fliege ich jetzt dreimal pro Jahr nach + Singapur, wo ich mich einer Bewertung unterziehe und meine Familie neue Trainingsfähigkeiten + lernt. +

+

+ Und das sagt meine Mamma über mich: „Helena ist ein kooperatives und sanftes Kind, + das sehr mitfühlend mit dem Leid anderer ist. Sie lächelt gerne und beginnt schon zu + kichern und zu lachen.“ I was born on November 12th 1993. I am an only child, and I live + with my Mum, and my grandparents in Oamaru, in the South Island of New Zealand. +

+ +

Updates für Helena:

\ No newline at end of file diff --git a/production/site/de/ourfamilies_trentong.php b/production/site/de/ourfamilies_trentong.php new file mode 100755 index 0000000..500df44 --- /dev/null +++ b/production/site/de/ourfamilies_trentong.php @@ -0,0 +1,173 @@ +

Die Familien: Trenton Gruber

+

+ + Born June 8, 1997 in Denver, Colorado, USA. +

+ +

Meine Familie

+

+ Mein Name ist Trenton Gruber, ich bin 7 Jahre alt (2005), meine Mutter heißt + Rebecca Gruber (Becci), mein Vater Charles Gruber (Chuck). Ich habe 5 Geschwister, + Jeremy Meyers (24 Jahre alt), Gabriel Meyers (22 Jahre), Adam Meyers (21 Jahre) + und dann noch Mikayla und Sidney, meine 7 Jahre alten Drillingsgeschwister. +

+ +

Zwei Hirnschäden in unserer Familie

+

+ Zwei Kinder unserer Mutter sind hirnverletzt, mein Bruder Adam und ich. +

+ +

Unsere Geburt

+

+ + Die Drillinge, 2 Mädchen und ein Bub (ich), wurden nach 29 Schwangerschaftswochen + geboren, und zwar zuerst Mikayla (2 lb 6 oz), dann ich (3 lb 1 oz), und zuletzt Sydney + (3lb 6 oz). Unsere Lungen waren noch nicht fertig entwickelt und wir wurden über Schläuche + und die Haut versorgt und am Leben erhalten. Während des ersten Monats löste eine lebensbedrohende + Krise die andere ab. Man hätte glauben können, dass es eine besondere Art der Verständigung + zwischen uns gibt. Wir waren glücklich als wir dann nach etwas mehr als einem Monat aus unseren + Brutkästen in ein behaglicheres Bett übersiedelt wurden. Alle drei litten wir an Gelbsucht und + einer Laktoseintoleranz (besonders Sydney und ich) und wir wurden noch für weitere sechs Monate + mit Sauerstoff beatmet und in dieser Zeit der Mutterbrust entwöhnt. +

+ +

Mein Fortschritt

+

+ + Am Anfang wurde bei mir eine periventrikuläre Leukomyelase (PVL) als Folge einer + intraventrikulären Blutung bei der Geburt diagnostiziert, ein Blutpfropfen im vierten Ventrikel. + Dies erfuhren wir erst einige Tage vor meiner Entlassung aus dem Spital. Die Ärzte erwähnten, + dass ich einige Behinderungen entwickeln werde, sagten aber nicht in welchem Ausmaß. Es schien + jedoch so, dass ich mich am schnellsten von all diesen kritischen Gefahren am schnellsten erholen + konnte. Ich war ruhig und weinte wenig. Nach dem ersten Lebensjahr wurde ich an meinem ersten + Geburtstag vom „Child Find“ untersucht und es wurden konventionelle Therapien angeordnet. + Zweimal pro Woche je eine physikalische, Beschäftigungs- und Sprechtherapie. Dies dauerte + sechs Monate und brachte nur sehr wenig Erfolg. Meine Mutter, die schon einmal als Mutter + eines hirnverletzten Kindes die damit verbundenen Probleme kennen gelernt hatte, war mit + den konventionellen Therapien unzufrieden und suchte deshalb Hilfe bei anderen Müttern mit + ähnlichen Problemen. Sie kam dabei mit dem Buch von Glenn Doman „ Was kann man für ein + hirnverletztes Kind tun“ in Berührung, und fühlte, dass darin die Antwort auf ihre Hoffnung + für ihr Kind enthalten sei. Nach ihrem Anruf bei den + „Institutes for the Achievement of Human Potential“ (IAHP) + unterschrieb sie einen Kurs für „Was kann man für ein hirnverletztes Kind tun“. Schon + während der 3-monatigen Wartezeit auf diesen Kurs begann sie mit mir ein Heimprogramm + in Angriff zu nehmen (ich war damals 21 Monate alt und buchstäblich ein am Boden liegendes + Bündel Mensch, das seinen Kopf nicht in die Höhe bringen konnte). Die Informationen aus dem + Buch waren ausreichend, um daraus ein Tastsinn- und Sprechprogramm und ein Programm für „Übungen + auf einer geneigten Ebene“ zusammenstellen zu können. Ich fiel vom Bauch auf den Rücken und umgekehrt, + und meine Beine waren stocksteif. Bei 99% meiner Fütterungen verspürte ich einen würgenden Brechreiz. + Zu dieser Zeit trug ich Beinstützen und die Ärzte sprachen von einer Hüftoperation und der Möglichkeit, + mich für eine spätere Verwendung einer Geh-Hilfe (Walker) geeignet machen zu können. Da ich schielte, + erhielt ich eine Augenbinde, und ich kann heute deshalb nur mit einem Auge sehen. +

+ +

Die IAHP

+

+ + Mama besuchte den Kurs „Was kann man für ein hirnverletztes Kind tun“ und sie und ich waren so begeistert, + dass sie mich aus dem konventionellen Therapieprogramm herausnahm – nicht ohne einer Menge Kritik und + Skepsis seitens der Therapeuten. Wir wussten, dass wir das richtige Programm hatten und begannen + innerhalb einer Woche mit neurologischen Musterübungen. Mama benötigte 2 Monate um genügend + Hilfswillige für 3 Serien mit je 5 Musterübungen zu finden. Ich stemmte mich 3 Monate lang + gegen die jeweils volle 5 Minuten dauernden Übungen. Viele der Hilfswilligen gaben auf, da + sie der Meinung waren, dass das Programm zu anstrengend sei. Wir aber zogen es durch und + machten es schließlich zur Routine, und übten an jedem Tage der Woche. Das erste Jahr unseres + Programms bestand aus Tast- und Sprechübungen, neurologischen Musterübungen, 15 mal pro Tag, + aus einzelnen Intelligenzübungen, aus Übungen mit Pferden (die nicht hilfreich waren), aus + Balanceübungen, und aus Atemreflexübungen. Ich benötigte ungefähr 6 Monate um von der „geneigten Ebene“ + wegkrabbeln zu können wobei mir nur der rechte Arm gehorchte und erst allmählich dann auch mein + anderer Arm und meine Beine. Es dauerte fast 2 Jahre bis wir unser Krabbelziel von 500 Metern + erreichten. Wir hätten gerne das IAHP „Aspirant Program“ gemacht, konnten es uns aber nicht leisten. +

+ +

Weiterer Fortschritt

+

+ Im November 2000 begab ich mich in die Kriechstellung. Meine Sprechleistung war sehr gut. + Wir reduzierten unser Programm auf jeweils 6 neurologische Musterübungen, auf täglich 20 + Atemreflex-Übungen, auf Balanceübungen, und Atmungs-Musterübungen (30 Minuten pro Tag), + und verbrachten den Rest des Tages mit spielerischen Kriechen. Wir übten Stiegengehen und + besuchten zweimal pro Woche die Vorschule (was sich als Fehler herausstellte). + +

+ +

Anfälle und Ernährung

+

+ Im April 2001 bemerkte Mama, dass ich Anfälle bekam. Vom Jänner bis Mai 2001war ich + sehr krank. Zuerst eine Streptokokken-Infektion, dann Scharlach. Ich bekam eine + glutenfreie, zuckerfreie und milchfreie Ernährung und wurde wieder gesund. Während + des Sommers machte ich große Fortschritte. Wir verbrachten kriechend einen Teil des + Tages in einer Kirche und am Rasen in einem Park. Mama machte mit mir wieder neurologische + Musterübungen und Balanceübungen, und intensivierte die Atemreflexübungen auf 40 mal + pro Tag und die Atem-Musterübungen auf 2 Stunden pro Tag. Wir machten auch gewisse + Intelligenz-Übungen. Im August besuchte Mama den 2. Teil des IAHP Kurses und wir + begannen mit einem 6 Wochen dauernden medullären Stimulationsprogramm. Wir benötigten + 7 Wochen, brachten es aber trotzdem in jedem Tag auf 800 „Rollen“. Das Ergebnis + rechtfertigte unsere Anstrengung. Meine Augen wurden klarer, das Essen funktionierte + besser, ich saß aufrechter und war aufmerksamer, und meine Kriechlänge verlängerte + sich innerhalb von nur 7 Wochen von 400 Meter pro Tag auf 1600 Meter einmal oder + zweimal pro Woche. Mama besuchte dann im Oktober den dritten Teil des Kurses und + ergänzte mit Enthusiasmus das weitere Programm. +

+

+ Wir bauten unsere „schwerelose Umgebung“ und bestellten den Atmungsmuster-Apparat (der im + Dezember 2001 in Betrieb genommen wurde). Es kam dann noch das „unterstützte Gehen“ mit + der „Überkopfleiter“ dazu, mit 60 bis 70 Wiederholungen pro Tag, weitere 600 Meter kriechend, + 5 Tage pro Woche, und ein intensiviertes Reflexatmen, 65 bis 80 mal am Tag. +

+ +

Von IAHP zum Family Hope Centre

+

+ Im Februar 2002 verließen wir IAHP und wechselten im April zum Family Hope Centre. + Mit Hilfe dieses Zentrums absolvierten wir ein ähnliches Programm. +

+

+ Das Trenton-Programm innerhalb von 5 ½ Jahren (4 ½ Jahre mit Programm 8, mehrere Stunden am Tage und + 7 Tage pro Woche, später auf 6 Tage und letztlich auf 5 Tage pro Woche reduziert) umfasste: +

+
    +
  • 12 neurologische Musterübungen
  • +
  • Üben auf geneigter Ebene
  • +
  • 30 Gänge auf der Überkopfleiter
  • +
  • 65-80 Atemreflex-Übungen
  • +
  • 20 Tastsinn-Übungen
  • +
  • Medulläres Rollbrett
  • +
  • 6 Schwerefrei-Übungen, 2 mal pro Tag (unregelmäßig)
  • +
  • 5 Übungen mit Wortkarten, 3 mal pro Tag
  • +
  • 2 selbstgemachte Büchlein pro Woche
  • +
  • Mathematik-Punkte, 3 mal pro Tag
  • +
  • Atmungsapparat, 10 Stunden pro Nacht
  • +
  • CO2/O2 Inhalationen, 20 mal pro Tag, jede für 60 Sekunden
  • +
  • 400 –800 m Kriechen, 5 Tage pro Woche
  • +
  • Milch-, gluten- und zuckerfreie Diät, fortlaufend
  • +
+ +

+ Mama musste auch für jede meiner Schwestern, die an leichteren Schädigungen + leiden, Programme absolvieren. Jetzt im April 2004 hat sich mein Fortschritt + verlangsamt und wir suchen nach Alternativen die mir bei der Verbesserung meiner + körperlichen Verfassung und bei meinen Anfällen helfen können. +

+ +

ABR

+

+ Mama kann sich aus persönlichen Gründen nur 6 Stunden pro Tag und 5 mal pro Woche meinem + Programm widmen. Es ist deshalb wichtig, dass wir ein sehr effektives Programm + absolvieren. Wir machen das ABR Programm + aber da wir nicht genügend finanziellen + Rückhalt haben, konnten wir zu keiner Überprüfung gehen und sind deshalb auch nicht + sicher, ob wir auch das Richtige machen. + +

+

+ Ich arbeite viel an mir und ich bin auch alt genug, um zu sehen wie sehr sich mein + Leben von dem anderer gleichaltriger Kinder unterscheidet. Ich bin oft sehr traurig, + wenn ich anderen Kindern beim Laufen und Spielen zusehe, oder wenn sie ihren Namen + schreiben, und ich mich hart anstrengen muss, um einfache Aufgaben meistern zu können. +

+

+ Mama und ich wären glücklich, wenn wir die Mittel für eine + ABR Überprüfung aufbringen könnten. + Born June 8, 1997 in Denver, Colorado, USA. +

+ +

Updates für Trenton:

\ No newline at end of file diff --git a/production/site/de/ourmission.php b/production/site/de/ourmission.php new file mode 100755 index 0000000..13eafb6 --- /dev/null +++ b/production/site/de/ourmission.php @@ -0,0 +1,59 @@ +

Über Uns

+

+ Als Eltern eines schwer gehirnverletzten Kindes haben wir, + Ilse und Francis + Montocchio, die Gründer des Internationalen Vereins Jairus, durch persönliche + Erfahrungen mit Hausbehandlungsprogrammen erkannt, dass Gehirnverletzungen behandelbar + sind und auch, was das Wichtigste im Leben mit einem gehirnverletzten Menschen ist: +

+
    +
  • WAS MÜSSEN WIR MACHEN?
  • +
  • DAS MACHEN WIR.
  • +
  • WIR SEHEN DIE RESULTATE – und die HOFFNUNG erwacht.
  • +
+

+ Wir haben auch erkannt: Die Therapiechancen für gehirngeschädigte Kinder sind + am höchsten, wenn die Eltern agieren oder, wenn das nicht möglich ist, am + besten Personen, die eng mit dem Kind verwandt ist. Das heißt also, dass + Mama oder Papa oder die Schwester oder die Tante (manchmal gibt es nur Mama + und Papa und die Schwester) die Erwerbsarbeit ganz oder teilweise aufgibt und + sich ganz dem Hausbehandlungsprogramm widmet. +

+

+ Der Internationale Verein Jairus anerkennt zur Zeit zwei Behandlungsprogramme: +

+
    +
  1. + Das Intensivbehandlungsprogramm (Intensive Treatment Program) an den Institutes for Achievement of Human Potential, + Philadelphia, USA. +
  2. +
  3. + Advanced Biomechanical Rehabilitation mit Sitz in Beringen/Belgien +
  4. +
+ +

+ Familien, die ein intensives Behandlungsprogramm an den IAHP + durchführen, müssen zweimal im Jahr nach Philadelphia; Familien im ABR + müssen bis zu fünfmal im Jahr in das nächstgelegene ABR-Zentrum nach Beringen, Kanada oder Singapur. Das bedeutet Kosten für, u.a., + Arzthonorare, Flüge, Unterkunft, Verpflegung, Geräte und Helfer, die mit der Familie reisen müssen. +

+

+ Die Doppelbelastung eines verringerten Familieneinkommens zusätzlich zu den Kosten für + Reisen und Behandlungsprogramme führt bei den meisten Familien zu einem enormen finanziellen Druck. +

+

+ Der Internationale Verein Jairus wurde in der Absicht gegründet, die immer größere Zahl + von Familien mit gehirngeschädigten, häuslich behandelten Mitgliedern zu unterstützen. + Er verfolgt zwei Hauptaktivitäten: +

+
    +
  1. + Geld auftreiben, um die Kosten dieser Behandlung zu bezahlen, weil diese von + den üblichen Versicherungen kaum abgedeckt werden. +
  2. +
  3. + Austausch von Informationen und Erfahrungen über die häusliche + Behandlung von gehirnverletzten Familienmitgliedern. +
  4. +
\ No newline at end of file diff --git a/production/site/de/supportus.php b/production/site/de/supportus.php new file mode 100755 index 0000000..08390b1 --- /dev/null +++ b/production/site/de/supportus.php @@ -0,0 +1,30 @@ +

Helfen Sie Uns

+

+ Sie können durch Ihren Beitrag unsere Familien unterstützen. +

+

Beitragsmöglichkeiten

+

+ Patenschaft – Unterstützung bestimmter Familien +
+ Personen oder Organisationen, die monatlich einen Beitrag zur Unterstützung einer bestimmten Familie leisten. +

+

+ Sponsor – Unterstützung aller Familien +
+ Personen oder Organisationen, die monatlich einen Beitrag zum Verein insgesamt leisten. +

+

+ AirMiles-Spender – Unterstützung von Familien, die mit dem Flugzeug reisen müssen +
+ Personen oder Organisationen, die ihre Flugmeilen aus Frequent-Flyer-Programmen an Familien geben, die zu Therapien reisen müssen. +

+

+ Einzel-Spender – Unterstützung aller oder bestimmter Familien +
+ Personen oder Organisationen, die ein- oder mehrmals unsere Familien unterstützen. Der Geber bestimmt, ob seine Spende allen Familien oder einer von ihm benannten Familie zugute kommt. +

+

+ Spezial-Spender – außerordentliche Zuwendungen +
+ Personen oder Organisationen, die außerordentliche finanzielle oder sonstige Beiträge leisten. +

diff --git a/production/site/de/supportus_airmiles.php b/production/site/de/supportus_airmiles.php new file mode 100755 index 0000000..42284b5 --- /dev/null +++ b/production/site/de/supportus_airmiles.php @@ -0,0 +1,38 @@ + +

AirMiles-Spender – Unterstützung von Familien, die mit dem Flugzeug reisen müssen

+

Was ist ein AirMiles-Spender?

+

+ AirMiles-Spender sind Personen oder Organisationen, die bei Frequent-Flyer-Programmen von + Fluggesellschaften (wie z.B. der Star Alliance) mitmachen und einen Beitrag leisten möchten, + indem sie einer der gehirnverletzten Personen ihre gesammelten Meilen spenden. Die meisten + unserer Familien müssen nach Philadelphia, + Kanada, Singapur oder Beringen fliegen, um an + Vorträgen, Therapie-Einweisungen und ähnlichen teilzunehmen. +

+ +

Wie spende ich meine gesammelten Frequent Flyer-Meilen?

+

+ Die meisten Frequent Flyer-Programme ermöglichen es ihren Mitgliedern, Meilen an + bestimmte Personen für einen bestimmten Flug weiterzugeben. Wenn Sie Meilen haben, + die Sie auf diese Weise spenden wollen, können Sie bitte unser Büro per E-Mail kontaktieren. + Wir rufen Sie zurück und vereinbaren die Übergabe dieser Meilen an eine Familie, die per + Flugzeug reisen muss. +

+ +

Werde ich über den Fortschritt und die Ergebnisse der Behandlung informiert?

+

+ Alle AirMiles-Spender werden regelmäßig (im allgemeinen per E-Mail) + über den Fortschritt der Behandlung informiert. +

+

+ Kontakten Sie uns einfach, wenn Sie Meilen spenden wollen. +

+

+ Eine interessante Web-Seite: www.webflyer.com +

+ + + + + + diff --git a/production/site/de/supportus_donor.php b/production/site/de/supportus_donor.php new file mode 100755 index 0000000..64946b1 --- /dev/null +++ b/production/site/de/supportus_donor.php @@ -0,0 +1,66 @@ + +

Einzel-Spender – Unterstützung aller oder bestimmter Familien

+ +

Was ist ein Einzel-Spender?

+

+ Als Einzel-Spender des Internationalen Vereins Jairus leisten Sie einen + oder mehrere Beiträge – nicht notwendigerweise regelmäßig – entweder an + eine bestimmte Familie oder an alle Familien. Lesen Sie bitte unser Informationsblatt + über unsere Familien oder holen Sie auf unserer Web-Seite weitere Informationen über + die Familien, die Sie unterstützen können, ein. +

+ +

Welche Arten von Einzel-Spender gibt es?

+
    +
  • + Personen oder Organisationen, die entweder Einzelspenden oder unregelmäßige + Spenden an den Verein richten. Diese Gelder kommen ALLEN Familien des Vereins zugute. +
  • +
  • + Personen oder Organisationen, die entweder Einzelspenden oder unregelmäßige Spenden an + bestimmte Familien richten. Diese Gelder kommen BESTIMMTEN Familien des Vereins zugute. +
  • +
+ +

Was passiert mit meinen Beiträgen?

+

+ Als Einzel-Spender stellen Sie Ihre Beiträge speziellen oder bestimmten Familien + zur Verfügung, die sich an den Rechnungsprüfer des Vereins wenden können. +

+

+ Die Familien können folgende Kosten ersetzt bekommen: +

+
    +
  • + Flugtickets oder andere Fahrkarten für die Reise zu den + IAHP oder ein + ABR-Zentrum, +
  • +
  • Mietauto,
  • +
  • Unterkunft und Verpflegung,
  • +
  • + Zahlungen an IAHP oder + ABR +
  • +
  • für die Behandlung notwendige Geräte (z.B. Behandlungstische).
  • +
+ +

Werde ich über den Fortschritt und die Ergebnisse der Behandlung informiert?

+

+ Alle Einzel-Spender werden regelmäßig (im allgemeinen per E-Mail) + über den Fortschritt der Behandlung informiert. +

+ +

Beitrag Einzel-Spender

+
    +
  • Einzel-Spender geben 10–150 Euro pro Spende.
  • +
  • Besondere Einzel-Spender geben mehr als 150 Euro pro Spende.
  • +
+

+ Einzel-Spender, die mehr als 1.700 Euro spenden, werden automatisch + zu Spezial-Spender des Vereins ernannt. +

+

+ Bitte kontaktieren + Sie uns, wenn Sie ein Spendermitglied werden und unsere Familien unterstützen möchten. +

\ No newline at end of file diff --git a/production/site/de/supportus_foster.php b/production/site/de/supportus_foster.php new file mode 100755 index 0000000..e9f8307 --- /dev/null +++ b/production/site/de/supportus_foster.php @@ -0,0 +1,47 @@ + +

Patenschaft – Unterstützung bestimmter Familien

+ +

Was ist eine Patenschaft?

+

+ Ein Pate (oder Patin!) hat ein besonderes Interesse an einem bestimmten Kind oder + Erwachsenen. Als Pate/Patin des Internationalen Vereins Jairus wählen Sie + eine bestimmte Familie (oder mehrere), die Sie unterstützen möchten. Lesen + Sie bitte unser Informationsblatt über unsere Familien oder besuchen Sie + unsere Webseite, wo Sie nähere Informationen über die Kinder/Erwachsenen + erhalten, die Sie unterstützen können. +

+ +

Was passiert mit meinen Beiträgen?

+

+ Die von Ihnen gewählte Familie kann diese speziellen Gelder beziehen, wenn sie sich an den + Rechnungsprüfer des Vereins wendet, um folgende Kosten ersetzt zu bekommen: +

+
    +
  • + Flugtickets oder andere Fahrkarten für die Reise zu den + IAHP oder ein + ABR-Zentrum, +
  • +
  • Mietauto,
  • +
  • Unterkunft und Verpflegung,
  • +
  • + Zahlungen an IAHP oder + ABR +
  • +
  • für die Behandlung notwendige Geräte (z.B. Behandlungstische).
  • +
+ +

Werde ich über den Fortschritt und die Ergebnisse der Behandlung informiert?

+

+ Die Paten werden regelmäßig (im allgemeinen per E-Mail) über den Fortschritt der Behandlung informiert. +

+ +

Beitrag Paten

+
    +
  • Paten spenden regelmäßig 10–150 Euro pro Monat.
  • +
  • Besondere Paten spenden regelmäßig mehr als 150 Euro pro Monat.
  • +
+

+ Bitte kontaktieren Sie uns, wenn + Sie ein Pate/Patin werden und ein bestimmtes Kind unterstützen möchten. +

diff --git a/production/site/de/supportus_honorary.php b/production/site/de/supportus_honorary.php new file mode 100755 index 0000000..bc47319 --- /dev/null +++ b/production/site/de/supportus_honorary.php @@ -0,0 +1,5 @@ + +

Spezial-Spender – außerordentliche Zuwendungen

+

+ Zur Zeit gibt es keine Spezial-Spender. +

\ No newline at end of file diff --git a/production/site/de/supportus_sponsor.php b/production/site/de/supportus_sponsor.php new file mode 100755 index 0000000..3352946 --- /dev/null +++ b/production/site/de/supportus_sponsor.php @@ -0,0 +1,54 @@ + +

Sponsor– Unterstützung aller Familien

+ +

Was ist ein Sponsor?

+

+ Sponsoren interessieren sich für den Fortschritt aller + unserer gehirnverletzten Kinder/Erwachsenen, die in einem + häuslichen Behandlungsprogramm stehen. Als Sponsor des + Internationalen Vereins Jairus kommen Ihre Beiträge + allen unseren Familien gleichmäßig zugute. Lesen Sie + bitte das spezielle Informationsblatt über unsere + Familien + oder besuchen Sie unsere Webseite, wo Sie nähere Informationen + über die Familien erhalten, die Sie unterstützen können. +

+ +

Was passiert mit meinen Beiträgen?

+

+ Alle Familien können Ihre Beiträge beziehen, wenn sie sich an + den Rechnungsprüfer des Vereins wenden, um folgende Kosten + ersetzt zu bekommen: +

+
    +
  • + Flugtickets oder andere Fahrkarten für die Reise zu den + IAHP oder ein + ABR-Zentrum, +
  • +
  • Mietauto,
  • +
  • Unterkunft und Verpflegung,
  • +
  • + Zahlungen an IAHP oder + ABR +
  • +
  • für die Behandlung notwendige Geräte (z.B. Behandlungstische).
  • +
+ +

Werde ich über den Fortschritt und die Ergebnisse der Behandlung informiert?

+

+ Alle Sponsoren werden regelmäßig (im allgemeinen per E-Mail) + über den Fortschritt der Behandlung informiert. +

+ + +

Beitrag Sponsor

+
    +
  • Sponsoren spenden regelmäßig 10–150 Euro pro Monat.
  • +
  • Besondere Sponsoren spenden regelmäßig mehr als 150 Euro pro Monat.
  • +
+

+ Bitte kontaktieren Sie uns, wenn Sie ein Sponsor + werden und alle unsere Familien + unterstützen möchten. +

diff --git a/production/site/en/contactus.php b/production/site/en/contactus.php new file mode 100755 index 0000000..6c14f56 --- /dev/null +++ b/production/site/en/contactus.php @@ -0,0 +1,39 @@ +

Contact Us

+
+

Austria

+

+ Contact: Francis Montocchio +

+

+ The International Jairus Society
+ Don Bosco-Gasse 39A
+ A-1230 Vienna
+ AUSTRIA +

+

+ Tel: +43-6650989
+ Fax: +43-1-6650989/7 or 8 +

+

+ E-mail: office@jasoc.org +

+
+
+

United States of America

+

+ Contact: Steve Ramey +

+

+ The International Jairus Society
+ 3400 N.W. 58th Ter
+ Kansas City, MO 64151
+ USA +

+

+ Tel: (816) 505-1126
+ Cell: (816) 830-3570 +

+

+ E-mail: office@jasoc.org +

+
diff --git a/production/site/en/footer.php b/production/site/en/footer.php new file mode 100755 index 0000000..e305dbb --- /dev/null +++ b/production/site/en/footer.php @@ -0,0 +1,7 @@ + + + diff --git a/production/site/en/guestbook.php b/production/site/en/guestbook.php new file mode 100755 index 0000000..a100d43 --- /dev/null +++ b/production/site/en/guestbook.php @@ -0,0 +1,61 @@ + +

Guestbook

+

Current Entries

+data['start_at']; $c >= $this->data['stop_at']; $c--) +{ +?> +

data['guestbook'][$c]->name.' || '.$this->data['guestbook'][$c]->date ?>

+

data['guestbook'][$c]->message) ?>

+ +
+data['newer']) { +?> + +data['older']) { +?> + + +
+ +

Add Your Entry

+
+ + + +
+ data['captcha']->image() ?> +
+ +
+ +
+
\ No newline at end of file diff --git a/production/site/en/header.php b/production/site/en/header.php new file mode 100755 index 0000000..dbfde15 --- /dev/null +++ b/production/site/en/header.php @@ -0,0 +1,52 @@ +absPath.'site/pictures/'; +# get a list of those folders +$folders = filesys_get_wanted_children($pictures_path,'files'); + +# make each folder a full path +foreach($folders as $key => $value) +{ + $folders[$key] = $pictures_path.$value; +} +$image = images_get_random($folders,1,"/thumb_/"); +$image = str_replace($this->absPath,'',$image[0]); +$children = filesys_get_wanted_children($this->templates,'folders',"/ourfamilies_/"); +$text = ''; + +foreach($children as $child) +{ + $name = preg_replace('/ourfamilies_(\w+)\.php/','$1',$child); + if(strstr($image,$name)) + { + $text = file_get_contents($this->templates.$child); + $first_p = strpos($text,'

') + 3; + # we want the second paragraph + $open_p = strpos($text,'

',$first_p) + 3; + $num_chars = strpos($text,'

',$open_p) - $open_p; + $text = preg_replace('//','',substr($text,$open_p,$num_chars)); + $text = substr(strip_tags($text),0,170).'...'; + break; + } +} + +?> + +
+
+ +

+ +
+ read more +

+
+
+ +

+ International Jairus Society +

diff --git a/production/site/en/home.php b/production/site/en/home.php new file mode 100755 index 0000000..87709c9 --- /dev/null +++ b/production/site/en/home.php @@ -0,0 +1,22 @@ +

Welcome to the International Jairus Society

+

Brain Injury

+

+ Although there are thousands of children (and adults) with brain injuries + and hundreds of recognised symptoms arising from injury to the brain, + there seem to be very few treatment methods available which result in tangible results. + A vast number of parents and families looking to mainstream medical practice for + answers feel that available treatment is palliative (treating symptoms rather than causes) + and fails to provide them with any real hope. +

+

About This Site

+

+ The mission of the Jairus Society is explained in detail on the Our Mission page. + Take a look at the Our Families page + to see the families that are in our society, and read about their histories and + latest updates on their progress. Make sure to read the Support Us page + to see how you can contribute to the Society. The Legal page explains + more of how the Society and contributions work. To learn how you can contact us, make your way + to the Contact Us page. If you're looking for more information about brain + injury and related topics, see our collection of links on the Links page. + Lastly, please feel free to leave any comments you would like in our Guestbook! +

diff --git a/production/site/en/intro.php b/production/site/en/intro.php new file mode 100755 index 0000000..2f32b5c --- /dev/null +++ b/production/site/en/intro.php @@ -0,0 +1,7 @@ +

The International Jairus Society

+
+ +
diff --git a/production/site/en/legal.php b/production/site/en/legal.php new file mode 100755 index 0000000..82fba9d --- /dev/null +++ b/production/site/en/legal.php @@ -0,0 +1,6 @@ +

Legal

+

+ The International Jairus Society is a non-profit organisation incorporated + separately in Austria and in the + United States. +

\ No newline at end of file diff --git a/production/site/en/legal_austria.php b/production/site/en/legal_austria.php new file mode 100755 index 0000000..bbd3f09 --- /dev/null +++ b/production/site/en/legal_austria.php @@ -0,0 +1,56 @@ + +

Legal: Austria

+

Legal Form of the Society

+

+ The International Jairus Society (IJS) exists in the form of a non-profit “Verein” (Society/Association) + and was registered and approved along with its statutes with the appropriate Austrian authorities + (Austrian Police Directorate, Vienna) on April 20, 2004 under the Associations Register Number + (Vereinsregisternummer) XV-6454 Wien. +

+ +

Structure of the Society

+

+ Chairperson: Francis Montocchio
+ Vice Chairperson: Ilse Montocchio
+ Accountant/Auditor: Dr. Manfred Schwarz + (Moore Stephens Austria) +

+ +

Address in Austria

+

+ Don Bosco-gasse 39A
+ A-1230 Vienna
+ Austria
+ Tel:+43-1-6650989
+ Fax+43-1-66509897 +

+ +

Where Collected Funds are Deposited

+

+ Financial contributions to the Society are deposited into the Society Bank + account in Vienna, Austria. +

+ +

Bank Details

+

+ Bank Austria-Creditanstalt
+ Mariahilfestrasse 54
+ A-1070 Vienna
+ AUSTRIA +

+

+ A/C No. 50787111444
+ IBAN: AT77 1200 0507 8711 1444
+ Swift: BKAUATWW +

+ +

How Funds are Distributed

+

+ Funds are distributed to receiving families solely by the Auditor on submission + of receipts by member families through the Society office in Vienna. +

+ +

Statutes of the Society

+

+ On request, the Society Statutes may be made available for perusal by the public. +

diff --git a/production/site/en/legal_us.php b/production/site/en/legal_us.php new file mode 100755 index 0000000..22e81b1 --- /dev/null +++ b/production/site/en/legal_us.php @@ -0,0 +1,41 @@ + +

Legal: United States

+

Legal Form of the Society

+

+ The International Jairus Society was incorporated as a non-profit organisation + (N00643215) in the State of Missouri on February 22, 2005. +

+

Tax Status of the Society

+

+ IJS has applied for 501(c)(3) tax-exempt status from the United States Government. + All contributions are tax-exempt. +

+

The Address of the Society

+

+ 3400 N.W. 58th Ter
+ Kansas City, MO 64151
+ USA
+ Tel: (816) 505-1126
+ Cell: (816) 830-3570 +

+

The Structure of the Society

+

+ President: Francis Montocchio
+ Secretary/Treasurer: James S. Ramey +

+

Where Collected Funds are Deposited

+

+ Checks made payable to the Society are deposited into the Society Bank account + in Kansas City, Missouri. +

+

How Funds are Distributed

+

+ These funds are distributed to receiving families solely by the Treasurer + on submission of receipts by member families through the Society office in + the United States. +

+

By-Laws of the Society

+

+ On request, the Society By Laws may be viewed by the public. +

+ \ No newline at end of file diff --git a/production/site/en/links.php b/production/site/en/links.php new file mode 100755 index 0000000..0b2390f --- /dev/null +++ b/production/site/en/links.php @@ -0,0 +1,39 @@ +

Links

+ +

Recognised Treatment Programs

+ + +

Families' Web Sites

+ + +

Brain-Injury Forums

+ + +

Frequent Flyer Links

+
    +
  • + WebFlyer.com
    + This link has links to all major frequent flyer programs. +
  • +
\ No newline at end of file diff --git a/production/site/en/ourfamilies.php b/production/site/en/ourfamilies.php new file mode 100755 index 0000000..26554d9 --- /dev/null +++ b/production/site/en/ourfamilies.php @@ -0,0 +1,53 @@ +

Our Families

+
+ +

Gerard Montocchio

+

+ Born October 10, 1995 in Vienna, Austria. +

+

+ I was born with a serious heart defect and because of that, my brain + was starved of oxygen and I suffered a severe, diffuse brain injury. +

+

+ read more about me +

+
+ +
+
+
+
+ +
+ +

Trenton Gruber

+

+ Born June 8, 1997 in Denver, Colorado, USA. +

+

+ Hello, I am Trenton Gruber. I’m 7 (2005). My mom is Rebecca Gruber (Becci), + my dad is Charles Gruber (Chuck). +

+

+ read more about me +

+
+ +
+
+
+
+ +
+ +

Helena Prosser

+

+ I was born on November 12th 1993. I am an + only child, and I live with my Mum, and my grandparents + in Oamaru, in the South Island of New Zealand. +

+

+ read more about me +

+
\ No newline at end of file diff --git a/production/site/en/ourfamilies_gerardm.php b/production/site/en/ourfamilies_gerardm.php new file mode 100755 index 0000000..4ea296f --- /dev/null +++ b/production/site/en/ourfamilies_gerardm.php @@ -0,0 +1,49 @@ + +

Our Families: Gerard Montocchio

+ + +

+ Born October 10, 1995 in Vienna, Austria. +

+

+ + I was born with a serious heart defect and because of that, my brain was + starved of oxygen and I suffered a severe, diffuse brain injury. For the + first four years of my life Mum and Dad tried everything they could to treat + me, but had little success from the treatment programs available at the + hospitals in our city, and I didn’t really progress at all. +

+

+ I was four when my parents discovered the "Institutes" + and started doing my Intensive Treatment + Program. At this time I was functionally blind, totally deaf, I could only really + move on my tummy on the floor about one meter at a time, and I couldn’t feel pain or hot and + cold. I also suffered terribly from digestive problems and eating was + difficult and keeping my food down was even worse. +

+

+ After four years of the Institutes’ Program I was growing neurologically much faster than before + the program, had learned to read, do some maths, write notes to my parents on an FC Board, get + around the house + + crawling, I could hear and I started feeling much better. At this time we changed + to ABR, not because we were unhappy about the Institutes, + to the contrary. We all felt concerned about my physical and mobility progress and decided + that we wanted to do ABR from then on. +

+

+ Now I am doing an ABR Program and many + significant changes have taken place. I fly to Belgium + five times a year and we learn new techniques at every visit. +

+

+ If you would like to see more about me, my program, my progress so far and my family, + please look at my web site. +

+

+ + Thank you for reading about me and considering the possibility of becoming a + member of our Society to help brain-injured people like me. +

+ +

Updates for Gerard:

\ No newline at end of file diff --git a/production/site/en/ourfamilies_helenap.php b/production/site/en/ourfamilies_helenap.php new file mode 100755 index 0000000..f00d951 --- /dev/null +++ b/production/site/en/ourfamilies_helenap.php @@ -0,0 +1,134 @@ + +

Our Families: Helena Prosser

+

+ + I was born on November 12th 1993. I am an only child, and I live with my + Mum, and my grandparents in Oamaru, in the South Island of New Zealand. +

+ +

Early Days

+

+ I wasn't breathing at birth, which was an indication of existing injury + although I was 10.5lb, and a good colour. At three weeks old, after + recovering from the excessive application of sedatives given in hospital in + the first 48 hours, I finally woke up and started screaming, which I did + nearly constantly for the next five months, all day and three or four hours + each night. Sorry, Mum! +

+ +

Onset of Seizures

+

+ + At the age of five months, coming along with my first two teeth I began + having seizures. On that first day I had 12 seizures, lasting ten minutes + each. At least when having my seizures I didn¹t scream! I¹m not sure what¹s + worse. My seizures continued in varying intensity, frequency and duration + every day of my life excepting one year at the age of seven, which was + seizure free. Mercifully, and thanks to my home program at the time of + writing (April 2005) I have not had a seizure since February 21st 2005! +

+

+ I slowly became less agitated, so that by a year old, although still heavily + seizuring, I was much calmer. I was however completely non-responsive, + showed no ability to move independently, nor interact with anyone in my + environment. +

+ +

What can we Do? The Institutes

+

+ My Mum had been searching for treatment with no success, until when I was + year old she and Nana discovered The Institutes For The Achievement For + Human Potential. + I went to The Institutes for The Development Of Human Potential, in + Melbourne Australia, where the extent of my injury was discovered. +

+

+ + I was diagnosed with profound, diffuse, bilateral midbrain injury. It was + shown that I was both blind and deaf, with poor sensation: hypersensitive + (oversensitive) in some areas, and hypo (under-sensitive) in others. +

+

+ So at 15 months of age I began the Institutes' (Australia) intensive + program, working seven days a week and 12 hours a day. Over the next five + years I worked extremely hard with re-assessments every six months, and a + change in program, to accommodate the changes in my development. +

+

+ I made some wonderful and extraordinary changes during this time. Sight, + hearing and feeling much improved. I learned to read, and do maths, and I + was gaining a good understanding of the world around me. Though my + sensation was still varied, it was less so. +

+

+ At six years old it was becoming obvious that though the change was good, it + wasn¹t fast enough, and the decision was made to take me to the Institutes + in Philadelphia, in order to access the latest research information, and + training. + +

+ +

The Institutes in Philadelphia - my Big Program

+

+ Six months after starting with IAHP + in Philadelphia, and at the age of seven + I went on to an 18 hours a day program of respiratory patterning. Within + three months my seizures had stopped for the first time since I was five + months old. This was a huge time of change for me, because it also saw my + face relax from its permanent frown, and the emergence of what my Mum calls + the most beautiful smile in the world! I started making soft sounds which + everyone said were lovely, and gained some small movements. +

+ +

Progress

+

+ Over the next five years my vision and hearing improved enormously, and my + intellectual development was profound. Today I speed-read adult level + books, I do university level mathematics, and I have a vast intellectual + knowledge of the world. I have a great love of music, and enjoy a range of + styles. + +

+

+ I have always been given an excellent diet, combined with my physiological + program, I have been able to avoid serious illness altogether. I have had a + few head colds over the years, but nothing out of the ordinary. Medical + prognosis was for multiple hospitalizations, chest infections and surgery. + So far I have avoided all of these, apart from a period of dental surgery, + due to hypoplastic teeth. (Better than real plastic!) +

+ +

Complications

+

+ In November 2004, shortly after turning eleven, it was discovered that I + have a liver dysfunction, and a number of blood disorders. It was decided + that whilst these problems were being dealt with, I would not return to the + Institutes in Philadelphia, but I would be given time to be treated, and + recover without the stress of a physical program demanding all my efforts. +

+ +

ABR

+

+ Early on in this time my Mum was impressed by a new program which had been + recommended by other families. So Mum and I traveled to Singapore in March + 2005 for an ABR assessment. + ABR allows the rest time that I require for my + recovery, as it is passive for me, but it is also turning out to be quite a + positive force for me, offering more answers than were originally sought +

+ +

Progress with ABR

+

+ + ABR allows me the time to rest that I require for my recovery + from my liver complaints, as it is passive for me. ABR is also turning out to be quite a + positive force in our lives, offering more answers than were originally + sought. +

+

+ This is what Mum says about me: "Helena is a co-operative and gentle child, + who is very sensitive to others' distress. She has a ready smile, and is + beginning to giggle and laugh." +

+ +

Updates for Helena:

\ No newline at end of file diff --git a/production/site/en/ourfamilies_trentong.php b/production/site/en/ourfamilies_trentong.php new file mode 100755 index 0000000..108818f --- /dev/null +++ b/production/site/en/ourfamilies_trentong.php @@ -0,0 +1,167 @@ + +

Our Families: Trenton Gruber

+

+ + Born June 8, 1997 in Denver, Colorado, USA. +

+ +

My Family

+

+ Hello, I am Trenton Gruber. I’m 7 (2005). My mom is Rebecca Gruber (Becci), + my dad is Charles Gruber (Chuck). I have five brothers and sisters; Jeremy Meyers + (24 yr), Gabriel Meyers (22), Adam Meyers (21) and last but not least, Mikayla and + Sydney, my 7-year-old triplet siblings. +

+ +

Two Brain Injuries in the Family

+

+ Two of my Mom’s children have brain injuries - my brother Adam and me. +

+ +

Our Birth

+

+ + The triplets, 2 girls and a boy (me), were born at 29 weeks gestation. The order of birth + was as follows: Mikayla (2 lb 14 oz) first, then me (3 lb 1 oz) second, and lastly Sydney + (3 lb 6 oz). Our lungs had not developed and we were all put on tubes and given surfaction. + We all had our critical moments switching off one right after the other struggling to sustain + our lives that first month. You'd have thought that we had some unique form of communication + between us. We were all happy to get out of our incubators after a little over a month and + gradually join each other in one cosy crib. All three of us had jaundice, we were lactose + intolerant (especially Sydney and me), and we were on oxygen for about 6 months, all of us + weaning at different times. +

+ +

My Progress

+

+ + Initially, + I was diagnosed with Periventricular Lukomylasia (PVL) caused by an intraventricular bleed at + birth (a blood clot in the 4th ventricle). We were not told this until a few days before my release + from the hospital. The doctors mentioned that I would have multiple delays but no idea to what + extent. However, I seemed to recover from my critical moments the quickest. I was very quiet and + seldom cried. During the first year of my life we waited so I could be tested on my first birthday + by Child Find (Resources for Young Children). At that time I began conventional therapy (Physical + therapy, Occupational therapy, and Speech therapy) two days a week. This continued for 6 months + with very little results. Well, my Mom, already having once before experienced being the mother + of a brain-injured child, was not satisfied with conventional therapies and seemed to gravitate + to other moms with similar problems for help. Through this she discovered the book "What to do about your brain injured child" by + Glenn Doman. For the first time, she felt this was the answer of hope for her child. She called + the Institutes for the Achievement of Human Potential (IAHP) + and registered for the “What to Do about your + Brain-Injured Child” course. During the 3-month wait for the course Mom started a home program + with me. (I was then 21 months old, literally a lump on the floor and not + able to lift my head). The information from the book gave Mom enough information to start with + a tactile and speech program, and the incline plane. I was flopping from my tummy to my back + and had extremely rigid legs. I gagged 99% of the time when I was being fed. At this time I was + in leg braces, and the doctors were talking about hip surgery, and eventually getting me into + a walker. I was also diagnosed with a strabismus (wandering eye) and was wearing an eye patch. + I currently only see using one eye because of this. +

+ +

The Institutes (IAHP)

+

+ + Mom + took the “What to do about your brain-injured child” class (April 99) by herself + and she and I were so inspired that she pulled me out of my conventional + program, but not without a lot of criticism and scepticism from the therapists. We knew this + was the right program for us and we started patterning within the week. + It took Mom 2 months to find enough volunteers to do 3 sessions of 5 patterns each day. I fought + against the patterning for the entire 5 minutes for 3 months. We lost a lot of volunteers during + that time as they thought this was so cruel. We stuck to it and eventually got into a good routine, + doing the program 7 days a week. The first year our program consisted of the tactile, speech program, + patterning (15 x day), inconsistent Intelligence program, horse therapy (which didn't help), hanging + from a dowel, vestibular activities, and masking sporadically. It took about 6 months for me to + learn to crawl off the inclined plane using my right arm only and gradually using my other limbs, + it took us almost 2 years to reach our crawling goal of 500 meters. We desperately wanted to do + the IAHP Aspirant + Program but we just couldn't afford it. +

+ +

More Progress

+ In November 2000 I started pushing into the creeping position. My speech and comments + were excellent. We then dropped one patterning session. Our program now consisted of + two patterning sessions (six patterns each), masking about 20 times each day, vestibular + activities, hanging, manual respiratory patterning (30 min a day) and playing creeping + games the rest of the day. We practiced going up/down stairs and was going to pre-school + 2 mornings a week (this was a big mistake). + +

+ +

Seizures and Nutrition

+

+ In April 2001 Mom noticed I had started having seizures. I was very sick from January - + May 2001 with streptococcus leading into Scarlet fever in May. We began a gluten-free, sugar-free, + dairy-free diet to get me well. During the summer I progressed rapidly. We spent another part of + our day creeping at a local church and on the grass at the park. Mom continued to do patterning, + vestibular activities, increased masking to 40 a day, and respiratory patterning to 2 hours a day, + and a rather inconsistent intelligence program. In August Mom attended the Lecture II at IAHP and began + the 6 week medullary reflex program. It ended up taking us 7 weeks but we were faithful doing 800 rolls + everyday 7 days a week. The results were worth the exhaustion we both experienced. My eyes looked better, + I ate better, I started sitting straighter, I was more alert, and my creeping went from 400 meters a day to + 1600 meters once or twice a week in only 7 weeks. Mom then attended Lecture III in October 2001 full of + enthusiasm that she needed to add more to our program. + patterning to 2 hours a day, and an inconsistent Intelligence program. +

+

+ We then built the gravity-free environment and ordered the respiratory patterning machine (started that in Dec 2001). + We then added assisted walking on the overhead ladder 60-70 trips on the ladder each day, continued 800 meters of + creeping 5 days each week, and increased masking to 65-80 a day. +

+ +

From IAHP to Family Hope Centre

+

+ In February 2002 we left IAHP and joined + the team at The Family Hope Centre in April. We have continued a similar + program with the assistance of FHC. +

+

+ Here is what we have done in Trenton's (5 1/2 years) program (4 ½ years doing program + 8 plus hours a day 7 days a week, gradually decreasing to 6 days a week, and now 5 + days each week): +

+
    +
  • 12 patterns
  • +
  • Incline plane
  • +
  • 30 laps on the overhead ladder (13 meters long)
  • +
  • 65-80 masks
  • +
  • 20 sessions tactile
  • +
  • Meduallary rolling board
  • +
  • 6 anti gravity activities 2x day (inconsistent)
  • +
  • 5 sets of 10 word cards 3x day
  • +
  • 2 homemade books a week
  • +
  • math dots 3x day
  • +
  • resp machine 10 hours at night
  • +
  • Co2/O2 inhalations 20x a day 60 seconds each
  • +
  • 400-800 mtrs creeping 5 days a week
  • +
  • Continuing a dairy free, gluten free, sugar free diet.
  • +
+ +

+ Mom has also had to do programs for each of my sisters, who had mild issues. + Currently, April 2004, my progress has slowed down, we are now looking + into alternatives to help with my body structure, and seizures. +

+ +

ABR

+

+ Because of personal issues, Mom is only able to dedicate 6 hours each day 5 days each week to my program, + so it is extremely important to know that we are doing a program that is going to give us results. + We are doing ABR, + but not having the necessary resources, we have not been able to afford to attend evaluations + yet, and we are not really sure if we are doing it right. + +

+

+ I work very hard and I am now old enough to see how different my life is around + other children my same age. I often feel very sad watching other children + run and play, even write their name, knowing that I struggle to perform + otherwise simple tasks. +

+

+ Mom and I would so appreciate the resources to enable us to go for an + ABR evaluation. +

+ +

Updates for Trenton:

diff --git a/production/site/en/ourmission.php b/production/site/en/ourmission.php new file mode 100755 index 0000000..327bfa4 --- /dev/null +++ b/production/site/en/ourmission.php @@ -0,0 +1,60 @@ +

Our Mission

+

+ As parents of a severely brain-injured child, we, + Ilse and Francis Montocchio, + the founders of the International + Jairus Society, have discovered through personal experience with home treatment + programs that brain injury is treatable, and that the single most important aspect + of life with a brain-injured person in the family is knowing: +

+
    +
  • WHAT TO DO
  • +
  • DOING IT
  • +
  • SEEING RESULTS – this amounts to HOPE.
  • +
+

+ We have also discovered that in order to DO something about a brain injury, the best + people to do this are the parents, and when this is not possible, the next best person + is a close relative. This means that Mum or Dad or Sister or Aunt (sometimes there is + only Mum or Dad or Sister alone!) stops or cuts down on working and dedicates his + or her time to the home treatment program. +

+

+ The two treatment programs currently recognised by the International Jairus Society are: +

+
    +
  1. + The Intensive Treatment Program at the Institutes for Achievement of Human Potential, + Philadelphia, USA. +
  2. +
  3. + Advanced Biomechanical Rehabilitation, based in Beringen, + Belgium. +
  4. +
+ +

+ Families on the Intensive Treatment Program at the IAHP + need to travel to Philadelphia twice a year, and those doing ABR + need to travel to Beringen, Canada or Singapore, depending on the proximity of the + ABR Centre, up to five times a year. The costs involved include professional fees, airfares, accommodation, + board, equipment and helpers who need to travel with the family. +

+

+ The double load of a reduced family income added to the costs of traveling and treatment programs + results in an enormous financial burden on most families. +

+

+ The International Jairus Society was founded to help support an increasing number of families with + brain-injured children and adults who are involved in home treatment programs, and is concerned with + two main activities: +

+
    +
  1. + Fund-Raising for the purposes of covering the costs of this treatment which are hardly ever covered + by mainstream medical insurance policies. +
  2. +
  3. + Sharing of information and experiences on home treatment of brain-injured children and adults to interested parties +
  4. +
\ No newline at end of file diff --git a/production/site/en/supportus.php b/production/site/en/supportus.php new file mode 100755 index 0000000..f8248c2 --- /dev/null +++ b/production/site/en/supportus.php @@ -0,0 +1,43 @@ +

Support Our Families

+

+ You can support our families by BECOMING A + CONTRIBUTOR to the International Jairus Society. +

+

Contribution Scheme

+

+ Foster Contributor – in Support + of Specific Families +
+ Individuals or organisations who make regular monthly financial + contributions in support of specific families. +

+

+ Sponsor Contributor – in + Support of All our Families +
+ Individuals or organisations who make regular monthly financial + contributions to the Society as a whole. +

+

+ AirMiles Contributor – in + Support of Families who Fly +
+ Individuals or organisations who contribute accumulated + frequent-flyer Air Miles to families who need to fly for therapy purposes. +

+

+ Donor Contributor – in Support of + All or Specific Families +
+ Individuals or organisations who contribute, once or more regularly + to our families. The Donor Contributor determines whether the funds + are to be made available to all families or to any specified by the + Donor. +

+

+ Honorary + Contributor – Extraordinary Contributions +
+ Individuals or organisations who make extraordinary financial or + other contributions to the Society. +

\ No newline at end of file diff --git a/production/site/en/supportus_airmiles.php b/production/site/en/supportus_airmiles.php new file mode 100755 index 0000000..6b245af --- /dev/null +++ b/production/site/en/supportus_airmiles.php @@ -0,0 +1,34 @@ + +

AirMiles Contributor – in Support of Families who Fly

+

What is an AirMiles Contributor?

+

+ AirMiles Contributors are individuals or organisations who are Contributors of airline group “Frequent + Flyer” programs (like the Star Alliance) who would like to make a contribution to the Society + by donating accumulated miles to a brain-injured person. Most of + our families + need to fly to Philadelphia, Canada, Singapore or Beringen in order to attend lectures, + therapy demonstrations etc. +

+

How do I contribute my Accumulated Frequent Flyer Miles?

+

+ Most Frequent Flyer programs allow for their Contributors to give away miles to a specified person + for a specified flight. If you have miles that you would like to donate, please would you + contact Francis + Montocchio or Steve Ramey by e-mail, and they will call you back to arrange the details of the transfer + of the miles to a family who needs to fly. +

+

Will I be informed about the progress and results of the Treatment?

+

+ All Contributors will be regularly informed (generally by e-mail) of the progress of the individuals + receiving treatment. +

+

+ Simply contact us if you have Air Miles to donate. +

+

+ Interesting link: www.webflyer.com +

+

+ If you would like to become an Airmiles Contributor and support a specific child, please + e-mail us. +

diff --git a/production/site/en/supportus_donor.php b/production/site/en/supportus_donor.php new file mode 100755 index 0000000..c1f1043 --- /dev/null +++ b/production/site/en/supportus_donor.php @@ -0,0 +1,75 @@ + +

Donor Contributor – in Support of All or Specific Families

+ +

What is a Donor Contributor?

+

+ As a Donor Contributor of the International Jairus Society, you would make + one or more contributions – not + necessarily on a regular basis – to either a specific family or to all the families. See + our families for more information on the children/adults in therapy. +

+ +

What kinds of Donor Contributors are there?

+
    +
  • + Sponsor Donors - Individuals or Organisations who make either “one-off” or + less regular donations to the Society as a whole. These funds will be made + available to ALL families in the Society. +
  • +
  • + Foster Donors - Individuals or Organisations who make either “one-off” or + less regular donations to specific families. These funds will be made available + to specific families in the Society. +
  • +
+ +

What happens to the contributions I make?

+
    +
  • + As a Foster Donor, specific families will be able to draw on your contributions by applying to the + Treasurer of the Society. +
  • +
  • + As a Sponsor Donor, all families will be able to draw on your contributions by applying to the Treasurer + of the Society. +
  • +
+

+ Families may have funds reimbursed if spent on: +

+
    +
  • + air or other tickets travelling to IAHP + or an ABR Centre + (treatment organisation) +
  • +
  • car rental
  • +
  • board and accommodation
  • +
  • + fees paid to the IAHP or + ABR Centre +
  • +
  • equipment necessary for treatment (e.g. therapy tables)
  • +
+ +

Will I be informed about the progress and results of the Treatment?

+

+ All Contributors will be regularly informed (generally by e-mail) of the progress of the individuals + receiving treatment. +

+ +

Donor Contributor Fees

+
    +
  • Donor Contributors – make contributions up to $150.00 per donation
  • +
  • Special Sponsor Contributors – make contributions upward of $151.00 per donation
  • +
+

+ Donor Contributors contributing in excess of $1,700.00 automatically become + Honorary Contributors + of the Society. +

+

+ If you would like to become a Donor Contributor and support a specific + child, + please e-mail us. +

\ No newline at end of file diff --git a/production/site/en/supportus_foster.php b/production/site/en/supportus_foster.php new file mode 100755 index 0000000..a0b97d6 --- /dev/null +++ b/production/site/en/supportus_foster.php @@ -0,0 +1,48 @@ + +

Foster Contributor – in Support of Specific Families

+ +

What is a Foster Contributor?

+

+ Foster Contributors are like “Godparents” - they have a special interest + in a special child/adult. As a Foster Contributor of the International Jairus + Society you would choose a specific family (or more than one) who you would + like to support. See Our Families + for more information on the child/adult in therapy. +

+ +

What happens to the contributions I make?

+

+ The family you choose will be able to draw on these specific funds by applying to the Treasurer of + the Society to reimburse funds spent on: +

+
    +
  • + air or other tickets traveling to IAHP + or an ABR Centre (treatment organisation) +
  • +
  • car rental
  • +
  • board and accommodation
  • +
  • + fees paid to the IAHP or + ABR +
  • +
  • equipment necessary for treatment (e.g. therapy tables)
  • +
+ +

Will I be informed about the progress and results of the Treatment?

+

+ Foster Contributors will be regularly informed (generally by e-mail) of the progress of the individuals + receiving treatment. +

+ + +

Foster Contributor Fees

+
    +
  • Foster Contributors – make regular contributions up to $150.00 per month
  • +
  • Special Foster Contributors – make regular contributions upward of $151.00 per month
  • +
+

+ If you would like to become a Foster Contributor and support a specific + child, please + e-mail us. +

\ No newline at end of file diff --git a/production/site/en/supportus_honorary.php b/production/site/en/supportus_honorary.php new file mode 100755 index 0000000..a50831d --- /dev/null +++ b/production/site/en/supportus_honorary.php @@ -0,0 +1,5 @@ + +

Honorary Contributor – Extraordinary Contributions

+

+ At this time there are no Honorary Contributors. +

\ No newline at end of file diff --git a/production/site/en/supportus_sponsor.php b/production/site/en/supportus_sponsor.php new file mode 100755 index 0000000..136d0d0 --- /dev/null +++ b/production/site/en/supportus_sponsor.php @@ -0,0 +1,54 @@ + +

Sponsor Contributor – in Support of All our Families

+ +

What is a Sponsor Contributor?

+

+ Sponsor Contributors are interested in the progress of all our + brain-injured children/adults undergoing a home treatment program. As a Sponsor + Contributor of the International Jairus Society, your contributions will be + shared equally by all our families. See Our + Families for more information on the children/adults in therapy. +

+ +

What happens to the contributions I make?

+

+ All the families will be able to draw on your contributions by + applying to the Treasurer of the Society to reimburse funds spent + on: +

+
    +
  • + air or other tickets traveling to IAHP + or an ABR Centre (treatment organisation) +
  • +
  • car rental
  • +
  • board and accommodation
  • +
  • + fees paid to the IAHP or + ABR +
  • +
  • equipment necessary for treatment (e.g. therapy tables)
  • +
+ +

Will I be informed about the progress and results of the Treatment?

+

+ All Contributors will be regularly informed (generally by e-mail) + of the progress of the individuals receiving treatment. +

+ +

Sponsor Contributor Fees

+
    +
  • + Sponsor Contributors – make regular contributions up to + $150.00 per month +
  • +
  • + Special Sponsor Contributors – make regular + contributions upward of $151.00 per month +
  • +
+

+ If you would like to become a Sponsor + Contributor and support all Our + Families, please e-mail us. +

\ No newline at end of file diff --git a/production/site/graphics/bottom_left_corn.gif b/production/site/graphics/bottom_left_corn.gif new file mode 100755 index 0000000..7e94a86 Binary files /dev/null and b/production/site/graphics/bottom_left_corn.gif differ diff --git a/production/site/graphics/bottom_right_corn.gif b/production/site/graphics/bottom_right_corn.gif new file mode 100755 index 0000000..428bdef Binary files /dev/null and b/production/site/graphics/bottom_right_corn.gif differ diff --git a/production/site/graphics/de/logo_de.jpg b/production/site/graphics/de/logo_de.jpg new file mode 100755 index 0000000..a839d40 Binary files /dev/null and b/production/site/graphics/de/logo_de.jpg differ diff --git a/production/site/graphics/en/logo_en.jpg b/production/site/graphics/en/logo_en.jpg new file mode 100755 index 0000000..85c2847 Binary files /dev/null and b/production/site/graphics/en/logo_en.jpg differ diff --git a/production/site/graphics/horz_border_bottom.gif b/production/site/graphics/horz_border_bottom.gif new file mode 100755 index 0000000..a6832a8 Binary files /dev/null and b/production/site/graphics/horz_border_bottom.gif differ diff --git a/production/site/graphics/horz_border_top.gif b/production/site/graphics/horz_border_top.gif new file mode 100755 index 0000000..ab5327c Binary files /dev/null and b/production/site/graphics/horz_border_top.gif differ diff --git a/production/site/graphics/horz_drop_shadow.jpg b/production/site/graphics/horz_drop_shadow.jpg new file mode 100755 index 0000000..182ee5c Binary files /dev/null and b/production/site/graphics/horz_drop_shadow.jpg differ diff --git a/production/site/graphics/intro_logo-de.jpg b/production/site/graphics/intro_logo-de.jpg new file mode 100755 index 0000000..2553904 Binary files /dev/null and b/production/site/graphics/intro_logo-de.jpg differ diff --git a/production/site/graphics/intro_logo-en.jpg b/production/site/graphics/intro_logo-en.jpg new file mode 100755 index 0000000..fceb9f3 Binary files /dev/null and b/production/site/graphics/intro_logo-en.jpg differ diff --git a/production/site/graphics/orange_circle.jpg b/production/site/graphics/orange_circle.jpg new file mode 100755 index 0000000..ccb056c Binary files /dev/null and b/production/site/graphics/orange_circle.jpg differ diff --git a/production/site/graphics/originals/_old/Jairus_Logo.jpg b/production/site/graphics/originals/_old/Jairus_Logo.jpg new file mode 100755 index 0000000..e1c8f2b Binary files /dev/null and b/production/site/graphics/originals/_old/Jairus_Logo.jpg differ diff --git a/production/site/graphics/originals/_old/Jairus_Logo_d_small.jpg b/production/site/graphics/originals/_old/Jairus_Logo_d_small.jpg new file mode 100755 index 0000000..2553904 Binary files /dev/null and b/production/site/graphics/originals/_old/Jairus_Logo_d_small.jpg differ diff --git a/production/site/graphics/originals/_old/Jairus_Logo_de.jpg b/production/site/graphics/originals/_old/Jairus_Logo_de.jpg new file mode 100755 index 0000000..329f628 Binary files /dev/null and b/production/site/graphics/originals/_old/Jairus_Logo_de.jpg differ diff --git a/production/site/graphics/originals/_old/Jairus_Logo_e_small.jpg b/production/site/graphics/originals/_old/Jairus_Logo_e_small.jpg new file mode 100755 index 0000000..830559d Binary files /dev/null and b/production/site/graphics/originals/_old/Jairus_Logo_e_small.jpg differ diff --git a/production/site/graphics/originals/_old/Jairus_Logo_en.jpg b/production/site/graphics/originals/_old/Jairus_Logo_en.jpg new file mode 100755 index 0000000..61ae004 Binary files /dev/null and b/production/site/graphics/originals/_old/Jairus_Logo_en.jpg differ diff --git a/production/site/graphics/originals/bottom_left_corn.png b/production/site/graphics/originals/bottom_left_corn.png new file mode 100755 index 0000000..2651411 Binary files /dev/null and b/production/site/graphics/originals/bottom_left_corn.png differ diff --git a/production/site/graphics/originals/bottom_right_corn.png b/production/site/graphics/originals/bottom_right_corn.png new file mode 100755 index 0000000..1a07c86 Binary files /dev/null and b/production/site/graphics/originals/bottom_right_corn.png differ diff --git a/production/site/graphics/originals/horz_border_bottom.png b/production/site/graphics/originals/horz_border_bottom.png new file mode 100755 index 0000000..33d80af Binary files /dev/null and b/production/site/graphics/originals/horz_border_bottom.png differ diff --git a/production/site/graphics/originals/horz_border_top.png b/production/site/graphics/originals/horz_border_top.png new file mode 100755 index 0000000..95e796c Binary files /dev/null and b/production/site/graphics/originals/horz_border_top.png differ diff --git a/production/site/graphics/originals/horz_drop_shadow.png b/production/site/graphics/originals/horz_drop_shadow.png new file mode 100755 index 0000000..13a1384 Binary files /dev/null and b/production/site/graphics/originals/horz_drop_shadow.png differ diff --git a/production/site/graphics/originals/horz_drop_shadow.xcf b/production/site/graphics/originals/horz_drop_shadow.xcf new file mode 100755 index 0000000..26b110b Binary files /dev/null and b/production/site/graphics/originals/horz_drop_shadow.xcf differ diff --git a/production/site/graphics/originals/logo_de.png b/production/site/graphics/originals/logo_de.png new file mode 100755 index 0000000..996818f Binary files /dev/null and b/production/site/graphics/originals/logo_de.png differ diff --git a/production/site/graphics/originals/logo_en.png b/production/site/graphics/originals/logo_en.png new file mode 100755 index 0000000..93fa583 Binary files /dev/null and b/production/site/graphics/originals/logo_en.png differ diff --git a/production/site/graphics/originals/orange_circle.png b/production/site/graphics/originals/orange_circle.png new file mode 100755 index 0000000..932c522 Binary files /dev/null and b/production/site/graphics/originals/orange_circle.png differ diff --git a/production/site/graphics/originals/thin_line.png b/production/site/graphics/originals/thin_line.png new file mode 100755 index 0000000..7f03291 Binary files /dev/null and b/production/site/graphics/originals/thin_line.png differ diff --git a/production/site/graphics/originals/top_left_corn.png b/production/site/graphics/originals/top_left_corn.png new file mode 100755 index 0000000..ed12969 Binary files /dev/null and b/production/site/graphics/originals/top_left_corn.png differ diff --git a/production/site/graphics/originals/top_right_corn.png b/production/site/graphics/originals/top_right_corn.png new file mode 100755 index 0000000..4518016 Binary files /dev/null and b/production/site/graphics/originals/top_right_corn.png differ diff --git a/production/site/graphics/originals/vert_border_left.png b/production/site/graphics/originals/vert_border_left.png new file mode 100755 index 0000000..237f079 Binary files /dev/null and b/production/site/graphics/originals/vert_border_left.png differ diff --git a/production/site/graphics/originals/vert_border_right.png b/production/site/graphics/originals/vert_border_right.png new file mode 100755 index 0000000..665f6e3 Binary files /dev/null and b/production/site/graphics/originals/vert_border_right.png differ diff --git a/production/site/graphics/thin_line.gif b/production/site/graphics/thin_line.gif new file mode 100755 index 0000000..75f81f0 Binary files /dev/null and b/production/site/graphics/thin_line.gif differ diff --git a/production/site/graphics/top_left_corn.gif b/production/site/graphics/top_left_corn.gif new file mode 100755 index 0000000..0e70acf Binary files /dev/null and b/production/site/graphics/top_left_corn.gif differ diff --git a/production/site/graphics/top_right_corn.gif b/production/site/graphics/top_right_corn.gif new file mode 100755 index 0000000..1811db6 Binary files /dev/null and b/production/site/graphics/top_right_corn.gif differ diff --git a/production/site/graphics/vert_border_left.gif b/production/site/graphics/vert_border_left.gif new file mode 100755 index 0000000..5758fb4 Binary files /dev/null and b/production/site/graphics/vert_border_left.gif differ diff --git a/production/site/graphics/vert_border_right.gif b/production/site/graphics/vert_border_right.gif new file mode 100755 index 0000000..0c7b42c Binary files /dev/null and b/production/site/graphics/vert_border_right.gif differ diff --git a/production/site/javascript/default.js b/production/site/javascript/default.js new file mode 100755 index 0000000..a080314 --- /dev/null +++ b/production/site/javascript/default.js @@ -0,0 +1,12 @@ +// JavaScript Document for Jairus Society : english + +function CheckGuestbookFields() +{ + if((document.getElementById( "name" ).value == "") + || (document.getElementById( "message" ).value == "")) + { + alert( "Please enter both a name AND message!!" ); + return false; + } + else { return true; } +} \ No newline at end of file diff --git a/production/site/layout/html.php b/production/site/layout/html.php new file mode 100755 index 0000000..1ebbd12 --- /dev/null +++ b/production/site/layout/html.php @@ -0,0 +1,33 @@ + + + + + + +<?php echo $this->title ?> +cssFiles as $file) +{ + print "\n"; +} + +# print out all of our Javascript file links +foreach($this->jsFiles as $file) +{ + print "\n"; +} + +?> + + + + + \ No newline at end of file diff --git a/production/site/layout/layout.php b/production/site/layout/layout.php new file mode 100755 index 0000000..22e80d2 --- /dev/null +++ b/production/site/layout/layout.php @@ -0,0 +1,93 @@ + +display['header']): ?> + + + + + +display['menu']): ?> + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
   
  + +errors)): ?> +
+
    +errors as $err): ?> +
  • + +
+
+ + +messages)): ?> +
+
    +messages as $msg): ?> +
  • + +
+
+ + + + content; ?> + +
 
   
+
+ +display['footer']): ?> + + + + diff --git a/production/site/pictures/gerardm/DSC00163.JPG b/production/site/pictures/gerardm/DSC00163.JPG new file mode 100755 index 0000000..d226d89 Binary files /dev/null and b/production/site/pictures/gerardm/DSC00163.JPG differ diff --git a/production/site/pictures/gerardm/DSC00171.JPG b/production/site/pictures/gerardm/DSC00171.JPG new file mode 100755 index 0000000..c7fbc41 Binary files /dev/null and b/production/site/pictures/gerardm/DSC00171.JPG differ diff --git a/production/site/pictures/gerardm/Gegi FP.01-14 July04.JPG b/production/site/pictures/gerardm/Gegi FP.01-14 July04.JPG new file mode 100755 index 0000000..2090178 Binary files /dev/null and b/production/site/pictures/gerardm/Gegi FP.01-14 July04.JPG differ diff --git a/production/site/pictures/gerardm/Gegi FP.06-14 July 04.JPG b/production/site/pictures/gerardm/Gegi FP.06-14 July 04.JPG new file mode 100755 index 0000000..f4f3810 Binary files /dev/null and b/production/site/pictures/gerardm/Gegi FP.06-14 July 04.JPG differ diff --git a/production/site/pictures/gerardm/Gegi kruip 2 - 2-03.JPG b/production/site/pictures/gerardm/Gegi kruip 2 - 2-03.JPG new file mode 100755 index 0000000..bef07f8 Binary files /dev/null and b/production/site/pictures/gerardm/Gegi kruip 2 - 2-03.JPG differ diff --git a/production/site/pictures/gerardm/Gegi with GD.jpg b/production/site/pictures/gerardm/Gegi with GD.jpg new file mode 100755 index 0000000..6ae43e1 Binary files /dev/null and b/production/site/pictures/gerardm/Gegi with GD.jpg differ diff --git a/production/site/pictures/gerardm/GegiDadSwim12.JPG b/production/site/pictures/gerardm/GegiDadSwim12.JPG new file mode 100755 index 0000000..2cb5193 Binary files /dev/null and b/production/site/pictures/gerardm/GegiDadSwim12.JPG differ diff --git a/production/site/pictures/gerardm/GegiFC 4-04.JPG b/production/site/pictures/gerardm/GegiFC 4-04.JPG new file mode 100755 index 0000000..a60f1e5 Binary files /dev/null and b/production/site/pictures/gerardm/GegiFC 4-04.JPG differ diff --git a/production/site/pictures/gerardm/GegiQuadNov04.JPG b/production/site/pictures/gerardm/GegiQuadNov04.JPG new file mode 100755 index 0000000..f8b01f4 Binary files /dev/null and b/production/site/pictures/gerardm/GegiQuadNov04.JPG differ diff --git a/production/site/pictures/gerardm/GegiWalk1 - 10-02.jpg b/production/site/pictures/gerardm/GegiWalk1 - 10-02.jpg new file mode 100755 index 0000000..2eefa09 Binary files /dev/null and b/production/site/pictures/gerardm/GegiWalk1 - 10-02.jpg differ diff --git a/production/site/pictures/gerardm/With the Prossers.jpg b/production/site/pictures/gerardm/With the Prossers.jpg new file mode 100755 index 0000000..a1c5922 Binary files /dev/null and b/production/site/pictures/gerardm/With the Prossers.jpg differ diff --git a/production/site/pictures/gerardm/portrait.jpg b/production/site/pictures/gerardm/portrait.jpg new file mode 100755 index 0000000..d482122 Binary files /dev/null and b/production/site/pictures/gerardm/portrait.jpg differ diff --git a/production/site/pictures/gerardm/thumb_DSC00163.jpg b/production/site/pictures/gerardm/thumb_DSC00163.jpg new file mode 100755 index 0000000..2d99223 Binary files /dev/null and b/production/site/pictures/gerardm/thumb_DSC00163.jpg differ diff --git a/production/site/pictures/gerardm/thumb_DSC00171.jpg b/production/site/pictures/gerardm/thumb_DSC00171.jpg new file mode 100755 index 0000000..8d7a43d Binary files /dev/null and b/production/site/pictures/gerardm/thumb_DSC00171.jpg differ diff --git a/production/site/pictures/gerardm/thumb_Gegi FP.01-14 July04.jpg b/production/site/pictures/gerardm/thumb_Gegi FP.01-14 July04.jpg new file mode 100755 index 0000000..3307ec2 Binary files /dev/null and b/production/site/pictures/gerardm/thumb_Gegi FP.01-14 July04.jpg differ diff --git a/production/site/pictures/gerardm/thumb_Gegi FP.06-14 July 04.jpg b/production/site/pictures/gerardm/thumb_Gegi FP.06-14 July 04.jpg new file mode 100755 index 0000000..b8d3a53 Binary files /dev/null and b/production/site/pictures/gerardm/thumb_Gegi FP.06-14 July 04.jpg differ diff --git a/production/site/pictures/gerardm/thumb_Gegi kruip 2 - 2-03.jpg b/production/site/pictures/gerardm/thumb_Gegi kruip 2 - 2-03.jpg new file mode 100755 index 0000000..2dc95be Binary files /dev/null and b/production/site/pictures/gerardm/thumb_Gegi kruip 2 - 2-03.jpg differ diff --git a/production/site/pictures/gerardm/thumb_Gegi with GD.jpg b/production/site/pictures/gerardm/thumb_Gegi with GD.jpg new file mode 100755 index 0000000..d61c45b Binary files /dev/null and b/production/site/pictures/gerardm/thumb_Gegi with GD.jpg differ diff --git a/production/site/pictures/gerardm/thumb_GegiDadSwim12.jpg b/production/site/pictures/gerardm/thumb_GegiDadSwim12.jpg new file mode 100755 index 0000000..a1609cb Binary files /dev/null and b/production/site/pictures/gerardm/thumb_GegiDadSwim12.jpg differ diff --git a/production/site/pictures/gerardm/thumb_GegiFC 4-04.jpg b/production/site/pictures/gerardm/thumb_GegiFC 4-04.jpg new file mode 100755 index 0000000..96225b0 Binary files /dev/null and b/production/site/pictures/gerardm/thumb_GegiFC 4-04.jpg differ diff --git a/production/site/pictures/gerardm/thumb_GegiQuadNov04.jpg b/production/site/pictures/gerardm/thumb_GegiQuadNov04.jpg new file mode 100755 index 0000000..7854c4e Binary files /dev/null and b/production/site/pictures/gerardm/thumb_GegiQuadNov04.jpg differ diff --git a/production/site/pictures/gerardm/thumb_GegiWalk1 - 10-02.jpg b/production/site/pictures/gerardm/thumb_GegiWalk1 - 10-02.jpg new file mode 100755 index 0000000..033d812 Binary files /dev/null and b/production/site/pictures/gerardm/thumb_GegiWalk1 - 10-02.jpg differ diff --git a/production/site/pictures/gerardm/thumb_With the Prossers.jpg b/production/site/pictures/gerardm/thumb_With the Prossers.jpg new file mode 100755 index 0000000..438592c Binary files /dev/null and b/production/site/pictures/gerardm/thumb_With the Prossers.jpg differ diff --git a/production/site/pictures/helenap/portrait.jpg b/production/site/pictures/helenap/portrait.jpg new file mode 100755 index 0000000..3518a96 Binary files /dev/null and b/production/site/pictures/helenap/portrait.jpg differ diff --git a/production/site/pictures/helenap/scan.jpg b/production/site/pictures/helenap/scan.jpg new file mode 100755 index 0000000..7e54f20 Binary files /dev/null and b/production/site/pictures/helenap/scan.jpg differ diff --git a/production/site/pictures/helenap/scan0001.jpg b/production/site/pictures/helenap/scan0001.jpg new file mode 100755 index 0000000..ce8885a Binary files /dev/null and b/production/site/pictures/helenap/scan0001.jpg differ diff --git a/production/site/pictures/helenap/scan0002.jpg b/production/site/pictures/helenap/scan0002.jpg new file mode 100755 index 0000000..b61498e Binary files /dev/null and b/production/site/pictures/helenap/scan0002.jpg differ diff --git a/production/site/pictures/helenap/scan0003.jpg b/production/site/pictures/helenap/scan0003.jpg new file mode 100755 index 0000000..123a578 Binary files /dev/null and b/production/site/pictures/helenap/scan0003.jpg differ diff --git a/production/site/pictures/helenap/scan0004.jpg b/production/site/pictures/helenap/scan0004.jpg new file mode 100755 index 0000000..25747e5 Binary files /dev/null and b/production/site/pictures/helenap/scan0004.jpg differ diff --git a/production/site/pictures/helenap/scan0008.jpg b/production/site/pictures/helenap/scan0008.jpg new file mode 100755 index 0000000..2f80ae3 Binary files /dev/null and b/production/site/pictures/helenap/scan0008.jpg differ diff --git a/production/site/pictures/helenap/scan0013.jpg b/production/site/pictures/helenap/scan0013.jpg new file mode 100755 index 0000000..397576f Binary files /dev/null and b/production/site/pictures/helenap/scan0013.jpg differ diff --git a/production/site/pictures/helenap/thumb_scan.jpg b/production/site/pictures/helenap/thumb_scan.jpg new file mode 100755 index 0000000..1c0165f Binary files /dev/null and b/production/site/pictures/helenap/thumb_scan.jpg differ diff --git a/production/site/pictures/helenap/thumb_scan0001.jpg b/production/site/pictures/helenap/thumb_scan0001.jpg new file mode 100755 index 0000000..8e50a9e Binary files /dev/null and b/production/site/pictures/helenap/thumb_scan0001.jpg differ diff --git a/production/site/pictures/helenap/thumb_scan0002.jpg b/production/site/pictures/helenap/thumb_scan0002.jpg new file mode 100755 index 0000000..2f848b8 Binary files /dev/null and b/production/site/pictures/helenap/thumb_scan0002.jpg differ diff --git a/production/site/pictures/helenap/thumb_scan0003.jpg b/production/site/pictures/helenap/thumb_scan0003.jpg new file mode 100755 index 0000000..98ad791 Binary files /dev/null and b/production/site/pictures/helenap/thumb_scan0003.jpg differ diff --git a/production/site/pictures/helenap/thumb_scan0004.jpg b/production/site/pictures/helenap/thumb_scan0004.jpg new file mode 100755 index 0000000..4c943d5 Binary files /dev/null and b/production/site/pictures/helenap/thumb_scan0004.jpg differ diff --git a/production/site/pictures/helenap/thumb_scan0008.jpg b/production/site/pictures/helenap/thumb_scan0008.jpg new file mode 100755 index 0000000..6f00c19 Binary files /dev/null and b/production/site/pictures/helenap/thumb_scan0008.jpg differ diff --git a/production/site/pictures/helenap/thumb_scan0013.jpg b/production/site/pictures/helenap/thumb_scan0013.jpg new file mode 100755 index 0000000..9999fca Binary files /dev/null and b/production/site/pictures/helenap/thumb_scan0013.jpg differ diff --git a/production/site/pictures/trentong/Trenton1.jpg b/production/site/pictures/trentong/Trenton1.jpg new file mode 100755 index 0000000..543a7e4 Binary files /dev/null and b/production/site/pictures/trentong/Trenton1.jpg differ diff --git a/production/site/pictures/trentong/Trenton10.jpg b/production/site/pictures/trentong/Trenton10.jpg new file mode 100755 index 0000000..db45721 Binary files /dev/null and b/production/site/pictures/trentong/Trenton10.jpg differ diff --git a/production/site/pictures/trentong/Trenton11.jpg b/production/site/pictures/trentong/Trenton11.jpg new file mode 100755 index 0000000..3aa671f Binary files /dev/null and b/production/site/pictures/trentong/Trenton11.jpg differ diff --git a/production/site/pictures/trentong/Trenton2.jpg b/production/site/pictures/trentong/Trenton2.jpg new file mode 100755 index 0000000..06532ab Binary files /dev/null and b/production/site/pictures/trentong/Trenton2.jpg differ diff --git a/production/site/pictures/trentong/Trenton3.jpg b/production/site/pictures/trentong/Trenton3.jpg new file mode 100755 index 0000000..f92ab19 Binary files /dev/null and b/production/site/pictures/trentong/Trenton3.jpg differ diff --git a/production/site/pictures/trentong/Trenton4.jpg b/production/site/pictures/trentong/Trenton4.jpg new file mode 100755 index 0000000..ecbb3ce Binary files /dev/null and b/production/site/pictures/trentong/Trenton4.jpg differ diff --git a/production/site/pictures/trentong/Trenton5.jpg b/production/site/pictures/trentong/Trenton5.jpg new file mode 100755 index 0000000..42572b1 Binary files /dev/null and b/production/site/pictures/trentong/Trenton5.jpg differ diff --git a/production/site/pictures/trentong/Trenton6.jpg b/production/site/pictures/trentong/Trenton6.jpg new file mode 100755 index 0000000..d73f6ba Binary files /dev/null and b/production/site/pictures/trentong/Trenton6.jpg differ diff --git a/production/site/pictures/trentong/Trenton7.jpg b/production/site/pictures/trentong/Trenton7.jpg new file mode 100755 index 0000000..c5d107f Binary files /dev/null and b/production/site/pictures/trentong/Trenton7.jpg differ diff --git a/production/site/pictures/trentong/Trenton8.jpg b/production/site/pictures/trentong/Trenton8.jpg new file mode 100755 index 0000000..b8e09ac Binary files /dev/null and b/production/site/pictures/trentong/Trenton8.jpg differ diff --git a/production/site/pictures/trentong/Trenton9.jpg b/production/site/pictures/trentong/Trenton9.jpg new file mode 100755 index 0000000..3c70da7 Binary files /dev/null and b/production/site/pictures/trentong/Trenton9.jpg differ diff --git a/production/site/pictures/trentong/portrait.jpg b/production/site/pictures/trentong/portrait.jpg new file mode 100755 index 0000000..d4d6a73 Binary files /dev/null and b/production/site/pictures/trentong/portrait.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton1.jpg b/production/site/pictures/trentong/thumb_Trenton1.jpg new file mode 100755 index 0000000..1397b47 Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton1.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton10.jpg b/production/site/pictures/trentong/thumb_Trenton10.jpg new file mode 100755 index 0000000..d72dfb5 Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton10.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton11.jpg b/production/site/pictures/trentong/thumb_Trenton11.jpg new file mode 100755 index 0000000..e2ed5a4 Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton11.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton2.jpg b/production/site/pictures/trentong/thumb_Trenton2.jpg new file mode 100755 index 0000000..f34be37 Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton2.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton3.jpg b/production/site/pictures/trentong/thumb_Trenton3.jpg new file mode 100755 index 0000000..7185523 Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton3.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton4.jpg b/production/site/pictures/trentong/thumb_Trenton4.jpg new file mode 100755 index 0000000..83d68de Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton4.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton5.jpg b/production/site/pictures/trentong/thumb_Trenton5.jpg new file mode 100755 index 0000000..e527246 Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton5.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton6.jpg b/production/site/pictures/trentong/thumb_Trenton6.jpg new file mode 100755 index 0000000..253dbfd Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton6.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton7.jpg b/production/site/pictures/trentong/thumb_Trenton7.jpg new file mode 100755 index 0000000..e4b2f30 Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton7.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton8.jpg b/production/site/pictures/trentong/thumb_Trenton8.jpg new file mode 100755 index 0000000..5fcc427 Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton8.jpg differ diff --git a/production/site/pictures/trentong/thumb_Trenton9.jpg b/production/site/pictures/trentong/thumb_Trenton9.jpg new file mode 100755 index 0000000..0f68189 Binary files /dev/null and b/production/site/pictures/trentong/thumb_Trenton9.jpg differ diff --git a/production/supportus.php b/production/supportus.php new file mode 100755 index 0000000..11d30b3 --- /dev/null +++ b/production/supportus.php @@ -0,0 +1,39 @@ +content('supportus_airmiles.php'); + $page->attr('title',$title . ' : AirMiles Contributor'); + break; + case 'donor': + $page->content('supportus_donor.php'); + $page->attr('title',$title . ' : Donor Contributor'); + break; + case 'foster': + $page->content('supportus_foster.php'); + $page->attr('title',$title . ' : Foster Contributor'); + break; + case 'honorary': + $page->content('supportus_honorary.php'); + $page->attr('title',$title . ' : Honorary Contributor'); + break; + case 'sponsor': + $page->content('supportus_sponsor.php'); + $page->attr('title',$title . ' : Sponsor Contributor'); + break; + default: + $page->content('supportus.php'); + $page->attr('title',$title); + break; +} + +$page->process(); + +?> \ No newline at end of file