Merge remote-tracking branch 'origin/new/bug_5337'
authorPaul Poulain <paul.poulain@biblibre.com>
Thu, 14 Jun 2012 13:44:22 +0000 (15:44 +0200)
committerPaul Poulain <paul.poulain@biblibre.com>
Thu, 14 Jun 2012 13:44:22 +0000 (15:44 +0200)
302 files changed:
C4/Accounts.pm
C4/Acquisition.pm
C4/Auth.pm
C4/Auth_with_cas.pm
C4/Auth_with_ldap.pm
C4/AuthoritiesMarc.pm
C4/AuthoritiesMarc/MARC21.pm
C4/AuthoritiesMarc/UNIMARC.pm
C4/BackgroundJob.pm
C4/Barcodes.pm
C4/Barcodes/PrinterConfig.pm
C4/Barcodes/annual.pm
C4/Barcodes/hbyymmincr.pm
C4/Barcodes/incremental.pm
C4/Biblio.pm
C4/Bookseller.pm
C4/Boolean.pm
C4/Branch.pm
C4/Breeding.pm
C4/Budgets.pm
C4/Charset.pm
C4/Circulation.pm
C4/ClassSortRoutine.pm
C4/ClassSortRoutine/Dewey.pm
C4/ClassSortRoutine/Generic.pm
C4/ClassSortRoutine/LCC.pm
C4/ClassSource.pm
C4/Context.pm
C4/Contract.pm
C4/Creators.pm
C4/Creators/Batch.pm
C4/Creators/Layout.pm
C4/Creators/Lib.pm
C4/Creators/PDF.pm
C4/Creators/Profile.pm
C4/Creators/Template.pm
C4/Csv.pm
C4/Dates.pm
C4/Debug.pm
C4/External/Amazon.pm
C4/External/BakerTaylor.pm
C4/External/Syndetics.pm
C4/Form/MessagingPreferences.pm
C4/Heading.pm
C4/Heading/MARC21.pm
C4/Heading/UNIMARC.pm
C4/ILSDI/Utility.pm
C4/Images.pm
C4/ImportBatch.pm
C4/ImportExportFramework.pm
C4/Input.pm
C4/Installer.pm [changed mode: 0755->0644]
C4/Installer/PerlDependencies.pm
C4/Installer/PerlModules.pm
C4/Items.pm
C4/Koha.pm
C4/Labels.pm
C4/Labels/Batch.pm
C4/Labels/Label.pm
C4/Labels/Layout.pm
C4/Labels/Profile.pm
C4/Labels/Template.pm
C4/Languages.pm
C4/Letters.pm
C4/Log.pm
C4/Maintainance.pm
C4/Matcher.pm
C4/Members.pm
C4/Members/AttributeTypes.pm
C4/Members/Attributes.pm
C4/Members/Messaging.pm
C4/NewsChannels.pm
C4/Output.pm
C4/Overdues.pm
C4/Patroncards.pm
C4/Patroncards/Batch.pm
C4/Patroncards/Layout.pm
C4/Patroncards/Lib.pm
C4/Patroncards/Patroncard.pm
C4/Patroncards/Profile.pm
C4/Patroncards/Template.pm
C4/Print.pm
C4/Ratings.pm
C4/Record.pm
C4/Reports.pm
C4/Reports/Guided.pm
C4/Reserves.pm
C4/Review.pm
C4/Ris.pm
C4/RotatingCollections.pm
C4/SIP/ILS/Item.pm
C4/SIP/ILS/Patron.pm
C4/SIP/ILS/Transaction/Checkout.pm
C4/SIP/ILS/Transaction/FeePayment.pm
C4/SIP/ILS/Transaction/Hold.pm
C4/SIP/SIPServer.pm
C4/SIP/Sip.pm
C4/SIP/Sip/MsgType.pm
C4/SMS.pm
C4/SQLHelper.pm
C4/Scheduler.pm
C4/Scrubber.pm
C4/Search.pm
C4/Serials.pm
C4/ShelfBrowser.pm
C4/Stats.pm
C4/Suggestions.pm
C4/Tags.pm
C4/TmplToken.pm
C4/TmplTokenType.pm
C4/UploadedFile.pm
C4/Utils.pm
C4/Utils/DataTables.pm
C4/VirtualShelves.pm
C4/VirtualShelves/Page.pm
C4/XISBN.pm
C4/XSLT.pm
C4/Z3950.pm
Koha/Cache.pm
Koha/Cache/Fastmmap.pm
Koha/Cache/Memory.pm
Koha/Template/Plugin/KohaBranchName.pm [new file with mode: 0644]
admin/categorie.pl
cataloguing/additem.pl
cataloguing/value_builder/marc21_field_008.pl
cataloguing/value_builder/normarc_field_008.pl
circ/circulation.pl
circ/returns.pl
debian/control
docs/history.txt
etc/zebradb/marc_defs/marc21/biblios/record.abs
install_misc/debian.packages
installer/data/mysql/atomicupdate/Bug-4246-Talking-Tech-itiva-phone-notifications.pl [new file with mode: 0644]
installer/data/mysql/sysprefs.sql
installer/data/mysql/updatedatabase.pl
koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
koha-tmpl/intranet-tmpl/prog/en/includes/acquisitions-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/authorities-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/budgets-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/cat-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/cataloging-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/checkin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/circ-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/cities-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/contracts-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/currencies-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc
koha-tmpl/intranet-tmpl/prog/en/includes/home-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/letters-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc
koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/patrons-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/prefs-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/printers-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/roadtype-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/serials-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/stopwords-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/suggestions-add-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/sysprefs-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/includes/z3950-admin-search.inc
koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
koha-tmpl/intranet-tmpl/prog/en/lib/jquery/jquery-ui.css
koha-tmpl/intranet-tmpl/prog/en/lib/jquery/jquery-ui.js
koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/assets/autocomplete-core.css [deleted file]
koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/assets/skins/sam/autocomplete-skin.css [deleted file]
koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/assets/skins/sam/autocomplete.css [deleted file]
koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/autocomplete-debug.js [deleted file]
koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/autocomplete-min.js [deleted file]
koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/autocomplete.js [deleted file]
koha-tmpl/intranet-tmpl/prog/en/lib/yui/datasource/datasource-debug.js [deleted file]
koha-tmpl/intranet-tmpl/prog/en/lib/yui/datasource/datasource-min.js [deleted file]
koha-tmpl/intranet-tmpl/prog/en/lib/yui/datasource/datasource.js [deleted file]
koha-tmpl/intranet-tmpl/prog/en/modules/about.tt
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/auth_subfields_structure.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/authorised_values.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/branch_transfer_limits.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/currency.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/item_circulation_alerts.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_subfields_structure.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref
koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref
koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tt
koha-tmpl/intranet-tmpl/prog/en/modules/authorities/detail.tt
koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tt
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/MARCdetail.tt
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/advsearch.tt
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/merge.tt
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/z3950_search.tt
koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt
koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/acqcontract.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/acqui-home.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/basket.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/basketgroup.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/basketheader.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/booksellers.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/histsearch.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/lateorders.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/neworderbiblio.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/neworderempty.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/newordersuggestion.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/orderreceive.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/parcel.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/parcels.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/supplier.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/acqui/z3950_search.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/admin-home.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/aqbudgetperiods.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/aqbudgets.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/aqplan.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/auth_subfields_structure.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/auth_tag_structure.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/authorised_values.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/authtypes.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/biblio_framework.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/branch_transfer_limits.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/branches.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/categorie.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/checkmarc.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/cities.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/classsources.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/currency.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/fieldmapping.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/item_circulation_alerts.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/itemtypes.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/koha2marclinks.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/marc_subfields_structure.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/marctagstructure.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/matching-rules.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/oai_set_mappings.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/oai_sets.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/patron-attr-types.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/preferences.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/printers.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/roadtype.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/smart-rules.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/stopwords.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/z3950servers.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/offline_circ/process_koc.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/serials/checkexpiration.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/serials/claims.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/serials/routing.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/serials/serials-collection.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/serials/serials-edit.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/serials/serials-home.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/serials/subscription-add.tt
koha-tmpl/intranet-tmpl/prog/en/modules/help/serials/subscription-detail.tt
koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt
koha-tmpl/intranet-tmpl/prog/en/modules/members/mancredit.tt
koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt
koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt
koha-tmpl/intranet-tmpl/prog/en/modules/members/pay.tt
koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt
koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt
koha-tmpl/intranet-tmpl/prog/en/modules/reviews/reviewswaiting.tt
koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-collection.tt
koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt
koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt
koha-tmpl/intranet-tmpl/prog/en/modules/tools/csv-profiles.tt
koha-tmpl/intranet-tmpl/prog/en/modules/tools/overduerules.tt
koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/shelves.tt
koha-tmpl/opac-tmpl/prog/en/css/opac.css
koha-tmpl/opac-tmpl/prog/en/includes/doc-head-close.inc
koha-tmpl/opac-tmpl/prog/en/lib/jquery/jquery-ui.css [new file with mode: 0644]
koha-tmpl/opac-tmpl/prog/en/lib/jquery/jquery-ui.js [new file with mode: 0644]
koha-tmpl/opac-tmpl/prog/en/lib/jquery/plugins/ui.tabs.css [deleted file]
koha-tmpl/opac-tmpl/prog/en/lib/jquery/plugins/ui.tabs.js [deleted file]
koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tt
koha-tmpl/opac-tmpl/prog/en/modules/opac-advsearch.tt
koha-tmpl/opac-tmpl/prog/en/modules/opac-basket.tt
koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt
koha-tmpl/opac-tmpl/prog/en/modules/opac-messaging.tt
koha-tmpl/opac-tmpl/prog/en/modules/opac-readingrecord.tt
koha-tmpl/opac-tmpl/prog/en/modules/opac-sendbasket.tt
koha-tmpl/opac-tmpl/prog/en/modules/opac-topissues.tt
koha-tmpl/opac-tmpl/prog/en/modules/opac-user.tt
kohaversion.pl
members/memberentry.pl
members/moremember.pl
misc/cronjobs/advance_notices.pl
misc/cronjobs/thirdparty/TalkingTech.README [new file with mode: 0644]
misc/cronjobs/thirdparty/TalkingTech_itiva_inbound.pl [new file with mode: 0755]
misc/cronjobs/thirdparty/TalkingTech_itiva_outbound.pl [new file with mode: 0755]
opac/changelanguage.pl
opac/opac-basket.pl
opac/opac-detail.pl
opac/opac-messaging.pl
opac/opac-reserve.pl
opac/opac-sendbasket.pl
opac/opac-topissues.pl
opac/opac-user.pl
opac/opac-userupdate.pl
reserve/request.pl

index b7aef01..86e8ebf 100644 (file)
@@ -29,7 +29,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.03;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
        @EXPORT = qw(
index 9e077bd..52f5545 100644 (file)
@@ -37,7 +37,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
     # set the version for version checking
-    $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
     require Exporter;
     @ISA    = qw(Exporter);
     @EXPORT = qw(
index ffee1bb..c97046a 100644 (file)
@@ -41,7 +41,8 @@ BEGIN {
        if ( psgi_env ) { die 'psgi:exit' }
        else { exit }
     }
-    $VERSION     = 3.02;    # set version for version checking
+    $VERSION     = 3.07.00.049;   # set version for version checking
+
     $debug       = $ENV{DEBUG};
     @ISA         = qw(Exporter);
     @EXPORT      = qw(&checkauth &get_template_and_user &haspermission &get_user_subpermissions);
@@ -689,7 +690,7 @@ sub checkauth {
         elsif ( $lasttime < time() - $timeout ) {
             # timed logout
             $info{'timed_out'} = 1;
-            $session->delete();
+            $session->delete() if $session;
             C4::Context->_unset_userenv($sessionID);
             #_session_log(sprintf "%20s from %16s logged out at %30s (inactivity).\n", $userid,$ip,(strftime "%c",localtime));
             $userid    = undef;
index e00e3a4..2e8e0b6 100644 (file)
@@ -32,7 +32,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $debug);
 
 BEGIN {
        require Exporter;
-       $VERSION = 3.03;        # set the version for version checking
+    $VERSION = 3.07.00.049;    # set the version for version checking
        $debug = $ENV{DEBUG};
        @ISA    = qw(Exporter);
        @EXPORT = qw(check_api_auth_cas checkpw_cas login_cas logout_cas login_cas_url);
index fc1d63b..0d00218 100644 (file)
@@ -35,7 +35,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $debug);
 
 BEGIN {
        require Exporter;
-       $VERSION = 3.10;        # set the version for version checking
+    $VERSION = 3.07.00.049;    # set the version for version checking
        @ISA    = qw(Exporter);
        @EXPORT = qw( checkpw_ldap );
 }
index 703ea75..5ea5098 100644 (file)
@@ -31,7 +31,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
 
        require Exporter;
        @ISA = qw(Exporter);
@@ -996,7 +996,7 @@ sub BuildSummary{
        my $resultstring;
        $resultstring = join(" -- ",@stringssummary);
     $resultstring =~ s/\[(.*?)\]//g;
-    $resultstring =~ s/\n/<br>/g;
+    $resultstring =~ s/\n/<br\/>/g;
        $summary      =  $resultstring;
   } else {
     my $heading = '';
index a148bbb..3701b92 100644 (file)
@@ -20,7 +20,7 @@ package C4::AuthoritiesMarc::MARC21;
 use strict;
 #use warnings; FIXME - Bug 2505
 use MARC::Record;
-our $VERSION = 3.00;
+our $VERSION = 3.07.00.049;
 
 =head1 NAME
 
index b089ec9..f93b42a 100644 (file)
@@ -19,7 +19,7 @@ package C4::AuthoritiesMarc::UNIMARC;
 
 use strict;
 #use warnings; FIXME - Bug 2505
-our $VERSION = 3.00;
+our $VERSION = 3.07.00.049;
 
 =head1 NAME
 
index 3dc3bce..efea3f5 100644 (file)
@@ -28,7 +28,7 @@ use vars qw($VERSION);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.00;
+    $VERSION = 3.07.00.049;
 }
 
 =head1 NAME
index a528bd9..4a5fa19 100644 (file)
@@ -34,7 +34,7 @@ use vars qw($debug $cgi_debug);       # from C4::Debug, of course
 use vars qw($max $prefformat);
 
 BEGIN {
-    $VERSION = 0.01;
+    $VERSION = 3.07.00.049;
        require Exporter;
     @ISA = qw(Exporter);
     @EXPORT_OK = qw();
@@ -56,21 +56,21 @@ sub initial {
 sub width {
        return undef;
 }
-sub process_head($$;$$) {      # (self,head,whole,specific)
+sub process_head {     # (self,head,whole,specific)
        my $self = shift;
        return shift;                   # Default: just return the head unchanged.
 }
-sub process_tail($$;$$) {      # (self,tail,whole,specific)
+sub process_tail {     # (self,tail,whole,specific)
        my $self = shift;
        return shift;                   # Default: just return the tail unchanged.
 }
-sub is_max ($;$) {
+sub is_max {
        my $self = shift;
        ref($self) or carp "Called is_max on a non-object: '$self'";
        (@_) and $self->{is_max} = shift;
        return $self->{is_max} || 0;
 }
-sub value ($;$) {
+sub value {
        my $self = shift;
        if (@_) {
                my $value = shift;
@@ -83,14 +83,14 @@ sub value ($;$) {
        }
        return $self->{value};
 }
-sub autoBarcode (;$) {
+sub autoBarcode {
        (@_) or return _prefformat;
        my $self = shift;
        my $value = $self->{autoBarcode} or return _prefformat;
        $value =~ s/^.*:://;    # in case we get C4::Barcodes::incremental, we just want 'incremental'
        return $value;
 }
-sub parse ($;$) {      # return 3 parts of barcode: non-incrementing, incrementing, non-incrementing
+sub parse {    # return 3 parts of barcode: non-incrementing, incrementing, non-incrementing
        my $self = shift;
        my $barcode = (@_) ? shift : $self->value;
        unless ($barcode =~ /(.*?)(\d+)$/) {    # non-greedy match in first part
@@ -100,7 +100,7 @@ sub parse ($;$) {   # return 3 parts of barcode: non-incrementing, incrementing, n
        $debug and warn "Barcode '$barcode' parses into: '$1', '$2', ''";
        return ($1,$2,'');      # the third part is in anticipation of barcodes that include checkdigits
 }
-sub max ($;$) {
+sub max {
        my $self = shift;
        if ($self->{is_max}) {
                $debug and print STDERR "max taken from Barcodes value $self->value\n";
@@ -109,14 +109,14 @@ sub max ($;$) {
        $debug and print STDERR "Retrieving max database query.\n";
        return $self->db_max;
 }
-sub db_max () {
+sub db_max {
        my $self = shift;
        my $query = "SELECT max(abs(barcode)) FROM items LIMIT 1"; # Possible problem if multiple barcode types populated
        my $sth = C4::Context->dbh->prepare($query);
        $sth->execute();
        return $sth->fetchrow_array || $self->initial;
 }
-sub next_value ($;$) {
+sub next_value {
        my $self = shift;
        my $specific = (scalar @_) ? 1 : 0;
        my $max = $specific ? shift : $self->max;               # optional argument, i.e. next_value after X
@@ -143,22 +143,22 @@ sub next_value ($;$) {
        $debug and print STDERR "(  next ) max barcode found: $next_value\n";
        return $next_value;
 }
-sub next ($;$) {
+sub next {
        my $self = shift or return undef;
        (@_) and $self->{next} = shift;
        return $self->{next};
 }
-sub previous ($;$) {
+sub previous {
        my $self = shift or return undef;
        (@_) and $self->{previous} = shift;
        return $self->{previous};
 }
-sub serial ($;$) {
+sub serial {
        my $self = shift or return undef;
        (@_) and $self->{serial} = shift;
        return $self->{serial};
 }
-sub default_self (;$) {
+sub default_self {
        (@_) or carp "default_self called with no argument.  Reverting to _prefformat.";
        my $autoBarcode = (@_) ? shift : _prefformat;
        $autoBarcode =~ s/^.*:://;  # in case we get C4::Barcodes::incremental, we just want 'incremental'
index af6a92e..25f48eb 100644 (file)
@@ -24,7 +24,7 @@ use PDF::API2::Page;
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 0.02;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @EXPORT = qw(&labelsPage &getLabelPosition setPositionsForX setPositionsForY);
 }
index aedb7e0..ae03274 100644 (file)
@@ -31,7 +31,7 @@ use vars qw($debug $cgi_debug);       # from C4::Debug, of course
 use vars qw($width);
 
 BEGIN {
-    $VERSION = 0.01;
+    $VERSION = 3.07.00.049;
     @ISA = qw(C4::Barcodes);
        $width = 4;
 }
index 8c2c182..ca3149f 100644 (file)
@@ -31,7 +31,7 @@ use vars qw($debug $cgi_debug);       # from C4::Debug, of course
 use vars qw($branch $width);
 
 BEGIN {
-    $VERSION = 0.01;
+    $VERSION = 3.07.00.049;
     @ISA = qw(C4::Barcodes);
 }
 
index 33b21bc..c1b38d2 100644 (file)
@@ -23,7 +23,7 @@ use warnings;
 use vars qw($VERSION @ISA);
 
 BEGIN {
-    $VERSION = 0.01;
+    $VERSION = 3.07.00.049;
     @ISA = qw(C4::Barcodes);
 }
 
index 083cbae..1ab4fff 100644 (file)
@@ -40,7 +40,7 @@ use C4::OAI::Sets;
 use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
-    $VERSION = 1.00;
+    $VERSION = 3.07.00.049;
 
     require Exporter;
     @ISA = qw( Exporter );
index 3fded79..4b8e2a5 100644 (file)
@@ -24,7 +24,7 @@ use warnings;
 use base qw( Exporter );
 
 # set the version for version checking
-our $VERSION   = 4.01;
+our $VERSION   = 3.07.00.049;
 our @EXPORT_OK = qw(
   GetBookSeller GetBooksellersWithLateOrders GetBookSellerFromId
   ModBookseller
index 02c0014..46a3cc8 100644 (file)
@@ -27,7 +27,7 @@ use warnings;
 use Carp;
 use base qw(Exporter);
 
-our    $VERSION = 0.03;
+our    $VERSION = 3.07.00.049;
 our    @EXPORT_OK = qw( true_p);
 
 =head1 NAME
index 2153028..1959a3d 100644 (file)
@@ -25,7 +25,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.02;
+    $VERSION = 3.07.00.049;
        @ISA    = qw(Exporter);
        @EXPORT = qw(
                &GetBranchCategory
index c588c64..19bb7e2 100644 (file)
@@ -30,7 +30,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 0.02;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA = qw(Exporter);
        @EXPORT = qw(&ImportBreeding &BreedingSearch);
index 7c867e0..7a261d0 100644 (file)
@@ -28,7 +28,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
        @EXPORT = qw(
index 8b69848..c294b36 100644 (file)
@@ -29,7 +29,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
     # set the version for version checking
-    $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
     require Exporter;
     @ISA    = qw(Exporter);
     @EXPORT = qw(
index 24c193a..96ae0d9 100644 (file)
@@ -47,7 +47,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
        require Exporter;
-       $VERSION = 3.02;        # for version checking
+    $VERSION = 3.07.00.049;    # for version checking
        @ISA    = qw(Exporter);
 
        # FIXME subs that should probably be elsewhere
@@ -1529,6 +1529,7 @@ patron who last borrowed the book.
 
 sub AddReturn {
     my ( $barcode, $branch, $exemptfine, $dropbox ) = @_;
+
     if ($branch and not GetBranchDetail($branch)) {
         warn "AddReturn error: branch '$branch' not found.  Reverting to " . C4::Context->userenv->{'branch'};
         undef $branch;
@@ -1761,6 +1762,7 @@ routine in C<C4::Accounts>.
 
 sub MarkIssueReturned {
     my ( $borrowernumber, $itemnumber, $dropbox_branch, $returndate, $privacy ) = @_;
+
     my $dbh   = C4::Context->dbh;
     my $query = 'UPDATE issues SET returndate=';
     my @bind;
@@ -2754,7 +2756,7 @@ sub SendCirculationAlert {
         }
     ) or return;
 
-    my @transports = @{ $borrower_preferences->{transports} };
+    my @transports = keys %{ $borrower_preferences->{transports} };
     # warn "no transports" unless @transports;
     for (@transports) {
         # warn "transport: $_";
@@ -3102,12 +3104,13 @@ sub LostItem{
 
     # if a borrower lost the item, add a replacement cost to the their record
     if ( my $borrowernumber = $issues->{borrowernumber} ){
+        my $borrower = C4::Members::GetMemberDetails( $borrowernumber );
 
         C4::Accounts::chargelostitem($borrowernumber, $itemnumber, $issues->{'replacementprice'}, "Lost Item $issues->{'title'} $issues->{'barcode'}")
           if $charge_fee;
         #FIXME : Should probably have a way to distinguish this from an item that really was returned.
         #warn " $issues->{'borrowernumber'}  /  $itemnumber ";
-        MarkIssueReturned($borrowernumber,$itemnumber) if $mark_returned;
+        MarkIssueReturned($borrowernumber,$itemnumber,undef,undef,$borrower->{'privacy'}) if $mark_returned;
     }
 }
 
index 9fce28e..04c24a5 100644 (file)
@@ -27,7 +27,7 @@ use C4::Context;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 # set the version for version checking
-$VERSION = 3.00;
+$VERSION = 3.07.00.049;
 
 =head1 NAME 
 
index 62a68b9..1f8b3ef 100644 (file)
@@ -23,7 +23,7 @@ use warnings;
 use vars qw($VERSION);
 
 # set the version for version checking
-$VERSION = 3.00;
+$VERSION = 3.07.00.049;
 
 =head1 NAME 
 
index 924e6a8..4f74323 100644 (file)
@@ -23,7 +23,7 @@ use warnings;
 use vars qw($VERSION);
 
 # set the version for version checking
-$VERSION = 3.00;
+$VERSION = 3.07.00.049;
 
 =head1 NAME 
 
index 4fcf731..6ec3846 100644 (file)
@@ -23,7 +23,7 @@ use warnings;
 use vars qw($VERSION);
 
 # set the version for version checking
-$VERSION = 3.00;
+$VERSION = 3.07.00.049;
 
 =head1 NAME 
 
index 5d76497..63f6c67 100644 (file)
@@ -27,7 +27,7 @@ use C4::ClassSortRoutine;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 # set the version for version checking
-$VERSION = 3.00;
+$VERSION = 3.07.00.049;
 
 =head1 NAME
 
index 67d31ee..9ce6c74 100644 (file)
@@ -95,7 +95,7 @@ BEGIN {
     $ismemcached = $memcached->set('ismemcached','1');
     }
 
-    $VERSION = '3.00.00.036';
+    $VERSION = '3.07.00.049';
 }
 
 use DBI;
index 0259470..28e4e75 100644 (file)
@@ -25,7 +25,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.2;
+    $VERSION = 3.07.00.049;
     require Exporter;
        @ISA    = qw(Exporter);
        @EXPORT = qw(
index 8be368c..e9e4dac 100644 (file)
@@ -18,7 +18,7 @@ package C4::Creators;
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
     use vars qw(@EXPORT @ISA);
     @ISA = qw(Exporter);
     our @EXPORT = qw(get_all_templates
index f54e3da..9306263 100644 (file)
@@ -9,7 +9,7 @@ use C4::Context;
 use C4::Debug;
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 sub _check_params {
index 73a19fa..a12532f 100644 (file)
@@ -10,7 +10,7 @@ use C4::Debug;
 use C4::Creators::PDF;
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 # FIXME: Consider this style parameter verification instead...
index 68a758b..67ee0e8 100644 (file)
@@ -26,7 +26,7 @@ use C4::Context;
 use C4::Debug;
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
     use base qw(Exporter);
     our @EXPORT = qw(get_all_templates
                      get_all_layouts
index 0aae09c..41ff548 100644 (file)
@@ -21,9 +21,10 @@ use strict;
 use warnings;
 use PDF::Reuse;
 use PDF::Reuse::Barcode;
+use File::Temp;
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 sub _InitVars {
@@ -42,7 +43,12 @@ sub new {
     delete($opts{InitVars});
     prDocDir($opts{'DocDir'}) if $opts{'DocDir'};
     delete($opts{'DocDir'});
-    prFile(%opts);
+
+    my $fh = File::Temp->new( UNLINK => 0, SUFFIX => '.pdf' );
+    $opts{Name} = $self->{filename} = "$fh"; # filename
+    close $fh; # we need just filename
+
+    prFile(\%opts);
     bless ($self, $type);
     return $self;
 }
@@ -52,6 +58,13 @@ sub End {
     # if the pdf stream is utf8, explicitly set it to utf8; this avoids at lease some wide character errors -chris_n
     utf8::encode($PDF::Reuse::stream) if utf8::is_utf8($PDF::Reuse::stream);
     prEnd();
+
+    # slurp temporary filename and print it out for plack to pick up
+    local $/ = undef;
+    open(my $fh, '<', $self->{filename}) || die "$self->{filename}: $!";
+    print <$fh>;
+    close $fh;
+    unlink $self->{filename};
 }
 
 sub Add {
index 6b6e192..c94a219 100644 (file)
@@ -10,7 +10,7 @@ use C4::Debug;
 use C4::Creators::Lib 1.000000 qw(get_unit_values);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 sub _check_params {
index 8a7564c..d80100e 100644 (file)
@@ -11,7 +11,7 @@ use C4::Creators::Profile 1.000000;
 use C4::Creators::Lib 1.000000 qw(get_unit_values);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 sub _check_params {
index 07ce2eb..95cf634 100644 (file)
--- a/C4/Csv.pm
+++ b/C4/Csv.pm
@@ -26,7 +26,7 @@ use C4::Context;
 use vars qw($VERSION @ISA @EXPORT);
 
 # set the version for version checking
-$VERSION = 3.00;
+$VERSION = 3.07.00.049;
 
 @ISA = qw(Exporter);
 
index 6a3220e..4fd08ae 100644 (file)
@@ -31,7 +31,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 use vars qw($debug $cgi_debug);
 
 BEGIN {
-    $VERSION   = 0.04;
+    $VERSION   = 3.07.00.049;
     @ISA       = qw(Exporter);
     @EXPORT_OK = qw(format_date_in_iso format_date);
 }
index 2cbb350..b735ab8 100644 (file)
@@ -27,7 +27,7 @@ use vars qw($VERSION @ISA @EXPORT $debug $cgi_debug);
 # use vars qw(@EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
-       $VERSION = 1.00;        # set the version for version checking
+    $VERSION = 3.07.00.049;    # set the version for version checking
        @ISA       = qw(Exporter);
        @EXPORT    = qw($debug $cgi_debug);
        # @EXPOR_OK    = qw();
index 54141db..53ebbd3 100644 (file)
@@ -33,7 +33,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
     require Exporter;
-    $VERSION = 0.03;
+    $VERSION = 3.07.00.049;
     @ISA = qw(Exporter);
     @EXPORT = qw(
         get_amazon_details
index 7845811..3503db0 100644 (file)
@@ -32,7 +32,7 @@ use vars qw($user $pass $agent $image_url $link_url);
 
 BEGIN {
        require Exporter;
-       $VERSION = 0.01;
+    $VERSION = 3.07.00.049;
        @ISA = qw(Exporter);
        @EXPORT_OK = qw(&availability &content_cafe &image_url &link_url &http_jacket_link);
        %EXPORT_TAGS = (all=>\@EXPORT_OK);
index f94345d..3d518da 100644 (file)
@@ -30,7 +30,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
     require Exporter;
-    $VERSION = 0.03;
+    $VERSION = 3.07.00.049;
     @ISA = qw(Exporter);
     @EXPORT = qw(
         &get_syndetics_index
index 85ae9e8..fa3c303 100644 (file)
@@ -139,7 +139,7 @@ sub set_form_values {
                 selected   => $_ == $days_in_advance ? 'selected="selected"' :'' } 
             } ( 0..30 ); # FIXME: 30 is a magic number.
         }
-        foreach my $transport ( @{$pref->{'transports'}} ) {
+        foreach my $transport ( keys %{$pref->{'transports'}} ) {
             $option->{'transports_'.$transport} = 1;
         }
         $option->{'digest'} = 1 if $pref->{'wants_digest'};
index 102cac6..dca4d1b 100644 (file)
@@ -25,7 +25,7 @@ use C4::Context;
 use Module::Load;
 use Carp;
 
-our $VERSION = 3.00;
+our $VERSION = 3.07.00.049;
 
 =head1 NAME
 
index d873e8d..964e5fd 100644 (file)
@@ -22,7 +22,7 @@ use warnings;
 use MARC::Record;
 use MARC::Field;
 
-our $VERSION = 3.00;
+our $VERSION = 3.07.00.049;
 
 =head1 NAME
 
index 7925345..a3b35b2 100644 (file)
@@ -24,7 +24,7 @@ use MARC::Record;
 use MARC::Field;
 use C4::Context;
 
-our $VERSION = 3.00;
+our $VERSION = 3.07.00.049;
 
 =head1 NAME
 
index 37220c6..b8c1457 100644 (file)
@@ -35,7 +35,7 @@ use vars qw($VERSION @ISA @EXPORT);
 BEGIN {
 
     # set the version for version checking
-    $VERSION = 3.00;
+    $VERSION = 3.07.00.049;
     require Exporter;
     @ISA    = qw(Exporter);
     @EXPORT = qw(
index 8afc8fa..8b17f1c 100644 (file)
@@ -30,7 +30,7 @@ use vars qw($debug $noimage $VERSION @ISA @EXPORT);
 BEGIN {
 
     # set the version for version checking
-    $VERSION = 3.03;
+    $VERSION = 3.07.00.049;
     require Exporter;
     @ISA    = qw(Exporter);
     @EXPORT = qw(
index 8d4a488..5bf79bf 100644 (file)
@@ -30,7 +30,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
        @EXPORT = qw(
index d85e64f..b81b393 100644 (file)
@@ -31,7 +31,7 @@ use C4::Debug;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
-    $VERSION = 3.03;    # set version for version checking
+    $VERSION = 3.07.00.049;    # set version for version checking
     require Exporter;
     @ISA    = qw(Exporter);
     @EXPORT = qw(
index 2ee07f3..2e84dc2 100644 (file)
@@ -28,7 +28,7 @@ use CGI;
 use vars qw($VERSION @ISA @EXPORT);
 
 # set the version for version checking
-$VERSION = 0.01;
+$VERSION = 3.07.00.049;
 
 =head1 NAME
 
old mode 100755 (executable)
new mode 100644 (file)
index 43fd724..ccacd8e
@@ -20,7 +20,7 @@ package C4::Installer;
 use strict;
 #use warnings; FIXME - Bug 2505
 
-our $VERSION = 3.00;
+our $VERSION = 3.07.00.049;
 use C4::Context;
 use C4::Installer::PerlModules 1.000000;
 
index ee026bc..62168c9 100644 (file)
@@ -528,7 +528,12 @@ our $PERL_DEPS = {
         'usage'    => 'Core',
         'required' => '1',
         'min_ver'  => '0.09',
-      },
+    },
+    'Template::Plugin::HtmlToText' => {
+        'usage'    => 'Core',
+        'required' => '1',
+        'min_ver'  => '0.03',
+    },
 };
 
 1;
index 1f9e57f..2f40cf5 100644 (file)
@@ -7,7 +7,7 @@ use File::Spec;
 
 use C4::Installer::PerlDependencies;
 
-use version; our $VERSION = qv('1.0.0_1');
+use version; our $VERSION = qv('3.07.00.049');
 
 our $PERL_DEPS = $C4::Installer::PerlDependencies::PERL_DEPS;
 
index 9f4b9b3..2afe537 100644 (file)
@@ -36,7 +36,7 @@ use Data::Dumper; # used as part of logging item record changes, not just for
 use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
-    $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
 
        require Exporter;
     @ISA = qw( Exporter );
@@ -1247,73 +1247,19 @@ sub GetItemsInfo {
         $data->{'datedue'}        = $datedue;
 
         # get notforloan complete status if applicable
-        my $sthnflstatus = $dbh->prepare(
-            'SELECT authorised_value
-            FROM   marc_subfield_structure
-            WHERE  kohafield="items.notforloan"
-        '
-        );
-
-        $sthnflstatus->execute;
-        my ($authorised_valuecode) = $sthnflstatus->fetchrow;
-        if ($authorised_valuecode) {
-            $sthnflstatus = $dbh->prepare(
-                "SELECT lib FROM authorised_values
-                 WHERE  category=?
-                 AND authorised_value=?"
-            );
-            $sthnflstatus->execute( $authorised_valuecode,
-                $data->{itemnotforloan} );
-            my ($lib) = $sthnflstatus->fetchrow;
-            $data->{notforloanvalue} = $lib;
+        if ( my $code = C4::Koha::GetAuthValCode( 'items.notforloan', $data->{frameworkcode} ) ) {
+            $data->{notforloanvalue} = C4::Koha::GetAuthorisedValueByCode( $code, $data->{itemnotforloan} );
         }
 
         # get restricted status and description if applicable
-        my $restrictedstatus = $dbh->prepare(
-            'SELECT authorised_value
-            FROM   marc_subfield_structure
-            WHERE  kohafield="items.restricted"
-        '
-        );
-
-        $restrictedstatus->execute;
-        ($authorised_valuecode) = $restrictedstatus->fetchrow;
-        if ($authorised_valuecode) {
-            $restrictedstatus = $dbh->prepare(
-                "SELECT lib,lib_opac FROM authorised_values
-                 WHERE  category=?
-                 AND authorised_value=?"
-            );
-            $restrictedstatus->execute( $authorised_valuecode,
-                $data->{restricted} );
-
-            if ( my $rstdata = $restrictedstatus->fetchrow_hashref ) {
-                $data->{restricted} = $rstdata->{'lib'};
-                $data->{restrictedopac} = $rstdata->{'lib_opac'};
-            }
+        if ( my $code = C4::Koha::GetAuthValCode( 'items.restricted', $data->{frameworkcode} ) ) {
+            $data->{restricted}     = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{restricted} );
+            $data->{restrictedopac} = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{restricted}, 'opac' );
         }
 
         # my stack procedures
-        my $stackstatus = $dbh->prepare(
-            'SELECT authorised_value
-             FROM   marc_subfield_structure
-             WHERE  kohafield="items.stack"
-        '
-        );
-        $stackstatus->execute;
-
-        ($authorised_valuecode) = $stackstatus->fetchrow;
-        if ($authorised_valuecode) {
-            $stackstatus = $dbh->prepare(
-                "SELECT lib
-                 FROM   authorised_values
-                 WHERE  category=?
-                 AND    authorised_value=?
-            "
-            );
-            $stackstatus->execute( $authorised_valuecode, $data->{stack} );
-            my ($lib) = $stackstatus->fetchrow;
-            $data->{stack} = $lib;
+        if ( my $code = C4::Koha::GetAuthValCode( 'items.stack', $data->{frameworkcode} ) ) {
+            $data->{stack}          = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{stack} );
         }
         # Find the last 3 people who borrowed this item.
         my $sth2 = $dbh->prepare("SELECT * FROM old_issues,borrowers
index ebb3eed..f19a017 100644 (file)
@@ -33,7 +33,7 @@ use autouse 'Data::Dumper' => qw(Dumper);
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $DEBUG);
 
 BEGIN {
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
        @EXPORT = qw(
index 43fa99d..6462ed8 100644 (file)
@@ -1,7 +1,7 @@
 package C4::Labels;
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 
     use C4::Labels::Batch 1.000000;
     use C4::Labels::Label 1.000000;
index 97825a2..1ccf76b 100644 (file)
@@ -8,7 +8,7 @@ use base qw(C4::Creators::Batch);
 use autouse 'Data::Dumper' => qw(Dumper);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 __PACKAGE__ =~ m/^C4::(.+)::.+$/;
index d1ab98a..7b1fafd 100644 (file)
@@ -13,7 +13,7 @@ use C4::Debug;
 use C4::Biblio;
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 my $possible_decimal = qr/\d{3,}(?:\.\d+)?/; # at least three digits for a DDCN
index c1d749d..0501ea0 100644 (file)
@@ -8,7 +8,7 @@ use base qw(C4::Creators::Layout);
 use autouse 'Data::Dumper' => qw(Dumper);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 __PACKAGE__ =~ m/^C4::(.+)::.+$/;
index 7792683..8f41357 100644 (file)
@@ -8,7 +8,7 @@ use base qw(C4::Creators::Profile);
 use autouse 'Data::Dumper' => qw(Dumper);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 __PACKAGE__ =~ m/^C4::(.+)::.+$/;
index 7564d1d..17ccea4 100644 (file)
@@ -8,7 +8,7 @@ use base qw(C4::Creators::Template);
 use autouse 'Data::Dumper' => qw(Dumper);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 use constant TEMPLATE_TABLE => 'creator_templates';
index 6f269ac..d0eed69 100644 (file)
@@ -37,7 +37,7 @@ eval {
 };
 
 BEGIN {
-    $VERSION = 3.00;
+    $VERSION = 3.07.00.049;
     require Exporter;
     @ISA    = qw(Exporter);
     @EXPORT = qw(
index 89213fe..514b355 100644 (file)
@@ -38,7 +38,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 BEGIN {
        require Exporter;
        # set the version for version checking
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        @ISA = qw(Exporter);
        @EXPORT = qw(
        &GetLetters &GetPreparedLetter &GetWrappedLetter &addalert &getalert &delalert &findrelatedto &SendAlerts &GetPrintMessages
@@ -661,7 +661,7 @@ places a letter in the message_queue database table, which will
 eventually get processed (sent) by the process_message_queue.pl
 cronjob when it calls SendQueuedMessages.
 
-return true on success
+return message_id on success
 
 =cut
 
@@ -703,7 +703,7 @@ ENDSQL
         $params->{'from_address'},                # from_address
         $params->{'letter'}->{'content-type'},    # content_type
     );
-    return $result;
+    return $dbh->last_insert_id(undef,undef,'message_queue', undef);
 }
 
 =head2 SendQueuedMessages ([$hashref]) 
index 6b8ff17..14448e3 100644 (file)
--- a/C4/Log.pm
+++ b/C4/Log.pm
@@ -31,7 +31,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA = qw(Exporter);
        @EXPORT = qw(&logaction &GetLogStatus &displaylog &GetLogs);
index aea6028..8726ef9 100644 (file)
@@ -29,7 +29,7 @@ require Exporter;
 use vars qw($VERSION @ISA @EXPORT);
 
 # set the version for version checking
-$VERSION = 0.01;
+$VERSION = 3.07.00.049;
 
 =head1 NAME
 
index d61964c..59b5876 100644 (file)
@@ -29,7 +29,7 @@ use vars qw($VERSION);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
 }
 
 =head1 NAME
index ce54952..2e59c91 100644 (file)
@@ -38,11 +38,12 @@ use C4::NewsChannels; #get slip news
 use DateTime;
 use DateTime::Format::DateParse;
 use Koha::DateUtils;
+use Text::Unaccent qw( unac_string );
 
 our ($VERSION,@ISA,@EXPORT,@EXPORT_OK,$debug);
 
 BEGIN {
-    $VERSION = 3.02;
+    $VERSION = 3.07.00.049;
     $debug = $ENV{DEBUG} || 0;
     require Exporter;
     @ISA = qw(Exporter);
@@ -800,6 +801,7 @@ sub Generate_Userid {
     $firstname =~ s/[[:digit:][:space:][:blank:][:punct:][:cntrl:]]//g;
     $surname =~ s/[[:digit:][:space:][:blank:][:punct:][:cntrl:]]//g;
     $newuid = lc(($firstname)? "$firstname.$surname" : $surname);
+    $newuid = unac_string('utf-8',$newuid);
     $newuid .= $offset unless $offset == 0;
     $offset++;
 
index d8d5508..3e33694 100644 (file)
@@ -25,7 +25,7 @@ use vars qw($VERSION);
 
 BEGIN {
     # set the version for version checking
-    $VERSION = 3.00;
+    $VERSION = 3.07.00.049;
 }
 
 =head1 NAME
index cde25d1..e175915 100644 (file)
@@ -29,7 +29,7 @@ our ($csv, $AttributeTypes);
 
 BEGIN {
     # set the version for version checking
-    $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
     @ISA = qw(Exporter);
     @EXPORT_OK = qw(GetBorrowerAttributes GetBorrowerAttributeValue CheckUniqueness SetBorrowerAttributes
                     DeleteBorrowerAttribute UpdateBorrowerAttribute
index 2b39f11..033c694 100644 (file)
@@ -25,7 +25,7 @@ use vars qw($VERSION);
 
 BEGIN {
     # set the version for version checking
-    $VERSION = 3.00;
+    $VERSION = 3.07.00.049;
 }
 
 =head1 NAME
@@ -98,9 +98,8 @@ END_SQL
         $return->{'days_in_advance'} = $row->{'days_in_advance'} if defined $row->{'days_in_advance'};
         $return->{'wants_digest'}    = $row->{'wants_digest'}    if defined $row->{'wants_digest'};
         $return->{'letter_code'}     = $row->{'letter_code'};
-        $transports{$row->{'message_transport_type'}} = 1;
+        $return->{'transports'}->{ $row->{'message_transport_type'} } = $row->{'letter_code'};
     }
-    @{$return->{'transports'}} = keys %transports;
     return $return;
 }
 
@@ -248,8 +247,9 @@ sub SetMessagingPreferencesFromDefaults {
         # FIXME - except for setting the borrowernumber, it really ought to be possible
         # to have the output of GetMessagingPreferences be able to be the input
         # to SetMessagingPreference
+        my @message_transport_types = keys %{ $default_pref->{transports} };
         $default_pref->{message_attribute_id}    = $option->{'message_attribute_id'};
-        $default_pref->{message_transport_types} = $default_pref->{transports};
+        $default_pref->{message_transport_types} = \@message_transport_types;
         $default_pref->{borrowernumber}          = $params->{borrowernumber};
         SetMessagingPreference( $default_pref );
     }
index e68d6ff..0201729 100644 (file)
@@ -26,7 +26,7 @@ use C4::Dates qw(format_date);
 use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN { 
-       $VERSION = 3.01;        # set the version for version checking
+    $VERSION = 3.07.00.049;    # set the version for version checking
        @ISA = qw(Exporter);
        @EXPORT = qw(
                &GetNewsToDisplay
index 8d12552..21002c0 100644 (file)
@@ -37,7 +37,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
     # set the version for version checking
-    $VERSION = 3.03;
+    $VERSION = 3.07.00.049;
     require Exporter;
 
  @ISA    = qw(Exporter);
index c7430c9..ffdeaf5 100644 (file)
@@ -33,7 +33,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
        # subs to rename (and maybe merge some...)
index e833193..748243d 100644 (file)
@@ -1,7 +1,7 @@
 package C4::Patroncards;
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
     use vars qw(@EXPORT @ISA);
     @ISA = qw(Exporter);
     our @EXPORT = qw(unpack_UTF8
index 510f4fe..11c0661 100644 (file)
@@ -8,7 +8,7 @@ use base qw(C4::Creators::Batch);
 use autouse 'Data::Dumper' => qw(Dumper);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 __PACKAGE__ =~ m/^C4::(.+)::.+$/;
index e14d4f2..ab215ad 100644 (file)
@@ -8,7 +8,7 @@ use base qw(C4::Creators::Layout);
 use autouse 'Data::Dumper' => qw(Dumper);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 __PACKAGE__ =~ m/^C4::(.+)::.+$/;
index a02fb48..9d1d3ed 100644 (file)
@@ -26,7 +26,7 @@ use C4::Context;
 use C4::Debug;
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
     use base qw(Exporter);
     our @EXPORT = qw(unpack_UTF8
                      text_alignment
index 56abe58..440a05c 100644 (file)
@@ -29,7 +29,7 @@ use C4::Creators::PDF 1.000000 qw(StrWidth);
 use C4::Patroncards::Lib 1.000000 qw(unpack_UTF8 text_alignment leading box get_borrower_attributes);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 sub new {
index 0553288..4842b3f 100644 (file)
@@ -8,7 +8,7 @@ use base qw(C4::Creators::Profile);
 use autouse 'Data::Dumper' => qw(Dumper);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 __PACKAGE__ =~ m/^C4::(.+)::.+$/;
index f2af512..5cfd7ca 100644 (file)
@@ -8,7 +8,7 @@ use base qw(C4::Creators::Template);
 use autouse 'Data::Dumper' => qw(Dumper);
 
 BEGIN {
-    use version; our $VERSION = qv('1.0.0_1');
+    use version; our $VERSION = qv('3.07.00.049');
 }
 
 use constant TEMPLATE_TABLE => 'creator_templates';
index 2ee0116..12aa107 100644 (file)
@@ -25,7 +25,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
     @EXPORT = qw(&NetworkPrint);
index 43870f3..b9ae7de 100644 (file)
@@ -29,7 +29,7 @@ use C4::Context;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
-    $VERSION = 3.00;
+    $VERSION = 3.07.00.049;
     @ISA     = qw(Exporter);
 
     @EXPORT = qw(
index 89bde32..ed91196 100644 (file)
@@ -39,7 +39,7 @@ use Text::CSV::Encoded; #marc2csv
 use vars qw($VERSION @ISA @EXPORT);
 
 # set the version for version checking
-$VERSION = 3.00;
+$VERSION = 3.07.00.049;
 
 @ISA = qw(Exporter);
 
index 3e2f195..104858e 100644 (file)
@@ -27,7 +27,7 @@ use C4::Debug;
 
 BEGIN {
     # set the version for version checking
-    $VERSION = 0.13;
+    $VERSION = 3.07.00.049;
     require Exporter;
     @ISA = qw(Exporter);
     @EXPORT = qw(
index 04b3d53..f1ebe0c 100644 (file)
@@ -35,7 +35,7 @@ use C4::Debug;
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 0.12;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA = qw(Exporter);
        @EXPORT = qw(
index a64abde..585d1e5 100644 (file)
@@ -88,7 +88,7 @@ This modules provides somes functions to deal with reservations.
 
 BEGIN {
     # set the version for version checking
-    $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
     require Exporter;
     @ISA = qw(Exporter);
     @EXPORT = qw(
@@ -1849,11 +1849,7 @@ sub _koha_notify_reserve {
     my $messagingprefs;
     if ( $to_address || $borrower->{'smsalertnumber'} ) {
         $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber, message_name => 'Hold_Filled' } );
-
-        return if ( !defined( $messagingprefs->{'letter_code'} ) );
-        $letter_code = $messagingprefs->{'letter_code'};
     } else {
-        $letter_code = 'HOLD_PRINT';
         $print_mode = 1;
     }
 
@@ -1869,9 +1865,8 @@ sub _koha_notify_reserve {
 
     my $admin_email_address = $branch_details->{'branchemail'} || C4::Context->preference('KohaAdminEmailAddress');
 
-    my $letter =  C4::Letters::GetPreparedLetter (
+    my %letter_params = (
         module => 'reserves',
-        letter_code => $letter_code,
         branchcode => $reserve->{branchcode},
         tables => {
             'branches'  => $branch_details,
@@ -1881,11 +1876,13 @@ sub _koha_notify_reserve {
             'items', $reserve->{'itemnumber'},
         },
         substitute => { today => C4::Dates->new()->output() },
-    ) or die "Could not find a letter called '$letter_code' in the 'reserves' module";
-
+    );
 
 
     if ( $print_mode ) {
+        $letter_params{ 'letter_code' } = 'HOLD_PRINT';
+        my $letter =  C4::Letters::GetPreparedLetter ( %letter_params ) or die "Could not find a letter called '$letter_params{'letter_code'}' in the 'reserves' module";
+
         C4::Letters::EnqueueLetter( {
             letter => $letter,
             borrowernumber => $borrowernumber,
@@ -1895,8 +1892,10 @@ sub _koha_notify_reserve {
         return;
     }
 
-    if ( grep { $_ eq 'email' } @{$messagingprefs->{transports}} ) {
-        # aka, 'email' in ->{'transports'}
+    if ( $to_address && defined $messagingprefs->{transports}->{'email'} ) {
+        $letter_params{ 'letter_code' } = $messagingprefs->{transports}->{'email'};
+        my $letter =  C4::Letters::GetPreparedLetter ( %letter_params ) or die "Could not find a letter called '$letter_params{'letter_code'}' in the 'reserves' module";
+
         C4::Letters::EnqueueLetter(
             {   letter                 => $letter,
                 borrowernumber         => $borrowernumber,
@@ -1906,7 +1905,10 @@ sub _koha_notify_reserve {
         );
     }
 
-    if ( grep { $_ eq 'sms' } @{$messagingprefs->{transports}} ) {
+    if ( $borrower->{'smsalertnumber'} && defined $messagingprefs->{transports}->{'sms'} ) {
+        $letter_params{ 'letter_code' } = $messagingprefs->{transports}->{'sms'};
+        my $letter =  C4::Letters::GetPreparedLetter ( %letter_params ) or die "Could not find a letter called '$letter_params{'letter_code'}' in the 'reserves' module";
+
         C4::Letters::EnqueueLetter(
             {   letter                 => $letter,
                 borrowernumber         => $borrowernumber,
index a113d4e..dd989ed 100644 (file)
@@ -26,7 +26,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.00;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
        @EXPORT = qw(getreview savereview updatereview numberofreviews numberofreviewsbybiblionumber
index dc86353..ce32ea9 100644 (file)
--- a/C4/Ris.pm
+++ b/C4/Ris.pm
@@ -65,7 +65,7 @@ package C4::Ris;
 use vars qw($VERSION @ISA @EXPORT);
 
 # set the version for version checking
-$VERSION = 3.00;
+$VERSION = 3.07.00.049;
 
 @ISA = qw(Exporter);
 
index b576868..d8b94b3 100644 (file)
@@ -37,7 +37,7 @@ use Data::Dumper;
 use vars qw($VERSION @ISA @EXPORT);
 
 # set the version for version checking
-$VERSION = 0.01;
+$VERSION = 3.07.00.049;
 
 =head1 NAME
 
index 1e900bd..80e8740 100644 (file)
@@ -25,7 +25,7 @@ use C4::Reserves;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
 
 BEGIN {
-       $VERSION = 2.11;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA = qw(Exporter);
        @EXPORT_OK = qw();
index 99fd6e7..f7400f4 100644 (file)
@@ -26,7 +26,7 @@ use Digest::MD5 qw(md5_base64);
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
 
 BEGIN {
-       $VERSION = 2.03;
+    $VERSION = 3.07.00.049;
        @ISA = qw(Exporter);
        @EXPORT_OK = qw(invalid_patron);
 }
index d483e16..7fa21d5 100644 (file)
@@ -24,7 +24,7 @@ use C4::Debug;
 use vars qw($VERSION @ISA $debug);
 
 BEGIN {
-       $VERSION = 1.03;
+    $VERSION = 3.07.00.049;
        @ISA = qw(ILS::Transaction);
 }
 
index 3026296..19bdd04 100644 (file)
@@ -27,7 +27,7 @@ use base qw(ILS::Transaction);
 use vars qw($VERSION @ISA $debug);
 
 our $debug   = 0;
-our $VERSION = 1.00;
+our $VERSION = 3.07.00.049;
 
 my %fields = ();
 
index 22abf65..4644b73 100644 (file)
@@ -16,7 +16,7 @@ use C4::Biblio;               # GetBiblioFromItemNumber GetBiblioItemByBiblioNumber
 use vars qw($VERSION @ISA);
 
 BEGIN {
-    $VERSION = 1.01;
+    $VERSION = 3.07.00.049;
            @ISA = qw(ILS::Transaction);
 }
 
index c6de11e..bab51e8 100644 (file)
@@ -21,7 +21,7 @@ use constant LOG_SIP => "local6"; # Local alias for the logging facility
 use vars qw(@ISA $VERSION);
 
 BEGIN {
-       $VERSION = 1.02;
+    $VERSION = 3.07.00.049;
        @ISA = qw(Net::Server::PreFork);
 }
 
index 4e3f299..e9e1392 100644 (file)
@@ -20,7 +20,7 @@ use Sip::Checksum qw(checksum);
 use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
-       $VERSION = 1.00;
+    $VERSION = 3.07.00.049;
        @ISA = qw(Exporter);
 
        @EXPORT_OK = qw(y_or_n timestamp add_field maybe_add add_count
index c3914c0..cc6b6d5 100644 (file)
@@ -24,7 +24,7 @@ use UNIVERSAL qw(can);        # make sure this is *after* C4 modules.
 use vars qw(@ISA $VERSION @EXPORT_OK);
 
 BEGIN {
-       $VERSION = 1.01;
+    $VERSION = 3.07.00.049;
        @ISA = qw(Exporter);
        @EXPORT_OK = qw(handle);
 }
index b4b1992..24580d6 100644 (file)
--- a/C4/SMS.pm
+++ b/C4/SMS.pm
@@ -40,7 +40,7 @@ use C4::Context;
 use vars qw( $VERSION );
 
 BEGIN {
-    $VERSION = 0.03;
+    $VERSION = 3.07.00.049;
 }
 
 =head1 METHODS
index e1cb5d0..703c28d 100644 (file)
@@ -46,7 +46,7 @@ eval {
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 0.5;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
 @EXPORT_OK=qw(
index e4bdb9b..fe7e2ce 100644 (file)
@@ -26,7 +26,7 @@ use Schedule::At;
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 0.02;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA = qw(Exporter);
        @EXPORT =
index a78865d..519ee7f 100644 (file)
@@ -27,7 +27,7 @@ use HTML::Scrubber;
 use C4::Context;
 use C4::Debug;
 
-our $VERSION = 0.02;
+our $VERSION = v3.07.00.049;
 
 
 my %scrubbertypes = (
index c786080..ee7d8d9 100644 (file)
@@ -39,7 +39,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
 
 # set the version for version checking
 BEGIN {
-    $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
     $DEBUG = ($ENV{DEBUG}) ? 1 : 0;
 }
 
index 07f0948..8e5bbcb 100644 (file)
@@ -30,7 +30,7 @@ use C4::Debug;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
-    $VERSION = 3.01;    # set version for version checking
+    $VERSION = 3.07.00.049;    # set version for version checking
     require Exporter;
     @ISA    = qw(Exporter);
     @EXPORT = qw(
index ee91bf4..449190f 100644 (file)
@@ -30,7 +30,7 @@ use C4::Koha;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
 
 BEGIN {
-       $VERSION = 3.02;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
        @EXPORT = qw(
index 11710f8..7457983 100644 (file)
@@ -29,7 +29,7 @@ our $debug;
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        @ISA    = qw(Exporter);
        @EXPORT = qw(
                &UpdateStats
index 60d0e99..0cb484a 100644 (file)
@@ -32,7 +32,7 @@ use C4::Letters;
 use List::MoreUtils qw<any>;
 use C4::Dates qw(format_date_in_iso);
 use base qw(Exporter);
-our $VERSION = 3.01;
+our $VERSION = 3.07.00.049;
 our @EXPORT  = qw<
     ConnectSuggestionAndBiblio
     CountSuggestion
index 4ca0786..4786b2c 100644 (file)
@@ -25,12 +25,13 @@ use Exporter;
 
 use C4::Context;
 use C4::Debug;
+#use Data::Dumper;
 
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 use vars qw($ext_dict $select_all @fields);
 
 BEGIN {
-       $VERSION = 0.03;
+    $VERSION = 3.07.00.049;
        @ISA = qw(Exporter);
        @EXPORT_OK = qw(
                &get_tag &get_tags &get_tag_rows
@@ -67,7 +68,7 @@ INIT {
        $select_all = "SELECT " . join(',',@fields) . "\n FROM   tags_all\n";
 }
 
-sub get_filters (;$) {
+sub get_filters {
        my $query = "SELECT * FROM tags_filters ";
        my ($sth);
        if (@_) {
@@ -83,7 +84,7 @@ sub get_filters (;$) {
 #      (SELECT count(*) FROM tags_all     ) as tags_all,
 #      (SELECT count(*) FROM tags_index   ) as tags_index,
 
-sub approval_counts () { 
+sub approval_counts {
        my $query = "SELECT
                (SELECT count(*) FROM tags_approval WHERE approved= 1) as approved_count,
                (SELECT count(*) FROM tags_approval WHERE approved=-1) as rejected_count,
@@ -115,7 +116,7 @@ sub get_count_by_tag_status  {
   return $sth->fetchrow;
 }
 
-sub remove_tag ($;$) {
+sub remove_tag {
        my $tag_id  = shift or return undef;
        my $user_id = (@_) ? shift : undef;
        my $rows = (defined $user_id) ?
@@ -143,25 +144,25 @@ sub remove_tag ($;$) {
        delete_tag_row_by_id($tag_id);
 }
 
-sub delete_tag_index ($$) {
+sub delete_tag_index {
        (@_) or return undef;
        my $sth = C4::Context->dbh->prepare("DELETE FROM tags_index WHERE term = ? AND biblionumber = ? LIMIT 1");
        $sth->execute(@_);
        return $sth->rows || 0;
 }
-sub delete_tag_approval ($) {
+sub delete_tag_approval {
        (@_) or return undef;
        my $sth = C4::Context->dbh->prepare("DELETE FROM tags_approval WHERE term = ? LIMIT 1");
        $sth->execute(shift);
        return $sth->rows || 0;
 }
-sub delete_tag_row_by_id ($) {
+sub delete_tag_row_by_id {
        (@_) or return undef;
        my $sth = C4::Context->dbh->prepare("DELETE FROM tags_all WHERE tag_id = ? LIMIT 1");
        $sth->execute(shift);
        return $sth->rows || 0;
 }
-sub delete_tag_rows_by_ids (@) {
+sub delete_tag_rows_by_ids {
        (@_) or return undef;
        my $i=0;
        foreach(@_) {
@@ -172,7 +173,7 @@ sub delete_tag_rows_by_ids (@) {
        return $i;
 }
 
-sub get_tag_rows ($) {
+sub get_tag_rows {
        my $hash = shift || {};
        my @ok_fields = @fields;
        push @ok_fields, 'limit';       # push the limit! :)
@@ -213,7 +214,7 @@ sub get_tag_rows ($) {
        return $sth->fetchall_arrayref({});
 }
 
-sub get_tags (;$) {            # i.e., from tags_index
+sub get_tags {         # i.e., from tags_index
        my $hash = shift || {};
        my @ok_fields = qw(term biblionumber weight limit sort approved);
        my $wheres;
@@ -282,7 +283,7 @@ sub get_tags (;$) {         # i.e., from tags_index
        return $sth->fetchall_arrayref({});
 }
 
-sub get_approval_rows (;$) {           # i.e., from tags_approval
+sub get_approval_rows {                # i.e., from tags_approval
        my $hash = shift || {};
        my @ok_fields = qw(term approved date_approved approved_by weight_total limit sort borrowernumber);
        my $wheres;
@@ -357,7 +358,7 @@ sub get_approval_rows (;$) {                # i.e., from tags_approval
        return $sth->fetchall_arrayref({});
 }
 
-sub is_approved ($) {
+sub is_approved {
        my $term = shift or return undef;
        my $sth = C4::Context->dbh->prepare("SELECT approved FROM tags_approval WHERE term = ?");
        $sth->execute($term);
@@ -368,7 +369,7 @@ sub is_approved ($) {
        return $sth->fetchrow;
 }
 
-sub get_tag_index ($;$) {
+sub get_tag_index {
        my $term = shift or return undef;
        my $sth;
        if (@_) {
@@ -432,7 +433,7 @@ sub remove_filter {
        return scalar @_;
 }
 
-sub add_tag_approval ($;$$) {  # or disapproval
+sub add_tag_approval { # or disapproval
        $debug and warn "add_tag_approval(" . join(", ",map {defined($_) ? $_ : 'UNDEF'} @_) . ")";
        my $term = shift or return undef;
        my $query = "SELECT * FROM tags_approval WHERE term = ?";
@@ -457,7 +458,7 @@ sub add_tag_approval ($;$$) {       # or disapproval
        return $sth->rows;
 }
 
-sub mod_tag_approval ($$$) {
+sub mod_tag_approval {
        my $operator = shift;
        defined $operator or return undef; # have to test defined to allow =0 (kohaadmin)
        my $term     = shift or return undef;
@@ -468,7 +469,7 @@ sub mod_tag_approval ($$$) {
        $sth->execute($operator,$approval,$term);
 }
 
-sub add_tag_index ($$;$) {
+sub add_tag_index {
        my $term         = shift or return undef;
        my $biblionumber = shift or return undef;
        my $query = "SELECT * FROM tags_index WHERE term = ? AND biblionumber = ?";
@@ -482,14 +483,14 @@ sub add_tag_index ($$;$) {
        return $sth->rows;
 }
 
-sub get_tag ($) {              # by tag_id
+sub get_tag {          # by tag_id
        (@_) or return undef;
        my $sth = C4::Context->dbh->prepare("$select_all WHERE tag_id = ?");
        $sth->execute(shift);
        return $sth->fetchrow_hashref;
 }
 
-sub rectify_weights (;$) {
+sub rectify_weights {
        my $dbh = C4::Context->dbh;
        my $sth;
        my $query = "
@@ -516,27 +517,27 @@ sub rectify_weights (;$) {
        return ($results,\%tally);
 }
 
-sub increment_weights ($$) {
+sub increment_weights {
        increment_weight(@_);
        increment_weight_total(shift);
 }
-sub decrement_weights ($$) {
+sub decrement_weights {
        decrement_weight(@_);
        decrement_weight_total(shift);
 }
-sub increment_weight_total ($) {
+sub increment_weight_total {
        _set_weight_total('weight_total+1',shift);
 }
-sub increment_weight ($$) {
+sub increment_weight {
        _set_weight('weight+1',shift,shift);
 }
-sub decrement_weight_total ($) {
+sub decrement_weight_total {
        _set_weight_total('weight_total-1',shift);
 }
-sub decrement_weight ($$) {
+sub decrement_weight {
        _set_weight('weight-1',shift,shift);
 }
-sub _set_weight_total ($$) {
+sub _set_weight_total {
        my $sth = C4::Context->dbh->prepare("
        UPDATE tags_approval
        SET    weight_total=" . (shift) . "
@@ -544,7 +545,7 @@ sub _set_weight_total ($$) {
        ");                                             # note: CANNOT use "?" for weight_total (see the args above).
        $sth->execute(shift);   # just the term
 }
-sub _set_weight ($$$) {
+sub _set_weight {
        my $dbh = C4::Context->dbh;
        my $sth = $dbh->prepare("
        UPDATE tags_index
@@ -555,7 +556,7 @@ sub _set_weight ($$$) {
        $sth->execute(@_);
 }
 
-sub add_tag ($$;$$) {  # biblionumber,term,[borrowernumber,approvernumber]
+sub add_tag {  # biblionumber,term,[borrowernumber,approvernumber]
        my $biblionumber = shift or return undef;
        my $term         = shift or return undef;
        my $borrowernumber = (@_) ? shift : 0;          # the user, default to kohaadmin
index 8122e71..819d304 100644 (file)
@@ -39,7 +39,7 @@ This is a class representing a token scanned from an HTML::Template .tmpl file.
 
 ###############################################################################
 
-$VERSION = 0.01;
+$VERSION = 3.07.00.049;
 
 @ISA = qw(Exporter);
 @EXPORT_OK = qw();
index 2a2d9fe..f723d76 100644 (file)
@@ -38,7 +38,7 @@ The predefined constants are
 
 ###############################################################################
 
-$VERSION = 0.01;
+$VERSION = 3.07.00.049;
 
 @ISA = qw(Exporter);
 @EXPORT_OK = qw(
index e8c9080..b7bcd37 100644 (file)
@@ -28,7 +28,7 @@ use vars qw($VERSION);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.00;
+    $VERSION = 3.07.00.049;
 }
 
 =head1 NAME
index 7502902..31d50eb 100644 (file)
@@ -27,7 +27,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $debug);
 
 BEGIN {
        require Exporter;
-       $VERSION = 1.00;        # set the version for version checking
+    $VERSION = 3.07.00.049;        # set the version for version checking
        $debug = $ENV{DEBUG} || 0;
        @ISA    = qw(Exporter);
        @EXPORT_OK = qw(&maxwidth &hashdump);
index 9a8e4e4..d658090 100644 (file)
@@ -23,7 +23,7 @@ require Exporter;
 use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
-    $VERSION    = 3.04,
+    $VERSION    = 3.07.00.049,
 
     @ISA        = qw(Exporter);
     @EXPORT     = qw(dt_build_orderby dt_build_having dt_get_params dt_build_query);
index 8ecb603..20f3620 100644 (file)
@@ -33,7 +33,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
 
 BEGIN {
     # set the version for version checking
-    $VERSION = 3.02;
+    $VERSION = 3.07.00.049;
     require Exporter;
     @ISA    = qw(Exporter);
     @EXPORT = qw(
index 09ec7c9..f21fd85 100644 (file)
@@ -44,7 +44,7 @@ use constant VIRTUALSHELVES_COUNT => 20;
 use vars qw($debug @EXPORT @ISA $VERSION);
 
 BEGIN {
-    $VERSION = 1.01;
+    $VERSION = 3.07.00.049;
     @ISA     = qw(Exporter);
     @EXPORT  = qw(&shelfpage);
     $debug   = $ENV{DEBUG} || 0;
index 13abf25..8616c95 100644 (file)
@@ -31,7 +31,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
        require Exporter;
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        @ISA = qw(Exporter);
        @EXPORT_OK = qw(
                &get_xisbns
index 56ba544..cbe1ff0 100644 (file)
@@ -39,7 +39,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
     require Exporter;
-    $VERSION = 0.03;
+    $VERSION = 3.07.00.049;
     @ISA = qw(Exporter);
     @EXPORT = qw(
         &XSLTParse4Display
index e1cb86a..e5130d6 100644 (file)
@@ -38,7 +38,7 @@ use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
        # set the version for version checking
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA = qw(Exporter);
        @EXPORT = qw(
index 636d73e..740a133 100644 (file)
@@ -92,6 +92,7 @@ sub set_in_cache {
     croak "No key" unless $key;
     $ENV{DEBUG} && warn "set_in_cache for $key";
 
+    return unless $self->{cache};
     return unless $self->{have_chi};
 
     if ( defined $expiry ) {
@@ -106,6 +107,7 @@ sub get_from_cache {
     my ( $self, $key ) = @_;
     croak "No key" unless $key;
     $ENV{DEBUG} && warn "get_from_cache for $key";
+    return unless $self->{cache};
     return unless $self->{have_chi};
     return $self->{cache}->get($key);
 }
@@ -113,12 +115,14 @@ sub get_from_cache {
 sub clear_from_cache {
     my ( $self, $key ) = @_;
     croak "No key" unless $key;
+    return unless $self->{cache};
     return unless $self->{have_chi};
     return $self->{cache}->remove($key);
 }
 
 sub flush_all {
     my $self = shift;
+    return unless $self->{cache};
     return unless $self->{have_chi};
     return $self->{cache}->clear();
 }
index 10c4eb0..bad19f5 100644 (file)
@@ -20,19 +20,23 @@ package Koha::Cache::Fastmmap;
 use strict;
 use warnings;
 use Carp;
-use CHI;
+use Module::Load::Conditional qw(can_load);
 
 use base qw(Koha::Cache);
 
 sub _cache_handle {
     my $class  = shift;
     my $params = shift;
-    return CHI->new(
-        driver     => 'FastMmap',
-        namespace  => $params->{'namespace'} || 'koha',
-        expire_in  => 600,
-        cache_size => $params->{'cachesize'} || '1m',
-    );
+    if ( can_load( modules => { CHI => undef } ) ) {
+        return CHI->new(
+            driver     => 'FastMmap',
+            namespace  => $params->{'namespace'} || 'koha',
+            expire_in  => 600,
+            cache_size => $params->{'cachesize'} || '1m',
+        );
+    } else {
+        return undef;
+    }
 }
 
 1;
index daeeb4a..da09765 100644 (file)
@@ -20,20 +20,24 @@ package Koha::Cache::Memory;
 use strict;
 use warnings;
 use Carp;
-use CHI;
+use Module::Load::Conditional qw(can_load);
 
 use base qw(Koha::Cache);
 
 sub _cache_handle {
     my $class  = shift;
     my $params = shift;
-    return CHI->new(
-        driver    => 'Memory',
-        namespace => $params->{'namespace'} || 'koha',
-        expire_in => 600,
-        max_size  => $params->{'max_size'} || 8192 * 1024,
-        global    => 1,
-    );
+    if ( can_load( modules => { CHI => undef } ) ) {
+        return CHI->new(
+            driver    => 'Memory',
+            namespace => $params->{'namespace'} || 'koha',
+            expire_in => 600,
+            max_size  => $params->{'max_size'} || 8192 * 1024,
+            global    => 1,
+        );
+    } else {
+        return undef;
+    }
 }
 
 1;
diff --git a/Koha/Template/Plugin/KohaBranchName.pm b/Koha/Template/Plugin/KohaBranchName.pm
new file mode 100644 (file)
index 0000000..a39aba0
--- /dev/null
@@ -0,0 +1,35 @@
+package Koha::Template::Plugin::KohaBranchName;
+
+# Copyright Bywater Solutions 2012
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha 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 Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use strict;
+use warnings;
+
+use Template::Plugin::Filter;
+use base qw( Template::Plugin::Filter );
+use warnings;
+use strict;
+
+use C4::Branch qw( GetBranchName );;
+
+sub filter {
+    my ($self,$branchcode) = @_;
+    return GetBranchName( $branchcode );
+}
+
+1;
index 521346b..7a02a5d 100755 (executable)
@@ -112,8 +112,9 @@ if ($op eq 'add_form') {
                                 hidelostitems           => $data->{'hidelostitems'},
                                category_type           => $data->{'category_type'},
                                DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
+                SMSSendDriver => C4::Context->preference("SMSSendDriver"),
+                TalkingTechItivaPhone => C4::Context->preference("TalkingTechItivaPhoneNotification"),
                                "type_".$data->{'category_type'} => 1,
-                               SMSSendDriver => C4::Context->preference("SMSSendDriver")
                                );
     if (C4::Context->preference('EnhancedMessagingPreferences')) {
         C4::Form::MessagingPreferences::set_form_values({ categorycode => $categorycode } , $template);
@@ -249,7 +250,7 @@ sub _get_brief_messaging_prefs {
             message_name            => $option->{'message_name'},
             $option->{'message_name'} => 1
         };
-        foreach my $transport ( @{$pref->{'transports'}} ) {
+        foreach my $transport ( keys %{$pref->{'transports'}} ) {
             push @{ $brief_pref->{'transports'} }, { transport => $transport };
         }
         push @$results, $brief_pref;
index f970890..91b4c99 100755 (executable)
@@ -720,6 +720,7 @@ $template->param(
     item_header_loop => \@header_value_loop,
     item             => \@loop_data,
     itemnumber       => $itemnumber,
+    barcode          => GetBarcodeFromItemnumber($itemnumber),
     itemtagfield     => $itemtagfield,
     itemtagsubfield  => $itemtagsubfield,
     op      => $nextop,
index bb7e7ee..e6e9af1 100755 (executable)
@@ -47,6 +47,10 @@ sub plugin_parameters {
 }
 
 sub plugin_javascript {
+    my $lang = C4::Context->preference('DefaultLanguageField008' );
+    $lang = "eng" unless $lang;
+    $lang = pack("A3", $lang);
+
     my ($dbh, $record, $tagslib, $field_number, $tabloop) = @_;
     my $function_name = $field_number;
     my $res           = "
@@ -54,11 +58,10 @@ sub plugin_javascript {
 //<![CDATA[
 
 function Focus$function_name(subfield_managed) {
-
        if ( document.getElementById(\"$field_number\").value ) {
        }
        else {
-               document.getElementById(\"$field_number\").value='$dateentered' + 'b        xxu||||| |||| 00| 0 eng d';
+        document.getElementById(\"$field_number\").value='$dateentered' + 'b        xxu||||| |||| 00| 0 $lang d';
        }
     return 1;
 }
@@ -80,6 +83,10 @@ function Clic$function_name(i) {
 }
 
 sub plugin {
+    my $lang = C4::Context->preference('DefaultLanguageField008' );
+    $lang = "eng" unless $lang;
+    $lang = pack("A3", $lang);
+
     my ($input) = @_;
     my $index   = $input->param('index');
     my $result  = $input->param('result');
@@ -96,7 +103,7 @@ sub plugin {
         }
     );
 
-    $result = "$dateentered" . "b        xxu||||| |||| 00| 0 eng d" unless $result;
+    $result = "$dateentered" . "b        xxu||||| |||| 00| 0 $lang d" unless $result;
     my $errorXml = '';
     # Check if the xml, xsd exists and is validated
     my $dir = C4::Context->config('intrahtdocs') . '/prog/' . $template->{lang} . '/modules/cataloguing/value_builder/';
index 4fc8919..5efe9a8 100755 (executable)
@@ -44,6 +44,9 @@ sub plugin_parameters {
 }
 
 sub plugin_javascript {
+    my $lang = C4::Context->preference('DefaultLanguageField008' );
+    $lang = "eng" unless $lang;
+    $lang = pack("A3", $lang);
     my ($dbh, $record, $tagslib, $field_number, $tabloop) = @_;
     my $function_name = $field_number;
     my $res           = "
@@ -55,7 +58,7 @@ function Focus$function_name(subfield_managed) {
        if ( document.getElementById(\"$field_number\").value ) {
        }
        else {
-               document.getElementById(\"$field_number\").value='$dateentered' + 't        xxu||||| |||| 00| 0 eng d';
+        document.getElementById(\"$field_number\").value='$dateentered' + 't        xxu||||| |||| 00| 0 $lang d';
        }
     return 1;
 }
@@ -78,6 +81,9 @@ function Clic$function_name(i) {
 }
 
 sub plugin {
+    my $lang = C4::Context->preference('DefaultLanguageField008' );
+    $lang = "eng" unless $lang;
+    $lang = pack("A3", $lang);
     my ($input) = @_;
     my $index   = $input->param('index');
     my $result  = $input->param('result');
@@ -95,7 +101,7 @@ sub plugin {
     );
 
     #  $result = "      t        xxu           00  0 eng d" unless $result;
-    $result = "$dateentered" . "t        xxu||||| |||| 00| 0 eng d" unless $result;
+    $result = "$dateentered" . "t        xxu||||| |||| 00| 0 $lang d" unless $result;
     my $f1    = substr($result, 0,  6);
     my $f6    = substr($result, 6,  1);
     my $f710  = substr($result, 7,  4);
index b6d8941..4511c84 100755 (executable)
@@ -27,11 +27,9 @@ use CGI;
 use C4::Output;
 use C4::Print;
 use C4::Auth qw/:DEFAULT get_session/;
-use C4::Dates qw/format_date/;
 use C4::Branch; # GetBranches
 use C4::Koha;   # GetPrinter
 use C4::Circulation;
-use C4::Overdues qw/CheckBorrowerDebarred/;
 use C4::Members;
 use C4::Biblio;
 use C4::Reserves;
@@ -94,7 +92,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user (
 my $branches = GetBranches();
 
 my @failedrenews = $query->param('failedrenew');    # expected to be itemnumbers 
-our %renew_failed;
+our %renew_failed = {};
 for (@failedrenews) { $renew_failed{$_} = 1; }
 
 my $findborrower = $query->param('findborrower');
@@ -241,7 +239,7 @@ if ($borrowernumber) {
             flagged  => "1",
             noissues => "1",
             expired => "1",
-            renewaldate => format_date("$renew_year-$renew_month-$renew_day")
+            renewaldate => "$renew_year-$renew_month-$renew_day",
         );
     }
     # check for NotifyBorrowerDeparture
@@ -250,7 +248,7 @@ if ($borrowernumber) {
             Date_to_Days( $today_year, $today_month, $today_day ) ) 
     {
         # borrower card soon to expire warn librarian
-        $template->param("warndeparture" => format_date($borrower->{dateexpiry}),
+        $template->param("warndeparture" => $borrower->{dateexpiry},
         flagged       => "1",);
         if (C4::Context->preference('ReturnBeforeExpiry')){
             $template->param("returnbeforeexpiry" => 1);
@@ -262,12 +260,12 @@ if ($borrowernumber) {
         finetotal    => $fines
     );
 
-    my $debar = CheckBorrowerDebarred($borrowernumber);
+    my $debar = $borrower->{debarred};
     if ($debar) {
         $template->param( 'userdebarred'    => 1 );
         $template->param( 'debarredcomment' => $borrower->{debarredcomment} );
         if ( $debar ne "9999-12-31" ) {
-            $template->param( 'userdebarreddate' => C4::Dates::format_date($debar) );
+            $template->param( 'userdebarreddate' => $debar );
         }
     }
 
@@ -351,7 +349,7 @@ if ($borrowernumber) {
         $getreserv{transfered}    = 0;
         $getreserv{nottransfered} = 0;
 
-        $getreserv{reservedate}    = format_date( $num_res->{'reservedate'} );
+        $getreserv{reservedate}    = $num_res->{'reservedate'};
         $getreserv{reservenumber}  = $num_res->{'reservenumber'};
         $getreserv{title}          = $getiteminfo->{'title'};
         $getreserv{itemtype}       = $itemtypeinfo->{'description'};
@@ -371,7 +369,7 @@ if ($borrowernumber) {
         $getWaitingReserveInfo{biblionumber} = $getiteminfo->{'biblionumber'};
         $getWaitingReserveInfo{itemtype}     = $itemtypeinfo->{'description'};
         $getWaitingReserveInfo{author}       = $getiteminfo->{'author'};
-        $getWaitingReserveInfo{reservedate}  = format_date( $num_res->{'reservedate'} );
+        $getWaitingReserveInfo{reservedate}  = $num_res->{'reservedate'};
         $getWaitingReserveInfo{waitingat}    = GetBranchName( $num_res->{'branchcode'} );
         $getWaitingReserveInfo{waitinghere}  = 1 if $num_res->{'branchcode'} eq $branch;
         }
@@ -379,7 +377,7 @@ if ($borrowernumber) {
         if ($transfertwhen) {
             $getreserv{color}      = 'transfered';
             $getreserv{transfered} = 1;
-            $getreserv{datesent}   = format_date($transfertwhen);
+            $getreserv{datesent}   = $transfertwhen;
             $getreserv{frombranch} = GetBranchName($transfertfrom);
         } elsif ($getiteminfo->{'holdingbranch'} ne $num_res->{'branchcode'}) {
             $getreserv{nottransfered}   = 1;
@@ -419,10 +417,10 @@ if ($borrowernumber) {
 # make the issued books table.
 my $todaysissues = '';
 my $previssues   = '';
-our @todaysissues;
-our @previousissues;
-our @relissues;
-our @relprevissues;
+our @todaysissues   = ();
+our @previousissues = ();
+our @relissues      = ();
+our @relprevissues  = ();
 my $displayrelissues;
 
 our $totalprice = 0;
@@ -450,16 +448,14 @@ sub build_issue_data {
         $it->{'can_renew'} = $can_renew;
         $it->{'can_confirm'} = !$can_renew && !$restype;
         $it->{'renew_error'} = $restype;
-        $it->{'checkoutdate'} = C4::Dates->new($it->{'issuedate'},'iso')->output('syspref');
+        $it->{'checkoutdate'} = $it->{'issuedate'};
+        $it->{'duedate'} = $it->{'date_due'};
+        $it->{'od'} = ( $it->{'date_due'} lt $todaysdate ) ? 1 : 0 ;
         $it->{'issuingbranchname'} = GetBranchName($it->{'branchcode'});
 
         $totalprice += $it->{'replacementprice'};
         $it->{'itemtype'} = $itemtypeinfo->{'description'};
         $it->{'itemtype_image'} = $itemtypeinfo->{'imageurl'};
-        $it->{'dd'} = output_pref($it->{'date_due'});
-        $it->{'displaydate'} = output_pref($it->{'issuedate'});
-        #$it->{'od'} = ( $it->{'date_due'} lt $todaysdate ) ? 1 : 0 ;
-        $it->{'od'} = $it->{'overdue'};
         ($it->{'author'} eq '') and $it->{'author'} = ' ';
         $it->{'renew_failed'} = $renew_failed{$it->{'itemnumber'}};
 
@@ -673,8 +669,8 @@ $template->param(
     surname           => $borrower->{'surname'},
     showname          => $borrower->{'showname'},
     category_type     => $borrower->{'category_type'},
-    dateexpiry        => format_date($newexpiry),
-    expiry            => format_date($borrower->{'dateexpiry'}),
+    dateexpiry        => $newexpiry,
+    expiry            => $borrower->{'dateexpiry'},
     categorycode      => $borrower->{'categorycode'},
     categoryname      => $borrower->{description},
     address           => $address,
@@ -710,7 +706,9 @@ $template->param(
     soundon           => C4::Context->preference("SoundOn"),
     fast_cataloging   => $fast_cataloging,
     CircAutoPrintQuickSlip   => C4::Context->preference("CircAutoPrintQuickSlip"),
-       activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''),
+    activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''),
+    SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'),
+    AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'),
 );
 
 # save stickyduedate to session
@@ -735,6 +733,4 @@ $template->param(
     canned_bor_notes_loop     => $canned_notes,
 );
 
-$template->param( AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds') );
-
 output_html_with_http_headers $query, $cookie, $template->output;
index bd60d42..38e9887 100755 (executable)
@@ -337,7 +337,6 @@ if ( $messages->{'Wrongbranch'} ){
 # case of wrong transfert, if the document wasn't transfered to the right library (according to branchtransfer (tobranch) BDD)
 
 if ( $messages->{'WrongTransfer'} and not $messages->{'WasTransfered'}) {
-    $messages->{'WrongTransfer'} = GetBranchName( $messages->{'WrongTransfer'} );
     $template->param(
         WrongTransfer  => 1,
         TransferWaitingAt => $messages->{'WrongTransfer'},
index bf4d3e0..588c641 100644 (file)
@@ -72,6 +72,7 @@ Build-Depends: libcgi-session-driver-memcached-perl,
  libtext-csv-perl,
  libtext-csv-xs-perl,
  libtext-iconv-perl,
+ libtext-unaccent-perl,
  libuniversal-require-perl,
  liburi-perl,
  libwww-perl,
index 5071bf1..4995639 100644 (file)
@@ -609,3 +609,4 @@ April 22 2012   Koha 3.8.0 released releases
 May 11 2012 Lyon 3 team becomes the 181th developer to have a patch pushed
 May 28 2012 Simon Story becomes the 182th developer to have a patch pushed
 May 28 2012 Piotr Kowalski becomes the 183th developer to have a patch pushed
+June 10 2012 Shari Perkins becomes the 184th developer to have a patch pushed
index c4a95da..93f96b2 100644 (file)
@@ -52,7 +52,7 @@ melm 001        Control-number
 melm 005        Date/time-last-modified
 melm 007        Microform-generation:n:range(data,11,1),Material-type,ff7-00:w:range(data,0,1),ff7-01:w:range(data,1,1),ff7-02:w:range(data,2,1),ff7-01-02:w:range(data,0,2)
 
-melm 008        date-entered-on-file:n:range(data,0,5),date-entered-on-file:s:range(data,0,5),pubdate:w:range(data,7,4),pubdate:n:range(data,7,4),pubdate:y:range(data,7,4),pubdate:s:range(data,7,4),pl:w:range(data,15,3),ta:w:range(data,22,1),ff8-23:w:range(data,23,1),ff8-29:w:range(data,29,1),lf:w:range(data,33,1),bio:w:range(data,34,1),ln:n:range(data,35,3),ctype:w:range(data,24,4),Record-source:w:range(data,39,0)
+melm 008        date-entered-on-file:n:range(data,0,5),date-entered-on-file:s:range(data,0,5),pubdate:w:range(data,7,4),pubdate:n:range(data,7,4),pubdate:y:range(data,7,4),pubdate:s:range(data,7,4),pl:w:range(data,15,3),ta:w:range(data,22,1),ff8-23:w:range(data,23,1),ff8-29:w:range(data,29,1),lf:w:range(data,33,1),bio:w:range(data,34,1),ln:w:range(data,35,3),ctype:w:range(data,24,4),Record-source:w:range(data,39,0)
 
 melm 010        LC-card-number,Identifier-standard
 melm 011        LC-card-number,Identifier-standard
index 4406e3d..153bcb7 100644 (file)
@@ -83,6 +83,7 @@ libtext-charwidth-perl        install
 libtext-csv-encoded-perl install
 libtext-csv-perl       install
 libtext-iconv-perl     install
+libtext-unaccent-perl  install
 libtext-wrapi18n-perl  install
 libtimedate-perl       install
 libtime-duration-perl  install
diff --git a/installer/data/mysql/atomicupdate/Bug-4246-Talking-Tech-itiva-phone-notifications.pl b/installer/data/mysql/atomicupdate/Bug-4246-Talking-Tech-itiva-phone-notifications.pl
new file mode 100644 (file)
index 0000000..7f288e2
--- /dev/null
@@ -0,0 +1,27 @@
+#! /usr/bin/perl
+use strict;
+use warnings;
+use C4::Context;
+my $dbh = C4::Context->dbh;
+
+# add phone message transport type
+$dbh->do("INSERT INTO message_transport_types (message_transport_type) VALUES ('phone')");
+
+# adds HOLD_PHONE and PREDUE_PHONE letters (as placeholders)
+$dbh->do("INSERT INTO letter (module, code, name, title, content) VALUES
+          ('reserves', 'HOLD_PHONE', 'Item Available for Pick-up (phone notice)', 'Item Available for Pick-up (phone notice)', 'Your item is available for pickup'),
+          ('circulation', 'PREDUE_PHONE', 'Advance Notice of Item Due (phone notice)', 'Advance Notice of Item Due (phone notice)', 'Your item is due soon'),
+          ('circulation', 'OVERDUE_PHONE', 'Overdue Notice (phone notice)', 'Overdue Notice (phone notice)', 'Your item is overdue')
+          ");
+
+# add phone notifications to patron message preferences options
+$dbh->do("INSERT INTO message_transports
+         (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES
+         (4, 'phone', 0, 'reserves', 'HOLD_PHONE'),
+         (2, 'phone', 0, 'circulation', 'PREDUE_PHONE')
+         ");
+
+# add TalkingTechItivaPhoneNotification syspref
+$dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('TalkingTechItivaPhoneNotification',0,'If ON, enables Talking Tech I-tiva phone notifications',NULL,'YesNo');");
+
+print "Upgrade done (Support for Talking Tech i-tiva phone notification system)\n";
index 79f192f..c4060fe 100644 (file)
@@ -366,3 +366,6 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('
 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SvcMaxReportRows','10','Maximum number of rows to return via the report web service.',NULL,'Integer');
 INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights','Choice');
 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('IssueLostItem', 'alert', 'alert|confirm|nothing', 'Defines what should be done when an attempt is made to issue an item that has been marked as lost.', 'Choice');
+INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsIntranet', '1', NULL , 'Allow holds to be suspended from the intranet.', 'YesNo');
+INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsOpac', '1', NULL , 'Allow holds to be suspended from the OPAC.', 'YesNo');
+INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('DefaultLanguageField008','','Fill in the default language for field 008 Range 35-37 (e.g. eng, nor, ger, see <a href="http://www.loc.gov/marc/languages/language_code.html">MARC Code List for Languages</a>)','','Free');
index 4ffac53..9b02cb9 100755 (executable)
@@ -5328,6 +5328,48 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
     SetVersion($DBversion);
 }
 
+$DBversion = "3.09.00.012";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsIntranet', '1', NULL , 'Allow holds to be suspended from the intranet.', 'YesNo')");
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsOpac', '1', NULL , 'Allow holds to be suspended from the OPAC.', 'YesNo')");
+    print "Upgrade to $DBversion done (Add system preference OpacBrowseResults ))\n";
+    SetVersion($DBversion);
+}
+
+$DBversion ="3.09.00.013";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('DefaultLanguageField008','','Fill in the default language for field 008 Range 35-37 (e.g. eng, nor, ger, see www.loc.gov/marc/languages/language_code.html)','','Free');");
+    print "Upgrade to $DBversion done (Add system preference DefaultLanguageField008))\n";
+    SetVersion($DBversion);
+}
+
+$DBversion ="3.09.00.014";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    # add phone message transport type
+    $dbh->do("INSERT INTO message_transport_types (message_transport_type) VALUES ('phone')");
+    
+    # adds HOLD_PHONE and PREDUE_PHONE letters (as placeholders)
+    $dbh->do("INSERT INTO letter (module, code, name, title, content) VALUES
+              ('reserves', 'HOLD_PHONE', 'Item Available for Pick-up (phone notice)', 'Item Available for Pick-up (phone notice)', 'Your item is available for pickup'),
+              ('circulation', 'PREDUE_PHONE', 'Advance Notice of Item Due (phone notice)', 'Advance Notice of Item Due (phone notice)', 'Your item is due soon'),
+              ('circulation', 'OVERDUE_PHONE', 'Overdue Notice (phone notice)', 'Overdue Notice (phone notice)', 'Your item is overdue')
+              ");
+    
+    # add phone notifications to patron message preferences options
+    $dbh->do("INSERT INTO message_transports
+             (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES
+             (4, 'phone', 0, 'reserves', 'HOLD_PHONE'),
+             (2, 'phone', 0, 'circulation', 'PREDUE_PHONE')
+             ");
+    
+    # add TalkingTechItivaPhoneNotification syspref
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('TalkingTechItivaPhoneNotification',0,'If ON, enables Talking Tech I-tiva phone notifications',NULL,'YesNo');");
+    
+    print "Upgrade done (Support for Talking Tech i-tiva phone notification system)\n";
+    SetVersion($DBversion);
+}
+
+
 =head1 FUNCTIONS
 
 =head2 TableExists($table)
index e591a73..555005b 100644 (file)
@@ -7,12 +7,6 @@ input:focus, textarea:focus {
     border-radius: 4px;
 }
 
-radio:focus, checkbox:focus {
-    border-color:#538200;
-    border-style:solid;
-    border-radius: 4px;
-}
-
 ::selection      { background:#538200; color:#ffffff; /* Safari and Opera */ }
 ::-moz-selection  { background:#538200; color:#ffffff; /* Firefox */ }
 
@@ -794,99 +788,6 @@ fieldset.rows .inputnote {
        margin : .5em 0 0 11em;
 }
 
-.ui-tabs-nav li {
-       margin-right : .5em;
-       position : relative;
-       top : -1px;
-}
-
-.ui-tabs-nav li.ui-tabs-selected {
-
-}
-
-.ui-tabs-nav a, .ui-tabs-nav a span, .ui-tabs-nav span.a {
-    background : none;
-       display : block;
-       padding: .2em .5em .25em .5em;
-}
-
-.ui-tabs-nav a, .ui-tabs-nav span.a {
-
-}
-
-.ui-tabs-nav .ui-tabs-selected a, .ui-tabs-nav .ui-tabs-selected span.a {
-    border-top: 1px solid #e6f0f2;
-    border-right: 1px solid #85ca11;
-    border-bottom: 1px solid #85ca11;
-    border-left: 1px solid #85ca11;
-       font-weight : bold;
-       text-align : center;
-       text-decoration : none;
-    border-radius: 0px 0px 4px 4px;
-    color : #000000;
-
-}
-
-.ui-tabs-nav .tabs-selected a, .ui-tabs-nav a:hover, .ui-tabs-nav a:focus, .ui-tabs-nav a:active, .ui-tabs-nav span.a {
-    outline: 0; /* prevent dotted border in Firefox */
-}
-
-.ui-tabs-nav .ui-tabs-selected a:hover {
-    color : #000000;
-}
-
-.ui-tabs-nav li.ui-tabs-selected {
-    /* background-color : #FFFFCC; */
-}
-
-.ui-tabs-nav .ui-tabs-selected a, .ui-tabs-nav a:hover, .ui-tabs-nav a:focus, .ui-tabs-nav a:active, .ui-tabs-nav span.a {
-        background : none;
-    outline: 0; /* prevent dotted border in Firefox */
-}
-
-.tabs-container {
-    border-top: 0;
-    padding : inherit;
-    background: #fff; /* declare background color for container to avoid distorted fonts in IE while fading */
-}
-.tabs-loading em {
-    padding: inherit;
-    background: none;
-}
-
-.toptabs {
-       margin-top : 1em;
-}
-
-.toptabs .ui-tabs-nav li {
-       margin-right : .5em;
-       position : relative;
-       top : 1px;
-}
-
-.toptabs .ui-tabs-nav li a, .toptabs .ui-tabs-nav li span.a {
-       background-color : #E6F0F2;
-    border : 1px solid #B9D8D9;
-       text-align : center;
-       text-decoration : none;
-    border-radius : 3px 3px 0 0;
-}
-
-.toptabs .ui-tabs-nav li.ui-tabs-selected a, .toptabs .ui-tabs-nav li.ui-tabs-selected span.a {
-       background-color : #FFF;
-       border-top : 1px solid #85CA11;
-        border-right : 1px solid #85CA11;
-      border-left : 1px solid #85CA11;
-       border-bottom : 1px solid #FFF;
-       margin-top : 0;
-    border-radius : 3px;
-}
-
-.toptabs .tabs-container {
-      border : 1px solid #B9D8D9;
-       padding : 1em;
-}
-
 .checkedout {
        color : #999999;
        font-style : italic;
@@ -905,7 +806,7 @@ fieldset.rows .inputnote {
     visibility:visible; /* you propably don't need to change this one */
     display:block;
 }
-#newbiblio a, #addchild a, #newentry a, #newshelf a, #newmenuc .first-child, #newsupplier .first-child, #newlabel a, #newtemplate a, #newlabelbatch a, #newpatroncardbatch a, #newprofile a, #newsubscription a, #newdictionary a, #newbasket a, #newrootbudget-button, #budgets_menuc .first-child, #periods_menuc .first-child {
+#newbiblio a, #addchild a, #newentry a, #newshelf a, #newmenuc .first-child, #newsupplier .first-child, #newlabel a, #newtemplate a, #newlabelbatch a, #newpatroncardbatch a, #newprofile a, #newsubscription a, #newdictionary a, #newbasket a, #newrootbudget-button, #budgets_menuc .first-child {
        padding-left : 34px;
        background-image: url("../../img/toolbar-new.gif");
        background-position : center left;
@@ -943,7 +844,8 @@ fieldset.rows .inputnote {
 #managelabel a,
 #managetemplate a,
 #managelabelbatch a,
-#manageprofile a {
+#manageprofile a,
+#periods_menuc .first-child {
        padding-left : 34px;
        background-image: url("../../img/toolbar-edit.gif");
        background-position : center left;
@@ -1274,6 +1176,15 @@ div.alert strong {
        color : #900;
 }
 
+div.dialog {
+  background : #FFC url(../../img/dialog-bg.gif) repeat-x left 0;
+  text-align : center;
+}
+
+.dialog li {
+ list-style-position:inside;
+}
+
 a.document {
        background-position : left middle;
        background-repeat : no-repeat;
@@ -2274,3 +2185,182 @@ ul.ui-autocomplete {
 .ui-autocomplete-loading {
     background: #FFF url("../../img/loading-small.gif") right center no-repeat;
 }
+
+/* jQuery UI standard tabs */
+.ui-tabs-nav .ui-tabs-selected a,
+.ui-tabs-nav a:hover,
+.ui-tabs-nav a:focus,
+.ui-tabs-nav a:active,
+.ui-tabs-nav span.a {
+    background: none repeat scroll 0 0 transparent;
+    outline: 0 none;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected {
+    background-color : #FFF;
+    border : 1px solid #B9D8D9;
+}
+
+.ui-widget,
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+    font-family : inherit;
+    font-size : inherit;
+}
+ul.ui-tabs-nav li {
+    list-style : none;
+}
+.ui-tabs.ui-widget-content {
+    background : transparent none;
+    border : 0;
+}
+
+.ui-tabs .ui-tabs-panel {
+    border : 1px solid #B9D8D9;
+}
+.ui-tabs-nav.ui-widget-header {
+    border : 0;
+    background : none;
+}
+.ui-tabs .ui-tabs-nav li {
+    background: #E6F0F2 none;
+    border: 1px solid #B9D8D9;
+    margin-right : .4em;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a {
+    color : #000;
+    font-weight : bold;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-state-default.ui-state-hover {
+    background : #EDF4F5 none;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected.ui-state-hover {
+    background : #FFF none;
+}
+
+.ui-tabs .ui-state-default a,
+.ui-tabs .ui-state-default a:link,
+.ui-tabs .ui-state-default a:visited {
+    color: #004D99;
+}
+
+.ui-tabs .ui-state-hover a,
+.ui-tabs .ui-state-hover a:link,
+.ui-tabs .ui-state-hover a:visited {
+    color: #538200;
+}
+
+.statictabs ul {
+    background: none repeat scroll 0 0 transparent;
+    border: 0 none;
+    margin: 0;
+    padding: 0.2em 0.2em 0;
+    border-bottom-right-radius: 4px;
+    border-bottom-left-radius: 4px;
+    border-top-right-radius: 4px;
+    border-top-left-radius: 4px;
+    color: #222222;
+    font-weight: bold;
+    font-size: 100%;
+    line-height: 1.3;
+    list-style: none outside none;
+    outline: 0 none;
+    text-decoration: none;
+}
+
+.statictabs ul:after {
+    clear: both;
+}
+
+.statictabs ul:before,
+.statictabs ul:after {
+    content: "";
+    display: table;
+}
+
+.statictabs ul li {
+    background: none repeat scroll 0 0 #E6F0F2;
+    border: 1px solid #B9D8D9;
+    border-bottom: 0 none !important;
+    border-top-right-radius: 4px;
+    border-top-left-radius: 4px;
+    float: left;
+    list-style: none outside none;
+    margin-bottom: 0;
+    margin-right: 0.4em;
+    padding: 0;
+    position: relative;
+    white-space: nowrap;
+    top: 1px;
+    color: #555555;
+    font-weight: normal;
+
+}
+
+.statictabs ul li.active {
+    background-color: #FFFFFF;
+    color: #212121;
+    font-weight: normal;
+    padding-bottom: 1px;
+}
+
+.statictabs ul li a {
+    color: #004D99;
+    cursor: pointer;
+    float: left;
+    padding: 0.5em 1em;
+    text-decoration: none;
+}
+
+.statictabs ul li a:hover {
+    background-color : #EDF4F5;
+    border-top-right-radius: 4px;
+    border-top-left-radius: 4px;
+    color : #538200;
+}
+
+.statictabs ul li.active a {
+    color: #000000;
+    font-weight: bold;
+    cursor: text;
+    background: none repeat scroll 0 0 transparent;
+    outline: 0 none;
+}
+
+.statictabs .tabs-container {
+    border: 1px solid #B9D8D9;
+    background: none repeat scroll 0 0 transparent;
+    display: block;
+    padding: 1em 1.4em;
+    border-bottom-right-radius: 4px;
+    border-bottom-left-radius: 4px;
+    color: #222222;
+}
+
+/* jQuery UI header search box tabs */
+#header_search ul.ui-tabs-nav {
+    padding-top : 0;
+    margin-left: 1em;
+}
+#header_search ul.ui-tabs-nav li.ui-state-default {
+    border: 0 !important;
+    background : transparent none; top: 0;
+}
+#header_search ul.ui-tabs-nav li.ui-state-default a {
+    padding : .3em .6em;
+}
+#header_search ul.ui-tabs-nav li.ui-tabs-selected {
+    background-color : #FFFFF1;
+    border: 1px solid #85CA11 !important;
+    border-top: 0 !important; top: -1px;
+}
+#header_search ul.ui-tabs-nav li.ui-tabs-selected a {
+    text-decoration: none;
+}
+#header_search .ui-corner-top {
+     border-radius: 0 0 4px 4px;
+}
index cc796fa..5855c78 100644 (file)
@@ -7,7 +7,7 @@
            <input type="text" size="25" name="supplier" id="supplier" class="focus" />
             <input type="submit" class="submit" value="Submit" /></form>
 </div>
-       <div id="orders_search" class="residentsearch" style="display:none;">
+    <div id="orders_search" class="residentsearch">
        <p class="tip">Search orders:</p>
        
                <form action="/cgi-bin/koha/acqui/histsearch.pl" method="post">
@@ -24,8 +24,8 @@
        </form>
        </div>  
                        <ul id="tabtriggers">
-            <li><a href="/cgi-bin/koha/acqui/booksellers.pl#supplier_search">Vendor search</a></li>
-            <li><a href="/cgi-bin/koha/acqui/histsearch.pl#orders_search">Orders search</a></li>
+            <li><a href="#supplier_search">Vendor search</a></li>
+            <li><a href="#orders_search">Orders search</a></li>
                        </ul>   
 </div><!-- /header_search -->
 </div><!-- /gradient -->
index 9a2f9c5..151986d 100644 (file)
@@ -31,7 +31,7 @@
          <input type="submit" class="submit" value="Submit" />
     </form>
     </div>
-    <div id="main_heading" class="residentsearch" style="display:none;">
+    <div id="main_heading" class="residentsearch">
     <p class="tip">Enter authority heading:</p>
     <form action="/cgi-bin/koha/authorities/authorities-home.pl" method="get">
         <input type="hidden" name="op" value="do_search" />
@@ -62,7 +62,7 @@
         <input type="submit" class="submit" value="Submit" />
     </form>
     </div>
-    <div id="all_headings" class="residentsearch" style="display:none;">
+    <div id="all_headings" class="residentsearch">
     <p class="tip">Enter any authority field:</p>
     <form action="/cgi-bin/koha/authorities/authorities-home.pl" method="get">
         <input type="hidden" name="op" value="do_search" />
@@ -94,9 +94,9 @@
     </form>
     </div>
     <ul>
-        <li><a href="/cgi-bin/koha/authorities/authorities-home.pl#authority_search">Search authorities</a></li>
-        <li><a href="/cgi-bin/koha/authorities/authorities-home.pl#main_heading">Search main heading</a></li>
-        <li><a href="/cgi-bin/koha/authorities/authorities-home.pl#all_headings">Search all headings</a></li>
+        <li><a href="#authority_search">Search authorities</a></li>
+        <li><a href="#main_heading">Search main heading</a></li>
+        <li><a href="#all_headings">Search all headings</a></li>
     </ul>
 </div><!-- /header_search -->
 </div><!-- /gradient -->
index 5cb753a..0b70028 100644 (file)
@@ -25,7 +25,7 @@
 [% INCLUDE 'patron-search-box.inc' %]
 
     [% IF ( CAN_user_catalogue ) %]
-    <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
     <p class="tip">Enter search keywords:</p>
         <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
              <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -33,9 +33,9 @@
         </form>
     </div>[% END %]
             <ul>
-            <li><a href="/cgi-bin/koha/admin/aqbudgets.pl#budgets_search">Search funds</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#budgets_search">Search funds</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
             </ul>
 </div>
 </div>
index d813d17..186f1d1 100644 (file)
@@ -5,7 +5,7 @@
 [% INCLUDE 'patron-search-box.inc' %]
 
 [% IF ( CAN_user_circulate ) %]
-<div id="checkin_search" class="residentsearch" style="display:none;">
+<div id="checkin_search" class="residentsearch">
     <p class="tip">Scan a barcode to check in:</p>
     <form method="post" action="/cgi-bin/koha/circ/returns.pl" autocomplete="off">
         <input name="barcode" id="ret_barcode" size="40" />
@@ -24,9 +24,9 @@
        [% END %]
        
                        <ul>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-    [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/returns.pl#checkin_search">Check in</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li class="ui-tabs-selected"><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+    [% IF ( CAN_user_circulate ) %]<li><a href="#checkin_search">Check in</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li class="ui-tabs-selected"><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div><!-- /header_search -->
 </div><!-- /gradient -->
index aa2fccd..ba878ce 100644 (file)
@@ -14,8 +14,8 @@
 </div>
     [% INCLUDE 'patron-search-box.inc' %]
                        <ul>
-            <li><a href="/cgi-bin/koha/catalogue/search.pl#addbooks_search">Cataloging search</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
+            <li><a href="#addbooks_search">Cataloging search</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
                        </ul>   
 </div><!-- /header_search -->
 </div><!-- /gradient -->
index 0ee0558..8fc03af 100644 (file)
@@ -3,7 +3,7 @@
 <div id="header_search">
 [% INCLUDE 'patron-search-box.inc' %]
 [% IF ( CAN_user_catalogue ) %]
-<div id="catalog_search" class="residentsearch" style="display:none;">
+<div id="catalog_search" class="residentsearch">
     <p class="tip">Enter search keywords:</p>
     <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
         <input type="text" name="q" id="search-form" size="40" />
@@ -12,8 +12,8 @@
 </div>
 [% END %]
 <ul>
-    [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-    [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+    [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+    [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
 </ul>   
 
 </div>
index 56b24bf..5a145c6 100644 (file)
@@ -4,7 +4,7 @@
 <div id="header_search">
     [% INCLUDE 'patron-search-box.inc' %]
 [% IF ( CAN_user_circulate ) %]
-<div id="checkin_search" class="residentsearch" style="display:none;">
+<div id="checkin_search" class="residentsearch">
     <p class="tip">Scan a barcode to check in:</p>
     <form method="post" action="/cgi-bin/koha/circ/returns.pl" autocomplete="off">
         <input name="barcode" id="ret_barcode" size="40" accesskey="r" />
@@ -12,7 +12,7 @@
     </form>
 </div>[% END %]
 [% IF ( CAN_user_catalogue ) %]
-<div id="catalog_search" class="residentsearch" style="display:none;">
+<div id="catalog_search" class="residentsearch">
     <p class="tip">Enter search keywords:</p>
     <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
         <input type="text" name="q" id="search-form" size="40" accesskey="q" />
@@ -21,9 +21,9 @@
 </div>[% END %]
 
 <ul>
-    [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-    [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/returns.pl#checkin_search">Check in</a></li>[% END %]
-    [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+    [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+    [% IF ( CAN_user_circulate ) %]<li><a href="#checkin_search">Check in</a></li>[% END %]
+    [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
 </ul>   
 
 </div><!-- /header_search -->
index 78ba751..cc46780 100644 (file)
@@ -12,7 +12,7 @@
     [% INCLUDE 'patron-search-box.inc' %]
 
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -20,9 +20,9 @@
                </form>
        </div>[% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/cities.pl#city_search">Search cities</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#city_search">Search cities</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div>
 </div>
index 6207e9d..31b41ac 100644 (file)
@@ -13,7 +13,7 @@
     [% INCLUDE 'patron-search-box.inc' %]
 
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -21,9 +21,9 @@
                </form>
        </div>[% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/aqcontact.pl#contract_description_search">Search contracts</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#contract_description_search">Search contracts</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div>
 <!-- End Patrons Admin Resident Search Box -->
index 8990676..26ccbbe 100644 (file)
@@ -10,7 +10,7 @@
        </div>
     [% INCLUDE 'patron-search-box.inc' %]
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -18,9 +18,9 @@
                </form>
        </div>[% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/currency.pl#currency_search">Search currencies</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#currency_search">Search currencies</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div>
 <!-- End Currencies Resident Search Box -->
index 4d83a5b..32eae21 100644 (file)
@@ -1,7 +1,6 @@
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <link rel="shortcut icon" href="[% IF ( IntranetFavicon ) %][% IntranetFavicon %][% ELSE %][% themelang %]/includes/favicon.ico[% END %]" type="image/x-icon" />
 <link rel="stylesheet" type="text/css" href="[% themelang %]/lib/jquery/jquery-ui.css" />
-<link rel="stylesheet" type="text/css" href="[% themelang %]/lib/jquery/plugins/ui.tabs.css" />
 <link rel="stylesheet" type="text/css" media="print" href="[% themelang %]/css/print.css" />
 [% IF ( intranetstylesheet ) %]
     <link rel="stylesheet" type="text/css" href="[% intranetstylesheet %]" />
@@ -10,7 +9,6 @@
 [% END %]
 [% IF ( IntranetUserCSS ) %]<style type="text/css">[% IntranetUserCSS %]</style>[% END %]
 <script type="text/javascript" src="[% themelang %]/lib/jquery/jquery.js"></script>
-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/ui.tabs.js"></script>
 <script type="text/javascript" src="[% themelang %]/lib/jquery/jquery-ui.js"></script>
 <script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.hotkeys.min.js"></script>
 <script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.cookie.min.js"></script>
 
 <!-- yui js --> 
 <script type="text/javascript" src="[% yuipath %]/utilities/utilities.js"></script> 
-<script type="text/javascript" src="[% yuipath %]/datasource/datasource-min.js"></script>
-[% IF ( CircAutocompl ) %]
-    <script type="text/javascript" src="[% yuipath %]/autocomplete/autocomplete-min.js"></script>
-[% END %]
 <script type="text/javascript" src="[% yuipath %]/button/button-min.js"></script> 
 <script type="text/javascript" src="[% yuipath %]/container/container_core-min.js"></script> 
 <script type="text/javascript" src="[% yuipath %]/menu/menu-min.js"></script> 
index 8ea46f4..46d8b45 100644 (file)
@@ -4,7 +4,7 @@
 <div id="header_search">
     [% INCLUDE 'patron-search-box.inc' %]
 [% IF ( CAN_user_circulate ) %]
-<div id="checkin_search" class="residentsearch" style="display:none;">
+<div id="checkin_search" class="residentsearch">
     <p class="tip">Scan a barcode to check in:</p>
     <form method="post" action="/cgi-bin/koha/circ/returns.pl" autocomplete="off">
         <input name="barcode" id="ret_barcode" size="40" accesskey="r" />
 <div id="patron_search" class="residentsearch">
     <p class="tip">Enter patron card number or partial name:</p>
     <form action="/cgi-bin/koha/members/member.pl" method="post">
-        <input name="member" id="searchmember" size="40" type="text""/>
+        <input name="member" id="searchmember" size="40" type="text"/>
         <input value="Submit" class="submit" type="submit" />
     </form>
 </div>[% END %]
 [% IF ( CAN_user_catalogue ) %]
-<div id="catalog_search" class="residentsearch" style="display:none;">
+<div id="catalog_search" class="residentsearch">
     <p class="tip">Enter search keywords:</p>
     <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
         <input type="text" name="q" id="search-form" size="40" accesskey="q" />
 </div>[% END %]
 
 <ul>
-    [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-    [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/returns.pl#checkin_search">Check in</a></li>[% END %]
-    [% IF ( CAN_user_borrowers ) %]<li><a href="/cgi-bin/koha/members/members-home.pl#patron_search">Search patrons</a></li>[% END %]
-    [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+    [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+    [% IF ( CAN_user_circulate ) %]<li><a href="#checkin_search">Check in</a></li>[% END %]
+    [% IF ( CAN_user_borrowers ) %]<li><a href="#patron_search">Search patrons</a></li>[% END %]
+    [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
 </ul>
 
 </div><!-- /header_search -->
index 688923f..e55c0c1 100644 (file)
@@ -10,7 +10,7 @@
        </div>
     [% INCLUDE 'patron-search-box.inc' %]
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -18,9 +18,9 @@
                </form>
        </div>[% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/currency.pl#notices_search">Search notices</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#notices_search">Search notices</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div>
 <!-- End Notices Resident Search Box -->
index f12164f..b08c5ca 100644 (file)
@@ -21,6 +21,7 @@
     <tr><th></th>
         <th>Days in advance</th>
         [% IF ( SMSSendDriver ) %]<th>SMS</th>[% END %]
+        [% IF ( TalkingTechItivaPhone ) %]<th>Phone</th>[% END %]
         <th>Email</th><th>Digests only?</th>
         <!-- <th>RSS</th> -->
         [% UNLESS ( messaging_form_inactive ) %]<th>Do not notify</th>[% END %]
       <td>-</td>
       [% END %]
 
+      [% IF ( TalkingTechItivaPhone ) %]<td>
+          [% IF ( messaging_form_inactive ) %]
+              [% IF ( messaging_preference.transports_phone ) %]
+                 <input type="checkbox"
+                 id="phone[% messaging_preference.message_attribute_id %]"
+                 name="[% messaging_preference.message_attribute_id %]"
+                 value="phone" checked="checked" disabled="disabled" />
+              [% ELSE %]
+                 <input type="checkbox"
+                 id="phone[% messaging_preference.message_attribute_id %]"
+                 name="[% messaging_preference.message_attribute_id %]"
+                 value="phone" disabled="disabled" />
+              [% END %]
+          [% ELSE %]
+              [% IF ( messaging_preference.transports_phone ) %]
+                 <input type="checkbox"
+                 id="phone[% messaging_preference.message_attribute_id %]"
+                 name="[% messaging_preference.message_attribute_id %]"
+                 value="phone" checked="checked" onclick = "$('#none'+'[% messaging_preference.message_attribute_id %]').attr('checked','');" />
+              [% ELSE %]
+                 <input type="checkbox"
+                 id="phone[% messaging_preference.message_attribute_id %]"
+                 name="[% messaging_preference.message_attribute_id %]"
+                 value="phone" onclick = "$('#none'+'[% messaging_preference.message_attribute_id %]').attr('checked','');" />
+              [% END %]
+          [% END %]
+      </td>[% END %]
+
       [% IF ( messaging_preference.transport_email ) %]
       <td>
           [% IF ( messaging_form_inactive ) %]
index a346985..2749309 100644 (file)
@@ -45,7 +45,7 @@
     [% INCLUDE 'patron-search-box.inc' %]
 
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -53,7 +53,7 @@
                </form>
        </div>[% END %]
     [% IF ( CAN_user_circulate ) %]
-    <div id="checkin_search" class="residentsearch" style="display:none;">
+    <div id="checkin_search" class="residentsearch">
     <p class="tip">Scan a barcode to check in:</p>
     <form method="post" action="/cgi-bin/koha/circ/returns.pl" autocomplete="off">
     <input name="barcode" id="ret_barcode" size="40" accesskey="r" />
     </div>
     [% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/members/members-home.pl#patron_search">Search patrons</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-    [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/returns.pl#checkin_search">Check in</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#patron_search">Search patrons</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+    [% IF ( CAN_user_circulate ) %]<li><a href="#checkin_search">Check in</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>
 </div><!-- /header_search -->
 </div><!-- /gradient -->
index ca22d07..65d0aef 100644 (file)
@@ -10,7 +10,7 @@
        </div>
     [% INCLUDE 'patron-search-box.inc' %]
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -18,9 +18,9 @@
                </form>
        </div>[% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/categorie.pl#patron_category_search">Search patron categories</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#patron_category_search">Search patron categories</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div>
 </div>
index 7950abf..ad13bec 100644 (file)
@@ -12,7 +12,7 @@
        </div>
     [% INCLUDE 'patron-search-box.inc' %]
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -21,9 +21,9 @@
        </div>
        [% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/roadtype.pl#syspref_search">Search system preferences</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#syspref_search">Search system preferences</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>
 </div>
 </div>
index c03e81e..7559f03 100644 (file)
@@ -10,7 +10,7 @@
        </div>
     [% INCLUDE 'patron-search-box.inc' %]
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -19,9 +19,9 @@
        </div>
        [% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/printers.pl#printer_search">Search printers</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#printer_search">Search printers</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div>
 <!-- End Printers Resident Search Box -->
index 46cd4d8..21a83ab 100644 (file)
@@ -13,7 +13,7 @@
     [% INCLUDE 'patron-search-box.inc' %]
 
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -23,9 +23,9 @@
 
        [% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/roadtype.pl#roadtype_search">Search road types</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#roadtype_search">Search road types</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div>
 </div>
index de3afdf..dfb908f 100644 (file)
@@ -17,7 +17,7 @@
        </div>
     [% INCLUDE 'patron-search-box.inc' %]
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -26,9 +26,9 @@
        </div>
        [% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/serials/serials-home.pl#subscription_search">Search subscriptions</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#subscription_search">Search subscriptions</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div><!-- /header_search -->
 </div><!-- /gradient -->
index 4c300a8..270bab4 100644 (file)
@@ -10,7 +10,7 @@
        </div>
     [% INCLUDE 'patron-search-box.inc' %]
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -19,9 +19,9 @@
        </div>
        [% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/roadtype.pl#stopword_search">Search stop words</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#stopword_search">Search stop words</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div>
 <!-- End Stopwords Resident Search Box -->
index 24f0f4f..dd4d9f5 100644 (file)
@@ -15,7 +15,7 @@
     [% INCLUDE 'patron-search-box.inc' %]
 
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -24,9 +24,9 @@
        </div>
        [% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/acqui/newordersuggestion.pl?booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]#suggestions_search">Search suggestions</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
-                       </ul>   
+            <li><a href="#suggestions_search">Search suggestions</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
+            </ul>
 </div>
 <!-- End Suggestions Resident Search Box -->
index 5a2f6ad..fa9fc4b 100644 (file)
@@ -11,7 +11,7 @@
        </div>
     [% INCLUDE 'patron-search-box.inc' %]
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -20,9 +20,9 @@
        </div>
        [% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/roadtype.pl#syspref_search">Search system preferences</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#syspref_search">Search system preferences</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div>
 <!-- End Stopwords Resident Search Box -->
index b64b500..2b3ce19 100644 (file)
@@ -1,7 +1,7 @@
 <div id="header" class="gradient">
 <h1 id="logo"><a href="/cgi-bin/koha/mainpage.pl">[% LibraryName %]</a></h1><!-- Begin z3950 Admin Resident Search Box -->
 <div id="header_search">
-       <div id="z3950_search" class="residentsearch">
+    <div id="z3950_search" class="residentsearch">
     <p class="tip">Z39.50 server search:</p>
        <form action="/cgi-bin/koha/admin/z3950servers.pl" method="post">
                 <input type="text" name="searchfield" size="40" value="[% searchfield %]" />
@@ -12,7 +12,7 @@
     [% INCLUDE 'patron-search-box.inc' %]
 
        [% IF ( CAN_user_catalogue ) %]
-       <div id="catalog_search" class="residentsearch" style="display:none;">
+    <div id="catalog_search" class="residentsearch">
        <p class="tip">Enter search keywords:</p>
                <form action="/cgi-bin/koha/catalogue/search.pl"  method="get" id="cat-search-block">
                         <input type="text" name="q" id="search-form" size="40" value="" title="Enter the terms you wish to search for." class="form-text" />
@@ -21,9 +21,9 @@
        </div>
        [% END %]
                        <ul>
-            <li><a href="/cgi-bin/koha/admin/z3950servers.pl#z3950_search">Search Z390.50 servers</a></li>
-            [% IF ( CAN_user_circulate ) %]<li><a href="/cgi-bin/koha/circ/circulation.pl#circ_search">Check out</a></li>[% END %]
-            [% IF ( CAN_user_catalogue ) %]<li><a href="/cgi-bin/koha/catalogue/search.pl#catalog_search">Search the catalog</a></li>[% END %]
+            <li><a href="#z3950_search">Search Z390.50 servers</a></li>
+            [% IF ( CAN_user_circulate ) %]<li><a href="#circ_search">Check out</a></li>[% END %]
+            [% IF ( CAN_user_catalogue ) %]<li><a href="#catalog_search">Search the catalog</a></li>[% END %]
                        </ul>   
 </div>
 </div>
index bf45048..58fd190 100644 (file)
@@ -4,11 +4,11 @@ if ( KOHA === undefined ) var KOHA = {};
 function _(s) { return s } // dummy function for gettext
 
  $(document).ready(function() {
-       $('#header_search > ul').tabs().bind('show.ui-tabs', function(e, ui) { $('#header_search > div:not(.ui-tabs-hide)').find('input').eq(0).focus(); });
+    $('#header_search').tabs().bind('tabsshow', function(e, ui) { $('#header_search > div:not(.ui-tabs-hide)').find('input').eq(0).focus(); });
        $(".close").click(function(){ window.close(); });
-       if($("#header_search #checkin_search").length > 0){ $(document).bind('keydown','Alt+r',function (){ $("#header_search > ul").tabs("select","#checkin_search"); $("#ret_barcode").focus(); }); } else { $(document).bind('keydown','Alt+r',function (){ location.href="/cgi-bin/koha/circ/returns.pl"; }); }
-       if($("#header_search #circ_search").length > 0){ $(document).bind('keydown','Alt+u',function (){ $("#header_search > ul").tabs("select","#circ_search"); $("#findborrower").focus(); }); } else { $(document).bind('keydown','Alt+u',function(){ location.href="/cgi-bin/koha/circ/circulation.pl"; }); }
-       if($("#header_search #catalog_search").length > 0){ $(document).bind('keydown','Alt+q',function (){ $("#header_search > ul").tabs("select","#catalog_search"); $("#search-form").focus(); }); } else { $(document).bind('keydown','Alt+q',function(){ location.href="/cgi-bin/koha/catalogue/search.pl"; }); }
+    if($("#header_search #checkin_search").length > 0){ $(document).bind('keydown','Alt+r',function (){ $("#header_search").tabs("select","#checkin_search"); $("#ret_barcode").focus(); }); } else { $(document).bind('keydown','Alt+r',function (){ location.href="/cgi-bin/koha/circ/returns.pl"; }); }
+    if($("#header_search #circ_search").length > 0){ $(document).bind('keydown','Alt+u',function (){ $("#header_search").tabs("select","#circ_search"); $("#findborrower").focus(); }); } else { $(document).bind('keydown','Alt+u',function(){ location.href="/cgi-bin/koha/circ/circulation.pl"; }); }
+    if($("#header_search #catalog_search").length > 0){ $(document).bind('keydown','Alt+q',function (){ $("#header_search").tabs("select","#catalog_search"); $("#search-form").focus(); }); } else { $(document).bind('keydown','Alt+q',function(){ location.href="/cgi-bin/koha/catalogue/search.pl"; }); }
        $(".focus").focus();
  });
  
@@ -108,4 +108,4 @@ function openWindow(link,name,width,height) {
     width = (typeof width == "undefined")?'600':width;
     height = (typeof height == "undefined")?'400':height;
     var newin=window.open(link,name,'width='+width+',height='+height+',resizable=yes,toolbar=false,scrollbars=yes,top');
-}
\ No newline at end of file
+}
index 9cce3a6..e66faf0 100644 (file)
@@ -1,7 +1,7 @@
-/*
- * jQuery UI CSS Framework 1.8.18
+/*!
+ * jQuery UI CSS Framework 1.8.20
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
  * http://jquery.org/license
  *
 .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
 
 
-/*
- * jQuery UI CSS Framework 1.8.18
+/*!
+ * jQuery UI CSS Framework 1.8.20
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
  * http://jquery.org/license
  *
 
 /* Overlays */
 .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
- * jQuery UI Autocomplete 1.8.18
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!
+ * jQuery UI Autocomplete 1.8.20
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
  * http://jquery.org/license
  *
 * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
 
 /*
- * jQuery UI Menu 1.8.18
+ * jQuery UI Menu 1.8.20
  *
  * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
     font-weight: normal;
     margin: -1px;
 }
+/*!
+ * jQuery UI Tabs 1.8.20
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
index 3b49f39..789014a 100644 (file)
@@ -1,49 +1,25 @@
-/*!
- * jQuery UI 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);/*!
- * jQuery UI Widget 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)==="_")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);/*!
- * jQuery UI Mouse 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *     jquery.ui.widget.js
- */(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent")){a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);/*
- * jQuery UI Position 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1];return this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]!==e){var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0}},top:function(b,c){if(c.at[1]!==e){var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];if(!c||!c.ownerDocument)return null;if(b)return this.each(function(){a.offset.setOffset(this,b)});return h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);/*
- * jQuery UI Autocomplete 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.widget.js
- *     jquery.ui.position.js
- */(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!b.options.disabled&&!b.element.propAttr("readOnly")){d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._move("previous",c),c.preventDefault();break;case e.DOWN:b._move("next",c),c.preventDefault();break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){b.options.disabled||(b.selectedItem=null,b.previous=b.element.val())}).bind("blur.autocomplete",function(a){b.options.disabled||(clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150))}),this._initSource(),this.response=function(){return b._response.apply(b,arguments)},this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,d,e;a.isArray(this.options.source)?(d=this.options.source,this.source=function(b,c){c(a.ui.autocomplete.filter(d,b.term))}):typeof this.options.source=="string"?(e=this.options.source,this.source=function(d,f){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:e,data:d,dataType:"json",context:{autocompleteRequest:++c},success:function(a,b){this.autocompleteRequest===c&&f(a)},error:function(){this.autocompleteRequest===c&&f([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==!1)return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this.response)},_response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close(),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){if(b.length&&b[0].label&&b[0].value)return b;return a.map(b,function(b){if(typeof b=="string")return{label:b,value:b};return a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible"))this.search(null,b);else{if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)}},widget:function(){return this.menu.element}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){!a(c.target).closest(".ui-menu-item a").length||(c.preventDefault(),b.select(c))}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){!this.active||(this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null)},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active)this.activate(c,this.element.children(b));else{var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))}},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10}),result.length||(result=this.element.children(".ui-menu-item:first")),this.activate(b,result)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery);
\ No newline at end of file
+/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.core.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.20",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;return b[d]>0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}})})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.widget.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){return c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}}),d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;return e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e,f&&e.charAt(0)==="_"?h:(f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b)return h=f,!1}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))}),h)}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}return this._setOptions(e),this},_setOptions:function(b){var c=this;return a.each(b,function(a,b){c._setOption(a,b)}),this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.mouse.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent"))return a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(b){if(c)return;this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted)return b.preventDefault(),!0}return!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0,!0},_mouseMove:function(b){return!a.browser.msie||document.documentMode>=9||!!b.button?this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted):this._mouseUp(b)},_mouseUp:function(b){return a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.position.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;return i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1],this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]===e)return;var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0},top:function(b,c){if(c.at[1]===e)return;var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];return!c||!c.ownerDocument?null:b?this.each(function(){a.offset.setOffset(this,b)}):h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.autocomplete.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.isMultiLine=this.element.is("textarea"),this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(b.options.disabled||b.element.propAttr("readOnly"))return;d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._keyEvent("previous",c);break;case e.DOWN:b._keyEvent("next",c);break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){if(b.options.disabled)return;b.selectedItem=null,b.previous=b.element.val()}).bind("blur.autocomplete",function(a){if(b.options.disabled)return;clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150)}),this._initSource(),this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,c,d;a.isArray(this.options.source)?(c=this.options.source,this.source=function(b,d){d(a.ui.autocomplete.filter(c,b.term))}):typeof this.options.source=="string"?(d=this.options.source,this.source=function(c,e){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:d,data:c,dataType:"json",success:function(a,b){e(a)},error:function(){e([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)===!1)return;return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this._response())},_response:function(){var a=this,b=++c;return function(d){b===c&&a.__response(d),a.pending--,a.pending||a.element.removeClass("ui-autocomplete-loading")}},__response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close()},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){return b.length&&b[0].label&&b[0].value?b:a.map(b,function(b){return typeof b=="string"?{label:b,value:b}:a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible")){this.search(null,b);return}if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)},widget:function(){return this.menu.element},_keyEvent:function(a,b){if(!this.isMultiLine||this.menu.element.is(":visible"))this._move(a,b),b.preventDefault()}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(!a(c.target).closest(".ui-menu-item a").length)return;c.preventDefault(),b.select(c)}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){if(!this.active)return;this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active){this.activate(c,this.element.children(b));return}var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:first")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.tabs.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){function e(){return++c}function f(){return++d}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash)return e.selected=a,!1}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1)return this.blur(),!1;e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected"))return e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur(),!1;if(!f.length)return e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this)),this.blur(),!1}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){return typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$='"+a+"']"))),a},destroy:function(){var b=this.options;return this.abort(),this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.anchors.each(function(){var b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}),b.cookie&&this._cookie(null,b.cookie),this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);return j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e])),this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();return d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1<this.anchors.length?1:-1)),c.disabled=a.map(a.grep(c.disabled,function(a,c){return a!=b}),function(a,c){return a>=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0])),this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)==-1)return;return this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b])),this},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;return a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a]))),this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;return this.anchors.eq(a).trigger(this.options.event+".tabs"),this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}return this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs"),this},abort:function(){return this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup(),this},url:function(a,b){return this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b),this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.20"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a<c.anchors.length?a:0)},a),b&&b.stopPropagation()}),f=c._unrotate||(c._unrotate=b?function(a){e()}:function(a){a.clientX&&c.rotate(null)});return a?(this.element.bind("tabsshow",e),this.anchors.bind(d.event+".tabs",f),e()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",e),this.anchors.unbind(d.event+".tabs",f),delete this._rotate,delete this._unrotate),this}})})(jQuery);;
\ No newline at end of file
diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/assets/autocomplete-core.css b/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/assets/autocomplete-core.css
deleted file mode 100644 (file)
index 8143532..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
-Copyright (c) 2009, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.8.0r4
-*/
-/* This file intentionally left blank */
diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/assets/skins/sam/autocomplete-skin.css b/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/assets/skins/sam/autocomplete-skin.css
deleted file mode 100644 (file)
index 805530e..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-Copyright (c) 2009, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.8.0r4
-*/
-/* styles for entire widget */
-.yui-skin-sam .yui-ac {
-    position:relative;font-family:arial;font-size:100%;
-}
-
-/* styles for input field */
-.yui-skin-sam .yui-ac-input {
-    position:absolute;width:100%;
-}
-
-/* styles for results container */
-.yui-skin-sam .yui-ac-container {
-    position:absolute;top:1.6em;width:100%;
-}
-
-/* styles for header/body/footer wrapper within container */
-.yui-skin-sam .yui-ac-content {
-    position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050;
-}
-
-/* styles for container shadow */
-.yui-skin-sam .yui-ac-shadow {
-    position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity: 0.10;opacity:.10;filter:alpha(opacity=10);z-index:9049;
-}
-
-/* styles for container iframe */
-.yui-skin-sam .yui-ac iframe {
-    opacity:0;filter: alpha(opacity=0);
-    padding-right:.3em; padding-bottom:.3em; /* Bug 2026798: extend iframe to shim the shadow */
-}
-
-/* styles for results list */
-.yui-skin-sam .yui-ac-content ul{
-    margin:0;padding:0;width:100%;
-}
-
-/* styles for result item */
-.yui-skin-sam .yui-ac-content li {
-    margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;
-    zoom:1; /* For IE to trigger mouse events on LI */
-}
-
-/* styles for prehighlighted result item */
-.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight {
-    background:#B3D4FF;
-}
-
-/* styles for highlighted result item */
-.yui-skin-sam .yui-ac-content li.yui-ac-highlight {
-    background:#426FD9;color:#FFF;
-}
diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/assets/skins/sam/autocomplete.css b/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/assets/skins/sam/autocomplete.css
deleted file mode 100644 (file)
index 07fc030..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
-Copyright (c) 2009, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.8.0r4
-*/
-.yui-skin-sam .yui-ac{position:relative;font-family:arial;font-size:100%;}.yui-skin-sam .yui-ac-input{position:absolute;width:100%;}.yui-skin-sam .yui-ac-container{position:absolute;top:1.6em;width:100%;}.yui-skin-sam .yui-ac-content{position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050;}.yui-skin-sam .yui-ac-shadow{position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity:.10;opacity:.10;filter:alpha(opacity=10);z-index:9049;}.yui-skin-sam .yui-ac iframe{opacity:0;filter:alpha(opacity=0);padding-right:.3em;padding-bottom:.3em;}.yui-skin-sam .yui-ac-content ul{margin:0;padding:0;width:100%;}.yui-skin-sam .yui-ac-content li{margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;zoom:1;}.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight{background:#B3D4FF;}.yui-skin-sam .yui-ac-content li.yui-ac-highlight{background:#426FD9;color:#FFF;}
diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/autocomplete-debug.js b/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/autocomplete-debug.js
deleted file mode 100644 (file)
index 8910282..0000000
+++ /dev/null
@@ -1,3009 +0,0 @@
-/*
-Copyright (c) 2009, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.8.0r4
-*/
-/////////////////////////////////////////////////////////////////////////////
-//
-// YAHOO.widget.DataSource Backwards Compatibility
-//
-/////////////////////////////////////////////////////////////////////////////
-
-YAHOO.widget.DS_JSArray = YAHOO.util.LocalDataSource;
-
-YAHOO.widget.DS_JSFunction = YAHOO.util.FunctionDataSource;
-
-YAHOO.widget.DS_XHR = function(sScriptURI, aSchema, oConfigs) {
-    var DS = new YAHOO.util.XHRDataSource(sScriptURI, oConfigs);
-    DS._aDeprecatedSchema = aSchema;
-    return DS;
-};
-
-YAHOO.widget.DS_ScriptNode = function(sScriptURI, aSchema, oConfigs) {
-    var DS = new YAHOO.util.ScriptNodeDataSource(sScriptURI, oConfigs);
-    DS._aDeprecatedSchema = aSchema;
-    return DS;
-};
-
-YAHOO.widget.DS_XHR.TYPE_JSON = YAHOO.util.DataSourceBase.TYPE_JSON;
-YAHOO.widget.DS_XHR.TYPE_XML = YAHOO.util.DataSourceBase.TYPE_XML;
-YAHOO.widget.DS_XHR.TYPE_FLAT = YAHOO.util.DataSourceBase.TYPE_TEXT;
-
-// TODO: widget.DS_ScriptNode.scriptCallbackParam
-
-
-
- /**
- * The AutoComplete control provides the front-end logic for text-entry suggestion and
- * completion functionality.
- *
- * @module autocomplete
- * @requires yahoo, dom, event, datasource
- * @optional animation
- * @namespace YAHOO.widget
- * @title AutoComplete Widget
- */
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * The AutoComplete class provides the customizable functionality of a plug-and-play DHTML
- * auto completion widget.  Some key features:
- * <ul>
- * <li>Navigate with up/down arrow keys and/or mouse to pick a selection</li>
- * <li>The drop down container can "roll down" or "fly out" via configurable
- * animation</li>
- * <li>UI look-and-feel customizable through CSS, including container
- * attributes, borders, position, fonts, etc</li>
- * </ul>
- *
- * @class AutoComplete
- * @constructor
- * @param elInput {HTMLElement} DOM element reference of an input field.
- * @param elInput {String} String ID of an input field.
- * @param elContainer {HTMLElement} DOM element reference of an existing DIV.
- * @param elContainer {String} String ID of an existing DIV.
- * @param oDataSource {YAHOO.widget.DataSource} DataSource instance.
- * @param oConfigs {Object} (optional) Object literal of configuration params.
- */
-YAHOO.widget.AutoComplete = function(elInput,elContainer,oDataSource,oConfigs) {
-    if(elInput && elContainer && oDataSource) {
-        // Validate DataSource
-        if(oDataSource && YAHOO.lang.isFunction(oDataSource.sendRequest)) {
-            this.dataSource = oDataSource;
-        }
-        else {
-            YAHOO.log("Could not instantiate AutoComplete due to an invalid DataSource", "error", this.toString());
-            return;
-        }
-
-        // YAHOO.widget.DataSource schema backwards compatibility
-        // Converted deprecated schema into supported schema
-        // First assume key data is held in position 0 of results array
-        this.key = 0;
-        var schema = oDataSource.responseSchema;
-        // An old school schema has been defined in the deprecated DataSource constructor
-        if(oDataSource._aDeprecatedSchema) {
-            var aDeprecatedSchema = oDataSource._aDeprecatedSchema;
-            if(YAHOO.lang.isArray(aDeprecatedSchema)) {
-                
-                if((oDataSource.responseType === YAHOO.util.DataSourceBase.TYPE_JSON) || 
-                (oDataSource.responseType === YAHOO.util.DataSourceBase.TYPE_UNKNOWN)) { // Used to default to unknown
-                    // Store the resultsList
-                    schema.resultsList = aDeprecatedSchema[0];
-                    // Store the key
-                    this.key = aDeprecatedSchema[1];
-                    // Only resultsList and key are defined, so grab all the data
-                    schema.fields = (aDeprecatedSchema.length < 3) ? null : aDeprecatedSchema.slice(1);
-                }
-                else if(oDataSource.responseType === YAHOO.util.DataSourceBase.TYPE_XML) {
-                    schema.resultNode = aDeprecatedSchema[0];
-                    this.key = aDeprecatedSchema[1];
-                    schema.fields = aDeprecatedSchema.slice(1);
-                }                
-                else if(oDataSource.responseType === YAHOO.util.DataSourceBase.TYPE_TEXT) {
-                    schema.recordDelim = aDeprecatedSchema[0];
-                    schema.fieldDelim = aDeprecatedSchema[1];
-                }                
-                oDataSource.responseSchema = schema;
-            }
-        }
-        
-        // Validate input element
-        if(YAHOO.util.Dom.inDocument(elInput)) {
-            if(YAHOO.lang.isString(elInput)) {
-                    this._sName = "instance" + YAHOO.widget.AutoComplete._nIndex + " " + elInput;
-                    this._elTextbox = document.getElementById(elInput);
-            }
-            else {
-                this._sName = (elInput.id) ?
-                    "instance" + YAHOO.widget.AutoComplete._nIndex + " " + elInput.id:
-                    "instance" + YAHOO.widget.AutoComplete._nIndex;
-                this._elTextbox = elInput;
-            }
-            YAHOO.util.Dom.addClass(this._elTextbox, "yui-ac-input");
-        }
-        else {
-            YAHOO.log("Could not instantiate AutoComplete due to an invalid input element", "error", this.toString());
-            return;
-        }
-
-        // Validate container element
-        if(YAHOO.util.Dom.inDocument(elContainer)) {
-            if(YAHOO.lang.isString(elContainer)) {
-                    this._elContainer = document.getElementById(elContainer);
-            }
-            else {
-                this._elContainer = elContainer;
-            }
-            if(this._elContainer.style.display == "none") {
-                YAHOO.log("The container may not display properly if display is set to \"none\" in CSS", "warn", this.toString());
-            }
-            
-            // For skinning
-            var elParent = this._elContainer.parentNode;
-            var elTag = elParent.tagName.toLowerCase();
-            if(elTag == "div") {
-                YAHOO.util.Dom.addClass(elParent, "yui-ac");
-            }
-            else {
-                YAHOO.log("Could not find the wrapper element for skinning", "warn", this.toString());
-            }
-        }
-        else {
-            YAHOO.log("Could not instantiate AutoComplete due to an invalid container element", "error", this.toString());
-            return;
-        }
-
-        // Default applyLocalFilter setting is to enable for local sources
-        if(this.dataSource.dataType === YAHOO.util.DataSourceBase.TYPE_LOCAL) {
-            this.applyLocalFilter = true;
-        }
-        
-        // Set any config params passed in to override defaults
-        if(oConfigs && (oConfigs.constructor == Object)) {
-            for(var sConfig in oConfigs) {
-                if(sConfig) {
-                    this[sConfig] = oConfigs[sConfig];
-                }
-            }
-        }
-
-        // Initialization sequence
-        this._initContainerEl();
-        this._initProps();
-        this._initListEl();
-        this._initContainerHelperEls();
-
-        // Set up events
-        var oSelf = this;
-        var elTextbox = this._elTextbox;
-
-        // Dom events
-        YAHOO.util.Event.addListener(elTextbox,"keyup",oSelf._onTextboxKeyUp,oSelf);
-        YAHOO.util.Event.addListener(elTextbox,"keydown",oSelf._onTextboxKeyDown,oSelf);
-        YAHOO.util.Event.addListener(elTextbox,"focus",oSelf._onTextboxFocus,oSelf);
-        YAHOO.util.Event.addListener(elTextbox,"blur",oSelf._onTextboxBlur,oSelf);
-        YAHOO.util.Event.addListener(elContainer,"mouseover",oSelf._onContainerMouseover,oSelf);
-        YAHOO.util.Event.addListener(elContainer,"mouseout",oSelf._onContainerMouseout,oSelf);
-        YAHOO.util.Event.addListener(elContainer,"click",oSelf._onContainerClick,oSelf);
-        YAHOO.util.Event.addListener(elContainer,"scroll",oSelf._onContainerScroll,oSelf);
-        YAHOO.util.Event.addListener(elContainer,"resize",oSelf._onContainerResize,oSelf);
-        YAHOO.util.Event.addListener(elTextbox,"keypress",oSelf._onTextboxKeyPress,oSelf);
-        YAHOO.util.Event.addListener(window,"unload",oSelf._onWindowUnload,oSelf);
-
-        // Custom events
-        this.textboxFocusEvent = new YAHOO.util.CustomEvent("textboxFocus", this);
-        this.textboxKeyEvent = new YAHOO.util.CustomEvent("textboxKey", this);
-        this.dataRequestEvent = new YAHOO.util.CustomEvent("dataRequest", this);
-        this.dataReturnEvent = new YAHOO.util.CustomEvent("dataReturn", this);
-        this.dataErrorEvent = new YAHOO.util.CustomEvent("dataError", this);
-        this.containerPopulateEvent = new YAHOO.util.CustomEvent("containerPopulate", this);
-        this.containerExpandEvent = new YAHOO.util.CustomEvent("containerExpand", this);
-        this.typeAheadEvent = new YAHOO.util.CustomEvent("typeAhead", this);
-        this.itemMouseOverEvent = new YAHOO.util.CustomEvent("itemMouseOver", this);
-        this.itemMouseOutEvent = new YAHOO.util.CustomEvent("itemMouseOut", this);
-        this.itemArrowToEvent = new YAHOO.util.CustomEvent("itemArrowTo", this);
-        this.itemArrowFromEvent = new YAHOO.util.CustomEvent("itemArrowFrom", this);
-        this.itemSelectEvent = new YAHOO.util.CustomEvent("itemSelect", this);
-        this.unmatchedItemSelectEvent = new YAHOO.util.CustomEvent("unmatchedItemSelect", this);
-        this.selectionEnforceEvent = new YAHOO.util.CustomEvent("selectionEnforce", this);
-        this.containerCollapseEvent = new YAHOO.util.CustomEvent("containerCollapse", this);
-        this.textboxBlurEvent = new YAHOO.util.CustomEvent("textboxBlur", this);
-        this.textboxChangeEvent = new YAHOO.util.CustomEvent("textboxChange", this);
-        
-        // Finish up
-        elTextbox.setAttribute("autocomplete","off");
-        YAHOO.widget.AutoComplete._nIndex++;
-        YAHOO.log("AutoComplete initialized","info",this.toString());
-    }
-    // Required arguments were not found
-    else {
-        YAHOO.log("Could not instantiate AutoComplete due invalid arguments", "error", this.toString());
-    }
-};
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Public member variables
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * The DataSource object that encapsulates the data used for auto completion.
- * This object should be an inherited object from YAHOO.widget.DataSource.
- *
- * @property dataSource
- * @type YAHOO.widget.DataSource
- */
-YAHOO.widget.AutoComplete.prototype.dataSource = null;
-
-/**
- * By default, results from local DataSources will pass through the filterResults
- * method to apply a client-side matching algorithm. 
- * 
- * @property applyLocalFilter
- * @type Boolean
- * @default true for local arrays and json, otherwise false
- */
-YAHOO.widget.AutoComplete.prototype.applyLocalFilter = null;
-
-/**
- * When applyLocalFilter is true, the local filtering algorthim can have case sensitivity
- * enabled. 
- * 
- * @property queryMatchCase
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.queryMatchCase = false;
-
-/**
- * When applyLocalFilter is true, results can  be locally filtered to return
- * matching strings that "contain" the query string rather than simply "start with"
- * the query string.
- * 
- * @property queryMatchContains
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.queryMatchContains = false;
-
-/**
- * Enables query subset matching. When the DataSource's cache is enabled and queryMatchSubset is
- * true, substrings of queries will return matching cached results. For
- * instance, if the first query is for "abc" susequent queries that start with
- * "abc", like "abcd", will be queried against the cache, and not the live data
- * source. Recommended only for DataSources that return comprehensive results
- * for queries with very few characters.
- *
- * @property queryMatchSubset
- * @type Boolean
- * @default false
- *
- */
-YAHOO.widget.AutoComplete.prototype.queryMatchSubset = false;
-
-/**
- * Number of characters that must be entered before querying for results. A negative value
- * effectively turns off the widget. A value of 0 allows queries of null or empty string
- * values.
- *
- * @property minQueryLength
- * @type Number
- * @default 1
- */
-YAHOO.widget.AutoComplete.prototype.minQueryLength = 1;
-
-/**
- * Maximum number of results to display in results container.
- *
- * @property maxResultsDisplayed
- * @type Number
- * @default 10
- */
-YAHOO.widget.AutoComplete.prototype.maxResultsDisplayed = 10;
-
-/**
- * Number of seconds to delay before submitting a query request.  If a query
- * request is received before a previous one has completed its delay, the
- * previous request is cancelled and the new request is set to the delay. If 
- * typeAhead is also enabled, this value must always be less than the typeAheadDelay
- * in order to avoid certain race conditions. 
- *
- * @property queryDelay
- * @type Number
- * @default 0.2
- */
-YAHOO.widget.AutoComplete.prototype.queryDelay = 0.2;
-
-/**
- * If typeAhead is true, number of seconds to delay before updating input with
- * typeAhead value. In order to prevent certain race conditions, this value must
- * always be greater than the queryDelay.
- *
- * @property typeAheadDelay
- * @type Number
- * @default 0.5
- */
-YAHOO.widget.AutoComplete.prototype.typeAheadDelay = 0.5;
-
-/**
- * When IME usage is detected or interval detection is explicitly enabled,
- * AutoComplete will detect the input value at the given interval and send a
- * query if the value has changed.
- *
- * @property queryInterval
- * @type Number
- * @default 500
- */
-YAHOO.widget.AutoComplete.prototype.queryInterval = 500;
-
-/**
- * Class name of a highlighted item within results container.
- *
- * @property highlightClassName
- * @type String
- * @default "yui-ac-highlight"
- */
-YAHOO.widget.AutoComplete.prototype.highlightClassName = "yui-ac-highlight";
-
-/**
- * Class name of a pre-highlighted item within results container.
- *
- * @property prehighlightClassName
- * @type String
- */
-YAHOO.widget.AutoComplete.prototype.prehighlightClassName = null;
-
-/**
- * Query delimiter. A single character separator for multiple delimited
- * selections. Multiple delimiter characteres may be defined as an array of
- * strings. A null value or empty string indicates that query results cannot
- * be delimited. This feature is not recommended if you need forceSelection to
- * be true.
- *
- * @property delimChar
- * @type String | String[]
- */
-YAHOO.widget.AutoComplete.prototype.delimChar = null;
-
-/**
- * Whether or not the first item in results container should be automatically highlighted
- * on expand.
- *
- * @property autoHighlight
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.autoHighlight = true;
-
-/**
- * If autohighlight is enabled, whether or not the input field should be automatically updated
- * with the first query result as the user types, auto-selecting the substring portion
- * of the first result that the user has not yet typed.
- *
- * @property typeAhead
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.typeAhead = false;
-
-/**
- * Whether or not to animate the expansion/collapse of the results container in the
- * horizontal direction.
- *
- * @property animHoriz
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.animHoriz = false;
-
-/**
- * Whether or not to animate the expansion/collapse of the results container in the
- * vertical direction.
- *
- * @property animVert
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.animVert = true;
-
-/**
- * Speed of container expand/collapse animation, in seconds..
- *
- * @property animSpeed
- * @type Number
- * @default 0.3
- */
-YAHOO.widget.AutoComplete.prototype.animSpeed = 0.3;
-
-/**
- * Whether or not to force the user's selection to match one of the query
- * results. Enabling this feature essentially transforms the input field into a
- * &lt;select&gt; field. This feature is not recommended with delimiter character(s)
- * defined.
- *
- * @property forceSelection
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.forceSelection = false;
-
-/**
- * Whether or not to allow browsers to cache user-typed input in the input
- * field. Disabling this feature will prevent the widget from setting the
- * autocomplete="off" on the input field. When autocomplete="off"
- * and users click the back button after form submission, user-typed input can
- * be prefilled by the browser from its cache. This caching of user input may
- * not be desired for sensitive data, such as credit card numbers, in which
- * case, implementers should consider setting allowBrowserAutocomplete to false.
- *
- * @property allowBrowserAutocomplete
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.allowBrowserAutocomplete = true;
-
-/**
- * Enabling this feature prevents the toggling of the container to a collapsed state.
- * Setting to true does not automatically trigger the opening of the container.
- * Implementers are advised to pre-load the container with an explicit "sendQuery()" call.   
- *
- * @property alwaysShowContainer
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.alwaysShowContainer = false;
-
-/**
- * Whether or not to use an iFrame to layer over Windows form elements in
- * IE. Set to true only when the results container will be on top of a
- * &lt;select&gt; field in IE and thus exposed to the IE z-index bug (i.e.,
- * 5.5 < IE < 7).
- *
- * @property useIFrame
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.useIFrame = false;
-
-/**
- * Whether or not the results container should have a shadow.
- *
- * @property useShadow
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.useShadow = false;
-
-/**
- * Whether or not the input field should be updated with selections.
- *
- * @property suppressInputUpdate
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.suppressInputUpdate = false;
-
-/**
- * For backward compatibility to pre-2.6.0 formatResults() signatures, setting
- * resultsTypeList to true will take each object literal result returned by
- * DataSource and flatten into an array.  
- *
- * @property resultTypeList
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.resultTypeList = true;
-
-/**
- * For XHR DataSources, AutoComplete will automatically insert a "?" between the server URI and 
- * the "query" param/value pair. To prevent this behavior, implementers should
- * set this value to false. To more fully customize the query syntax, implementers
- * should override the generateRequest() method. 
- *
- * @property queryQuestionMark
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.queryQuestionMark = true;
-
-/**
- * If true, before each time the container expands, the container element will be
- * positioned to snap to the bottom-left corner of the input element. If
- * autoSnapContainer is set to false, this positioning will not be done.  
- *
- * @property autoSnapContainer
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.autoSnapContainer = true;
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Public methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
- /**
- * Public accessor to the unique name of the AutoComplete instance.
- *
- * @method toString
- * @return {String} Unique name of the AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.toString = function() {
-    return "AutoComplete " + this._sName;
-};
-
- /**
- * Returns DOM reference to input element.
- *
- * @method getInputEl
- * @return {HTMLELement} DOM reference to input element.
- */
-YAHOO.widget.AutoComplete.prototype.getInputEl = function() {
-    return this._elTextbox;
-};
-
- /**
- * Returns DOM reference to container element.
- *
- * @method getContainerEl
- * @return {HTMLELement} DOM reference to container element.
- */
-YAHOO.widget.AutoComplete.prototype.getContainerEl = function() {
-    return this._elContainer;
-};
-
- /**
- * Returns true if widget instance is currently active.
- *
- * @method isFocused
- * @return {Boolean} Returns true if widget instance is currently active.
- */
-YAHOO.widget.AutoComplete.prototype.isFocused = function() {
-    return this._bFocused;
-};
-
- /**
- * Returns true if container is in an expanded state, false otherwise.
- *
- * @method isContainerOpen
- * @return {Boolean} Returns true if container is in an expanded state, false otherwise.
- */
-YAHOO.widget.AutoComplete.prototype.isContainerOpen = function() {
-    return this._bContainerOpen;
-};
-
-/**
- * Public accessor to the &lt;ul&gt; element that displays query results within the results container.
- *
- * @method getListEl
- * @return {HTMLElement[]} Reference to &lt;ul&gt; element within the results container.
- */
-YAHOO.widget.AutoComplete.prototype.getListEl = function() {
-    return this._elList;
-};
-
-/**
- * Public accessor to the matching string associated with a given &lt;li&gt; result.
- *
- * @method getListItemMatch
- * @param elListItem {HTMLElement} Reference to &lt;LI&gt; element.
- * @return {String} Matching string.
- */
-YAHOO.widget.AutoComplete.prototype.getListItemMatch = function(elListItem) {
-    if(elListItem._sResultMatch) {
-        return elListItem._sResultMatch;
-    }
-    else {
-        return null;
-    }
-};
-
-/**
- * Public accessor to the result data associated with a given &lt;li&gt; result.
- *
- * @method getListItemData
- * @param elListItem {HTMLElement} Reference to &lt;LI&gt; element.
- * @return {Object} Result data.
- */
-YAHOO.widget.AutoComplete.prototype.getListItemData = function(elListItem) {
-    if(elListItem._oResultData) {
-        return elListItem._oResultData;
-    }
-    else {
-        return null;
-    }
-};
-
-/**
- * Public accessor to the index of the associated with a given &lt;li&gt; result.
- *
- * @method getListItemIndex
- * @param elListItem {HTMLElement} Reference to &lt;LI&gt; element.
- * @return {Number} Index.
- */
-YAHOO.widget.AutoComplete.prototype.getListItemIndex = function(elListItem) {
-    if(YAHOO.lang.isNumber(elListItem._nItemIndex)) {
-        return elListItem._nItemIndex;
-    }
-    else {
-        return null;
-    }
-};
-
-/**
- * Sets HTML markup for the results container header. This markup will be
- * inserted within a &lt;div&gt; tag with a class of "yui-ac-hd".
- *
- * @method setHeader
- * @param sHeader {String} HTML markup for results container header.
- */
-YAHOO.widget.AutoComplete.prototype.setHeader = function(sHeader) {
-    if(this._elHeader) {
-        var elHeader = this._elHeader;
-        if(sHeader) {
-            elHeader.innerHTML = sHeader;
-            elHeader.style.display = "";
-        }
-        else {
-            elHeader.innerHTML = "";
-            elHeader.style.display = "none";
-        }
-    }
-};
-
-/**
- * Sets HTML markup for the results container footer. This markup will be
- * inserted within a &lt;div&gt; tag with a class of "yui-ac-ft".
- *
- * @method setFooter
- * @param sFooter {String} HTML markup for results container footer.
- */
-YAHOO.widget.AutoComplete.prototype.setFooter = function(sFooter) {
-    if(this._elFooter) {
-        var elFooter = this._elFooter;
-        if(sFooter) {
-                elFooter.innerHTML = sFooter;
-                elFooter.style.display = "";
-        }
-        else {
-            elFooter.innerHTML = "";
-            elFooter.style.display = "none";
-        }
-    }
-};
-
-/**
- * Sets HTML markup for the results container body. This markup will be
- * inserted within a &lt;div&gt; tag with a class of "yui-ac-bd".
- *
- * @method setBody
- * @param sBody {String} HTML markup for results container body.
- */
-YAHOO.widget.AutoComplete.prototype.setBody = function(sBody) {
-    if(this._elBody) {
-        var elBody = this._elBody;
-        YAHOO.util.Event.purgeElement(elBody, true);
-        if(sBody) {
-            elBody.innerHTML = sBody;
-            elBody.style.display = "";
-        }
-        else {
-            elBody.innerHTML = "";
-            elBody.style.display = "none";
-        }
-        this._elList = null;
-    }
-};
-
-/**
-* A function that converts an AutoComplete query into a request value which is then
-* passed to the DataSource's sendRequest method in order to retrieve data for 
-* the query. By default, returns a String with the syntax: "query={query}"
-* Implementers can customize this method for custom request syntaxes.
-* 
-* @method generateRequest
-* @param sQuery {String} Query string
-* @return {MIXED} Request
-*/
-YAHOO.widget.AutoComplete.prototype.generateRequest = function(sQuery) {
-    var dataType = this.dataSource.dataType;
-    
-    // Transform query string in to a request for remote data
-    // By default, local data doesn't need a transformation, just passes along the query as is.
-    if(dataType === YAHOO.util.DataSourceBase.TYPE_XHR) {
-        // By default, XHR GET requests look like "{scriptURI}?{scriptQueryParam}={sQuery}&{scriptQueryAppend}"
-        if(!this.dataSource.connMethodPost) {
-            sQuery = (this.queryQuestionMark ? "?" : "") + (this.dataSource.scriptQueryParam || "query") + "=" + sQuery + 
-                (this.dataSource.scriptQueryAppend ? ("&" + this.dataSource.scriptQueryAppend) : "");        
-        }
-        // By default, XHR POST bodies are sent to the {scriptURI} like "{scriptQueryParam}={sQuery}&{scriptQueryAppend}"
-        else {
-            sQuery = (this.dataSource.scriptQueryParam || "query") + "=" + sQuery + 
-                (this.dataSource.scriptQueryAppend ? ("&" + this.dataSource.scriptQueryAppend) : "");
-        }
-    }
-    // By default, remote script node requests look like "{scriptURI}&{scriptCallbackParam}={callbackString}&{scriptQueryParam}={sQuery}&{scriptQueryAppend}"
-    else if(dataType === YAHOO.util.DataSourceBase.TYPE_SCRIPTNODE) {
-        sQuery = "&" + (this.dataSource.scriptQueryParam || "query") + "=" + sQuery + 
-            (this.dataSource.scriptQueryAppend ? ("&" + this.dataSource.scriptQueryAppend) : "");    
-    }
-    
-    return sQuery;
-};
-
-/**
- * Makes query request to the DataSource.
- *
- * @method sendQuery
- * @param sQuery {String} Query string.
- */
-YAHOO.widget.AutoComplete.prototype.sendQuery = function(sQuery) {
-    // Activate focus for a new interaction
-    this._bFocused = true;
-    
-    // Adjust programatically sent queries to look like they were input by user
-    // when delimiters are enabled
-    var newQuery = (this.delimChar) ? this._elTextbox.value + sQuery : sQuery;
-    this._sendQuery(newQuery);
-};
-
-/**
- * Snaps container to bottom-left corner of input element
- *
- * @method snapContainer
- */
-YAHOO.widget.AutoComplete.prototype.snapContainer = function() {
-    var oTextbox = this._elTextbox,
-        pos = YAHOO.util.Dom.getXY(oTextbox);
-    pos[1] += YAHOO.util.Dom.get(oTextbox).offsetHeight + 2;
-    YAHOO.util.Dom.setXY(this._elContainer,pos);
-};
-
-/**
- * Expands container.
- *
- * @method expandContainer
- */
-YAHOO.widget.AutoComplete.prototype.expandContainer = function() {
-    this._toggleContainer(true);
-};
-
-/**
- * Collapses container.
- *
- * @method collapseContainer
- */
-YAHOO.widget.AutoComplete.prototype.collapseContainer = function() {
-    this._toggleContainer(false);
-};
-
-/**
- * Clears entire list of suggestions.
- *
- * @method clearList
- */
-YAHOO.widget.AutoComplete.prototype.clearList = function() {
-    var allItems = this._elList.childNodes,
-        i=allItems.length-1;
-    for(; i>-1; i--) {
-          allItems[i].style.display = "none";
-    }
-};
-
-/**
- * Handles subset matching for when queryMatchSubset is enabled.
- *
- * @method getSubsetMatches
- * @param sQuery {String} Query string.
- * @return {Object} oParsedResponse or null. 
- */
-YAHOO.widget.AutoComplete.prototype.getSubsetMatches = function(sQuery) {
-    var subQuery, oCachedResponse, subRequest;
-    // Loop through substrings of each cached element's query property...
-    for(var i = sQuery.length; i >= this.minQueryLength ; i--) {
-        subRequest = this.generateRequest(sQuery.substr(0,i));
-        this.dataRequestEvent.fire(this, subQuery, subRequest);
-        YAHOO.log("Searching for query subset \"" + subQuery + "\" in cache", "info", this.toString());
-        
-        // If a substring of the query is found in the cache
-        oCachedResponse = this.dataSource.getCachedResponse(subRequest);
-        if(oCachedResponse) {
-            YAHOO.log("Found match for query subset \"" + subQuery + "\": " + YAHOO.lang.dump(oCachedResponse), "info", this.toString());
-            return this.filterResults.apply(this.dataSource, [sQuery, oCachedResponse, oCachedResponse, {scope:this}]);
-        }
-    }
-    YAHOO.log("Did not find subset match for query subset \"" + sQuery + "\"" , "info", this.toString());
-    return null;
-};
-
-/**
- * Executed by DataSource (within DataSource scope via doBeforeParseData()) to
- * handle responseStripAfter cleanup.
- *
- * @method preparseRawResponse
- * @param sQuery {String} Query string.
- * @return {Object} oParsedResponse or null. 
- */
-YAHOO.widget.AutoComplete.prototype.preparseRawResponse = function(oRequest, oFullResponse, oCallback) {
-    var nEnd = ((this.responseStripAfter !== "") && (oFullResponse.indexOf)) ?
-        oFullResponse.indexOf(this.responseStripAfter) : -1;
-    if(nEnd != -1) {
-        oFullResponse = oFullResponse.substring(0,nEnd);
-    }
-    return oFullResponse;
-};
-
-/**
- * Executed by DataSource (within DataSource scope via doBeforeCallback()) to
- * filter results through a simple client-side matching algorithm. 
- *
- * @method filterResults
- * @param sQuery {String} Original request.
- * @param oFullResponse {Object} Full response object.
- * @param oParsedResponse {Object} Parsed response object.
- * @param oCallback {Object} Callback object. 
- * @return {Object} Filtered response object.
- */
-
-YAHOO.widget.AutoComplete.prototype.filterResults = function(sQuery, oFullResponse, oParsedResponse, oCallback) {
-    // If AC has passed a query string value back to itself, grab it
-    if(oCallback && oCallback.argument && oCallback.argument.query) {
-        sQuery = oCallback.argument.query;
-    }
-
-    // Only if a query string is available to match against
-    if(sQuery && sQuery !== "") {
-        // First make a copy of the oParseResponse
-        oParsedResponse = YAHOO.widget.AutoComplete._cloneObject(oParsedResponse);
-        
-        var oAC = oCallback.scope,
-            oDS = this,
-            allResults = oParsedResponse.results, // the array of results
-            filteredResults = [], // container for filtered results,
-            nMax = oAC.maxResultsDisplayed, // max to find
-            bMatchCase = (oDS.queryMatchCase || oAC.queryMatchCase), // backward compat
-            bMatchContains = (oDS.queryMatchContains || oAC.queryMatchContains); // backward compat
-            
-        // Loop through each result object...
-        for(var i=0, len=allResults.length; i<len; i++) {
-            var oResult = allResults[i];
-
-            // Grab the data to match against from the result object...
-            var sResult = null;
-            
-            // Result object is a simple string already
-            if(YAHOO.lang.isString(oResult)) {
-                sResult = oResult;
-            }
-            // Result object is an array of strings
-            else if(YAHOO.lang.isArray(oResult)) {
-                sResult = oResult[0];
-            
-            }
-            // Result object is an object literal of strings
-            else if(this.responseSchema.fields) {
-                var key = this.responseSchema.fields[0].key || this.responseSchema.fields[0];
-                sResult = oResult[key];
-            }
-            // Backwards compatibility
-            else if(this.key) {
-                sResult = oResult[this.key];
-            }
-            
-            if(YAHOO.lang.isString(sResult)) {
-                
-                var sKeyIndex = (bMatchCase) ?
-                sResult.indexOf(decodeURIComponent(sQuery)) :
-                sResult.toLowerCase().indexOf(decodeURIComponent(sQuery).toLowerCase());
-
-                // A STARTSWITH match is when the query is found at the beginning of the key string...
-                if((!bMatchContains && (sKeyIndex === 0)) ||
-                // A CONTAINS match is when the query is found anywhere within the key string...
-                (bMatchContains && (sKeyIndex > -1))) {
-                    // Stash the match
-                    filteredResults.push(oResult);
-                }
-            }
-            
-            // Filter no more if maxResultsDisplayed is reached
-            if(len>nMax && filteredResults.length===nMax) {
-                break;
-            }
-        }
-        oParsedResponse.results = filteredResults;
-        YAHOO.log("Filtered " + filteredResults.length + " results against query \""  + sQuery + "\": " + YAHOO.lang.dump(filteredResults), "info", this.toString());
-    }
-    else {
-        YAHOO.log("Did not filter results against query", "info", this.toString());
-    }
-    
-    return oParsedResponse;
-};
-
-/**
- * Handles response for display. This is the callback function method passed to
- * YAHOO.util.DataSourceBase#sendRequest so results from the DataSource are
- * returned to the AutoComplete instance.
- *
- * @method handleResponse
- * @param sQuery {String} Original request.
- * @param oResponse {Object} Response object.
- * @param oPayload {MIXED} (optional) Additional argument(s)
- */
-YAHOO.widget.AutoComplete.prototype.handleResponse = function(sQuery, oResponse, oPayload) {
-    if((this instanceof YAHOO.widget.AutoComplete) && this._sName) {
-        this._populateList(sQuery, oResponse, oPayload);
-    }
-};
-
-/**
- * Overridable method called before container is loaded with result data.
- *
- * @method doBeforeLoadData
- * @param sQuery {String} Original request.
- * @param oResponse {Object} Response object.
- * @param oPayload {MIXED} (optional) Additional argument(s)
- * @return {Boolean} Return true to continue loading data, false to cancel.
- */
-YAHOO.widget.AutoComplete.prototype.doBeforeLoadData = function(sQuery, oResponse, oPayload) {
-    return true;
-};
-
-/**
- * Overridable method that returns HTML markup for one result to be populated
- * as innerHTML of an &lt;LI&gt; element. 
- *
- * @method formatResult
- * @param oResultData {Object} Result data object.
- * @param sQuery {String} The corresponding query string.
- * @param sResultMatch {HTMLElement} The current query string. 
- * @return {String} HTML markup of formatted result data.
- */
-YAHOO.widget.AutoComplete.prototype.formatResult = function(oResultData, sQuery, sResultMatch) {
-    var sMarkup = (sResultMatch) ? sResultMatch : "";
-    return sMarkup;
-};
-
-/**
- * Overridable method called before container expands allows implementers to access data
- * and DOM elements.
- *
- * @method doBeforeExpandContainer
- * @param elTextbox {HTMLElement} The text input box.
- * @param elContainer {HTMLElement} The container element.
- * @param sQuery {String} The query string.
- * @param aResults {Object[]}  An array of query results.
- * @return {Boolean} Return true to continue expanding container, false to cancel the expand.
- */
-YAHOO.widget.AutoComplete.prototype.doBeforeExpandContainer = function(elTextbox, elContainer, sQuery, aResults) {
-    return true;
-};
-
-
-/**
- * Nulls out the entire AutoComplete instance and related objects, removes attached
- * event listeners, and clears out DOM elements inside the container. After
- * calling this method, the instance reference should be expliclitly nulled by
- * implementer, as in myAutoComplete = null. Use with caution!
- *
- * @method destroy
- */
-YAHOO.widget.AutoComplete.prototype.destroy = function() {
-    var instanceName = this.toString();
-    var elInput = this._elTextbox;
-    var elContainer = this._elContainer;
-
-    // Unhook custom events
-    this.textboxFocusEvent.unsubscribeAll();
-    this.textboxKeyEvent.unsubscribeAll();
-    this.dataRequestEvent.unsubscribeAll();
-    this.dataReturnEvent.unsubscribeAll();
-    this.dataErrorEvent.unsubscribeAll();
-    this.containerPopulateEvent.unsubscribeAll();
-    this.containerExpandEvent.unsubscribeAll();
-    this.typeAheadEvent.unsubscribeAll();
-    this.itemMouseOverEvent.unsubscribeAll();
-    this.itemMouseOutEvent.unsubscribeAll();
-    this.itemArrowToEvent.unsubscribeAll();
-    this.itemArrowFromEvent.unsubscribeAll();
-    this.itemSelectEvent.unsubscribeAll();
-    this.unmatchedItemSelectEvent.unsubscribeAll();
-    this.selectionEnforceEvent.unsubscribeAll();
-    this.containerCollapseEvent.unsubscribeAll();
-    this.textboxBlurEvent.unsubscribeAll();
-    this.textboxChangeEvent.unsubscribeAll();
-
-    // Unhook DOM events
-    YAHOO.util.Event.purgeElement(elInput, true);
-    YAHOO.util.Event.purgeElement(elContainer, true);
-
-    // Remove DOM elements
-    elContainer.innerHTML = "";
-
-    // Null out objects
-    for(var key in this) {
-        if(YAHOO.lang.hasOwnProperty(this, key)) {
-            this[key] = null;
-        }
-    }
-
-    YAHOO.log("AutoComplete instance destroyed: " + instanceName);
-};
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Public events
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Fired when the input field receives focus.
- *
- * @event textboxFocusEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.textboxFocusEvent = null;
-
-/**
- * Fired when the input field receives key input.
- *
- * @event textboxKeyEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param nKeycode {Number} The keycode number.
- */
-YAHOO.widget.AutoComplete.prototype.textboxKeyEvent = null;
-
-/**
- * Fired when the AutoComplete instance makes a request to the DataSource.
- * 
- * @event dataRequestEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sQuery {String} The query string. 
- * @param oRequest {Object} The request.
- */
-YAHOO.widget.AutoComplete.prototype.dataRequestEvent = null;
-
-/**
- * Fired when the AutoComplete instance receives query results from the data
- * source.
- *
- * @event dataReturnEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sQuery {String} The query string.
- * @param aResults {Object[]} Results array.
- */
-YAHOO.widget.AutoComplete.prototype.dataReturnEvent = null;
-
-/**
- * Fired when the AutoComplete instance does not receive query results from the
- * DataSource due to an error.
- *
- * @event dataErrorEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sQuery {String} The query string.
- * @param oResponse {Object} The response object, if available.
- */
-YAHOO.widget.AutoComplete.prototype.dataErrorEvent = null;
-
-/**
- * Fired when the results container is populated.
- *
- * @event containerPopulateEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.containerPopulateEvent = null;
-
-/**
- * Fired when the results container is expanded.
- *
- * @event containerExpandEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.containerExpandEvent = null;
-
-/**
- * Fired when the input field has been prefilled by the type-ahead
- * feature. 
- *
- * @event typeAheadEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sQuery {String} The query string.
- * @param sPrefill {String} The prefill string.
- */
-YAHOO.widget.AutoComplete.prototype.typeAheadEvent = null;
-
-/**
- * Fired when result item has been moused over.
- *
- * @event itemMouseOverEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param elItem {HTMLElement} The &lt;li&gt element item moused to.
- */
-YAHOO.widget.AutoComplete.prototype.itemMouseOverEvent = null;
-
-/**
- * Fired when result item has been moused out.
- *
- * @event itemMouseOutEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param elItem {HTMLElement} The &lt;li&gt; element item moused from.
- */
-YAHOO.widget.AutoComplete.prototype.itemMouseOutEvent = null;
-
-/**
- * Fired when result item has been arrowed to. 
- *
- * @event itemArrowToEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param elItem {HTMLElement} The &lt;li&gt; element item arrowed to.
- */
-YAHOO.widget.AutoComplete.prototype.itemArrowToEvent = null;
-
-/**
- * Fired when result item has been arrowed away from.
- *
- * @event itemArrowFromEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param elItem {HTMLElement} The &lt;li&gt; element item arrowed from.
- */
-YAHOO.widget.AutoComplete.prototype.itemArrowFromEvent = null;
-
-/**
- * Fired when an item is selected via mouse click, ENTER key, or TAB key.
- *
- * @event itemSelectEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param elItem {HTMLElement} The selected &lt;li&gt; element item.
- * @param oData {Object} The data returned for the item, either as an object,
- * or mapped from the schema into an array.
- */
-YAHOO.widget.AutoComplete.prototype.itemSelectEvent = null;
-
-/**
- * Fired when a user selection does not match any of the displayed result items.
- *
- * @event unmatchedItemSelectEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sSelection {String} The selected string.  
- */
-YAHOO.widget.AutoComplete.prototype.unmatchedItemSelectEvent = null;
-
-/**
- * Fired if forceSelection is enabled and the user's input has been cleared
- * because it did not match one of the returned query results.
- *
- * @event selectionEnforceEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sClearedValue {String} The cleared value (including delimiters if applicable). 
- */
-YAHOO.widget.AutoComplete.prototype.selectionEnforceEvent = null;
-
-/**
- * Fired when the results container is collapsed.
- *
- * @event containerCollapseEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.containerCollapseEvent = null;
-
-/**
- * Fired when the input field loses focus.
- *
- * @event textboxBlurEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.textboxBlurEvent = null;
-
-/**
- * Fired when the input field value has changed when it loses focus.
- *
- * @event textboxChangeEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.textboxChangeEvent = null;
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Private member variables
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Internal class variable to index multiple AutoComplete instances.
- *
- * @property _nIndex
- * @type Number
- * @default 0
- * @private
- */
-YAHOO.widget.AutoComplete._nIndex = 0;
-
-/**
- * Name of AutoComplete instance.
- *
- * @property _sName
- * @type String
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sName = null;
-
-/**
- * Text input field DOM element.
- *
- * @property _elTextbox
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elTextbox = null;
-
-/**
- * Container DOM element.
- *
- * @property _elContainer
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elContainer = null;
-
-/**
- * Reference to content element within container element.
- *
- * @property _elContent
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elContent = null;
-
-/**
- * Reference to header element within content element.
- *
- * @property _elHeader
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elHeader = null;
-
-/**
- * Reference to body element within content element.
- *
- * @property _elBody
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elBody = null;
-
-/**
- * Reference to footer element within content element.
- *
- * @property _elFooter
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elFooter = null;
-
-/**
- * Reference to shadow element within container element.
- *
- * @property _elShadow
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elShadow = null;
-
-/**
- * Reference to iframe element within container element.
- *
- * @property _elIFrame
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elIFrame = null;
-
-/**
- * Whether or not the widget instance is currently active. If query results come back
- * but the user has already moved on, do not proceed with auto complete behavior.
- *
- * @property _bFocused
- * @type Boolean
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._bFocused = false;
-
-/**
- * Animation instance for container expand/collapse.
- *
- * @property _oAnim
- * @type Boolean
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._oAnim = null;
-
-/**
- * Whether or not the results container is currently open.
- *
- * @property _bContainerOpen
- * @type Boolean
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._bContainerOpen = false;
-
-/**
- * Whether or not the mouse is currently over the results
- * container. This is necessary in order to prevent clicks on container items
- * from being text input field blur events.
- *
- * @property _bOverContainer
- * @type Boolean
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._bOverContainer = false;
-
-/**
- * Internal reference to &lt;ul&gt; elements that contains query results within the
- * results container.
- *
- * @property _elList
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elList = null;
-
-/*
- * Array of &lt;li&gt; elements references that contain query results within the
- * results container.
- *
- * @property _aListItemEls
- * @type HTMLElement[]
- * @private
- */
-//YAHOO.widget.AutoComplete.prototype._aListItemEls = null;
-
-/**
- * Number of &lt;li&gt; elements currently displayed in results container.
- *
- * @property _nDisplayedItems
- * @type Number
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._nDisplayedItems = 0;
-
-/*
- * Internal count of &lt;li&gt; elements displayed and hidden in results container.
- *
- * @property _maxResultsDisplayed
- * @type Number
- * @private
- */
-//YAHOO.widget.AutoComplete.prototype._maxResultsDisplayed = 0;
-
-/**
- * Current query string
- *
- * @property _sCurQuery
- * @type String
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sCurQuery = null;
-
-/**
- * Selections from previous queries (for saving delimited queries).
- *
- * @property _sPastSelections
- * @type String
- * @default "" 
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sPastSelections = "";
-
-/**
- * Stores initial input value used to determine if textboxChangeEvent should be fired.
- *
- * @property _sInitInputValue
- * @type String
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sInitInputValue = null;
-
-/**
- * Pointer to the currently highlighted &lt;li&gt; element in the container.
- *
- * @property _elCurListItem
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elCurListItem = null;
-
-/**
- * Pointer to the currently pre-highlighted &lt;li&gt; element in the container.
- *
- * @property _elCurPrehighlightItem
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elCurPrehighlightItem = null;
-
-/**
- * Whether or not an item has been selected since the container was populated
- * with results. Reset to false by _populateList, and set to true when item is
- * selected.
- *
- * @property _bItemSelected
- * @type Boolean
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._bItemSelected = false;
-
-/**
- * Key code of the last key pressed in textbox.
- *
- * @property _nKeyCode
- * @type Number
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._nKeyCode = null;
-
-/**
- * Delay timeout ID.
- *
- * @property _nDelayID
- * @type Number
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._nDelayID = -1;
-
-/**
- * TypeAhead delay timeout ID.
- *
- * @property _nTypeAheadDelayID
- * @type Number
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._nTypeAheadDelayID = -1;
-
-/**
- * Src to iFrame used when useIFrame = true. Supports implementations over SSL
- * as well.
- *
- * @property _iFrameSrc
- * @type String
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._iFrameSrc = "javascript:false;";
-
-/**
- * For users typing via certain IMEs, queries must be triggered by intervals,
- * since key events yet supported across all browsers for all IMEs.
- *
- * @property _queryInterval
- * @type Object
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._queryInterval = null;
-
-/**
- * Internal tracker to last known textbox value, used to determine whether or not
- * to trigger a query via interval for certain IME users.
- *
- * @event _sLastTextboxValue
- * @type String
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sLastTextboxValue = null;
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Private methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Updates and validates latest public config properties.
- *
- * @method __initProps
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._initProps = function() {
-    // Correct any invalid values
-    var minQueryLength = this.minQueryLength;
-    if(!YAHOO.lang.isNumber(minQueryLength)) {
-        this.minQueryLength = 1;
-    }
-    var maxResultsDisplayed = this.maxResultsDisplayed;
-    if(!YAHOO.lang.isNumber(maxResultsDisplayed) || (maxResultsDisplayed < 1)) {
-        this.maxResultsDisplayed = 10;
-    }
-    var queryDelay = this.queryDelay;
-    if(!YAHOO.lang.isNumber(queryDelay) || (queryDelay < 0)) {
-        this.queryDelay = 0.2;
-    }
-    var typeAheadDelay = this.typeAheadDelay;
-    if(!YAHOO.lang.isNumber(typeAheadDelay) || (typeAheadDelay < 0)) {
-        this.typeAheadDelay = 0.2;
-    }
-    var delimChar = this.delimChar;
-    if(YAHOO.lang.isString(delimChar) && (delimChar.length > 0)) {
-        this.delimChar = [delimChar];
-    }
-    else if(!YAHOO.lang.isArray(delimChar)) {
-        this.delimChar = null;
-    }
-    var animSpeed = this.animSpeed;
-    if((this.animHoriz || this.animVert) && YAHOO.util.Anim) {
-        if(!YAHOO.lang.isNumber(animSpeed) || (animSpeed < 0)) {
-            this.animSpeed = 0.3;
-        }
-        if(!this._oAnim ) {
-            this._oAnim = new YAHOO.util.Anim(this._elContent, {}, this.animSpeed);
-        }
-        else {
-            this._oAnim.duration = this.animSpeed;
-        }
-    }
-    if(this.forceSelection && delimChar) {
-        YAHOO.log("The forceSelection feature has been enabled with delimChar defined.","warn", this.toString());
-    }
-};
-
-/**
- * Initializes the results container helpers if they are enabled and do
- * not exist
- *
- * @method _initContainerHelperEls
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._initContainerHelperEls = function() {
-    if(this.useShadow && !this._elShadow) {
-        var elShadow = document.createElement("div");
-        elShadow.className = "yui-ac-shadow";
-        elShadow.style.width = 0;
-        elShadow.style.height = 0;
-        this._elShadow = this._elContainer.appendChild(elShadow);
-    }
-    if(this.useIFrame && !this._elIFrame) {
-        var elIFrame = document.createElement("iframe");
-        elIFrame.src = this._iFrameSrc;
-        elIFrame.frameBorder = 0;
-        elIFrame.scrolling = "no";
-        elIFrame.style.position = "absolute";
-        elIFrame.style.width = 0;
-        elIFrame.style.height = 0;
-        elIFrame.style.padding = 0;
-        elIFrame.tabIndex = -1;
-        elIFrame.role = "presentation";
-        elIFrame.title = "Presentational iframe shim";
-        this._elIFrame = this._elContainer.appendChild(elIFrame);
-    }
-};
-
-/**
- * Initializes the results container once at object creation
- *
- * @method _initContainerEl
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._initContainerEl = function() {
-    YAHOO.util.Dom.addClass(this._elContainer, "yui-ac-container");
-    
-    if(!this._elContent) {
-        // The elContent div is assigned DOM listeners and 
-        // helps size the iframe and shadow properly
-        var elContent = document.createElement("div");
-        elContent.className = "yui-ac-content";
-        elContent.style.display = "none";
-
-        this._elContent = this._elContainer.appendChild(elContent);
-
-        var elHeader = document.createElement("div");
-        elHeader.className = "yui-ac-hd";
-        elHeader.style.display = "none";
-        this._elHeader = this._elContent.appendChild(elHeader);
-
-        var elBody = document.createElement("div");
-        elBody.className = "yui-ac-bd";
-        this._elBody = this._elContent.appendChild(elBody);
-
-        var elFooter = document.createElement("div");
-        elFooter.className = "yui-ac-ft";
-        elFooter.style.display = "none";
-        this._elFooter = this._elContent.appendChild(elFooter);
-    }
-    else {
-        YAHOO.log("Could not initialize the container","warn",this.toString());
-    }
-};
-
-/**
- * Clears out contents of container body and creates up to
- * YAHOO.widget.AutoComplete#maxResultsDisplayed &lt;li&gt; elements in an
- * &lt;ul&gt; element.
- *
- * @method _initListEl
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._initListEl = function() {
-    var nListLength = this.maxResultsDisplayed,
-        elList = this._elList || document.createElement("ul"),
-        elListItem;
-    
-    while(elList.childNodes.length < nListLength) {
-        elListItem = document.createElement("li");
-        elListItem.style.display = "none";
-        elListItem._nItemIndex = elList.childNodes.length;
-        elList.appendChild(elListItem);
-    }
-    if(!this._elList) {
-        var elBody = this._elBody;
-        YAHOO.util.Event.purgeElement(elBody, true);
-        elBody.innerHTML = "";
-        this._elList = elBody.appendChild(elList);
-    }
-    
-    this._elBody.style.display = "";
-};
-
-/**
- * Focuses input field.
- *
- * @method _focus
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._focus = function() {
-    // http://developer.mozilla.org/en/docs/index.php?title=Key-navigable_custom_DHTML_widgets
-    var oSelf = this;
-    setTimeout(function() {
-        try {
-            oSelf._elTextbox.focus();
-        }
-        catch(e) {
-        }
-    },0);
-};
-
-/**
- * Enables interval detection for IME support.
- *
- * @method _enableIntervalDetection
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._enableIntervalDetection = function() {
-    var oSelf = this;
-    if(!oSelf._queryInterval && oSelf.queryInterval) {
-        oSelf._queryInterval = setInterval(function() { oSelf._onInterval(); }, oSelf.queryInterval);
-        YAHOO.log("Interval set", "info", this.toString());
-    }
-};
-
-/**
- * Enables interval detection for a less performant but brute force mechanism to
- * detect input values at an interval set by queryInterval and send queries if
- * input value has changed. Needed to support right-click+paste or shift+insert
- * edge cases. Please note that intervals are cleared at the end of each interaction,
- * so enableIntervalDetection must be called for each new interaction. The
- * recommended approach is to call it in response to textboxFocusEvent.
- *
- * @method enableIntervalDetection
- */
-YAHOO.widget.AutoComplete.prototype.enableIntervalDetection =
-    YAHOO.widget.AutoComplete.prototype._enableIntervalDetection;
-
-/**
- * Enables query triggers based on text input detection by intervals (rather
- * than by key events).
- *
- * @method _onInterval
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onInterval = function() {
-    var currValue = this._elTextbox.value;
-    var lastValue = this._sLastTextboxValue;
-    if(currValue != lastValue) {
-        this._sLastTextboxValue = currValue;
-        this._sendQuery(currValue);
-    }
-};
-
-/**
- * Cancels text input detection by intervals.
- *
- * @method _clearInterval
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._clearInterval = function() {
-    if(this._queryInterval) {
-        clearInterval(this._queryInterval);
-        this._queryInterval = null;
-        YAHOO.log("Interval cleared", "info", this.toString());
-    }
-};
-
-/**
- * Whether or not key is functional or should be ignored. Note that the right
- * arrow key is NOT an ignored key since it triggers queries for certain intl
- * charsets.
- *
- * @method _isIgnoreKey
- * @param nKeycode {Number} Code of key pressed.
- * @return {Boolean} True if key should be ignored, false otherwise.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._isIgnoreKey = function(nKeyCode) {
-    if((nKeyCode == 9) || (nKeyCode == 13)  || // tab, enter
-            (nKeyCode == 16) || (nKeyCode == 17) || // shift, ctl
-            (nKeyCode >= 18 && nKeyCode <= 20) || // alt, pause/break,caps lock
-            (nKeyCode == 27) || // esc
-            (nKeyCode >= 33 && nKeyCode <= 35) || // page up,page down,end
-            /*(nKeyCode >= 36 && nKeyCode <= 38) || // home,left,up
-            (nKeyCode == 40) || // down*/
-            (nKeyCode >= 36 && nKeyCode <= 40) || // home,left,up, right, down
-            (nKeyCode >= 44 && nKeyCode <= 45) || // print screen,insert
-            (nKeyCode == 229) // Bug 2041973: Korean XP fires 2 keyup events, the key and 229
-        ) { 
-        return true;
-    }
-    return false;
-};
-
-/**
- * Makes query request to the DataSource.
- *
- * @method _sendQuery
- * @param sQuery {String} Query string.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sendQuery = function(sQuery) {
-    // Widget has been effectively turned off
-    if(this.minQueryLength < 0) {
-        this._toggleContainer(false);
-        YAHOO.log("Property minQueryLength is less than 0", "info", this.toString());
-        return;
-    }
-    // Delimiter has been enabled
-    if(this.delimChar) {
-        var extraction = this._extractQuery(sQuery);
-        // Here is the query itself
-        sQuery = extraction.query;
-        // ...and save the rest of the string for later
-        this._sPastSelections = extraction.previous;
-    }
-
-    // Don't search queries that are too short
-    if((sQuery && (sQuery.length < this.minQueryLength)) || (!sQuery && this.minQueryLength > 0)) {
-        if(this._nDelayID != -1) {
-            clearTimeout(this._nDelayID);
-        }
-        this._toggleContainer(false);
-        YAHOO.log("Query \"" + sQuery + "\" is too short", "info", this.toString());
-        return;
-    }
-
-    sQuery = encodeURIComponent(sQuery);
-    this._nDelayID = -1;    // Reset timeout ID because request is being made
-    
-    // Subset matching
-    if(this.dataSource.queryMatchSubset || this.queryMatchSubset) { // backward compat
-        var oResponse = this.getSubsetMatches(sQuery);
-        if(oResponse) {
-            this.handleResponse(sQuery, oResponse, {query: sQuery});
-            return;
-        }
-    }
-    
-    if(this.dataSource.responseStripAfter) {
-        this.dataSource.doBeforeParseData = this.preparseRawResponse;
-    }
-    if(this.applyLocalFilter) {
-        this.dataSource.doBeforeCallback = this.filterResults;
-    }
-    
-    var sRequest = this.generateRequest(sQuery);
-    this.dataRequestEvent.fire(this, sQuery, sRequest);
-    YAHOO.log("Sending query \"" + sRequest + "\"", "info", this.toString());
-
-    this.dataSource.sendRequest(sRequest, {
-            success : this.handleResponse,
-            failure : this.handleResponse,
-            scope   : this,
-            argument: {
-                query: sQuery
-            }
-    });
-};
-
-/**
- * Populates the given &lt;li&gt; element with return value from formatResult().
- *
- * @method _populateListItem
- * @param elListItem {HTMLElement} The LI element.
- * @param oResult {Object} The result object.
- * @param sCurQuery {String} The query string.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._populateListItem = function(elListItem, oResult, sQuery) {
-    elListItem.innerHTML = this.formatResult(oResult, sQuery, elListItem._sResultMatch);
-};
-
-/**
- * Populates the array of &lt;li&gt; elements in the container with query
- * results.
- *
- * @method _populateList
- * @param sQuery {String} Original request.
- * @param oResponse {Object} Response object.
- * @param oPayload {MIXED} (optional) Additional argument(s)
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._populateList = function(sQuery, oResponse, oPayload) {
-    // Clear previous timeout
-    if(this._nTypeAheadDelayID != -1) {
-        clearTimeout(this._nTypeAheadDelayID);
-    }
-        
-    sQuery = (oPayload && oPayload.query) ? oPayload.query : sQuery;
-    
-    // Pass data through abstract method for any transformations
-    var ok = this.doBeforeLoadData(sQuery, oResponse, oPayload);
-
-    // Data is ok
-    if(ok && !oResponse.error) {
-        this.dataReturnEvent.fire(this, sQuery, oResponse.results);
-        
-        // Continue only if instance is still active (i.e., user hasn't already moved on)
-        if(this._bFocused) {
-            // Store state for this interaction
-            var sCurQuery = decodeURIComponent(sQuery);
-            this._sCurQuery = sCurQuery;
-            this._bItemSelected = false;
-        
-            var allResults = oResponse.results,
-                nItemsToShow = Math.min(allResults.length,this.maxResultsDisplayed),
-                sMatchKey = (this.dataSource.responseSchema.fields) ? 
-                    (this.dataSource.responseSchema.fields[0].key || this.dataSource.responseSchema.fields[0]) : 0;
-            
-            if(nItemsToShow > 0) {
-                // Make sure container and helpers are ready to go
-                if(!this._elList || (this._elList.childNodes.length < nItemsToShow)) {
-                    this._initListEl();
-                }
-                this._initContainerHelperEls();
-                
-                var allListItemEls = this._elList.childNodes;
-                // Fill items with data from the bottom up
-                for(var i = nItemsToShow-1; i >= 0; i--) {
-                    var elListItem = allListItemEls[i],
-                    oResult = allResults[i];
-                    
-                    // Backward compatibility
-                    if(this.resultTypeList) {
-                        // Results need to be converted back to an array
-                        var aResult = [];
-                        // Match key is first
-                        aResult[0] = (YAHOO.lang.isString(oResult)) ? oResult : oResult[sMatchKey] || oResult[this.key];
-                        // Add additional data to the result array
-                        var fields = this.dataSource.responseSchema.fields;
-                        if(YAHOO.lang.isArray(fields) && (fields.length > 1)) {
-                            for(var k=1, len=fields.length; k<len; k++) {
-                                aResult[aResult.length] = oResult[fields[k].key || fields[k]];
-                            }
-                        }
-                        // No specific fields defined, so pass along entire data object
-                        else {
-                            // Already an array
-                            if(YAHOO.lang.isArray(oResult)) {
-                                aResult = oResult;
-                            }
-                            // Simple string 
-                            else if(YAHOO.lang.isString(oResult)) {
-                                aResult = [oResult];
-                            }
-                            // Object
-                            else {
-                                aResult[1] = oResult;
-                            }
-                        }
-                        oResult = aResult;
-                    }
-
-                    // The matching value, including backward compatibility for array format and safety net
-                    elListItem._sResultMatch = (YAHOO.lang.isString(oResult)) ? oResult : (YAHOO.lang.isArray(oResult)) ? oResult[0] : (oResult[sMatchKey] || "");
-                    elListItem._oResultData = oResult; // Additional data
-                    this._populateListItem(elListItem, oResult, sCurQuery);
-                    elListItem.style.display = "";
-                }
-        
-                // Clear out extraneous items
-                if(nItemsToShow < allListItemEls.length) {
-                    var extraListItem;
-                    for(var j = allListItemEls.length-1; j >= nItemsToShow; j--) {
-                        extraListItem = allListItemEls[j];
-                        extraListItem.style.display = "none";
-                    }
-                }
-                
-                this._nDisplayedItems = nItemsToShow;
-                
-                this.containerPopulateEvent.fire(this, sQuery, allResults);
-                
-                // Highlight the first item
-                if(this.autoHighlight) {
-                    var elFirstListItem = this._elList.firstChild;
-                    this._toggleHighlight(elFirstListItem,"to");
-                    this.itemArrowToEvent.fire(this, elFirstListItem);
-                    YAHOO.log("Arrowed to first item", "info", this.toString());
-                    this._typeAhead(elFirstListItem,sQuery);
-                }
-                // Unhighlight any previous time
-                else {
-                    this._toggleHighlight(this._elCurListItem,"from");
-                }
-        
-                // Pre-expansion stuff
-                ok = this._doBeforeExpandContainer(this._elTextbox, this._elContainer, sQuery, allResults);
-                
-                // Expand the container
-                this._toggleContainer(ok);
-            }
-            else {
-                this._toggleContainer(false);
-            }
-
-            YAHOO.log("Container populated with " + nItemsToShow +  " list items", "info", this.toString());
-            return;
-        }
-    }
-    // Error
-    else {
-        this.dataErrorEvent.fire(this, sQuery, oResponse);
-    }
-        
-    YAHOO.log("Could not populate list", "info", this.toString());    
-};
-
-/**
- * Called before container expands, by default snaps container to the
- * bottom-left corner of the input element, then calls public overrideable method.
- *
- * @method _doBeforeExpandContainer
- * @param elTextbox {HTMLElement} The text input box.
- * @param elContainer {HTMLElement} The container element.
- * @param sQuery {String} The query string.
- * @param aResults {Object[]}  An array of query results.
- * @return {Boolean} Return true to continue expanding container, false to cancel the expand.
- * @private 
- */
-YAHOO.widget.AutoComplete.prototype._doBeforeExpandContainer = function(elTextbox, elContainer, sQuery, aResults) {
-    if(this.autoSnapContainer) {
-        this.snapContainer();
-    }
-
-    return this.doBeforeExpandContainer(elTextbox, elContainer, sQuery, aResults);
-};
-
-/**
- * When forceSelection is true and the user attempts
- * leave the text input box without selecting an item from the query results,
- * the user selection is cleared.
- *
- * @method _clearSelection
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._clearSelection = function() {
-    var extraction = (this.delimChar) ? this._extractQuery(this._elTextbox.value) :
-            {previous:"",query:this._elTextbox.value};
-    this._elTextbox.value = extraction.previous;
-    this.selectionEnforceEvent.fire(this, extraction.query);
-    YAHOO.log("Selection enforced", "info", this.toString());
-};
-
-/**
- * Whether or not user-typed value in the text input box matches any of the
- * query results.
- *
- * @method _textMatchesOption
- * @return {HTMLElement} Matching list item element if user-input text matches
- * a result, null otherwise.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._textMatchesOption = function() {
-    var elMatch = null;
-
-    for(var i=0; i<this._nDisplayedItems; i++) {
-        var elListItem = this._elList.childNodes[i];
-        var sMatch = ("" + elListItem._sResultMatch).toLowerCase();
-        if(sMatch == this._sCurQuery.toLowerCase()) {
-            elMatch = elListItem;
-            break;
-        }
-    }
-    return(elMatch);
-};
-
-/**
- * Updates in the text input box with the first query result as the user types,
- * selecting the substring that the user has not typed.
- *
- * @method _typeAhead
- * @param elListItem {HTMLElement} The &lt;li&gt; element item whose data populates the input field.
- * @param sQuery {String} Query string.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._typeAhead = function(elListItem, sQuery) {
-    // Don't typeAhead if turned off or is backspace
-    if(!this.typeAhead || (this._nKeyCode == 8)) {
-        return;
-    }
-
-    var oSelf = this,
-        elTextbox = this._elTextbox;
-        
-    // Only if text selection is supported
-    if(elTextbox.setSelectionRange || elTextbox.createTextRange) {
-        // Set and store timeout for this typeahead
-        this._nTypeAheadDelayID = setTimeout(function() {
-                // Select the portion of text that the user has not typed
-                var nStart = elTextbox.value.length; // any saved queries plus what user has typed
-                oSelf._updateValue(elListItem);
-                var nEnd = elTextbox.value.length;
-                oSelf._selectText(elTextbox,nStart,nEnd);
-                var sPrefill = elTextbox.value.substr(nStart,nEnd);
-                oSelf.typeAheadEvent.fire(oSelf,sQuery,sPrefill);
-                YAHOO.log("Typeahead occured with prefill string \"" + sPrefill + "\"", "info", oSelf.toString());
-            },(this.typeAheadDelay*1000));            
-    }
-};
-
-/**
- * Selects text in the input field.
- *
- * @method _selectText
- * @param elTextbox {HTMLElement} Text input box element in which to select text.
- * @param nStart {Number} Starting index of text string to select.
- * @param nEnd {Number} Ending index of text selection.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._selectText = function(elTextbox, nStart, nEnd) {
-    if(elTextbox.setSelectionRange) { // For Mozilla
-        elTextbox.setSelectionRange(nStart,nEnd);
-    }
-    else if(elTextbox.createTextRange) { // For IE
-        var oTextRange = elTextbox.createTextRange();
-        oTextRange.moveStart("character", nStart);
-        oTextRange.moveEnd("character", nEnd-elTextbox.value.length);
-        oTextRange.select();
-    }
-    else {
-        elTextbox.select();
-    }
-};
-
-/**
- * Extracts rightmost query from delimited string.
- *
- * @method _extractQuery
- * @param sQuery {String} String to parse
- * @return {Object} Object literal containing properties "query" and "previous".  
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._extractQuery = function(sQuery) {
-    var aDelimChar = this.delimChar,
-        nDelimIndex = -1,
-        nNewIndex, nQueryStart,
-        i = aDelimChar.length-1,
-        sPrevious;
-        
-    // Loop through all possible delimiters and find the rightmost one in the query
-    // A " " may be a false positive if they are defined as delimiters AND
-    // are used to separate delimited queries
-    for(; i >= 0; i--) {
-        nNewIndex = sQuery.lastIndexOf(aDelimChar[i]);
-        if(nNewIndex > nDelimIndex) {
-            nDelimIndex = nNewIndex;
-        }
-    }
-    // If we think the last delimiter is a space (" "), make sure it is NOT
-    // a false positive by also checking the char directly before it
-    if(aDelimChar[i] == " ") {
-        for (var j = aDelimChar.length-1; j >= 0; j--) {
-            if(sQuery[nDelimIndex - 1] == aDelimChar[j]) {
-                nDelimIndex--;
-                break;
-            }
-        }
-    }
-    // A delimiter has been found in the query so extract the latest query from past selections
-    if(nDelimIndex > -1) {
-        nQueryStart = nDelimIndex + 1;
-        // Trim any white space from the beginning...
-        while(sQuery.charAt(nQueryStart) == " ") {
-            nQueryStart += 1;
-        }
-        // ...and save the rest of the string for later
-        sPrevious = sQuery.substring(0,nQueryStart);
-        // Here is the query itself
-        sQuery = sQuery.substr(nQueryStart);
-    }
-    // No delimiter found in the query, so there are no selections from past queries
-    else {
-        sPrevious = "";
-    }
-    
-    return {
-        previous: sPrevious,
-        query: sQuery
-    };
-};
-
-/**
- * Syncs results container with its helpers.
- *
- * @method _toggleContainerHelpers
- * @param bShow {Boolean} True if container is expanded, false if collapsed
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._toggleContainerHelpers = function(bShow) {
-    var width = this._elContent.offsetWidth + "px";
-    var height = this._elContent.offsetHeight + "px";
-
-    if(this.useIFrame && this._elIFrame) {
-    var elIFrame = this._elIFrame;
-        if(bShow) {
-            elIFrame.style.width = width;
-            elIFrame.style.height = height;
-            elIFrame.style.padding = "";
-            YAHOO.log("Iframe expanded", "info", this.toString());
-        }
-        else {
-            elIFrame.style.width = 0;
-            elIFrame.style.height = 0;
-            elIFrame.style.padding = 0;
-            YAHOO.log("Iframe collapsed", "info", this.toString());
-        }
-    }
-    if(this.useShadow && this._elShadow) {
-    var elShadow = this._elShadow;
-        if(bShow) {
-            elShadow.style.width = width;
-            elShadow.style.height = height;
-            YAHOO.log("Shadow expanded", "info", this.toString());
-        }
-        else {
-            elShadow.style.width = 0;
-            elShadow.style.height = 0;
-            YAHOO.log("Shadow collapsed", "info", this.toString());
-        }
-    }
-};
-
-/**
- * Animates expansion or collapse of the container.
- *
- * @method _toggleContainer
- * @param bShow {Boolean} True if container should be expanded, false if container should be collapsed
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._toggleContainer = function(bShow) {
-    YAHOO.log("Toggling container " + ((bShow) ? "open" : "closed"), "info", this.toString());
-
-    var elContainer = this._elContainer;
-
-    // If implementer has container always open and it's already open, don't mess with it
-    // Container is initialized with display "none" so it may need to be shown first time through
-    if(this.alwaysShowContainer && this._bContainerOpen) {
-        return;
-    }
-    
-    // Reset states
-    if(!bShow) {
-        this._toggleHighlight(this._elCurListItem,"from");
-        this._nDisplayedItems = 0;
-        this._sCurQuery = null;
-        
-        // Container is already closed, so don't bother with changing the UI
-        if(this._elContent.style.display == "none") {
-            return;
-        }
-    }
-
-    // If animation is enabled...
-    var oAnim = this._oAnim;
-    if(oAnim && oAnim.getEl() && (this.animHoriz || this.animVert)) {
-        if(oAnim.isAnimated()) {
-            oAnim.stop(true);
-        }
-
-        // Clone container to grab current size offscreen
-        var oClone = this._elContent.cloneNode(true);
-        elContainer.appendChild(oClone);
-        oClone.style.top = "-9000px";
-        oClone.style.width = "";
-        oClone.style.height = "";
-        oClone.style.display = "";
-
-        // Current size of the container is the EXPANDED size
-        var wExp = oClone.offsetWidth;
-        var hExp = oClone.offsetHeight;
-
-        // Calculate COLLAPSED sizes based on horiz and vert anim
-        var wColl = (this.animHoriz) ? 0 : wExp;
-        var hColl = (this.animVert) ? 0 : hExp;
-
-        // Set animation sizes
-        oAnim.attributes = (bShow) ?
-            {width: { to: wExp }, height: { to: hExp }} :
-            {width: { to: wColl}, height: { to: hColl }};
-
-        // If opening anew, set to a collapsed size...
-        if(bShow && !this._bContainerOpen) {
-            this._elContent.style.width = wColl+"px";
-            this._elContent.style.height = hColl+"px";
-        }
-        // Else, set it to its last known size.
-        else {
-            this._elContent.style.width = wExp+"px";
-            this._elContent.style.height = hExp+"px";
-        }
-
-        elContainer.removeChild(oClone);
-        oClone = null;
-
-       var oSelf = this;
-       var onAnimComplete = function() {
-            // Finish the collapse
-               oAnim.onComplete.unsubscribeAll();
-
-            if(bShow) {
-                oSelf._toggleContainerHelpers(true);
-                oSelf._bContainerOpen = bShow;
-                oSelf.containerExpandEvent.fire(oSelf);
-                YAHOO.log("Container expanded", "info", oSelf.toString());
-            }
-            else {
-                oSelf._elContent.style.display = "none";
-                oSelf._bContainerOpen = bShow;
-                oSelf.containerCollapseEvent.fire(oSelf);
-                YAHOO.log("Container collapsed", "info", oSelf.toString());
-            }
-       };
-
-        // Display container and animate it
-        this._toggleContainerHelpers(false); // Bug 1424486: Be early to hide, late to show;
-        this._elContent.style.display = "";
-        oAnim.onComplete.subscribe(onAnimComplete);
-        oAnim.animate();
-    }
-    // Else don't animate, just show or hide
-    else {
-        if(bShow) {
-            this._elContent.style.display = "";
-            this._toggleContainerHelpers(true);
-            this._bContainerOpen = bShow;
-            this.containerExpandEvent.fire(this);
-            YAHOO.log("Container expanded", "info", this.toString());
-        }
-        else {
-            this._toggleContainerHelpers(false);
-            this._elContent.style.display = "none";
-            this._bContainerOpen = bShow;
-            this.containerCollapseEvent.fire(this);
-            YAHOO.log("Container collapsed", "info", this.toString());
-        }
-   }
-
-};
-
-/**
- * Toggles the highlight on or off for an item in the container, and also cleans
- * up highlighting of any previous item.
- *
- * @method _toggleHighlight
- * @param elNewListItem {HTMLElement} The &lt;li&gt; element item to receive highlight behavior.
- * @param sType {String} Type "mouseover" will toggle highlight on, and "mouseout" will toggle highlight off.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._toggleHighlight = function(elNewListItem, sType) {
-    if(elNewListItem) {
-        var sHighlight = this.highlightClassName;
-        if(this._elCurListItem) {
-            // Remove highlight from old item
-            YAHOO.util.Dom.removeClass(this._elCurListItem, sHighlight);
-            this._elCurListItem = null;
-        }
-    
-        if((sType == "to") && sHighlight) {
-            // Apply highlight to new item
-            YAHOO.util.Dom.addClass(elNewListItem, sHighlight);
-            this._elCurListItem = elNewListItem;
-        }
-    }
-};
-
-/**
- * Toggles the pre-highlight on or off for an item in the container, and also cleans
- * up pre-highlighting of any previous item.
- *
- * @method _togglePrehighlight
- * @param elNewListItem {HTMLElement} The &lt;li&gt; element item to receive highlight behavior.
- * @param sType {String} Type "mouseover" will toggle highlight on, and "mouseout" will toggle highlight off.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._togglePrehighlight = function(elNewListItem, sType) {
-    var sPrehighlight = this.prehighlightClassName;
-
-    if(this._elCurPrehighlightItem) {
-        YAHOO.util.Dom.removeClass(this._elCurPrehighlightItem, sPrehighlight);
-    }
-    if(elNewListItem == this._elCurListItem) {
-        return;
-    }
-
-    if((sType == "mouseover") && sPrehighlight) {
-        // Apply prehighlight to new item
-        YAHOO.util.Dom.addClass(elNewListItem, sPrehighlight);
-        this._elCurPrehighlightItem = elNewListItem;
-    }
-    else {
-        // Remove prehighlight from old item
-        YAHOO.util.Dom.removeClass(elNewListItem, sPrehighlight);
-    }
-};
-
-/**
- * Updates the text input box value with selected query result. If a delimiter
- * has been defined, then the value gets appended with the delimiter.
- *
- * @method _updateValue
- * @param elListItem {HTMLElement} The &lt;li&gt; element item with which to update the value.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._updateValue = function(elListItem) {
-    if(!this.suppressInputUpdate) {    
-        var elTextbox = this._elTextbox;
-        var sDelimChar = (this.delimChar) ? (this.delimChar[0] || this.delimChar) : null;
-        var sResultMatch = elListItem._sResultMatch;
-    
-        // Calculate the new value
-        var sNewValue = "";
-        if(sDelimChar) {
-            // Preserve selections from past queries
-            sNewValue = this._sPastSelections;
-            // Add new selection plus delimiter
-            sNewValue += sResultMatch + sDelimChar;
-            if(sDelimChar != " ") {
-                sNewValue += " ";
-            }
-        }
-        else { 
-            sNewValue = sResultMatch;
-        }
-        
-        // Update input field
-        elTextbox.value = sNewValue;
-    
-        // Scroll to bottom of textarea if necessary
-        if(elTextbox.type == "textarea") {
-            elTextbox.scrollTop = elTextbox.scrollHeight;
-        }
-    
-        // Move cursor to end
-        var end = elTextbox.value.length;
-        this._selectText(elTextbox,end,end);
-    
-        this._elCurListItem = elListItem;
-    }
-};
-
-/**
- * Selects a result item from the container
- *
- * @method _selectItem
- * @param elListItem {HTMLElement} The selected &lt;li&gt; element item.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._selectItem = function(elListItem) {
-    this._bItemSelected = true;
-    this._updateValue(elListItem);
-    this._sPastSelections = this._elTextbox.value;
-    this._clearInterval();
-    this.itemSelectEvent.fire(this, elListItem, elListItem._oResultData);
-    YAHOO.log("Item selected: " + YAHOO.lang.dump(elListItem._oResultData), "info", this.toString());
-    this._toggleContainer(false);
-};
-
-/**
- * If an item is highlighted in the container, the right arrow key jumps to the
- * end of the textbox and selects the highlighted item, otherwise the container
- * is closed.
- *
- * @method _jumpSelection
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._jumpSelection = function() {
-    if(this._elCurListItem) {
-        this._selectItem(this._elCurListItem);
-    }
-    else {
-        this._toggleContainer(false);
-    }
-};
-
-/**
- * Triggered by up and down arrow keys, changes the current highlighted
- * &lt;li&gt; element item. Scrolls container if necessary.
- *
- * @method _moveSelection
- * @param nKeyCode {Number} Code of key pressed.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._moveSelection = function(nKeyCode) {
-    if(this._bContainerOpen) {
-        // Determine current item's id number
-        var elCurListItem = this._elCurListItem,
-            nCurItemIndex = -1;
-
-        if(elCurListItem) {
-            nCurItemIndex = elCurListItem._nItemIndex;
-        }
-
-        var nNewItemIndex = (nKeyCode == 40) ?
-                (nCurItemIndex + 1) : (nCurItemIndex - 1);
-
-        // Out of bounds
-        if(nNewItemIndex < -2 || nNewItemIndex >= this._nDisplayedItems) {
-            return;
-        }
-
-        if(elCurListItem) {
-            // Unhighlight current item
-            this._toggleHighlight(elCurListItem, "from");
-            this.itemArrowFromEvent.fire(this, elCurListItem);
-            YAHOO.log("Item arrowed from: " + elCurListItem._nItemIndex, "info", this.toString());
-        }
-        if(nNewItemIndex == -1) {
-           // Go back to query (remove type-ahead string)
-            if(this.delimChar) {
-                this._elTextbox.value = this._sPastSelections + this._sCurQuery;
-            }
-            else {
-                this._elTextbox.value = this._sCurQuery;
-            }
-            return;
-        }
-        if(nNewItemIndex == -2) {
-            // Close container
-            this._toggleContainer(false);
-            return;
-        }
-        
-        var elNewListItem = this._elList.childNodes[nNewItemIndex],
-
-        // Scroll the container if necessary
-            elContent = this._elContent,
-            sOF = YAHOO.util.Dom.getStyle(elContent,"overflow"),
-            sOFY = YAHOO.util.Dom.getStyle(elContent,"overflowY"),
-            scrollOn = ((sOF == "auto") || (sOF == "scroll") || (sOFY == "auto") || (sOFY == "scroll"));
-        if(scrollOn && (nNewItemIndex > -1) &&
-        (nNewItemIndex < this._nDisplayedItems)) {
-            // User is keying down
-            if(nKeyCode == 40) {
-                // Bottom of selected item is below scroll area...
-                if((elNewListItem.offsetTop+elNewListItem.offsetHeight) > (elContent.scrollTop + elContent.offsetHeight)) {
-                    // Set bottom of scroll area to bottom of selected item
-                    elContent.scrollTop = (elNewListItem.offsetTop+elNewListItem.offsetHeight) - elContent.offsetHeight;
-                }
-                // Bottom of selected item is above scroll area...
-                else if((elNewListItem.offsetTop+elNewListItem.offsetHeight) < elContent.scrollTop) {
-                    // Set top of selected item to top of scroll area
-                    elContent.scrollTop = elNewListItem.offsetTop;
-
-                }
-            }
-            // User is keying up
-            else {
-                // Top of selected item is above scroll area
-                if(elNewListItem.offsetTop < elContent.scrollTop) {
-                    // Set top of scroll area to top of selected item
-                    this._elContent.scrollTop = elNewListItem.offsetTop;
-                }
-                // Top of selected item is below scroll area
-                else if(elNewListItem.offsetTop > (elContent.scrollTop + elContent.offsetHeight)) {
-                    // Set bottom of selected item to bottom of scroll area
-                    this._elContent.scrollTop = (elNewListItem.offsetTop+elNewListItem.offsetHeight) - elContent.offsetHeight;
-                }
-            }
-        }
-
-        this._toggleHighlight(elNewListItem, "to");
-        this.itemArrowToEvent.fire(this, elNewListItem);
-        YAHOO.log("Item arrowed to " + elNewListItem._nItemIndex, "info", this.toString());
-        if(this.typeAhead) {
-            this._updateValue(elNewListItem);
-        }
-    }
-};
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Private event handlers
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Handles container mouseover events.
- *
- * @method _onContainerMouseover
- * @param v {HTMLEvent} The mouseover event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onContainerMouseover = function(v,oSelf) {
-    var elTarget = YAHOO.util.Event.getTarget(v);
-    var elTag = elTarget.nodeName.toLowerCase();
-    while(elTarget && (elTag != "table")) {
-        switch(elTag) {
-            case "body":
-                return;
-            case "li":
-                if(oSelf.prehighlightClassName) {
-                    oSelf._togglePrehighlight(elTarget,"mouseover");
-                }
-                else {
-                    oSelf._toggleHighlight(elTarget,"to");
-                }
-            
-                oSelf.itemMouseOverEvent.fire(oSelf, elTarget);
-                YAHOO.log("Item moused over " + elTarget._nItemIndex, "info", oSelf.toString());
-                break;
-            case "div":
-                if(YAHOO.util.Dom.hasClass(elTarget,"yui-ac-container")) {
-                    oSelf._bOverContainer = true;
-                    return;
-                }
-                break;
-            default:
-                break;
-        }
-        
-        elTarget = elTarget.parentNode;
-        if(elTarget) {
-            elTag = elTarget.nodeName.toLowerCase();
-        }
-    }
-};
-
-/**
- * Handles container mouseout events.
- *
- * @method _onContainerMouseout
- * @param v {HTMLEvent} The mouseout event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onContainerMouseout = function(v,oSelf) {
-    var elTarget = YAHOO.util.Event.getTarget(v);
-    var elTag = elTarget.nodeName.toLowerCase();
-    while(elTarget && (elTag != "table")) {
-        switch(elTag) {
-            case "body":
-                return;
-            case "li":
-                if(oSelf.prehighlightClassName) {
-                    oSelf._togglePrehighlight(elTarget,"mouseout");
-                }
-                else {
-                    oSelf._toggleHighlight(elTarget,"from");
-                }
-            
-                oSelf.itemMouseOutEvent.fire(oSelf, elTarget);
-                YAHOO.log("Item moused out " + elTarget._nItemIndex, "info", oSelf.toString());
-                break;
-            case "ul":
-                oSelf._toggleHighlight(oSelf._elCurListItem,"to");
-                break;
-            case "div":
-                if(YAHOO.util.Dom.hasClass(elTarget,"yui-ac-container")) {
-                    oSelf._bOverContainer = false;
-                    return;
-                }
-                break;
-            default:
-                break;
-        }
-
-        elTarget = elTarget.parentNode;
-        if(elTarget) {
-            elTag = elTarget.nodeName.toLowerCase();
-        }
-    }
-};
-
-/**
- * Handles container click events.
- *
- * @method _onContainerClick
- * @param v {HTMLEvent} The click event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onContainerClick = function(v,oSelf) {
-    var elTarget = YAHOO.util.Event.getTarget(v);
-    var elTag = elTarget.nodeName.toLowerCase();
-    while(elTarget && (elTag != "table")) {
-        switch(elTag) {
-            case "body":
-                return;
-            case "li":
-                // In case item has not been moused over
-                oSelf._toggleHighlight(elTarget,"to");
-                oSelf._selectItem(elTarget);
-                return;
-            default:
-                break;
-        }
-
-        elTarget = elTarget.parentNode;
-        if(elTarget) {
-            elTag = elTarget.nodeName.toLowerCase();
-        }
-    }    
-};
-
-
-/**
- * Handles container scroll events.
- *
- * @method _onContainerScroll
- * @param v {HTMLEvent} The scroll event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onContainerScroll = function(v,oSelf) {
-    oSelf._focus();
-};
-
-/**
- * Handles container resize events.
- *
- * @method _onContainerResize
- * @param v {HTMLEvent} The resize event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onContainerResize = function(v,oSelf) {
-    oSelf._toggleContainerHelpers(oSelf._bContainerOpen);
-};
-
-
-/**
- * Handles textbox keydown events of functional keys, mainly for UI behavior.
- *
- * @method _onTextboxKeyDown
- * @param v {HTMLEvent} The keydown event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onTextboxKeyDown = function(v,oSelf) {
-    var nKeyCode = v.keyCode;
-
-    // Clear timeout
-    if(oSelf._nTypeAheadDelayID != -1) {
-        clearTimeout(oSelf._nTypeAheadDelayID);
-    }
-    
-    switch (nKeyCode) {
-        case 9: // tab
-            if(!YAHOO.env.ua.opera && (navigator.userAgent.toLowerCase().indexOf("mac") == -1) || (YAHOO.env.ua.webkit>420)) {
-                // select an item or clear out
-                if(oSelf._elCurListItem) {
-                    if(oSelf.delimChar && (oSelf._nKeyCode != nKeyCode)) {
-                        if(oSelf._bContainerOpen) {
-                            YAHOO.util.Event.stopEvent(v);
-                        }
-                    }
-                    oSelf._selectItem(oSelf._elCurListItem);
-                }
-                else {
-                    oSelf._toggleContainer(false);
-                }
-            }
-            break;
-        case 13: // enter
-            if(!YAHOO.env.ua.opera && (navigator.userAgent.toLowerCase().indexOf("mac") == -1) || (YAHOO.env.ua.webkit>420)) {
-                if(oSelf._elCurListItem) {
-                    if(oSelf._nKeyCode != nKeyCode) {
-                        if(oSelf._bContainerOpen) {
-                            YAHOO.util.Event.stopEvent(v);
-                        }
-                    }
-                    oSelf._selectItem(oSelf._elCurListItem);
-                }
-                else {
-                    oSelf._toggleContainer(false);
-                }
-            }
-            break;
-        case 27: // esc
-            oSelf._toggleContainer(false);
-            return;
-        case 39: // right
-            oSelf._jumpSelection();
-            break;
-        case 38: // up
-            if(oSelf._bContainerOpen) {
-                YAHOO.util.Event.stopEvent(v);
-                oSelf._moveSelection(nKeyCode);
-            }
-            break;
-        case 40: // down
-            if(oSelf._bContainerOpen) {
-                YAHOO.util.Event.stopEvent(v);
-                oSelf._moveSelection(nKeyCode);
-            }
-            break;
-        default: 
-            oSelf._bItemSelected = false;
-            oSelf._toggleHighlight(oSelf._elCurListItem, "from");
-
-            oSelf.textboxKeyEvent.fire(oSelf, nKeyCode);
-            YAHOO.log("Textbox keyed", "info", oSelf.toString());
-            break;
-    }
-
-    if(nKeyCode === 18){
-        oSelf._enableIntervalDetection();
-    }    
-    oSelf._nKeyCode = nKeyCode;
-};
-
-/**
- * Handles textbox keypress events.
- * @method _onTextboxKeyPress
- * @param v {HTMLEvent} The keypress event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onTextboxKeyPress = function(v,oSelf) {
-    var nKeyCode = v.keyCode;
-
-        // Expose only to non SF3 (bug 1978549) Mac browsers (bug 790337) and  Opera browsers (bug 583531),
-        // where stopEvent is ineffective on keydown events 
-        if(YAHOO.env.ua.opera || (navigator.userAgent.toLowerCase().indexOf("mac") != -1) && (YAHOO.env.ua.webkit < 420)) {
-            switch (nKeyCode) {
-            case 9: // tab
-                // select an item or clear out
-                if(oSelf._bContainerOpen) {
-                    if(oSelf.delimChar) {
-                        YAHOO.util.Event.stopEvent(v);
-                    }
-                    if(oSelf._elCurListItem) {
-                        oSelf._selectItem(oSelf._elCurListItem);
-                    }
-                    else {
-                        oSelf._toggleContainer(false);
-                    }
-                }
-                break;
-            case 13: // enter
-                if(oSelf._bContainerOpen) {
-                    YAHOO.util.Event.stopEvent(v);
-                    if(oSelf._elCurListItem) {
-                        oSelf._selectItem(oSelf._elCurListItem);
-                    }
-                    else {
-                        oSelf._toggleContainer(false);
-                    }
-                }
-                break;
-            default:
-                break;
-            }
-        }
-
-        //TODO: (?) limit only to non-IE, non-Mac-FF for Korean IME support (bug 811948)
-        // Korean IME detected
-        else if(nKeyCode == 229) {
-            oSelf._enableIntervalDetection();
-        }
-};
-
-/**
- * Handles textbox keyup events to trigger queries.
- *
- * @method _onTextboxKeyUp
- * @param v {HTMLEvent} The keyup event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onTextboxKeyUp = function(v,oSelf) {
-    var sText = this.value; //string in textbox
-    
-    // Check to see if any of the public properties have been updated
-    oSelf._initProps();
-
-    // Filter out chars that don't trigger queries
-    var nKeyCode = v.keyCode;
-    if(oSelf._isIgnoreKey(nKeyCode)) {
-        return;
-    }
-
-    // Clear previous timeout
-    if(oSelf._nDelayID != -1) {
-        clearTimeout(oSelf._nDelayID);
-    }
-
-    // Set new timeout
-    oSelf._nDelayID = setTimeout(function(){
-            oSelf._sendQuery(sText);
-        },(oSelf.queryDelay * 1000));
-};
-
-/**
- * Handles text input box receiving focus.
- *
- * @method _onTextboxFocus
- * @param v {HTMLEvent} The focus event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onTextboxFocus = function (v,oSelf) {
-    // Start of a new interaction
-    if(!oSelf._bFocused) {
-        oSelf._elTextbox.setAttribute("autocomplete","off");
-        oSelf._bFocused = true;
-        oSelf._sInitInputValue = oSelf._elTextbox.value;
-        oSelf.textboxFocusEvent.fire(oSelf);
-        YAHOO.log("Textbox focused", "info", oSelf.toString());
-    }
-};
-
-/**
- * Handles text input box losing focus.
- *
- * @method _onTextboxBlur
- * @param v {HTMLEvent} The focus event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onTextboxBlur = function (v,oSelf) {
-    // Is a true blur
-    if(!oSelf._bOverContainer || (oSelf._nKeyCode == 9)) {
-        // Current query needs to be validated as a selection
-        if(!oSelf._bItemSelected) {
-            var elMatchListItem = oSelf._textMatchesOption();
-            // Container is closed or current query doesn't match any result
-            if(!oSelf._bContainerOpen || (oSelf._bContainerOpen && (elMatchListItem === null))) {
-                // Force selection is enabled so clear the current query
-                if(oSelf.forceSelection) {
-                    oSelf._clearSelection();
-                }
-                // Treat current query as a valid selection
-                else {
-                    oSelf.unmatchedItemSelectEvent.fire(oSelf, oSelf._sCurQuery);
-                    YAHOO.log("Unmatched item selected: " + oSelf._sCurQuery, "info", oSelf.toString());
-                }
-            }
-            // Container is open and current query matches a result
-            else {
-                // Force a selection when textbox is blurred with a match
-                if(oSelf.forceSelection) {
-                    oSelf._selectItem(elMatchListItem);
-                }
-            }
-        }
-
-        oSelf._clearInterval();
-        oSelf._bFocused = false;
-        if(oSelf._sInitInputValue !== oSelf._elTextbox.value) {
-            oSelf.textboxChangeEvent.fire(oSelf);
-        }
-        oSelf.textboxBlurEvent.fire(oSelf);
-        YAHOO.log("Textbox blurred", "info", oSelf.toString());
-
-        oSelf._toggleContainer(false);
-    }
-    // Not a true blur if it was a selection via mouse click
-    else {
-        oSelf._focus();
-    }
-};
-
-/**
- * Handles window unload event.
- *
- * @method _onWindowUnload
- * @param v {HTMLEvent} The unload event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onWindowUnload = function(v,oSelf) {
-    if(oSelf && oSelf._elTextbox && oSelf.allowBrowserAutocomplete) {
-        oSelf._elTextbox.setAttribute("autocomplete","on");
-    }
-};
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Deprecated for Backwards Compatibility
-//
-/////////////////////////////////////////////////////////////////////////////
-/**
- * @method doBeforeSendQuery
- * @deprecated Use generateRequest.
- */
-YAHOO.widget.AutoComplete.prototype.doBeforeSendQuery = function(sQuery) {
-    return this.generateRequest(sQuery);
-};
-
-/**
- * @method getListItems
- * @deprecated Use getListEl().childNodes.
- */
-YAHOO.widget.AutoComplete.prototype.getListItems = function() {
-    var allListItemEls = [],
-        els = this._elList.childNodes;
-    for(var i=els.length-1; i>=0; i--) {
-        allListItemEls[i] = els[i];
-    }
-    return allListItemEls;
-};
-
-/////////////////////////////////////////////////////////////////////////
-//
-// Private static methods
-//
-/////////////////////////////////////////////////////////////////////////
-
-/**
- * Clones object literal or array of object literals.
- *
- * @method AutoComplete._cloneObject
- * @param o {Object} Object.
- * @private
- * @static     
- */
-YAHOO.widget.AutoComplete._cloneObject = function(o) {
-    if(!YAHOO.lang.isValue(o)) {
-        return o;
-    }
-    
-    var copy = {};
-    
-    if(YAHOO.lang.isFunction(o)) {
-        copy = o;
-    }
-    else if(YAHOO.lang.isArray(o)) {
-        var array = [];
-        for(var i=0,len=o.length;i<len;i++) {
-            array[i] = YAHOO.widget.AutoComplete._cloneObject(o[i]);
-        }
-        copy = array;
-    }
-    else if(YAHOO.lang.isObject(o)) { 
-        for (var x in o){
-            if(YAHOO.lang.hasOwnProperty(o, x)) {
-                if(YAHOO.lang.isValue(o[x]) && YAHOO.lang.isObject(o[x]) || YAHOO.lang.isArray(o[x])) {
-                    copy[x] = YAHOO.widget.AutoComplete._cloneObject(o[x]);
-                }
-                else {
-                    copy[x] = o[x];
-                }
-            }
-        }
-    }
-    else {
-        copy = o;
-    }
-
-    return copy;
-};
-
-
-
-
-YAHOO.register("autocomplete", YAHOO.widget.AutoComplete, {version: "2.8.0r4", build: "2449"});
diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/autocomplete-min.js b/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/autocomplete-min.js
deleted file mode 100644 (file)
index 0737f4a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-Copyright (c) 2009, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.8.0r4
-*/
-YAHOO.widget.DS_JSArray=YAHOO.util.LocalDataSource;YAHOO.widget.DS_JSFunction=YAHOO.util.FunctionDataSource;YAHOO.widget.DS_XHR=function(B,A,D){var C=new YAHOO.util.XHRDataSource(B,D);C._aDeprecatedSchema=A;return C;};YAHOO.widget.DS_ScriptNode=function(B,A,D){var C=new YAHOO.util.ScriptNodeDataSource(B,D);C._aDeprecatedSchema=A;return C;};YAHOO.widget.DS_XHR.TYPE_JSON=YAHOO.util.DataSourceBase.TYPE_JSON;YAHOO.widget.DS_XHR.TYPE_XML=YAHOO.util.DataSourceBase.TYPE_XML;YAHOO.widget.DS_XHR.TYPE_FLAT=YAHOO.util.DataSourceBase.TYPE_TEXT;YAHOO.widget.AutoComplete=function(G,B,J,C){if(G&&B&&J){if(J&&YAHOO.lang.isFunction(J.sendRequest)){this.dataSource=J;}else{return;}this.key=0;var D=J.responseSchema;if(J._aDeprecatedSchema){var K=J._aDeprecatedSchema;if(YAHOO.lang.isArray(K)){if((J.responseType===YAHOO.util.DataSourceBase.TYPE_JSON)||(J.responseType===YAHOO.util.DataSourceBase.TYPE_UNKNOWN)){D.resultsList=K[0];this.key=K[1];D.fields=(K.length<3)?null:K.slice(1);}else{if(J.responseType===YAHOO.util.DataSourceBase.TYPE_XML){D.resultNode=K[0];this.key=K[1];D.fields=K.slice(1);}else{if(J.responseType===YAHOO.util.DataSourceBase.TYPE_TEXT){D.recordDelim=K[0];D.fieldDelim=K[1];}}}J.responseSchema=D;}}if(YAHOO.util.Dom.inDocument(G)){if(YAHOO.lang.isString(G)){this._sName="instance"+YAHOO.widget.AutoComplete._nIndex+" "+G;this._elTextbox=document.getElementById(G);}else{this._sName=(G.id)?"instance"+YAHOO.widget.AutoComplete._nIndex+" "+G.id:"instance"+YAHOO.widget.AutoComplete._nIndex;this._elTextbox=G;}YAHOO.util.Dom.addClass(this._elTextbox,"yui-ac-input");}else{return;}if(YAHOO.util.Dom.inDocument(B)){if(YAHOO.lang.isString(B)){this._elContainer=document.getElementById(B);}else{this._elContainer=B;}if(this._elContainer.style.display=="none"){}var E=this._elContainer.parentNode;var A=E.tagName.toLowerCase();if(A=="div"){YAHOO.util.Dom.addClass(E,"yui-ac");}else{}}else{return;}if(this.dataSource.dataType===YAHOO.util.DataSourceBase.TYPE_LOCAL){this.applyLocalFilter=true;}if(C&&(C.constructor==Object)){for(var I in C){if(I){this[I]=C[I];}}}this._initContainerEl();this._initProps();this._initListEl();this._initContainerHelperEls();var H=this;var F=this._elTextbox;YAHOO.util.Event.addListener(F,"keyup",H._onTextboxKeyUp,H);YAHOO.util.Event.addListener(F,"keydown",H._onTextboxKeyDown,H);YAHOO.util.Event.addListener(F,"focus",H._onTextboxFocus,H);YAHOO.util.Event.addListener(F,"blur",H._onTextboxBlur,H);YAHOO.util.Event.addListener(B,"mouseover",H._onContainerMouseover,H);YAHOO.util.Event.addListener(B,"mouseout",H._onContainerMouseout,H);YAHOO.util.Event.addListener(B,"click",H._onContainerClick,H);YAHOO.util.Event.addListener(B,"scroll",H._onContainerScroll,H);YAHOO.util.Event.addListener(B,"resize",H._onContainerResize,H);YAHOO.util.Event.addListener(F,"keypress",H._onTextboxKeyPress,H);YAHOO.util.Event.addListener(window,"unload",H._onWindowUnload,H);this.textboxFocusEvent=new YAHOO.util.CustomEvent("textboxFocus",this);this.textboxKeyEvent=new YAHOO.util.CustomEvent("textboxKey",this);this.dataRequestEvent=new YAHOO.util.CustomEvent("dataRequest",this);this.dataReturnEvent=new YAHOO.util.CustomEvent("dataReturn",this);this.dataErrorEvent=new YAHOO.util.CustomEvent("dataError",this);this.containerPopulateEvent=new YAHOO.util.CustomEvent("containerPopulate",this);this.containerExpandEvent=new YAHOO.util.CustomEvent("containerExpand",this);this.typeAheadEvent=new YAHOO.util.CustomEvent("typeAhead",this);this.itemMouseOverEvent=new YAHOO.util.CustomEvent("itemMouseOver",this);this.itemMouseOutEvent=new YAHOO.util.CustomEvent("itemMouseOut",this);this.itemArrowToEvent=new YAHOO.util.CustomEvent("itemArrowTo",this);this.itemArrowFromEvent=new YAHOO.util.CustomEvent("itemArrowFrom",this);this.itemSelectEvent=new YAHOO.util.CustomEvent("itemSelect",this);this.unmatchedItemSelectEvent=new YAHOO.util.CustomEvent("unmatchedItemSelect",this);this.selectionEnforceEvent=new YAHOO.util.CustomEvent("selectionEnforce",this);this.containerCollapseEvent=new YAHOO.util.CustomEvent("containerCollapse",this);this.textboxBlurEvent=new YAHOO.util.CustomEvent("textboxBlur",this);this.textboxChangeEvent=new YAHOO.util.CustomEvent("textboxChange",this);F.setAttribute("autocomplete","off");YAHOO.widget.AutoComplete._nIndex++;}else{}};YAHOO.widget.AutoComplete.prototype.dataSource=null;YAHOO.widget.AutoComplete.prototype.applyLocalFilter=null;YAHOO.widget.AutoComplete.prototype.queryMatchCase=false;YAHOO.widget.AutoComplete.prototype.queryMatchContains=false;YAHOO.widget.AutoComplete.prototype.queryMatchSubset=false;YAHOO.widget.AutoComplete.prototype.minQueryLength=1;YAHOO.widget.AutoComplete.prototype.maxResultsDisplayed=10;YAHOO.widget.AutoComplete.prototype.queryDelay=0.2;YAHOO.widget.AutoComplete.prototype.typeAheadDelay=0.5;YAHOO.widget.AutoComplete.prototype.queryInterval=500;YAHOO.widget.AutoComplete.prototype.highlightClassName="yui-ac-highlight";YAHOO.widget.AutoComplete.prototype.prehighlightClassName=null;YAHOO.widget.AutoComplete.prototype.delimChar=null;YAHOO.widget.AutoComplete.prototype.autoHighlight=true;YAHOO.widget.AutoComplete.prototype.typeAhead=false;YAHOO.widget.AutoComplete.prototype.animHoriz=false;YAHOO.widget.AutoComplete.prototype.animVert=true;YAHOO.widget.AutoComplete.prototype.animSpeed=0.3;YAHOO.widget.AutoComplete.prototype.forceSelection=false;YAHOO.widget.AutoComplete.prototype.allowBrowserAutocomplete=true;YAHOO.widget.AutoComplete.prototype.alwaysShowContainer=false;YAHOO.widget.AutoComplete.prototype.useIFrame=false;YAHOO.widget.AutoComplete.prototype.useShadow=false;YAHOO.widget.AutoComplete.prototype.suppressInputUpdate=false;YAHOO.widget.AutoComplete.prototype.resultTypeList=true;YAHOO.widget.AutoComplete.prototype.queryQuestionMark=true;YAHOO.widget.AutoComplete.prototype.autoSnapContainer=true;YAHOO.widget.AutoComplete.prototype.toString=function(){return"AutoComplete "+this._sName;};YAHOO.widget.AutoComplete.prototype.getInputEl=function(){return this._elTextbox;};YAHOO.widget.AutoComplete.prototype.getContainerEl=function(){return this._elContainer;
-};YAHOO.widget.AutoComplete.prototype.isFocused=function(){return this._bFocused;};YAHOO.widget.AutoComplete.prototype.isContainerOpen=function(){return this._bContainerOpen;};YAHOO.widget.AutoComplete.prototype.getListEl=function(){return this._elList;};YAHOO.widget.AutoComplete.prototype.getListItemMatch=function(A){if(A._sResultMatch){return A._sResultMatch;}else{return null;}};YAHOO.widget.AutoComplete.prototype.getListItemData=function(A){if(A._oResultData){return A._oResultData;}else{return null;}};YAHOO.widget.AutoComplete.prototype.getListItemIndex=function(A){if(YAHOO.lang.isNumber(A._nItemIndex)){return A._nItemIndex;}else{return null;}};YAHOO.widget.AutoComplete.prototype.setHeader=function(B){if(this._elHeader){var A=this._elHeader;if(B){A.innerHTML=B;A.style.display="";}else{A.innerHTML="";A.style.display="none";}}};YAHOO.widget.AutoComplete.prototype.setFooter=function(B){if(this._elFooter){var A=this._elFooter;if(B){A.innerHTML=B;A.style.display="";}else{A.innerHTML="";A.style.display="none";}}};YAHOO.widget.AutoComplete.prototype.setBody=function(A){if(this._elBody){var B=this._elBody;YAHOO.util.Event.purgeElement(B,true);if(A){B.innerHTML=A;B.style.display="";}else{B.innerHTML="";B.style.display="none";}this._elList=null;}};YAHOO.widget.AutoComplete.prototype.generateRequest=function(B){var A=this.dataSource.dataType;if(A===YAHOO.util.DataSourceBase.TYPE_XHR){if(!this.dataSource.connMethodPost){B=(this.queryQuestionMark?"?":"")+(this.dataSource.scriptQueryParam||"query")+"="+B+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}else{B=(this.dataSource.scriptQueryParam||"query")+"="+B+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}}else{if(A===YAHOO.util.DataSourceBase.TYPE_SCRIPTNODE){B="&"+(this.dataSource.scriptQueryParam||"query")+"="+B+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}}return B;};YAHOO.widget.AutoComplete.prototype.sendQuery=function(B){this._bFocused=true;var A=(this.delimChar)?this._elTextbox.value+B:B;this._sendQuery(A);};YAHOO.widget.AutoComplete.prototype.snapContainer=function(){var A=this._elTextbox,B=YAHOO.util.Dom.getXY(A);B[1]+=YAHOO.util.Dom.get(A).offsetHeight+2;YAHOO.util.Dom.setXY(this._elContainer,B);};YAHOO.widget.AutoComplete.prototype.expandContainer=function(){this._toggleContainer(true);};YAHOO.widget.AutoComplete.prototype.collapseContainer=function(){this._toggleContainer(false);};YAHOO.widget.AutoComplete.prototype.clearList=function(){var B=this._elList.childNodes,A=B.length-1;for(;A>-1;A--){B[A].style.display="none";}};YAHOO.widget.AutoComplete.prototype.getSubsetMatches=function(E){var D,C,A;for(var B=E.length;B>=this.minQueryLength;B--){A=this.generateRequest(E.substr(0,B));this.dataRequestEvent.fire(this,D,A);C=this.dataSource.getCachedResponse(A);if(C){return this.filterResults.apply(this.dataSource,[E,C,C,{scope:this}]);}}return null;};YAHOO.widget.AutoComplete.prototype.preparseRawResponse=function(C,B,A){var D=((this.responseStripAfter!=="")&&(B.indexOf))?B.indexOf(this.responseStripAfter):-1;if(D!=-1){B=B.substring(0,D);}return B;};YAHOO.widget.AutoComplete.prototype.filterResults=function(K,M,Q,L){if(L&&L.argument&&L.argument.query){K=L.argument.query;}if(K&&K!==""){Q=YAHOO.widget.AutoComplete._cloneObject(Q);var I=L.scope,P=this,C=Q.results,N=[],B=I.maxResultsDisplayed,J=(P.queryMatchCase||I.queryMatchCase),A=(P.queryMatchContains||I.queryMatchContains);for(var D=0,H=C.length;D<H;D++){var F=C[D];var E=null;if(YAHOO.lang.isString(F)){E=F;}else{if(YAHOO.lang.isArray(F)){E=F[0];}else{if(this.responseSchema.fields){var O=this.responseSchema.fields[0].key||this.responseSchema.fields[0];E=F[O];}else{if(this.key){E=F[this.key];}}}}if(YAHOO.lang.isString(E)){var G=(J)?E.indexOf(decodeURIComponent(K)):E.toLowerCase().indexOf(decodeURIComponent(K).toLowerCase());if((!A&&(G===0))||(A&&(G>-1))){N.push(F);}}if(H>B&&N.length===B){break;}}Q.results=N;}else{}return Q;};YAHOO.widget.AutoComplete.prototype.handleResponse=function(C,A,B){if((this instanceof YAHOO.widget.AutoComplete)&&this._sName){this._populateList(C,A,B);}};YAHOO.widget.AutoComplete.prototype.doBeforeLoadData=function(C,A,B){return true;};YAHOO.widget.AutoComplete.prototype.formatResult=function(B,D,A){var C=(A)?A:"";return C;};YAHOO.widget.AutoComplete.prototype.doBeforeExpandContainer=function(D,A,C,B){return true;};YAHOO.widget.AutoComplete.prototype.destroy=function(){var B=this.toString();var A=this._elTextbox;var D=this._elContainer;this.textboxFocusEvent.unsubscribeAll();this.textboxKeyEvent.unsubscribeAll();this.dataRequestEvent.unsubscribeAll();this.dataReturnEvent.unsubscribeAll();this.dataErrorEvent.unsubscribeAll();this.containerPopulateEvent.unsubscribeAll();this.containerExpandEvent.unsubscribeAll();this.typeAheadEvent.unsubscribeAll();this.itemMouseOverEvent.unsubscribeAll();this.itemMouseOutEvent.unsubscribeAll();this.itemArrowToEvent.unsubscribeAll();this.itemArrowFromEvent.unsubscribeAll();this.itemSelectEvent.unsubscribeAll();this.unmatchedItemSelectEvent.unsubscribeAll();this.selectionEnforceEvent.unsubscribeAll();this.containerCollapseEvent.unsubscribeAll();this.textboxBlurEvent.unsubscribeAll();this.textboxChangeEvent.unsubscribeAll();YAHOO.util.Event.purgeElement(A,true);YAHOO.util.Event.purgeElement(D,true);D.innerHTML="";for(var C in this){if(YAHOO.lang.hasOwnProperty(this,C)){this[C]=null;}}};YAHOO.widget.AutoComplete.prototype.textboxFocusEvent=null;YAHOO.widget.AutoComplete.prototype.textboxKeyEvent=null;YAHOO.widget.AutoComplete.prototype.dataRequestEvent=null;YAHOO.widget.AutoComplete.prototype.dataReturnEvent=null;YAHOO.widget.AutoComplete.prototype.dataErrorEvent=null;YAHOO.widget.AutoComplete.prototype.containerPopulateEvent=null;YAHOO.widget.AutoComplete.prototype.containerExpandEvent=null;YAHOO.widget.AutoComplete.prototype.typeAheadEvent=null;YAHOO.widget.AutoComplete.prototype.itemMouseOverEvent=null;YAHOO.widget.AutoComplete.prototype.itemMouseOutEvent=null;
-YAHOO.widget.AutoComplete.prototype.itemArrowToEvent=null;YAHOO.widget.AutoComplete.prototype.itemArrowFromEvent=null;YAHOO.widget.AutoComplete.prototype.itemSelectEvent=null;YAHOO.widget.AutoComplete.prototype.unmatchedItemSelectEvent=null;YAHOO.widget.AutoComplete.prototype.selectionEnforceEvent=null;YAHOO.widget.AutoComplete.prototype.containerCollapseEvent=null;YAHOO.widget.AutoComplete.prototype.textboxBlurEvent=null;YAHOO.widget.AutoComplete.prototype.textboxChangeEvent=null;YAHOO.widget.AutoComplete._nIndex=0;YAHOO.widget.AutoComplete.prototype._sName=null;YAHOO.widget.AutoComplete.prototype._elTextbox=null;YAHOO.widget.AutoComplete.prototype._elContainer=null;YAHOO.widget.AutoComplete.prototype._elContent=null;YAHOO.widget.AutoComplete.prototype._elHeader=null;YAHOO.widget.AutoComplete.prototype._elBody=null;YAHOO.widget.AutoComplete.prototype._elFooter=null;YAHOO.widget.AutoComplete.prototype._elShadow=null;YAHOO.widget.AutoComplete.prototype._elIFrame=null;YAHOO.widget.AutoComplete.prototype._bFocused=false;YAHOO.widget.AutoComplete.prototype._oAnim=null;YAHOO.widget.AutoComplete.prototype._bContainerOpen=false;YAHOO.widget.AutoComplete.prototype._bOverContainer=false;YAHOO.widget.AutoComplete.prototype._elList=null;YAHOO.widget.AutoComplete.prototype._nDisplayedItems=0;YAHOO.widget.AutoComplete.prototype._sCurQuery=null;YAHOO.widget.AutoComplete.prototype._sPastSelections="";YAHOO.widget.AutoComplete.prototype._sInitInputValue=null;YAHOO.widget.AutoComplete.prototype._elCurListItem=null;YAHOO.widget.AutoComplete.prototype._elCurPrehighlightItem=null;YAHOO.widget.AutoComplete.prototype._bItemSelected=false;YAHOO.widget.AutoComplete.prototype._nKeyCode=null;YAHOO.widget.AutoComplete.prototype._nDelayID=-1;YAHOO.widget.AutoComplete.prototype._nTypeAheadDelayID=-1;YAHOO.widget.AutoComplete.prototype._iFrameSrc="javascript:false;";YAHOO.widget.AutoComplete.prototype._queryInterval=null;YAHOO.widget.AutoComplete.prototype._sLastTextboxValue=null;YAHOO.widget.AutoComplete.prototype._initProps=function(){var B=this.minQueryLength;if(!YAHOO.lang.isNumber(B)){this.minQueryLength=1;}var E=this.maxResultsDisplayed;if(!YAHOO.lang.isNumber(E)||(E<1)){this.maxResultsDisplayed=10;}var F=this.queryDelay;if(!YAHOO.lang.isNumber(F)||(F<0)){this.queryDelay=0.2;}var C=this.typeAheadDelay;if(!YAHOO.lang.isNumber(C)||(C<0)){this.typeAheadDelay=0.2;}var A=this.delimChar;if(YAHOO.lang.isString(A)&&(A.length>0)){this.delimChar=[A];}else{if(!YAHOO.lang.isArray(A)){this.delimChar=null;}}var D=this.animSpeed;if((this.animHoriz||this.animVert)&&YAHOO.util.Anim){if(!YAHOO.lang.isNumber(D)||(D<0)){this.animSpeed=0.3;}if(!this._oAnim){this._oAnim=new YAHOO.util.Anim(this._elContent,{},this.animSpeed);}else{this._oAnim.duration=this.animSpeed;}}if(this.forceSelection&&A){}};YAHOO.widget.AutoComplete.prototype._initContainerHelperEls=function(){if(this.useShadow&&!this._elShadow){var A=document.createElement("div");A.className="yui-ac-shadow";A.style.width=0;A.style.height=0;this._elShadow=this._elContainer.appendChild(A);}if(this.useIFrame&&!this._elIFrame){var B=document.createElement("iframe");B.src=this._iFrameSrc;B.frameBorder=0;B.scrolling="no";B.style.position="absolute";B.style.width=0;B.style.height=0;B.style.padding=0;B.tabIndex=-1;B.role="presentation";B.title="Presentational iframe shim";this._elIFrame=this._elContainer.appendChild(B);}};YAHOO.widget.AutoComplete.prototype._initContainerEl=function(){YAHOO.util.Dom.addClass(this._elContainer,"yui-ac-container");if(!this._elContent){var C=document.createElement("div");C.className="yui-ac-content";C.style.display="none";this._elContent=this._elContainer.appendChild(C);var B=document.createElement("div");B.className="yui-ac-hd";B.style.display="none";this._elHeader=this._elContent.appendChild(B);var D=document.createElement("div");D.className="yui-ac-bd";this._elBody=this._elContent.appendChild(D);var A=document.createElement("div");A.className="yui-ac-ft";A.style.display="none";this._elFooter=this._elContent.appendChild(A);}else{}};YAHOO.widget.AutoComplete.prototype._initListEl=function(){var C=this.maxResultsDisplayed,A=this._elList||document.createElement("ul"),B;while(A.childNodes.length<C){B=document.createElement("li");B.style.display="none";B._nItemIndex=A.childNodes.length;A.appendChild(B);}if(!this._elList){var D=this._elBody;YAHOO.util.Event.purgeElement(D,true);D.innerHTML="";this._elList=D.appendChild(A);}this._elBody.style.display="";};YAHOO.widget.AutoComplete.prototype._focus=function(){var A=this;setTimeout(function(){try{A._elTextbox.focus();}catch(B){}},0);};YAHOO.widget.AutoComplete.prototype._enableIntervalDetection=function(){var A=this;if(!A._queryInterval&&A.queryInterval){A._queryInterval=setInterval(function(){A._onInterval();},A.queryInterval);}};YAHOO.widget.AutoComplete.prototype.enableIntervalDetection=YAHOO.widget.AutoComplete.prototype._enableIntervalDetection;YAHOO.widget.AutoComplete.prototype._onInterval=function(){var A=this._elTextbox.value;var B=this._sLastTextboxValue;if(A!=B){this._sLastTextboxValue=A;this._sendQuery(A);}};YAHOO.widget.AutoComplete.prototype._clearInterval=function(){if(this._queryInterval){clearInterval(this._queryInterval);this._queryInterval=null;}};YAHOO.widget.AutoComplete.prototype._isIgnoreKey=function(A){if((A==9)||(A==13)||(A==16)||(A==17)||(A>=18&&A<=20)||(A==27)||(A>=33&&A<=35)||(A>=36&&A<=40)||(A>=44&&A<=45)||(A==229)){return true;}return false;};YAHOO.widget.AutoComplete.prototype._sendQuery=function(D){if(this.minQueryLength<0){this._toggleContainer(false);return;}if(this.delimChar){var A=this._extractQuery(D);D=A.query;this._sPastSelections=A.previous;}if((D&&(D.length<this.minQueryLength))||(!D&&this.minQueryLength>0)){if(this._nDelayID!=-1){clearTimeout(this._nDelayID);}this._toggleContainer(false);return;}D=encodeURIComponent(D);this._nDelayID=-1;if(this.dataSource.queryMatchSubset||this.queryMatchSubset){var C=this.getSubsetMatches(D);if(C){this.handleResponse(D,C,{query:D});return;
-}}if(this.dataSource.responseStripAfter){this.dataSource.doBeforeParseData=this.preparseRawResponse;}if(this.applyLocalFilter){this.dataSource.doBeforeCallback=this.filterResults;}var B=this.generateRequest(D);this.dataRequestEvent.fire(this,D,B);this.dataSource.sendRequest(B,{success:this.handleResponse,failure:this.handleResponse,scope:this,argument:{query:D}});};YAHOO.widget.AutoComplete.prototype._populateListItem=function(B,A,C){B.innerHTML=this.formatResult(A,C,B._sResultMatch);};YAHOO.widget.AutoComplete.prototype._populateList=function(K,F,C){if(this._nTypeAheadDelayID!=-1){clearTimeout(this._nTypeAheadDelayID);}K=(C&&C.query)?C.query:K;var H=this.doBeforeLoadData(K,F,C);if(H&&!F.error){this.dataReturnEvent.fire(this,K,F.results);if(this._bFocused){var M=decodeURIComponent(K);this._sCurQuery=M;this._bItemSelected=false;var R=F.results,A=Math.min(R.length,this.maxResultsDisplayed),J=(this.dataSource.responseSchema.fields)?(this.dataSource.responseSchema.fields[0].key||this.dataSource.responseSchema.fields[0]):0;if(A>0){if(!this._elList||(this._elList.childNodes.length<A)){this._initListEl();}this._initContainerHelperEls();var I=this._elList.childNodes;for(var Q=A-1;Q>=0;Q--){var P=I[Q],E=R[Q];if(this.resultTypeList){var B=[];B[0]=(YAHOO.lang.isString(E))?E:E[J]||E[this.key];var L=this.dataSource.responseSchema.fields;if(YAHOO.lang.isArray(L)&&(L.length>1)){for(var N=1,S=L.length;N<S;N++){B[B.length]=E[L[N].key||L[N]];}}else{if(YAHOO.lang.isArray(E)){B=E;}else{if(YAHOO.lang.isString(E)){B=[E];}else{B[1]=E;}}}E=B;}P._sResultMatch=(YAHOO.lang.isString(E))?E:(YAHOO.lang.isArray(E))?E[0]:(E[J]||"");P._oResultData=E;this._populateListItem(P,E,M);P.style.display="";}if(A<I.length){var G;for(var O=I.length-1;O>=A;O--){G=I[O];G.style.display="none";}}this._nDisplayedItems=A;this.containerPopulateEvent.fire(this,K,R);if(this.autoHighlight){var D=this._elList.firstChild;this._toggleHighlight(D,"to");this.itemArrowToEvent.fire(this,D);this._typeAhead(D,K);}else{this._toggleHighlight(this._elCurListItem,"from");}H=this._doBeforeExpandContainer(this._elTextbox,this._elContainer,K,R);this._toggleContainer(H);}else{this._toggleContainer(false);}return;}}else{this.dataErrorEvent.fire(this,K,F);}};YAHOO.widget.AutoComplete.prototype._doBeforeExpandContainer=function(D,A,C,B){if(this.autoSnapContainer){this.snapContainer();}return this.doBeforeExpandContainer(D,A,C,B);};YAHOO.widget.AutoComplete.prototype._clearSelection=function(){var A=(this.delimChar)?this._extractQuery(this._elTextbox.value):{previous:"",query:this._elTextbox.value};this._elTextbox.value=A.previous;this.selectionEnforceEvent.fire(this,A.query);};YAHOO.widget.AutoComplete.prototype._textMatchesOption=function(){var A=null;for(var B=0;B<this._nDisplayedItems;B++){var C=this._elList.childNodes[B];var D=(""+C._sResultMatch).toLowerCase();if(D==this._sCurQuery.toLowerCase()){A=C;break;}}return(A);};YAHOO.widget.AutoComplete.prototype._typeAhead=function(B,D){if(!this.typeAhead||(this._nKeyCode==8)){return;}var A=this,C=this._elTextbox;if(C.setSelectionRange||C.createTextRange){this._nTypeAheadDelayID=setTimeout(function(){var F=C.value.length;A._updateValue(B);var G=C.value.length;A._selectText(C,F,G);var E=C.value.substr(F,G);A.typeAheadEvent.fire(A,D,E);},(this.typeAheadDelay*1000));}};YAHOO.widget.AutoComplete.prototype._selectText=function(D,A,B){if(D.setSelectionRange){D.setSelectionRange(A,B);}else{if(D.createTextRange){var C=D.createTextRange();C.moveStart("character",A);C.moveEnd("character",B-D.value.length);C.select();}else{D.select();}}};YAHOO.widget.AutoComplete.prototype._extractQuery=function(H){var C=this.delimChar,F=-1,G,E,B=C.length-1,D;for(;B>=0;B--){G=H.lastIndexOf(C[B]);if(G>F){F=G;}}if(C[B]==" "){for(var A=C.length-1;A>=0;A--){if(H[F-1]==C[A]){F--;break;}}}if(F>-1){E=F+1;while(H.charAt(E)==" "){E+=1;}D=H.substring(0,E);H=H.substr(E);}else{D="";}return{previous:D,query:H};};YAHOO.widget.AutoComplete.prototype._toggleContainerHelpers=function(D){var E=this._elContent.offsetWidth+"px";var B=this._elContent.offsetHeight+"px";if(this.useIFrame&&this._elIFrame){var C=this._elIFrame;if(D){C.style.width=E;C.style.height=B;C.style.padding="";}else{C.style.width=0;C.style.height=0;C.style.padding=0;}}if(this.useShadow&&this._elShadow){var A=this._elShadow;if(D){A.style.width=E;A.style.height=B;}else{A.style.width=0;A.style.height=0;}}};YAHOO.widget.AutoComplete.prototype._toggleContainer=function(I){var D=this._elContainer;if(this.alwaysShowContainer&&this._bContainerOpen){return;}if(!I){this._toggleHighlight(this._elCurListItem,"from");this._nDisplayedItems=0;this._sCurQuery=null;if(this._elContent.style.display=="none"){return;}}var A=this._oAnim;if(A&&A.getEl()&&(this.animHoriz||this.animVert)){if(A.isAnimated()){A.stop(true);}var G=this._elContent.cloneNode(true);D.appendChild(G);G.style.top="-9000px";G.style.width="";G.style.height="";G.style.display="";var F=G.offsetWidth;var C=G.offsetHeight;var B=(this.animHoriz)?0:F;var E=(this.animVert)?0:C;A.attributes=(I)?{width:{to:F},height:{to:C}}:{width:{to:B},height:{to:E}};if(I&&!this._bContainerOpen){this._elContent.style.width=B+"px";this._elContent.style.height=E+"px";}else{this._elContent.style.width=F+"px";this._elContent.style.height=C+"px";}D.removeChild(G);G=null;var H=this;var J=function(){A.onComplete.unsubscribeAll();if(I){H._toggleContainerHelpers(true);H._bContainerOpen=I;H.containerExpandEvent.fire(H);}else{H._elContent.style.display="none";H._bContainerOpen=I;H.containerCollapseEvent.fire(H);}};this._toggleContainerHelpers(false);this._elContent.style.display="";A.onComplete.subscribe(J);A.animate();}else{if(I){this._elContent.style.display="";this._toggleContainerHelpers(true);this._bContainerOpen=I;this.containerExpandEvent.fire(this);}else{this._toggleContainerHelpers(false);this._elContent.style.display="none";this._bContainerOpen=I;this.containerCollapseEvent.fire(this);}}};YAHOO.widget.AutoComplete.prototype._toggleHighlight=function(A,C){if(A){var B=this.highlightClassName;
-if(this._elCurListItem){YAHOO.util.Dom.removeClass(this._elCurListItem,B);this._elCurListItem=null;}if((C=="to")&&B){YAHOO.util.Dom.addClass(A,B);this._elCurListItem=A;}}};YAHOO.widget.AutoComplete.prototype._togglePrehighlight=function(B,C){var A=this.prehighlightClassName;if(this._elCurPrehighlightItem){YAHOO.util.Dom.removeClass(this._elCurPrehighlightItem,A);}if(B==this._elCurListItem){return;}if((C=="mouseover")&&A){YAHOO.util.Dom.addClass(B,A);this._elCurPrehighlightItem=B;}else{YAHOO.util.Dom.removeClass(B,A);}};YAHOO.widget.AutoComplete.prototype._updateValue=function(C){if(!this.suppressInputUpdate){var F=this._elTextbox;var E=(this.delimChar)?(this.delimChar[0]||this.delimChar):null;var B=C._sResultMatch;var D="";if(E){D=this._sPastSelections;D+=B+E;if(E!=" "){D+=" ";}}else{D=B;}F.value=D;if(F.type=="textarea"){F.scrollTop=F.scrollHeight;}var A=F.value.length;this._selectText(F,A,A);this._elCurListItem=C;}};YAHOO.widget.AutoComplete.prototype._selectItem=function(A){this._bItemSelected=true;this._updateValue(A);this._sPastSelections=this._elTextbox.value;this._clearInterval();this.itemSelectEvent.fire(this,A,A._oResultData);this._toggleContainer(false);};YAHOO.widget.AutoComplete.prototype._jumpSelection=function(){if(this._elCurListItem){this._selectItem(this._elCurListItem);}else{this._toggleContainer(false);}};YAHOO.widget.AutoComplete.prototype._moveSelection=function(G){if(this._bContainerOpen){var H=this._elCurListItem,D=-1;if(H){D=H._nItemIndex;}var E=(G==40)?(D+1):(D-1);if(E<-2||E>=this._nDisplayedItems){return;}if(H){this._toggleHighlight(H,"from");this.itemArrowFromEvent.fire(this,H);}if(E==-1){if(this.delimChar){this._elTextbox.value=this._sPastSelections+this._sCurQuery;}else{this._elTextbox.value=this._sCurQuery;}return;}if(E==-2){this._toggleContainer(false);return;}var F=this._elList.childNodes[E],B=this._elContent,C=YAHOO.util.Dom.getStyle(B,"overflow"),I=YAHOO.util.Dom.getStyle(B,"overflowY"),A=((C=="auto")||(C=="scroll")||(I=="auto")||(I=="scroll"));if(A&&(E>-1)&&(E<this._nDisplayedItems)){if(G==40){if((F.offsetTop+F.offsetHeight)>(B.scrollTop+B.offsetHeight)){B.scrollTop=(F.offsetTop+F.offsetHeight)-B.offsetHeight;}else{if((F.offsetTop+F.offsetHeight)<B.scrollTop){B.scrollTop=F.offsetTop;}}}else{if(F.offsetTop<B.scrollTop){this._elContent.scrollTop=F.offsetTop;}else{if(F.offsetTop>(B.scrollTop+B.offsetHeight)){this._elContent.scrollTop=(F.offsetTop+F.offsetHeight)-B.offsetHeight;}}}}this._toggleHighlight(F,"to");this.itemArrowToEvent.fire(this,F);if(this.typeAhead){this._updateValue(F);}}};YAHOO.widget.AutoComplete.prototype._onContainerMouseover=function(A,C){var D=YAHOO.util.Event.getTarget(A);var B=D.nodeName.toLowerCase();while(D&&(B!="table")){switch(B){case"body":return;case"li":if(C.prehighlightClassName){C._togglePrehighlight(D,"mouseover");}else{C._toggleHighlight(D,"to");}C.itemMouseOverEvent.fire(C,D);break;case"div":if(YAHOO.util.Dom.hasClass(D,"yui-ac-container")){C._bOverContainer=true;return;}break;default:break;}D=D.parentNode;if(D){B=D.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerMouseout=function(A,C){var D=YAHOO.util.Event.getTarget(A);var B=D.nodeName.toLowerCase();while(D&&(B!="table")){switch(B){case"body":return;case"li":if(C.prehighlightClassName){C._togglePrehighlight(D,"mouseout");}else{C._toggleHighlight(D,"from");}C.itemMouseOutEvent.fire(C,D);break;case"ul":C._toggleHighlight(C._elCurListItem,"to");break;case"div":if(YAHOO.util.Dom.hasClass(D,"yui-ac-container")){C._bOverContainer=false;return;}break;default:break;}D=D.parentNode;if(D){B=D.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerClick=function(A,C){var D=YAHOO.util.Event.getTarget(A);var B=D.nodeName.toLowerCase();while(D&&(B!="table")){switch(B){case"body":return;case"li":C._toggleHighlight(D,"to");C._selectItem(D);return;default:break;}D=D.parentNode;if(D){B=D.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerScroll=function(A,B){B._focus();};YAHOO.widget.AutoComplete.prototype._onContainerResize=function(A,B){B._toggleContainerHelpers(B._bContainerOpen);};YAHOO.widget.AutoComplete.prototype._onTextboxKeyDown=function(A,B){var C=A.keyCode;if(B._nTypeAheadDelayID!=-1){clearTimeout(B._nTypeAheadDelayID);}switch(C){case 9:if(!YAHOO.env.ua.opera&&(navigator.userAgent.toLowerCase().indexOf("mac")==-1)||(YAHOO.env.ua.webkit>420)){if(B._elCurListItem){if(B.delimChar&&(B._nKeyCode!=C)){if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);}}B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;case 13:if(!YAHOO.env.ua.opera&&(navigator.userAgent.toLowerCase().indexOf("mac")==-1)||(YAHOO.env.ua.webkit>420)){if(B._elCurListItem){if(B._nKeyCode!=C){if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);}}B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;case 27:B._toggleContainer(false);return;case 39:B._jumpSelection();break;case 38:if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);B._moveSelection(C);}break;case 40:if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);B._moveSelection(C);}break;default:B._bItemSelected=false;B._toggleHighlight(B._elCurListItem,"from");B.textboxKeyEvent.fire(B,C);break;}if(C===18){B._enableIntervalDetection();}B._nKeyCode=C;};YAHOO.widget.AutoComplete.prototype._onTextboxKeyPress=function(A,B){var C=A.keyCode;if(YAHOO.env.ua.opera||(navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&(YAHOO.env.ua.webkit<420)){switch(C){case 9:if(B._bContainerOpen){if(B.delimChar){YAHOO.util.Event.stopEvent(A);}if(B._elCurListItem){B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;case 13:if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);if(B._elCurListItem){B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;default:break;}}else{if(C==229){B._enableIntervalDetection();}}};YAHOO.widget.AutoComplete.prototype._onTextboxKeyUp=function(A,C){var B=this.value;C._initProps();var D=A.keyCode;if(C._isIgnoreKey(D)){return;
-}if(C._nDelayID!=-1){clearTimeout(C._nDelayID);}C._nDelayID=setTimeout(function(){C._sendQuery(B);},(C.queryDelay*1000));};YAHOO.widget.AutoComplete.prototype._onTextboxFocus=function(A,B){if(!B._bFocused){B._elTextbox.setAttribute("autocomplete","off");B._bFocused=true;B._sInitInputValue=B._elTextbox.value;B.textboxFocusEvent.fire(B);}};YAHOO.widget.AutoComplete.prototype._onTextboxBlur=function(A,C){if(!C._bOverContainer||(C._nKeyCode==9)){if(!C._bItemSelected){var B=C._textMatchesOption();if(!C._bContainerOpen||(C._bContainerOpen&&(B===null))){if(C.forceSelection){C._clearSelection();}else{C.unmatchedItemSelectEvent.fire(C,C._sCurQuery);}}else{if(C.forceSelection){C._selectItem(B);}}}C._clearInterval();C._bFocused=false;if(C._sInitInputValue!==C._elTextbox.value){C.textboxChangeEvent.fire(C);}C.textboxBlurEvent.fire(C);C._toggleContainer(false);}else{C._focus();}};YAHOO.widget.AutoComplete.prototype._onWindowUnload=function(A,B){if(B&&B._elTextbox&&B.allowBrowserAutocomplete){B._elTextbox.setAttribute("autocomplete","on");}};YAHOO.widget.AutoComplete.prototype.doBeforeSendQuery=function(A){return this.generateRequest(A);};YAHOO.widget.AutoComplete.prototype.getListItems=function(){var C=[],B=this._elList.childNodes;for(var A=B.length-1;A>=0;A--){C[A]=B[A];}return C;};YAHOO.widget.AutoComplete._cloneObject=function(D){if(!YAHOO.lang.isValue(D)){return D;}var F={};if(YAHOO.lang.isFunction(D)){F=D;}else{if(YAHOO.lang.isArray(D)){var E=[];for(var C=0,B=D.length;C<B;C++){E[C]=YAHOO.widget.AutoComplete._cloneObject(D[C]);}F=E;}else{if(YAHOO.lang.isObject(D)){for(var A in D){if(YAHOO.lang.hasOwnProperty(D,A)){if(YAHOO.lang.isValue(D[A])&&YAHOO.lang.isObject(D[A])||YAHOO.lang.isArray(D[A])){F[A]=YAHOO.widget.AutoComplete._cloneObject(D[A]);}else{F[A]=D[A];}}}}else{F=D;}}}return F;};YAHOO.register("autocomplete",YAHOO.widget.AutoComplete,{version:"2.8.0r4",build:"2449"});
\ No newline at end of file
diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/autocomplete.js b/koha-tmpl/intranet-tmpl/prog/en/lib/yui/autocomplete/autocomplete.js
deleted file mode 100644 (file)
index bdadcb9..0000000
+++ /dev/null
@@ -1,2966 +0,0 @@
-/*
-Copyright (c) 2009, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.8.0r4
-*/
-/////////////////////////////////////////////////////////////////////////////
-//
-// YAHOO.widget.DataSource Backwards Compatibility
-//
-/////////////////////////////////////////////////////////////////////////////
-
-YAHOO.widget.DS_JSArray = YAHOO.util.LocalDataSource;
-
-YAHOO.widget.DS_JSFunction = YAHOO.util.FunctionDataSource;
-
-YAHOO.widget.DS_XHR = function(sScriptURI, aSchema, oConfigs) {
-    var DS = new YAHOO.util.XHRDataSource(sScriptURI, oConfigs);
-    DS._aDeprecatedSchema = aSchema;
-    return DS;
-};
-
-YAHOO.widget.DS_ScriptNode = function(sScriptURI, aSchema, oConfigs) {
-    var DS = new YAHOO.util.ScriptNodeDataSource(sScriptURI, oConfigs);
-    DS._aDeprecatedSchema = aSchema;
-    return DS;
-};
-
-YAHOO.widget.DS_XHR.TYPE_JSON = YAHOO.util.DataSourceBase.TYPE_JSON;
-YAHOO.widget.DS_XHR.TYPE_XML = YAHOO.util.DataSourceBase.TYPE_XML;
-YAHOO.widget.DS_XHR.TYPE_FLAT = YAHOO.util.DataSourceBase.TYPE_TEXT;
-
-// TODO: widget.DS_ScriptNode.scriptCallbackParam
-
-
-
- /**
- * The AutoComplete control provides the front-end logic for text-entry suggestion and
- * completion functionality.
- *
- * @module autocomplete
- * @requires yahoo, dom, event, datasource
- * @optional animation
- * @namespace YAHOO.widget
- * @title AutoComplete Widget
- */
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * The AutoComplete class provides the customizable functionality of a plug-and-play DHTML
- * auto completion widget.  Some key features:
- * <ul>
- * <li>Navigate with up/down arrow keys and/or mouse to pick a selection</li>
- * <li>The drop down container can "roll down" or "fly out" via configurable
- * animation</li>
- * <li>UI look-and-feel customizable through CSS, including container
- * attributes, borders, position, fonts, etc</li>
- * </ul>
- *
- * @class AutoComplete
- * @constructor
- * @param elInput {HTMLElement} DOM element reference of an input field.
- * @param elInput {String} String ID of an input field.
- * @param elContainer {HTMLElement} DOM element reference of an existing DIV.
- * @param elContainer {String} String ID of an existing DIV.
- * @param oDataSource {YAHOO.widget.DataSource} DataSource instance.
- * @param oConfigs {Object} (optional) Object literal of configuration params.
- */
-YAHOO.widget.AutoComplete = function(elInput,elContainer,oDataSource,oConfigs) {
-    if(elInput && elContainer && oDataSource) {
-        // Validate DataSource
-        if(oDataSource && YAHOO.lang.isFunction(oDataSource.sendRequest)) {
-            this.dataSource = oDataSource;
-        }
-        else {
-            return;
-        }
-
-        // YAHOO.widget.DataSource schema backwards compatibility
-        // Converted deprecated schema into supported schema
-        // First assume key data is held in position 0 of results array
-        this.key = 0;
-        var schema = oDataSource.responseSchema;
-        // An old school schema has been defined in the deprecated DataSource constructor
-        if(oDataSource._aDeprecatedSchema) {
-            var aDeprecatedSchema = oDataSource._aDeprecatedSchema;
-            if(YAHOO.lang.isArray(aDeprecatedSchema)) {
-                
-                if((oDataSource.responseType === YAHOO.util.DataSourceBase.TYPE_JSON) || 
-                (oDataSource.responseType === YAHOO.util.DataSourceBase.TYPE_UNKNOWN)) { // Used to default to unknown
-                    // Store the resultsList
-                    schema.resultsList = aDeprecatedSchema[0];
-                    // Store the key
-                    this.key = aDeprecatedSchema[1];
-                    // Only resultsList and key are defined, so grab all the data
-                    schema.fields = (aDeprecatedSchema.length < 3) ? null : aDeprecatedSchema.slice(1);
-                }
-                else if(oDataSource.responseType === YAHOO.util.DataSourceBase.TYPE_XML) {
-                    schema.resultNode = aDeprecatedSchema[0];
-                    this.key = aDeprecatedSchema[1];
-                    schema.fields = aDeprecatedSchema.slice(1);
-                }                
-                else if(oDataSource.responseType === YAHOO.util.DataSourceBase.TYPE_TEXT) {
-                    schema.recordDelim = aDeprecatedSchema[0];
-                    schema.fieldDelim = aDeprecatedSchema[1];
-                }                
-                oDataSource.responseSchema = schema;
-            }
-        }
-        
-        // Validate input element
-        if(YAHOO.util.Dom.inDocument(elInput)) {
-            if(YAHOO.lang.isString(elInput)) {
-                    this._sName = "instance" + YAHOO.widget.AutoComplete._nIndex + " " + elInput;
-                    this._elTextbox = document.getElementById(elInput);
-            }
-            else {
-                this._sName = (elInput.id) ?
-                    "instance" + YAHOO.widget.AutoComplete._nIndex + " " + elInput.id:
-                    "instance" + YAHOO.widget.AutoComplete._nIndex;
-                this._elTextbox = elInput;
-            }
-            YAHOO.util.Dom.addClass(this._elTextbox, "yui-ac-input");
-        }
-        else {
-            return;
-        }
-
-        // Validate container element
-        if(YAHOO.util.Dom.inDocument(elContainer)) {
-            if(YAHOO.lang.isString(elContainer)) {
-                    this._elContainer = document.getElementById(elContainer);
-            }
-            else {
-                this._elContainer = elContainer;
-            }
-            if(this._elContainer.style.display == "none") {
-            }
-            
-            // For skinning
-            var elParent = this._elContainer.parentNode;
-            var elTag = elParent.tagName.toLowerCase();
-            if(elTag == "div") {
-                YAHOO.util.Dom.addClass(elParent, "yui-ac");
-            }
-            else {
-            }
-        }
-        else {
-            return;
-        }
-
-        // Default applyLocalFilter setting is to enable for local sources
-        if(this.dataSource.dataType === YAHOO.util.DataSourceBase.TYPE_LOCAL) {
-            this.applyLocalFilter = true;
-        }
-        
-        // Set any config params passed in to override defaults
-        if(oConfigs && (oConfigs.constructor == Object)) {
-            for(var sConfig in oConfigs) {
-                if(sConfig) {
-                    this[sConfig] = oConfigs[sConfig];
-                }
-            }
-        }
-
-        // Initialization sequence
-        this._initContainerEl();
-        this._initProps();
-        this._initListEl();
-        this._initContainerHelperEls();
-
-        // Set up events
-        var oSelf = this;
-        var elTextbox = this._elTextbox;
-
-        // Dom events
-        YAHOO.util.Event.addListener(elTextbox,"keyup",oSelf._onTextboxKeyUp,oSelf);
-        YAHOO.util.Event.addListener(elTextbox,"keydown",oSelf._onTextboxKeyDown,oSelf);
-        YAHOO.util.Event.addListener(elTextbox,"focus",oSelf._onTextboxFocus,oSelf);
-        YAHOO.util.Event.addListener(elTextbox,"blur",oSelf._onTextboxBlur,oSelf);
-        YAHOO.util.Event.addListener(elContainer,"mouseover",oSelf._onContainerMouseover,oSelf);
-        YAHOO.util.Event.addListener(elContainer,"mouseout",oSelf._onContainerMouseout,oSelf);
-        YAHOO.util.Event.addListener(elContainer,"click",oSelf._onContainerClick,oSelf);
-        YAHOO.util.Event.addListener(elContainer,"scroll",oSelf._onContainerScroll,oSelf);
-        YAHOO.util.Event.addListener(elContainer,"resize",oSelf._onContainerResize,oSelf);
-        YAHOO.util.Event.addListener(elTextbox,"keypress",oSelf._onTextboxKeyPress,oSelf);
-        YAHOO.util.Event.addListener(window,"unload",oSelf._onWindowUnload,oSelf);
-
-        // Custom events
-        this.textboxFocusEvent = new YAHOO.util.CustomEvent("textboxFocus", this);
-        this.textboxKeyEvent = new YAHOO.util.CustomEvent("textboxKey", this);
-        this.dataRequestEvent = new YAHOO.util.CustomEvent("dataRequest", this);
-        this.dataReturnEvent = new YAHOO.util.CustomEvent("dataReturn", this);
-        this.dataErrorEvent = new YAHOO.util.CustomEvent("dataError", this);
-        this.containerPopulateEvent = new YAHOO.util.CustomEvent("containerPopulate", this);
-        this.containerExpandEvent = new YAHOO.util.CustomEvent("containerExpand", this);
-        this.typeAheadEvent = new YAHOO.util.CustomEvent("typeAhead", this);
-        this.itemMouseOverEvent = new YAHOO.util.CustomEvent("itemMouseOver", this);
-        this.itemMouseOutEvent = new YAHOO.util.CustomEvent("itemMouseOut", this);
-        this.itemArrowToEvent = new YAHOO.util.CustomEvent("itemArrowTo", this);
-        this.itemArrowFromEvent = new YAHOO.util.CustomEvent("itemArrowFrom", this);
-        this.itemSelectEvent = new YAHOO.util.CustomEvent("itemSelect", this);
-        this.unmatchedItemSelectEvent = new YAHOO.util.CustomEvent("unmatchedItemSelect", this);
-        this.selectionEnforceEvent = new YAHOO.util.CustomEvent("selectionEnforce", this);
-        this.containerCollapseEvent = new YAHOO.util.CustomEvent("containerCollapse", this);
-        this.textboxBlurEvent = new YAHOO.util.CustomEvent("textboxBlur", this);
-        this.textboxChangeEvent = new YAHOO.util.CustomEvent("textboxChange", this);
-        
-        // Finish up
-        elTextbox.setAttribute("autocomplete","off");
-        YAHOO.widget.AutoComplete._nIndex++;
-    }
-    // Required arguments were not found
-    else {
-    }
-};
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Public member variables
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * The DataSource object that encapsulates the data used for auto completion.
- * This object should be an inherited object from YAHOO.widget.DataSource.
- *
- * @property dataSource
- * @type YAHOO.widget.DataSource
- */
-YAHOO.widget.AutoComplete.prototype.dataSource = null;
-
-/**
- * By default, results from local DataSources will pass through the filterResults
- * method to apply a client-side matching algorithm. 
- * 
- * @property applyLocalFilter
- * @type Boolean
- * @default true for local arrays and json, otherwise false
- */
-YAHOO.widget.AutoComplete.prototype.applyLocalFilter = null;
-
-/**
- * When applyLocalFilter is true, the local filtering algorthim can have case sensitivity
- * enabled. 
- * 
- * @property queryMatchCase
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.queryMatchCase = false;
-
-/**
- * When applyLocalFilter is true, results can  be locally filtered to return
- * matching strings that "contain" the query string rather than simply "start with"
- * the query string.
- * 
- * @property queryMatchContains
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.queryMatchContains = false;
-
-/**
- * Enables query subset matching. When the DataSource's cache is enabled and queryMatchSubset is
- * true, substrings of queries will return matching cached results. For
- * instance, if the first query is for "abc" susequent queries that start with
- * "abc", like "abcd", will be queried against the cache, and not the live data
- * source. Recommended only for DataSources that return comprehensive results
- * for queries with very few characters.
- *
- * @property queryMatchSubset
- * @type Boolean
- * @default false
- *
- */
-YAHOO.widget.AutoComplete.prototype.queryMatchSubset = false;
-
-/**
- * Number of characters that must be entered before querying for results. A negative value
- * effectively turns off the widget. A value of 0 allows queries of null or empty string
- * values.
- *
- * @property minQueryLength
- * @type Number
- * @default 1
- */
-YAHOO.widget.AutoComplete.prototype.minQueryLength = 1;
-
-/**
- * Maximum number of results to display in results container.
- *
- * @property maxResultsDisplayed
- * @type Number
- * @default 10
- */
-YAHOO.widget.AutoComplete.prototype.maxResultsDisplayed = 10;
-
-/**
- * Number of seconds to delay before submitting a query request.  If a query
- * request is received before a previous one has completed its delay, the
- * previous request is cancelled and the new request is set to the delay. If 
- * typeAhead is also enabled, this value must always be less than the typeAheadDelay
- * in order to avoid certain race conditions. 
- *
- * @property queryDelay
- * @type Number
- * @default 0.2
- */
-YAHOO.widget.AutoComplete.prototype.queryDelay = 0.2;
-
-/**
- * If typeAhead is true, number of seconds to delay before updating input with
- * typeAhead value. In order to prevent certain race conditions, this value must
- * always be greater than the queryDelay.
- *
- * @property typeAheadDelay
- * @type Number
- * @default 0.5
- */
-YAHOO.widget.AutoComplete.prototype.typeAheadDelay = 0.5;
-
-/**
- * When IME usage is detected or interval detection is explicitly enabled,
- * AutoComplete will detect the input value at the given interval and send a
- * query if the value has changed.
- *
- * @property queryInterval
- * @type Number
- * @default 500
- */
-YAHOO.widget.AutoComplete.prototype.queryInterval = 500;
-
-/**
- * Class name of a highlighted item within results container.
- *
- * @property highlightClassName
- * @type String
- * @default "yui-ac-highlight"
- */
-YAHOO.widget.AutoComplete.prototype.highlightClassName = "yui-ac-highlight";
-
-/**
- * Class name of a pre-highlighted item within results container.
- *
- * @property prehighlightClassName
- * @type String
- */
-YAHOO.widget.AutoComplete.prototype.prehighlightClassName = null;
-
-/**
- * Query delimiter. A single character separator for multiple delimited
- * selections. Multiple delimiter characteres may be defined as an array of
- * strings. A null value or empty string indicates that query results cannot
- * be delimited. This feature is not recommended if you need forceSelection to
- * be true.
- *
- * @property delimChar
- * @type String | String[]
- */
-YAHOO.widget.AutoComplete.prototype.delimChar = null;
-
-/**
- * Whether or not the first item in results container should be automatically highlighted
- * on expand.
- *
- * @property autoHighlight
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.autoHighlight = true;
-
-/**
- * If autohighlight is enabled, whether or not the input field should be automatically updated
- * with the first query result as the user types, auto-selecting the substring portion
- * of the first result that the user has not yet typed.
- *
- * @property typeAhead
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.typeAhead = false;
-
-/**
- * Whether or not to animate the expansion/collapse of the results container in the
- * horizontal direction.
- *
- * @property animHoriz
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.animHoriz = false;
-
-/**
- * Whether or not to animate the expansion/collapse of the results container in the
- * vertical direction.
- *
- * @property animVert
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.animVert = true;
-
-/**
- * Speed of container expand/collapse animation, in seconds..
- *
- * @property animSpeed
- * @type Number
- * @default 0.3
- */
-YAHOO.widget.AutoComplete.prototype.animSpeed = 0.3;
-
-/**
- * Whether or not to force the user's selection to match one of the query
- * results. Enabling this feature essentially transforms the input field into a
- * &lt;select&gt; field. This feature is not recommended with delimiter character(s)
- * defined.
- *
- * @property forceSelection
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.forceSelection = false;
-
-/**
- * Whether or not to allow browsers to cache user-typed input in the input
- * field. Disabling this feature will prevent the widget from setting the
- * autocomplete="off" on the input field. When autocomplete="off"
- * and users click the back button after form submission, user-typed input can
- * be prefilled by the browser from its cache. This caching of user input may
- * not be desired for sensitive data, such as credit card numbers, in which
- * case, implementers should consider setting allowBrowserAutocomplete to false.
- *
- * @property allowBrowserAutocomplete
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.allowBrowserAutocomplete = true;
-
-/**
- * Enabling this feature prevents the toggling of the container to a collapsed state.
- * Setting to true does not automatically trigger the opening of the container.
- * Implementers are advised to pre-load the container with an explicit "sendQuery()" call.   
- *
- * @property alwaysShowContainer
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.alwaysShowContainer = false;
-
-/**
- * Whether or not to use an iFrame to layer over Windows form elements in
- * IE. Set to true only when the results container will be on top of a
- * &lt;select&gt; field in IE and thus exposed to the IE z-index bug (i.e.,
- * 5.5 < IE < 7).
- *
- * @property useIFrame
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.useIFrame = false;
-
-/**
- * Whether or not the results container should have a shadow.
- *
- * @property useShadow
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.useShadow = false;
-
-/**
- * Whether or not the input field should be updated with selections.
- *
- * @property suppressInputUpdate
- * @type Boolean
- * @default false
- */
-YAHOO.widget.AutoComplete.prototype.suppressInputUpdate = false;
-
-/**
- * For backward compatibility to pre-2.6.0 formatResults() signatures, setting
- * resultsTypeList to true will take each object literal result returned by
- * DataSource and flatten into an array.  
- *
- * @property resultTypeList
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.resultTypeList = true;
-
-/**
- * For XHR DataSources, AutoComplete will automatically insert a "?" between the server URI and 
- * the "query" param/value pair. To prevent this behavior, implementers should
- * set this value to false. To more fully customize the query syntax, implementers
- * should override the generateRequest() method. 
- *
- * @property queryQuestionMark
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.queryQuestionMark = true;
-
-/**
- * If true, before each time the container expands, the container element will be
- * positioned to snap to the bottom-left corner of the input element. If
- * autoSnapContainer is set to false, this positioning will not be done.  
- *
- * @property autoSnapContainer
- * @type Boolean
- * @default true
- */
-YAHOO.widget.AutoComplete.prototype.autoSnapContainer = true;
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Public methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
- /**
- * Public accessor to the unique name of the AutoComplete instance.
- *
- * @method toString
- * @return {String} Unique name of the AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.toString = function() {
-    return "AutoComplete " + this._sName;
-};
-
- /**
- * Returns DOM reference to input element.
- *
- * @method getInputEl
- * @return {HTMLELement} DOM reference to input element.
- */
-YAHOO.widget.AutoComplete.prototype.getInputEl = function() {
-    return this._elTextbox;
-};
-
- /**
- * Returns DOM reference to container element.
- *
- * @method getContainerEl
- * @return {HTMLELement} DOM reference to container element.
- */
-YAHOO.widget.AutoComplete.prototype.getContainerEl = function() {
-    return this._elContainer;
-};
-
- /**
- * Returns true if widget instance is currently active.
- *
- * @method isFocused
- * @return {Boolean} Returns true if widget instance is currently active.
- */
-YAHOO.widget.AutoComplete.prototype.isFocused = function() {
-    return this._bFocused;
-};
-
- /**
- * Returns true if container is in an expanded state, false otherwise.
- *
- * @method isContainerOpen
- * @return {Boolean} Returns true if container is in an expanded state, false otherwise.
- */
-YAHOO.widget.AutoComplete.prototype.isContainerOpen = function() {
-    return this._bContainerOpen;
-};
-
-/**
- * Public accessor to the &lt;ul&gt; element that displays query results within the results container.
- *
- * @method getListEl
- * @return {HTMLElement[]} Reference to &lt;ul&gt; element within the results container.
- */
-YAHOO.widget.AutoComplete.prototype.getListEl = function() {
-    return this._elList;
-};
-
-/**
- * Public accessor to the matching string associated with a given &lt;li&gt; result.
- *
- * @method getListItemMatch
- * @param elListItem {HTMLElement} Reference to &lt;LI&gt; element.
- * @return {String} Matching string.
- */
-YAHOO.widget.AutoComplete.prototype.getListItemMatch = function(elListItem) {
-    if(elListItem._sResultMatch) {
-        return elListItem._sResultMatch;
-    }
-    else {
-        return null;
-    }
-};
-
-/**
- * Public accessor to the result data associated with a given &lt;li&gt; result.
- *
- * @method getListItemData
- * @param elListItem {HTMLElement} Reference to &lt;LI&gt; element.
- * @return {Object} Result data.
- */
-YAHOO.widget.AutoComplete.prototype.getListItemData = function(elListItem) {
-    if(elListItem._oResultData) {
-        return elListItem._oResultData;
-    }
-    else {
-        return null;
-    }
-};
-
-/**
- * Public accessor to the index of the associated with a given &lt;li&gt; result.
- *
- * @method getListItemIndex
- * @param elListItem {HTMLElement} Reference to &lt;LI&gt; element.
- * @return {Number} Index.
- */
-YAHOO.widget.AutoComplete.prototype.getListItemIndex = function(elListItem) {
-    if(YAHOO.lang.isNumber(elListItem._nItemIndex)) {
-        return elListItem._nItemIndex;
-    }
-    else {
-        return null;
-    }
-};
-
-/**
- * Sets HTML markup for the results container header. This markup will be
- * inserted within a &lt;div&gt; tag with a class of "yui-ac-hd".
- *
- * @method setHeader
- * @param sHeader {String} HTML markup for results container header.
- */
-YAHOO.widget.AutoComplete.prototype.setHeader = function(sHeader) {
-    if(this._elHeader) {
-        var elHeader = this._elHeader;
-        if(sHeader) {
-            elHeader.innerHTML = sHeader;
-            elHeader.style.display = "";
-        }
-        else {
-            elHeader.innerHTML = "";
-            elHeader.style.display = "none";
-        }
-    }
-};
-
-/**
- * Sets HTML markup for the results container footer. This markup will be
- * inserted within a &lt;div&gt; tag with a class of "yui-ac-ft".
- *
- * @method setFooter
- * @param sFooter {String} HTML markup for results container footer.
- */
-YAHOO.widget.AutoComplete.prototype.setFooter = function(sFooter) {
-    if(this._elFooter) {
-        var elFooter = this._elFooter;
-        if(sFooter) {
-                elFooter.innerHTML = sFooter;
-                elFooter.style.display = "";
-        }
-        else {
-            elFooter.innerHTML = "";
-            elFooter.style.display = "none";
-        }
-    }
-};
-
-/**
- * Sets HTML markup for the results container body. This markup will be
- * inserted within a &lt;div&gt; tag with a class of "yui-ac-bd".
- *
- * @method setBody
- * @param sBody {String} HTML markup for results container body.
- */
-YAHOO.widget.AutoComplete.prototype.setBody = function(sBody) {
-    if(this._elBody) {
-        var elBody = this._elBody;
-        YAHOO.util.Event.purgeElement(elBody, true);
-        if(sBody) {
-            elBody.innerHTML = sBody;
-            elBody.style.display = "";
-        }
-        else {
-            elBody.innerHTML = "";
-            elBody.style.display = "none";
-        }
-        this._elList = null;
-    }
-};
-
-/**
-* A function that converts an AutoComplete query into a request value which is then
-* passed to the DataSource's sendRequest method in order to retrieve data for 
-* the query. By default, returns a String with the syntax: "query={query}"
-* Implementers can customize this method for custom request syntaxes.
-* 
-* @method generateRequest
-* @param sQuery {String} Query string
-* @return {MIXED} Request
-*/
-YAHOO.widget.AutoComplete.prototype.generateRequest = function(sQuery) {
-    var dataType = this.dataSource.dataType;
-    
-    // Transform query string in to a request for remote data
-    // By default, local data doesn't need a transformation, just passes along the query as is.
-    if(dataType === YAHOO.util.DataSourceBase.TYPE_XHR) {
-        // By default, XHR GET requests look like "{scriptURI}?{scriptQueryParam}={sQuery}&{scriptQueryAppend}"
-        if(!this.dataSource.connMethodPost) {
-            sQuery = (this.queryQuestionMark ? "?" : "") + (this.dataSource.scriptQueryParam || "query") + "=" + sQuery + 
-                (this.dataSource.scriptQueryAppend ? ("&" + this.dataSource.scriptQueryAppend) : "");        
-        }
-        // By default, XHR POST bodies are sent to the {scriptURI} like "{scriptQueryParam}={sQuery}&{scriptQueryAppend}"
-        else {
-            sQuery = (this.dataSource.scriptQueryParam || "query") + "=" + sQuery + 
-                (this.dataSource.scriptQueryAppend ? ("&" + this.dataSource.scriptQueryAppend) : "");
-        }
-    }
-    // By default, remote script node requests look like "{scriptURI}&{scriptCallbackParam}={callbackString}&{scriptQueryParam}={sQuery}&{scriptQueryAppend}"
-    else if(dataType === YAHOO.util.DataSourceBase.TYPE_SCRIPTNODE) {
-        sQuery = "&" + (this.dataSource.scriptQueryParam || "query") + "=" + sQuery + 
-            (this.dataSource.scriptQueryAppend ? ("&" + this.dataSource.scriptQueryAppend) : "");    
-    }
-    
-    return sQuery;
-};
-
-/**
- * Makes query request to the DataSource.
- *
- * @method sendQuery
- * @param sQuery {String} Query string.
- */
-YAHOO.widget.AutoComplete.prototype.sendQuery = function(sQuery) {
-    // Activate focus for a new interaction
-    this._bFocused = true;
-    
-    // Adjust programatically sent queries to look like they were input by user
-    // when delimiters are enabled
-    var newQuery = (this.delimChar) ? this._elTextbox.value + sQuery : sQuery;
-    this._sendQuery(newQuery);
-};
-
-/**
- * Snaps container to bottom-left corner of input element
- *
- * @method snapContainer
- */
-YAHOO.widget.AutoComplete.prototype.snapContainer = function() {
-    var oTextbox = this._elTextbox,
-        pos = YAHOO.util.Dom.getXY(oTextbox);
-    pos[1] += YAHOO.util.Dom.get(oTextbox).offsetHeight + 2;
-    YAHOO.util.Dom.setXY(this._elContainer,pos);
-};
-
-/**
- * Expands container.
- *
- * @method expandContainer
- */
-YAHOO.widget.AutoComplete.prototype.expandContainer = function() {
-    this._toggleContainer(true);
-};
-
-/**
- * Collapses container.
- *
- * @method collapseContainer
- */
-YAHOO.widget.AutoComplete.prototype.collapseContainer = function() {
-    this._toggleContainer(false);
-};
-
-/**
- * Clears entire list of suggestions.
- *
- * @method clearList
- */
-YAHOO.widget.AutoComplete.prototype.clearList = function() {
-    var allItems = this._elList.childNodes,
-        i=allItems.length-1;
-    for(; i>-1; i--) {
-          allItems[i].style.display = "none";
-    }
-};
-
-/**
- * Handles subset matching for when queryMatchSubset is enabled.
- *
- * @method getSubsetMatches
- * @param sQuery {String} Query string.
- * @return {Object} oParsedResponse or null. 
- */
-YAHOO.widget.AutoComplete.prototype.getSubsetMatches = function(sQuery) {
-    var subQuery, oCachedResponse, subRequest;
-    // Loop through substrings of each cached element's query property...
-    for(var i = sQuery.length; i >= this.minQueryLength ; i--) {
-        subRequest = this.generateRequest(sQuery.substr(0,i));
-        this.dataRequestEvent.fire(this, subQuery, subRequest);
-        
-        // If a substring of the query is found in the cache
-        oCachedResponse = this.dataSource.getCachedResponse(subRequest);
-        if(oCachedResponse) {
-            return this.filterResults.apply(this.dataSource, [sQuery, oCachedResponse, oCachedResponse, {scope:this}]);
-        }
-    }
-    return null;
-};
-
-/**
- * Executed by DataSource (within DataSource scope via doBeforeParseData()) to
- * handle responseStripAfter cleanup.
- *
- * @method preparseRawResponse
- * @param sQuery {String} Query string.
- * @return {Object} oParsedResponse or null. 
- */
-YAHOO.widget.AutoComplete.prototype.preparseRawResponse = function(oRequest, oFullResponse, oCallback) {
-    var nEnd = ((this.responseStripAfter !== "") && (oFullResponse.indexOf)) ?
-        oFullResponse.indexOf(this.responseStripAfter) : -1;
-    if(nEnd != -1) {
-        oFullResponse = oFullResponse.substring(0,nEnd);
-    }
-    return oFullResponse;
-};
-
-/**
- * Executed by DataSource (within DataSource scope via doBeforeCallback()) to
- * filter results through a simple client-side matching algorithm. 
- *
- * @method filterResults
- * @param sQuery {String} Original request.
- * @param oFullResponse {Object} Full response object.
- * @param oParsedResponse {Object} Parsed response object.
- * @param oCallback {Object} Callback object. 
- * @return {Object} Filtered response object.
- */
-
-YAHOO.widget.AutoComplete.prototype.filterResults = function(sQuery, oFullResponse, oParsedResponse, oCallback) {
-    // If AC has passed a query string value back to itself, grab it
-    if(oCallback && oCallback.argument && oCallback.argument.query) {
-        sQuery = oCallback.argument.query;
-    }
-
-    // Only if a query string is available to match against
-    if(sQuery && sQuery !== "") {
-        // First make a copy of the oParseResponse
-        oParsedResponse = YAHOO.widget.AutoComplete._cloneObject(oParsedResponse);
-        
-        var oAC = oCallback.scope,
-            oDS = this,
-            allResults = oParsedResponse.results, // the array of results
-            filteredResults = [], // container for filtered results,
-            nMax = oAC.maxResultsDisplayed, // max to find
-            bMatchCase = (oDS.queryMatchCase || oAC.queryMatchCase), // backward compat
-            bMatchContains = (oDS.queryMatchContains || oAC.queryMatchContains); // backward compat
-            
-        // Loop through each result object...
-        for(var i=0, len=allResults.length; i<len; i++) {
-            var oResult = allResults[i];
-
-            // Grab the data to match against from the result object...
-            var sResult = null;
-            
-            // Result object is a simple string already
-            if(YAHOO.lang.isString(oResult)) {
-                sResult = oResult;
-            }
-            // Result object is an array of strings
-            else if(YAHOO.lang.isArray(oResult)) {
-                sResult = oResult[0];
-            
-            }
-            // Result object is an object literal of strings
-            else if(this.responseSchema.fields) {
-                var key = this.responseSchema.fields[0].key || this.responseSchema.fields[0];
-                sResult = oResult[key];
-            }
-            // Backwards compatibility
-            else if(this.key) {
-                sResult = oResult[this.key];
-            }
-            
-            if(YAHOO.lang.isString(sResult)) {
-                
-                var sKeyIndex = (bMatchCase) ?
-                sResult.indexOf(decodeURIComponent(sQuery)) :
-                sResult.toLowerCase().indexOf(decodeURIComponent(sQuery).toLowerCase());
-
-                // A STARTSWITH match is when the query is found at the beginning of the key string...
-                if((!bMatchContains && (sKeyIndex === 0)) ||
-                // A CONTAINS match is when the query is found anywhere within the key string...
-                (bMatchContains && (sKeyIndex > -1))) {
-                    // Stash the match
-                    filteredResults.push(oResult);
-                }
-            }
-            
-            // Filter no more if maxResultsDisplayed is reached
-            if(len>nMax && filteredResults.length===nMax) {
-                break;
-            }
-        }
-        oParsedResponse.results = filteredResults;
-    }
-    else {
-    }
-    
-    return oParsedResponse;
-};
-
-/**
- * Handles response for display. This is the callback function method passed to
- * YAHOO.util.DataSourceBase#sendRequest so results from the DataSource are
- * returned to the AutoComplete instance.
- *
- * @method handleResponse
- * @param sQuery {String} Original request.
- * @param oResponse {Object} Response object.
- * @param oPayload {MIXED} (optional) Additional argument(s)
- */
-YAHOO.widget.AutoComplete.prototype.handleResponse = function(sQuery, oResponse, oPayload) {
-    if((this instanceof YAHOO.widget.AutoComplete) && this._sName) {
-        this._populateList(sQuery, oResponse, oPayload);
-    }
-};
-
-/**
- * Overridable method called before container is loaded with result data.
- *
- * @method doBeforeLoadData
- * @param sQuery {String} Original request.
- * @param oResponse {Object} Response object.
- * @param oPayload {MIXED} (optional) Additional argument(s)
- * @return {Boolean} Return true to continue loading data, false to cancel.
- */
-YAHOO.widget.AutoComplete.prototype.doBeforeLoadData = function(sQuery, oResponse, oPayload) {
-    return true;
-};
-
-/**
- * Overridable method that returns HTML markup for one result to be populated
- * as innerHTML of an &lt;LI&gt; element. 
- *
- * @method formatResult
- * @param oResultData {Object} Result data object.
- * @param sQuery {String} The corresponding query string.
- * @param sResultMatch {HTMLElement} The current query string. 
- * @return {String} HTML markup of formatted result data.
- */
-YAHOO.widget.AutoComplete.prototype.formatResult = function(oResultData, sQuery, sResultMatch) {
-    var sMarkup = (sResultMatch) ? sResultMatch : "";
-    return sMarkup;
-};
-
-/**
- * Overridable method called before container expands allows implementers to access data
- * and DOM elements.
- *
- * @method doBeforeExpandContainer
- * @param elTextbox {HTMLElement} The text input box.
- * @param elContainer {HTMLElement} The container element.
- * @param sQuery {String} The query string.
- * @param aResults {Object[]}  An array of query results.
- * @return {Boolean} Return true to continue expanding container, false to cancel the expand.
- */
-YAHOO.widget.AutoComplete.prototype.doBeforeExpandContainer = function(elTextbox, elContainer, sQuery, aResults) {
-    return true;
-};
-
-
-/**
- * Nulls out the entire AutoComplete instance and related objects, removes attached
- * event listeners, and clears out DOM elements inside the container. After
- * calling this method, the instance reference should be expliclitly nulled by
- * implementer, as in myAutoComplete = null. Use with caution!
- *
- * @method destroy
- */
-YAHOO.widget.AutoComplete.prototype.destroy = function() {
-    var instanceName = this.toString();
-    var elInput = this._elTextbox;
-    var elContainer = this._elContainer;
-
-    // Unhook custom events
-    this.textboxFocusEvent.unsubscribeAll();
-    this.textboxKeyEvent.unsubscribeAll();
-    this.dataRequestEvent.unsubscribeAll();
-    this.dataReturnEvent.unsubscribeAll();
-    this.dataErrorEvent.unsubscribeAll();
-    this.containerPopulateEvent.unsubscribeAll();
-    this.containerExpandEvent.unsubscribeAll();
-    this.typeAheadEvent.unsubscribeAll();
-    this.itemMouseOverEvent.unsubscribeAll();
-    this.itemMouseOutEvent.unsubscribeAll();
-    this.itemArrowToEvent.unsubscribeAll();
-    this.itemArrowFromEvent.unsubscribeAll();
-    this.itemSelectEvent.unsubscribeAll();
-    this.unmatchedItemSelectEvent.unsubscribeAll();
-    this.selectionEnforceEvent.unsubscribeAll();
-    this.containerCollapseEvent.unsubscribeAll();
-    this.textboxBlurEvent.unsubscribeAll();
-    this.textboxChangeEvent.unsubscribeAll();
-
-    // Unhook DOM events
-    YAHOO.util.Event.purgeElement(elInput, true);
-    YAHOO.util.Event.purgeElement(elContainer, true);
-
-    // Remove DOM elements
-    elContainer.innerHTML = "";
-
-    // Null out objects
-    for(var key in this) {
-        if(YAHOO.lang.hasOwnProperty(this, key)) {
-            this[key] = null;
-        }
-    }
-
-};
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Public events
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Fired when the input field receives focus.
- *
- * @event textboxFocusEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.textboxFocusEvent = null;
-
-/**
- * Fired when the input field receives key input.
- *
- * @event textboxKeyEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param nKeycode {Number} The keycode number.
- */
-YAHOO.widget.AutoComplete.prototype.textboxKeyEvent = null;
-
-/**
- * Fired when the AutoComplete instance makes a request to the DataSource.
- * 
- * @event dataRequestEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sQuery {String} The query string. 
- * @param oRequest {Object} The request.
- */
-YAHOO.widget.AutoComplete.prototype.dataRequestEvent = null;
-
-/**
- * Fired when the AutoComplete instance receives query results from the data
- * source.
- *
- * @event dataReturnEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sQuery {String} The query string.
- * @param aResults {Object[]} Results array.
- */
-YAHOO.widget.AutoComplete.prototype.dataReturnEvent = null;
-
-/**
- * Fired when the AutoComplete instance does not receive query results from the
- * DataSource due to an error.
- *
- * @event dataErrorEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sQuery {String} The query string.
- * @param oResponse {Object} The response object, if available.
- */
-YAHOO.widget.AutoComplete.prototype.dataErrorEvent = null;
-
-/**
- * Fired when the results container is populated.
- *
- * @event containerPopulateEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.containerPopulateEvent = null;
-
-/**
- * Fired when the results container is expanded.
- *
- * @event containerExpandEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.containerExpandEvent = null;
-
-/**
- * Fired when the input field has been prefilled by the type-ahead
- * feature. 
- *
- * @event typeAheadEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sQuery {String} The query string.
- * @param sPrefill {String} The prefill string.
- */
-YAHOO.widget.AutoComplete.prototype.typeAheadEvent = null;
-
-/**
- * Fired when result item has been moused over.
- *
- * @event itemMouseOverEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param elItem {HTMLElement} The &lt;li&gt element item moused to.
- */
-YAHOO.widget.AutoComplete.prototype.itemMouseOverEvent = null;
-
-/**
- * Fired when result item has been moused out.
- *
- * @event itemMouseOutEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param elItem {HTMLElement} The &lt;li&gt; element item moused from.
- */
-YAHOO.widget.AutoComplete.prototype.itemMouseOutEvent = null;
-
-/**
- * Fired when result item has been arrowed to. 
- *
- * @event itemArrowToEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param elItem {HTMLElement} The &lt;li&gt; element item arrowed to.
- */
-YAHOO.widget.AutoComplete.prototype.itemArrowToEvent = null;
-
-/**
- * Fired when result item has been arrowed away from.
- *
- * @event itemArrowFromEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param elItem {HTMLElement} The &lt;li&gt; element item arrowed from.
- */
-YAHOO.widget.AutoComplete.prototype.itemArrowFromEvent = null;
-
-/**
- * Fired when an item is selected via mouse click, ENTER key, or TAB key.
- *
- * @event itemSelectEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param elItem {HTMLElement} The selected &lt;li&gt; element item.
- * @param oData {Object} The data returned for the item, either as an object,
- * or mapped from the schema into an array.
- */
-YAHOO.widget.AutoComplete.prototype.itemSelectEvent = null;
-
-/**
- * Fired when a user selection does not match any of the displayed result items.
- *
- * @event unmatchedItemSelectEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sSelection {String} The selected string.  
- */
-YAHOO.widget.AutoComplete.prototype.unmatchedItemSelectEvent = null;
-
-/**
- * Fired if forceSelection is enabled and the user's input has been cleared
- * because it did not match one of the returned query results.
- *
- * @event selectionEnforceEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sClearedValue {String} The cleared value (including delimiters if applicable). 
- */
-YAHOO.widget.AutoComplete.prototype.selectionEnforceEvent = null;
-
-/**
- * Fired when the results container is collapsed.
- *
- * @event containerCollapseEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.containerCollapseEvent = null;
-
-/**
- * Fired when the input field loses focus.
- *
- * @event textboxBlurEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.textboxBlurEvent = null;
-
-/**
- * Fired when the input field value has changed when it loses focus.
- *
- * @event textboxChangeEvent
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- */
-YAHOO.widget.AutoComplete.prototype.textboxChangeEvent = null;
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Private member variables
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Internal class variable to index multiple AutoComplete instances.
- *
- * @property _nIndex
- * @type Number
- * @default 0
- * @private
- */
-YAHOO.widget.AutoComplete._nIndex = 0;
-
-/**
- * Name of AutoComplete instance.
- *
- * @property _sName
- * @type String
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sName = null;
-
-/**
- * Text input field DOM element.
- *
- * @property _elTextbox
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elTextbox = null;
-
-/**
- * Container DOM element.
- *
- * @property _elContainer
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elContainer = null;
-
-/**
- * Reference to content element within container element.
- *
- * @property _elContent
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elContent = null;
-
-/**
- * Reference to header element within content element.
- *
- * @property _elHeader
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elHeader = null;
-
-/**
- * Reference to body element within content element.
- *
- * @property _elBody
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elBody = null;
-
-/**
- * Reference to footer element within content element.
- *
- * @property _elFooter
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elFooter = null;
-
-/**
- * Reference to shadow element within container element.
- *
- * @property _elShadow
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elShadow = null;
-
-/**
- * Reference to iframe element within container element.
- *
- * @property _elIFrame
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elIFrame = null;
-
-/**
- * Whether or not the widget instance is currently active. If query results come back
- * but the user has already moved on, do not proceed with auto complete behavior.
- *
- * @property _bFocused
- * @type Boolean
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._bFocused = false;
-
-/**
- * Animation instance for container expand/collapse.
- *
- * @property _oAnim
- * @type Boolean
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._oAnim = null;
-
-/**
- * Whether or not the results container is currently open.
- *
- * @property _bContainerOpen
- * @type Boolean
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._bContainerOpen = false;
-
-/**
- * Whether or not the mouse is currently over the results
- * container. This is necessary in order to prevent clicks on container items
- * from being text input field blur events.
- *
- * @property _bOverContainer
- * @type Boolean
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._bOverContainer = false;
-
-/**
- * Internal reference to &lt;ul&gt; elements that contains query results within the
- * results container.
- *
- * @property _elList
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elList = null;
-
-/*
- * Array of &lt;li&gt; elements references that contain query results within the
- * results container.
- *
- * @property _aListItemEls
- * @type HTMLElement[]
- * @private
- */
-//YAHOO.widget.AutoComplete.prototype._aListItemEls = null;
-
-/**
- * Number of &lt;li&gt; elements currently displayed in results container.
- *
- * @property _nDisplayedItems
- * @type Number
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._nDisplayedItems = 0;
-
-/*
- * Internal count of &lt;li&gt; elements displayed and hidden in results container.
- *
- * @property _maxResultsDisplayed
- * @type Number
- * @private
- */
-//YAHOO.widget.AutoComplete.prototype._maxResultsDisplayed = 0;
-
-/**
- * Current query string
- *
- * @property _sCurQuery
- * @type String
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sCurQuery = null;
-
-/**
- * Selections from previous queries (for saving delimited queries).
- *
- * @property _sPastSelections
- * @type String
- * @default "" 
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sPastSelections = "";
-
-/**
- * Stores initial input value used to determine if textboxChangeEvent should be fired.
- *
- * @property _sInitInputValue
- * @type String
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sInitInputValue = null;
-
-/**
- * Pointer to the currently highlighted &lt;li&gt; element in the container.
- *
- * @property _elCurListItem
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elCurListItem = null;
-
-/**
- * Pointer to the currently pre-highlighted &lt;li&gt; element in the container.
- *
- * @property _elCurPrehighlightItem
- * @type HTMLElement
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._elCurPrehighlightItem = null;
-
-/**
- * Whether or not an item has been selected since the container was populated
- * with results. Reset to false by _populateList, and set to true when item is
- * selected.
- *
- * @property _bItemSelected
- * @type Boolean
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._bItemSelected = false;
-
-/**
- * Key code of the last key pressed in textbox.
- *
- * @property _nKeyCode
- * @type Number
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._nKeyCode = null;
-
-/**
- * Delay timeout ID.
- *
- * @property _nDelayID
- * @type Number
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._nDelayID = -1;
-
-/**
- * TypeAhead delay timeout ID.
- *
- * @property _nTypeAheadDelayID
- * @type Number
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._nTypeAheadDelayID = -1;
-
-/**
- * Src to iFrame used when useIFrame = true. Supports implementations over SSL
- * as well.
- *
- * @property _iFrameSrc
- * @type String
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._iFrameSrc = "javascript:false;";
-
-/**
- * For users typing via certain IMEs, queries must be triggered by intervals,
- * since key events yet supported across all browsers for all IMEs.
- *
- * @property _queryInterval
- * @type Object
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._queryInterval = null;
-
-/**
- * Internal tracker to last known textbox value, used to determine whether or not
- * to trigger a query via interval for certain IME users.
- *
- * @event _sLastTextboxValue
- * @type String
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sLastTextboxValue = null;
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Private methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Updates and validates latest public config properties.
- *
- * @method __initProps
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._initProps = function() {
-    // Correct any invalid values
-    var minQueryLength = this.minQueryLength;
-    if(!YAHOO.lang.isNumber(minQueryLength)) {
-        this.minQueryLength = 1;
-    }
-    var maxResultsDisplayed = this.maxResultsDisplayed;
-    if(!YAHOO.lang.isNumber(maxResultsDisplayed) || (maxResultsDisplayed < 1)) {
-        this.maxResultsDisplayed = 10;
-    }
-    var queryDelay = this.queryDelay;
-    if(!YAHOO.lang.isNumber(queryDelay) || (queryDelay < 0)) {
-        this.queryDelay = 0.2;
-    }
-    var typeAheadDelay = this.typeAheadDelay;
-    if(!YAHOO.lang.isNumber(typeAheadDelay) || (typeAheadDelay < 0)) {
-        this.typeAheadDelay = 0.2;
-    }
-    var delimChar = this.delimChar;
-    if(YAHOO.lang.isString(delimChar) && (delimChar.length > 0)) {
-        this.delimChar = [delimChar];
-    }
-    else if(!YAHOO.lang.isArray(delimChar)) {
-        this.delimChar = null;
-    }
-    var animSpeed = this.animSpeed;
-    if((this.animHoriz || this.animVert) && YAHOO.util.Anim) {
-        if(!YAHOO.lang.isNumber(animSpeed) || (animSpeed < 0)) {
-            this.animSpeed = 0.3;
-        }
-        if(!this._oAnim ) {
-            this._oAnim = new YAHOO.util.Anim(this._elContent, {}, this.animSpeed);
-        }
-        else {
-            this._oAnim.duration = this.animSpeed;
-        }
-    }
-    if(this.forceSelection && delimChar) {
-    }
-};
-
-/**
- * Initializes the results container helpers if they are enabled and do
- * not exist
- *
- * @method _initContainerHelperEls
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._initContainerHelperEls = function() {
-    if(this.useShadow && !this._elShadow) {
-        var elShadow = document.createElement("div");
-        elShadow.className = "yui-ac-shadow";
-        elShadow.style.width = 0;
-        elShadow.style.height = 0;
-        this._elShadow = this._elContainer.appendChild(elShadow);
-    }
-    if(this.useIFrame && !this._elIFrame) {
-        var elIFrame = document.createElement("iframe");
-        elIFrame.src = this._iFrameSrc;
-        elIFrame.frameBorder = 0;
-        elIFrame.scrolling = "no";
-        elIFrame.style.position = "absolute";
-        elIFrame.style.width = 0;
-        elIFrame.style.height = 0;
-        elIFrame.style.padding = 0;
-        elIFrame.tabIndex = -1;
-        elIFrame.role = "presentation";
-        elIFrame.title = "Presentational iframe shim";
-        this._elIFrame = this._elContainer.appendChild(elIFrame);
-    }
-};
-
-/**
- * Initializes the results container once at object creation
- *
- * @method _initContainerEl
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._initContainerEl = function() {
-    YAHOO.util.Dom.addClass(this._elContainer, "yui-ac-container");
-    
-    if(!this._elContent) {
-        // The elContent div is assigned DOM listeners and 
-        // helps size the iframe and shadow properly
-        var elContent = document.createElement("div");
-        elContent.className = "yui-ac-content";
-        elContent.style.display = "none";
-
-        this._elContent = this._elContainer.appendChild(elContent);
-
-        var elHeader = document.createElement("div");
-        elHeader.className = "yui-ac-hd";
-        elHeader.style.display = "none";
-        this._elHeader = this._elContent.appendChild(elHeader);
-
-        var elBody = document.createElement("div");
-        elBody.className = "yui-ac-bd";
-        this._elBody = this._elContent.appendChild(elBody);
-
-        var elFooter = document.createElement("div");
-        elFooter.className = "yui-ac-ft";
-        elFooter.style.display = "none";
-        this._elFooter = this._elContent.appendChild(elFooter);
-    }
-    else {
-    }
-};
-
-/**
- * Clears out contents of container body and creates up to
- * YAHOO.widget.AutoComplete#maxResultsDisplayed &lt;li&gt; elements in an
- * &lt;ul&gt; element.
- *
- * @method _initListEl
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._initListEl = function() {
-    var nListLength = this.maxResultsDisplayed,
-        elList = this._elList || document.createElement("ul"),
-        elListItem;
-    
-    while(elList.childNodes.length < nListLength) {
-        elListItem = document.createElement("li");
-        elListItem.style.display = "none";
-        elListItem._nItemIndex = elList.childNodes.length;
-        elList.appendChild(elListItem);
-    }
-    if(!this._elList) {
-        var elBody = this._elBody;
-        YAHOO.util.Event.purgeElement(elBody, true);
-        elBody.innerHTML = "";
-        this._elList = elBody.appendChild(elList);
-    }
-    
-    this._elBody.style.display = "";
-};
-
-/**
- * Focuses input field.
- *
- * @method _focus
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._focus = function() {
-    // http://developer.mozilla.org/en/docs/index.php?title=Key-navigable_custom_DHTML_widgets
-    var oSelf = this;
-    setTimeout(function() {
-        try {
-            oSelf._elTextbox.focus();
-        }
-        catch(e) {
-        }
-    },0);
-};
-
-/**
- * Enables interval detection for IME support.
- *
- * @method _enableIntervalDetection
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._enableIntervalDetection = function() {
-    var oSelf = this;
-    if(!oSelf._queryInterval && oSelf.queryInterval) {
-        oSelf._queryInterval = setInterval(function() { oSelf._onInterval(); }, oSelf.queryInterval);
-    }
-};
-
-/**
- * Enables interval detection for a less performant but brute force mechanism to
- * detect input values at an interval set by queryInterval and send queries if
- * input value has changed. Needed to support right-click+paste or shift+insert
- * edge cases. Please note that intervals are cleared at the end of each interaction,
- * so enableIntervalDetection must be called for each new interaction. The
- * recommended approach is to call it in response to textboxFocusEvent.
- *
- * @method enableIntervalDetection
- */
-YAHOO.widget.AutoComplete.prototype.enableIntervalDetection =
-    YAHOO.widget.AutoComplete.prototype._enableIntervalDetection;
-
-/**
- * Enables query triggers based on text input detection by intervals (rather
- * than by key events).
- *
- * @method _onInterval
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onInterval = function() {
-    var currValue = this._elTextbox.value;
-    var lastValue = this._sLastTextboxValue;
-    if(currValue != lastValue) {
-        this._sLastTextboxValue = currValue;
-        this._sendQuery(currValue);
-    }
-};
-
-/**
- * Cancels text input detection by intervals.
- *
- * @method _clearInterval
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._clearInterval = function() {
-    if(this._queryInterval) {
-        clearInterval(this._queryInterval);
-        this._queryInterval = null;
-    }
-};
-
-/**
- * Whether or not key is functional or should be ignored. Note that the right
- * arrow key is NOT an ignored key since it triggers queries for certain intl
- * charsets.
- *
- * @method _isIgnoreKey
- * @param nKeycode {Number} Code of key pressed.
- * @return {Boolean} True if key should be ignored, false otherwise.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._isIgnoreKey = function(nKeyCode) {
-    if((nKeyCode == 9) || (nKeyCode == 13)  || // tab, enter
-            (nKeyCode == 16) || (nKeyCode == 17) || // shift, ctl
-            (nKeyCode >= 18 && nKeyCode <= 20) || // alt, pause/break,caps lock
-            (nKeyCode == 27) || // esc
-            (nKeyCode >= 33 && nKeyCode <= 35) || // page up,page down,end
-            /*(nKeyCode >= 36 && nKeyCode <= 38) || // home,left,up
-            (nKeyCode == 40) || // down*/
-            (nKeyCode >= 36 && nKeyCode <= 40) || // home,left,up, right, down
-            (nKeyCode >= 44 && nKeyCode <= 45) || // print screen,insert
-            (nKeyCode == 229) // Bug 2041973: Korean XP fires 2 keyup events, the key and 229
-        ) { 
-        return true;
-    }
-    return false;
-};
-
-/**
- * Makes query request to the DataSource.
- *
- * @method _sendQuery
- * @param sQuery {String} Query string.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._sendQuery = function(sQuery) {
-    // Widget has been effectively turned off
-    if(this.minQueryLength < 0) {
-        this._toggleContainer(false);
-        return;
-    }
-    // Delimiter has been enabled
-    if(this.delimChar) {
-        var extraction = this._extractQuery(sQuery);
-        // Here is the query itself
-        sQuery = extraction.query;
-        // ...and save the rest of the string for later
-        this._sPastSelections = extraction.previous;
-    }
-
-    // Don't search queries that are too short
-    if((sQuery && (sQuery.length < this.minQueryLength)) || (!sQuery && this.minQueryLength > 0)) {
-        if(this._nDelayID != -1) {
-            clearTimeout(this._nDelayID);
-        }
-        this._toggleContainer(false);
-        return;
-    }
-
-    sQuery = encodeURIComponent(sQuery);
-    this._nDelayID = -1;    // Reset timeout ID because request is being made
-    
-    // Subset matching
-    if(this.dataSource.queryMatchSubset || this.queryMatchSubset) { // backward compat
-        var oResponse = this.getSubsetMatches(sQuery);
-        if(oResponse) {
-            this.handleResponse(sQuery, oResponse, {query: sQuery});
-            return;
-        }
-    }
-    
-    if(this.dataSource.responseStripAfter) {
-        this.dataSource.doBeforeParseData = this.preparseRawResponse;
-    }
-    if(this.applyLocalFilter) {
-        this.dataSource.doBeforeCallback = this.filterResults;
-    }
-    
-    var sRequest = this.generateRequest(sQuery);
-    this.dataRequestEvent.fire(this, sQuery, sRequest);
-
-    this.dataSource.sendRequest(sRequest, {
-            success : this.handleResponse,
-            failure : this.handleResponse,
-            scope   : this,
-            argument: {
-                query: sQuery
-            }
-    });
-};
-
-/**
- * Populates the given &lt;li&gt; element with return value from formatResult().
- *
- * @method _populateListItem
- * @param elListItem {HTMLElement} The LI element.
- * @param oResult {Object} The result object.
- * @param sCurQuery {String} The query string.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._populateListItem = function(elListItem, oResult, sQuery) {
-    elListItem.innerHTML = this.formatResult(oResult, sQuery, elListItem._sResultMatch);
-};
-
-/**
- * Populates the array of &lt;li&gt; elements in the container with query
- * results.
- *
- * @method _populateList
- * @param sQuery {String} Original request.
- * @param oResponse {Object} Response object.
- * @param oPayload {MIXED} (optional) Additional argument(s)
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._populateList = function(sQuery, oResponse, oPayload) {
-    // Clear previous timeout
-    if(this._nTypeAheadDelayID != -1) {
-        clearTimeout(this._nTypeAheadDelayID);
-    }
-        
-    sQuery = (oPayload && oPayload.query) ? oPayload.query : sQuery;
-    
-    // Pass data through abstract method for any transformations
-    var ok = this.doBeforeLoadData(sQuery, oResponse, oPayload);
-
-    // Data is ok
-    if(ok && !oResponse.error) {
-        this.dataReturnEvent.fire(this, sQuery, oResponse.results);
-        
-        // Continue only if instance is still active (i.e., user hasn't already moved on)
-        if(this._bFocused) {
-            // Store state for this interaction
-            var sCurQuery = decodeURIComponent(sQuery);
-            this._sCurQuery = sCurQuery;
-            this._bItemSelected = false;
-        
-            var allResults = oResponse.results,
-                nItemsToShow = Math.min(allResults.length,this.maxResultsDisplayed),
-                sMatchKey = (this.dataSource.responseSchema.fields) ? 
-                    (this.dataSource.responseSchema.fields[0].key || this.dataSource.responseSchema.fields[0]) : 0;
-            
-            if(nItemsToShow > 0) {
-                // Make sure container and helpers are ready to go
-                if(!this._elList || (this._elList.childNodes.length < nItemsToShow)) {
-                    this._initListEl();
-                }
-                this._initContainerHelperEls();
-                
-                var allListItemEls = this._elList.childNodes;
-                // Fill items with data from the bottom up
-                for(var i = nItemsToShow-1; i >= 0; i--) {
-                    var elListItem = allListItemEls[i],
-                    oResult = allResults[i];
-                    
-                    // Backward compatibility
-                    if(this.resultTypeList) {
-                        // Results need to be converted back to an array
-                        var aResult = [];
-                        // Match key is first
-                        aResult[0] = (YAHOO.lang.isString(oResult)) ? oResult : oResult[sMatchKey] || oResult[this.key];
-                        // Add additional data to the result array
-                        var fields = this.dataSource.responseSchema.fields;
-                        if(YAHOO.lang.isArray(fields) && (fields.length > 1)) {
-                            for(var k=1, len=fields.length; k<len; k++) {
-                                aResult[aResult.length] = oResult[fields[k].key || fields[k]];
-                            }
-                        }
-                        // No specific fields defined, so pass along entire data object
-                        else {
-                            // Already an array
-                            if(YAHOO.lang.isArray(oResult)) {
-                                aResult = oResult;
-                            }
-                            // Simple string 
-                            else if(YAHOO.lang.isString(oResult)) {
-                                aResult = [oResult];
-                            }
-                            // Object
-                            else {
-                                aResult[1] = oResult;
-                            }
-                        }
-                        oResult = aResult;
-                    }
-
-                    // The matching value, including backward compatibility for array format and safety net
-                    elListItem._sResultMatch = (YAHOO.lang.isString(oResult)) ? oResult : (YAHOO.lang.isArray(oResult)) ? oResult[0] : (oResult[sMatchKey] || "");
-                    elListItem._oResultData = oResult; // Additional data
-                    this._populateListItem(elListItem, oResult, sCurQuery);
-                    elListItem.style.display = "";
-                }
-        
-                // Clear out extraneous items
-                if(nItemsToShow < allListItemEls.length) {
-                    var extraListItem;
-                    for(var j = allListItemEls.length-1; j >= nItemsToShow; j--) {
-                        extraListItem = allListItemEls[j];
-                        extraListItem.style.display = "none";
-                    }
-                }
-                
-                this._nDisplayedItems = nItemsToShow;
-                
-                this.containerPopulateEvent.fire(this, sQuery, allResults);
-                
-                // Highlight the first item
-                if(this.autoHighlight) {
-                    var elFirstListItem = this._elList.firstChild;
-                    this._toggleHighlight(elFirstListItem,"to");
-                    this.itemArrowToEvent.fire(this, elFirstListItem);
-                    this._typeAhead(elFirstListItem,sQuery);
-                }
-                // Unhighlight any previous time
-                else {
-                    this._toggleHighlight(this._elCurListItem,"from");
-                }
-        
-                // Pre-expansion stuff
-                ok = this._doBeforeExpandContainer(this._elTextbox, this._elContainer, sQuery, allResults);
-                
-                // Expand the container
-                this._toggleContainer(ok);
-            }
-            else {
-                this._toggleContainer(false);
-            }
-
-            return;
-        }
-    }
-    // Error
-    else {
-        this.dataErrorEvent.fire(this, sQuery, oResponse);
-    }
-        
-};
-
-/**
- * Called before container expands, by default snaps container to the
- * bottom-left corner of the input element, then calls public overrideable method.
- *
- * @method _doBeforeExpandContainer
- * @param elTextbox {HTMLElement} The text input box.
- * @param elContainer {HTMLElement} The container element.
- * @param sQuery {String} The query string.
- * @param aResults {Object[]}  An array of query results.
- * @return {Boolean} Return true to continue expanding container, false to cancel the expand.
- * @private 
- */
-YAHOO.widget.AutoComplete.prototype._doBeforeExpandContainer = function(elTextbox, elContainer, sQuery, aResults) {
-    if(this.autoSnapContainer) {
-        this.snapContainer();
-    }
-
-    return this.doBeforeExpandContainer(elTextbox, elContainer, sQuery, aResults);
-};
-
-/**
- * When forceSelection is true and the user attempts
- * leave the text input box without selecting an item from the query results,
- * the user selection is cleared.
- *
- * @method _clearSelection
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._clearSelection = function() {
-    var extraction = (this.delimChar) ? this._extractQuery(this._elTextbox.value) :
-            {previous:"",query:this._elTextbox.value};
-    this._elTextbox.value = extraction.previous;
-    this.selectionEnforceEvent.fire(this, extraction.query);
-};
-
-/**
- * Whether or not user-typed value in the text input box matches any of the
- * query results.
- *
- * @method _textMatchesOption
- * @return {HTMLElement} Matching list item element if user-input text matches
- * a result, null otherwise.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._textMatchesOption = function() {
-    var elMatch = null;
-
-    for(var i=0; i<this._nDisplayedItems; i++) {
-        var elListItem = this._elList.childNodes[i];
-        var sMatch = ("" + elListItem._sResultMatch).toLowerCase();
-        if(sMatch == this._sCurQuery.toLowerCase()) {
-            elMatch = elListItem;
-            break;
-        }
-    }
-    return(elMatch);
-};
-
-/**
- * Updates in the text input box with the first query result as the user types,
- * selecting the substring that the user has not typed.
- *
- * @method _typeAhead
- * @param elListItem {HTMLElement} The &lt;li&gt; element item whose data populates the input field.
- * @param sQuery {String} Query string.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._typeAhead = function(elListItem, sQuery) {
-    // Don't typeAhead if turned off or is backspace
-    if(!this.typeAhead || (this._nKeyCode == 8)) {
-        return;
-    }
-
-    var oSelf = this,
-        elTextbox = this._elTextbox;
-        
-    // Only if text selection is supported
-    if(elTextbox.setSelectionRange || elTextbox.createTextRange) {
-        // Set and store timeout for this typeahead
-        this._nTypeAheadDelayID = setTimeout(function() {
-                // Select the portion of text that the user has not typed
-                var nStart = elTextbox.value.length; // any saved queries plus what user has typed
-                oSelf._updateValue(elListItem);
-                var nEnd = elTextbox.value.length;
-                oSelf._selectText(elTextbox,nStart,nEnd);
-                var sPrefill = elTextbox.value.substr(nStart,nEnd);
-                oSelf.typeAheadEvent.fire(oSelf,sQuery,sPrefill);
-            },(this.typeAheadDelay*1000));            
-    }
-};
-
-/**
- * Selects text in the input field.
- *
- * @method _selectText
- * @param elTextbox {HTMLElement} Text input box element in which to select text.
- * @param nStart {Number} Starting index of text string to select.
- * @param nEnd {Number} Ending index of text selection.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._selectText = function(elTextbox, nStart, nEnd) {
-    if(elTextbox.setSelectionRange) { // For Mozilla
-        elTextbox.setSelectionRange(nStart,nEnd);
-    }
-    else if(elTextbox.createTextRange) { // For IE
-        var oTextRange = elTextbox.createTextRange();
-        oTextRange.moveStart("character", nStart);
-        oTextRange.moveEnd("character", nEnd-elTextbox.value.length);
-        oTextRange.select();
-    }
-    else {
-        elTextbox.select();
-    }
-};
-
-/**
- * Extracts rightmost query from delimited string.
- *
- * @method _extractQuery
- * @param sQuery {String} String to parse
- * @return {Object} Object literal containing properties "query" and "previous".  
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._extractQuery = function(sQuery) {
-    var aDelimChar = this.delimChar,
-        nDelimIndex = -1,
-        nNewIndex, nQueryStart,
-        i = aDelimChar.length-1,
-        sPrevious;
-        
-    // Loop through all possible delimiters and find the rightmost one in the query
-    // A " " may be a false positive if they are defined as delimiters AND
-    // are used to separate delimited queries
-    for(; i >= 0; i--) {
-        nNewIndex = sQuery.lastIndexOf(aDelimChar[i]);
-        if(nNewIndex > nDelimIndex) {
-            nDelimIndex = nNewIndex;
-        }
-    }
-    // If we think the last delimiter is a space (" "), make sure it is NOT
-    // a false positive by also checking the char directly before it
-    if(aDelimChar[i] == " ") {
-        for (var j = aDelimChar.length-1; j >= 0; j--) {
-            if(sQuery[nDelimIndex - 1] == aDelimChar[j]) {
-                nDelimIndex--;
-                break;
-            }
-        }
-    }
-    // A delimiter has been found in the query so extract the latest query from past selections
-    if(nDelimIndex > -1) {
-        nQueryStart = nDelimIndex + 1;
-        // Trim any white space from the beginning...
-        while(sQuery.charAt(nQueryStart) == " ") {
-            nQueryStart += 1;
-        }
-        // ...and save the rest of the string for later
-        sPrevious = sQuery.substring(0,nQueryStart);
-        // Here is the query itself
-        sQuery = sQuery.substr(nQueryStart);
-    }
-    // No delimiter found in the query, so there are no selections from past queries
-    else {
-        sPrevious = "";
-    }
-    
-    return {
-        previous: sPrevious,
-        query: sQuery
-    };
-};
-
-/**
- * Syncs results container with its helpers.
- *
- * @method _toggleContainerHelpers
- * @param bShow {Boolean} True if container is expanded, false if collapsed
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._toggleContainerHelpers = function(bShow) {
-    var width = this._elContent.offsetWidth + "px";
-    var height = this._elContent.offsetHeight + "px";
-
-    if(this.useIFrame && this._elIFrame) {
-    var elIFrame = this._elIFrame;
-        if(bShow) {
-            elIFrame.style.width = width;
-            elIFrame.style.height = height;
-            elIFrame.style.padding = "";
-        }
-        else {
-            elIFrame.style.width = 0;
-            elIFrame.style.height = 0;
-            elIFrame.style.padding = 0;
-        }
-    }
-    if(this.useShadow && this._elShadow) {
-    var elShadow = this._elShadow;
-        if(bShow) {
-            elShadow.style.width = width;
-            elShadow.style.height = height;
-        }
-        else {
-            elShadow.style.width = 0;
-            elShadow.style.height = 0;
-        }
-    }
-};
-
-/**
- * Animates expansion or collapse of the container.
- *
- * @method _toggleContainer
- * @param bShow {Boolean} True if container should be expanded, false if container should be collapsed
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._toggleContainer = function(bShow) {
-
-    var elContainer = this._elContainer;
-
-    // If implementer has container always open and it's already open, don't mess with it
-    // Container is initialized with display "none" so it may need to be shown first time through
-    if(this.alwaysShowContainer && this._bContainerOpen) {
-        return;
-    }
-    
-    // Reset states
-    if(!bShow) {
-        this._toggleHighlight(this._elCurListItem,"from");
-        this._nDisplayedItems = 0;
-        this._sCurQuery = null;
-        
-        // Container is already closed, so don't bother with changing the UI
-        if(this._elContent.style.display == "none") {
-            return;
-        }
-    }
-
-    // If animation is enabled...
-    var oAnim = this._oAnim;
-    if(oAnim && oAnim.getEl() && (this.animHoriz || this.animVert)) {
-        if(oAnim.isAnimated()) {
-            oAnim.stop(true);
-        }
-
-        // Clone container to grab current size offscreen
-        var oClone = this._elContent.cloneNode(true);
-        elContainer.appendChild(oClone);
-        oClone.style.top = "-9000px";
-        oClone.style.width = "";
-        oClone.style.height = "";
-        oClone.style.display = "";
-
-        // Current size of the container is the EXPANDED size
-        var wExp = oClone.offsetWidth;
-        var hExp = oClone.offsetHeight;
-
-        // Calculate COLLAPSED sizes based on horiz and vert anim
-        var wColl = (this.animHoriz) ? 0 : wExp;
-        var hColl = (this.animVert) ? 0 : hExp;
-
-        // Set animation sizes
-        oAnim.attributes = (bShow) ?
-            {width: { to: wExp }, height: { to: hExp }} :
-            {width: { to: wColl}, height: { to: hColl }};
-
-        // If opening anew, set to a collapsed size...
-        if(bShow && !this._bContainerOpen) {
-            this._elContent.style.width = wColl+"px";
-            this._elContent.style.height = hColl+"px";
-        }
-        // Else, set it to its last known size.
-        else {
-            this._elContent.style.width = wExp+"px";
-            this._elContent.style.height = hExp+"px";
-        }
-
-        elContainer.removeChild(oClone);
-        oClone = null;
-
-       var oSelf = this;
-       var onAnimComplete = function() {
-            // Finish the collapse
-               oAnim.onComplete.unsubscribeAll();
-
-            if(bShow) {
-                oSelf._toggleContainerHelpers(true);
-                oSelf._bContainerOpen = bShow;
-                oSelf.containerExpandEvent.fire(oSelf);
-            }
-            else {
-                oSelf._elContent.style.display = "none";
-                oSelf._bContainerOpen = bShow;
-                oSelf.containerCollapseEvent.fire(oSelf);
-            }
-       };
-
-        // Display container and animate it
-        this._toggleContainerHelpers(false); // Bug 1424486: Be early to hide, late to show;
-        this._elContent.style.display = "";
-        oAnim.onComplete.subscribe(onAnimComplete);
-        oAnim.animate();
-    }
-    // Else don't animate, just show or hide
-    else {
-        if(bShow) {
-            this._elContent.style.display = "";
-            this._toggleContainerHelpers(true);
-            this._bContainerOpen = bShow;
-            this.containerExpandEvent.fire(this);
-        }
-        else {
-            this._toggleContainerHelpers(false);
-            this._elContent.style.display = "none";
-            this._bContainerOpen = bShow;
-            this.containerCollapseEvent.fire(this);
-        }
-   }
-
-};
-
-/**
- * Toggles the highlight on or off for an item in the container, and also cleans
- * up highlighting of any previous item.
- *
- * @method _toggleHighlight
- * @param elNewListItem {HTMLElement} The &lt;li&gt; element item to receive highlight behavior.
- * @param sType {String} Type "mouseover" will toggle highlight on, and "mouseout" will toggle highlight off.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._toggleHighlight = function(elNewListItem, sType) {
-    if(elNewListItem) {
-        var sHighlight = this.highlightClassName;
-        if(this._elCurListItem) {
-            // Remove highlight from old item
-            YAHOO.util.Dom.removeClass(this._elCurListItem, sHighlight);
-            this._elCurListItem = null;
-        }
-    
-        if((sType == "to") && sHighlight) {
-            // Apply highlight to new item
-            YAHOO.util.Dom.addClass(elNewListItem, sHighlight);
-            this._elCurListItem = elNewListItem;
-        }
-    }
-};
-
-/**
- * Toggles the pre-highlight on or off for an item in the container, and also cleans
- * up pre-highlighting of any previous item.
- *
- * @method _togglePrehighlight
- * @param elNewListItem {HTMLElement} The &lt;li&gt; element item to receive highlight behavior.
- * @param sType {String} Type "mouseover" will toggle highlight on, and "mouseout" will toggle highlight off.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._togglePrehighlight = function(elNewListItem, sType) {
-    var sPrehighlight = this.prehighlightClassName;
-
-    if(this._elCurPrehighlightItem) {
-        YAHOO.util.Dom.removeClass(this._elCurPrehighlightItem, sPrehighlight);
-    }
-    if(elNewListItem == this._elCurListItem) {
-        return;
-    }
-
-    if((sType == "mouseover") && sPrehighlight) {
-        // Apply prehighlight to new item
-        YAHOO.util.Dom.addClass(elNewListItem, sPrehighlight);
-        this._elCurPrehighlightItem = elNewListItem;
-    }
-    else {
-        // Remove prehighlight from old item
-        YAHOO.util.Dom.removeClass(elNewListItem, sPrehighlight);
-    }
-};
-
-/**
- * Updates the text input box value with selected query result. If a delimiter
- * has been defined, then the value gets appended with the delimiter.
- *
- * @method _updateValue
- * @param elListItem {HTMLElement} The &lt;li&gt; element item with which to update the value.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._updateValue = function(elListItem) {
-    if(!this.suppressInputUpdate) {    
-        var elTextbox = this._elTextbox;
-        var sDelimChar = (this.delimChar) ? (this.delimChar[0] || this.delimChar) : null;
-        var sResultMatch = elListItem._sResultMatch;
-    
-        // Calculate the new value
-        var sNewValue = "";
-        if(sDelimChar) {
-            // Preserve selections from past queries
-            sNewValue = this._sPastSelections;
-            // Add new selection plus delimiter
-            sNewValue += sResultMatch + sDelimChar;
-            if(sDelimChar != " ") {
-                sNewValue += " ";
-            }
-        }
-        else { 
-            sNewValue = sResultMatch;
-        }
-        
-        // Update input field
-        elTextbox.value = sNewValue;
-    
-        // Scroll to bottom of textarea if necessary
-        if(elTextbox.type == "textarea") {
-            elTextbox.scrollTop = elTextbox.scrollHeight;
-        }
-    
-        // Move cursor to end
-        var end = elTextbox.value.length;
-        this._selectText(elTextbox,end,end);
-    
-        this._elCurListItem = elListItem;
-    }
-};
-
-/**
- * Selects a result item from the container
- *
- * @method _selectItem
- * @param elListItem {HTMLElement} The selected &lt;li&gt; element item.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._selectItem = function(elListItem) {
-    this._bItemSelected = true;
-    this._updateValue(elListItem);
-    this._sPastSelections = this._elTextbox.value;
-    this._clearInterval();
-    this.itemSelectEvent.fire(this, elListItem, elListItem._oResultData);
-    this._toggleContainer(false);
-};
-
-/**
- * If an item is highlighted in the container, the right arrow key jumps to the
- * end of the textbox and selects the highlighted item, otherwise the container
- * is closed.
- *
- * @method _jumpSelection
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._jumpSelection = function() {
-    if(this._elCurListItem) {
-        this._selectItem(this._elCurListItem);
-    }
-    else {
-        this._toggleContainer(false);
-    }
-};
-
-/**
- * Triggered by up and down arrow keys, changes the current highlighted
- * &lt;li&gt; element item. Scrolls container if necessary.
- *
- * @method _moveSelection
- * @param nKeyCode {Number} Code of key pressed.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._moveSelection = function(nKeyCode) {
-    if(this._bContainerOpen) {
-        // Determine current item's id number
-        var elCurListItem = this._elCurListItem,
-            nCurItemIndex = -1;
-
-        if(elCurListItem) {
-            nCurItemIndex = elCurListItem._nItemIndex;
-        }
-
-        var nNewItemIndex = (nKeyCode == 40) ?
-                (nCurItemIndex + 1) : (nCurItemIndex - 1);
-
-        // Out of bounds
-        if(nNewItemIndex < -2 || nNewItemIndex >= this._nDisplayedItems) {
-            return;
-        }
-
-        if(elCurListItem) {
-            // Unhighlight current item
-            this._toggleHighlight(elCurListItem, "from");
-            this.itemArrowFromEvent.fire(this, elCurListItem);
-        }
-        if(nNewItemIndex == -1) {
-           // Go back to query (remove type-ahead string)
-            if(this.delimChar) {
-                this._elTextbox.value = this._sPastSelections + this._sCurQuery;
-            }
-            else {
-                this._elTextbox.value = this._sCurQuery;
-            }
-            return;
-        }
-        if(nNewItemIndex == -2) {
-            // Close container
-            this._toggleContainer(false);
-            return;
-        }
-        
-        var elNewListItem = this._elList.childNodes[nNewItemIndex],
-
-        // Scroll the container if necessary
-            elContent = this._elContent,
-            sOF = YAHOO.util.Dom.getStyle(elContent,"overflow"),
-            sOFY = YAHOO.util.Dom.getStyle(elContent,"overflowY"),
-            scrollOn = ((sOF == "auto") || (sOF == "scroll") || (sOFY == "auto") || (sOFY == "scroll"));
-        if(scrollOn && (nNewItemIndex > -1) &&
-        (nNewItemIndex < this._nDisplayedItems)) {
-            // User is keying down
-            if(nKeyCode == 40) {
-                // Bottom of selected item is below scroll area...
-                if((elNewListItem.offsetTop+elNewListItem.offsetHeight) > (elContent.scrollTop + elContent.offsetHeight)) {
-                    // Set bottom of scroll area to bottom of selected item
-                    elContent.scrollTop = (elNewListItem.offsetTop+elNewListItem.offsetHeight) - elContent.offsetHeight;
-                }
-                // Bottom of selected item is above scroll area...
-                else if((elNewListItem.offsetTop+elNewListItem.offsetHeight) < elContent.scrollTop) {
-                    // Set top of selected item to top of scroll area
-                    elContent.scrollTop = elNewListItem.offsetTop;
-
-                }
-            }
-            // User is keying up
-            else {
-                // Top of selected item is above scroll area
-                if(elNewListItem.offsetTop < elContent.scrollTop) {
-                    // Set top of scroll area to top of selected item
-                    this._elContent.scrollTop = elNewListItem.offsetTop;
-                }
-                // Top of selected item is below scroll area
-                else if(elNewListItem.offsetTop > (elContent.scrollTop + elContent.offsetHeight)) {
-                    // Set bottom of selected item to bottom of scroll area
-                    this._elContent.scrollTop = (elNewListItem.offsetTop+elNewListItem.offsetHeight) - elContent.offsetHeight;
-                }
-            }
-        }
-
-        this._toggleHighlight(elNewListItem, "to");
-        this.itemArrowToEvent.fire(this, elNewListItem);
-        if(this.typeAhead) {
-            this._updateValue(elNewListItem);
-        }
-    }
-};
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Private event handlers
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Handles container mouseover events.
- *
- * @method _onContainerMouseover
- * @param v {HTMLEvent} The mouseover event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onContainerMouseover = function(v,oSelf) {
-    var elTarget = YAHOO.util.Event.getTarget(v);
-    var elTag = elTarget.nodeName.toLowerCase();
-    while(elTarget && (elTag != "table")) {
-        switch(elTag) {
-            case "body":
-                return;
-            case "li":
-                if(oSelf.prehighlightClassName) {
-                    oSelf._togglePrehighlight(elTarget,"mouseover");
-                }
-                else {
-                    oSelf._toggleHighlight(elTarget,"to");
-                }
-            
-                oSelf.itemMouseOverEvent.fire(oSelf, elTarget);
-                break;
-            case "div":
-                if(YAHOO.util.Dom.hasClass(elTarget,"yui-ac-container")) {
-                    oSelf._bOverContainer = true;
-                    return;
-                }
-                break;
-            default:
-                break;
-        }
-        
-        elTarget = elTarget.parentNode;
-        if(elTarget) {
-            elTag = elTarget.nodeName.toLowerCase();
-        }
-    }
-};
-
-/**
- * Handles container mouseout events.
- *
- * @method _onContainerMouseout
- * @param v {HTMLEvent} The mouseout event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onContainerMouseout = function(v,oSelf) {
-    var elTarget = YAHOO.util.Event.getTarget(v);
-    var elTag = elTarget.nodeName.toLowerCase();
-    while(elTarget && (elTag != "table")) {
-        switch(elTag) {
-            case "body":
-                return;
-            case "li":
-                if(oSelf.prehighlightClassName) {
-                    oSelf._togglePrehighlight(elTarget,"mouseout");
-                }
-                else {
-                    oSelf._toggleHighlight(elTarget,"from");
-                }
-            
-                oSelf.itemMouseOutEvent.fire(oSelf, elTarget);
-                break;
-            case "ul":
-                oSelf._toggleHighlight(oSelf._elCurListItem,"to");
-                break;
-            case "div":
-                if(YAHOO.util.Dom.hasClass(elTarget,"yui-ac-container")) {
-                    oSelf._bOverContainer = false;
-                    return;
-                }
-                break;
-            default:
-                break;
-        }
-
-        elTarget = elTarget.parentNode;
-        if(elTarget) {
-            elTag = elTarget.nodeName.toLowerCase();
-        }
-    }
-};
-
-/**
- * Handles container click events.
- *
- * @method _onContainerClick
- * @param v {HTMLEvent} The click event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onContainerClick = function(v,oSelf) {
-    var elTarget = YAHOO.util.Event.getTarget(v);
-    var elTag = elTarget.nodeName.toLowerCase();
-    while(elTarget && (elTag != "table")) {
-        switch(elTag) {
-            case "body":
-                return;
-            case "li":
-                // In case item has not been moused over
-                oSelf._toggleHighlight(elTarget,"to");
-                oSelf._selectItem(elTarget);
-                return;
-            default:
-                break;
-        }
-
-        elTarget = elTarget.parentNode;
-        if(elTarget) {
-            elTag = elTarget.nodeName.toLowerCase();
-        }
-    }    
-};
-
-
-/**
- * Handles container scroll events.
- *
- * @method _onContainerScroll
- * @param v {HTMLEvent} The scroll event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onContainerScroll = function(v,oSelf) {
-    oSelf._focus();
-};
-
-/**
- * Handles container resize events.
- *
- * @method _onContainerResize
- * @param v {HTMLEvent} The resize event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onContainerResize = function(v,oSelf) {
-    oSelf._toggleContainerHelpers(oSelf._bContainerOpen);
-};
-
-
-/**
- * Handles textbox keydown events of functional keys, mainly for UI behavior.
- *
- * @method _onTextboxKeyDown
- * @param v {HTMLEvent} The keydown event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onTextboxKeyDown = function(v,oSelf) {
-    var nKeyCode = v.keyCode;
-
-    // Clear timeout
-    if(oSelf._nTypeAheadDelayID != -1) {
-        clearTimeout(oSelf._nTypeAheadDelayID);
-    }
-    
-    switch (nKeyCode) {
-        case 9: // tab
-            if(!YAHOO.env.ua.opera && (navigator.userAgent.toLowerCase().indexOf("mac") == -1) || (YAHOO.env.ua.webkit>420)) {
-                // select an item or clear out
-                if(oSelf._elCurListItem) {
-                    if(oSelf.delimChar && (oSelf._nKeyCode != nKeyCode)) {
-                        if(oSelf._bContainerOpen) {
-                            YAHOO.util.Event.stopEvent(v);
-                        }
-                    }
-                    oSelf._selectItem(oSelf._elCurListItem);
-                }
-                else {
-                    oSelf._toggleContainer(false);
-                }
-            }
-            break;
-        case 13: // enter
-            if(!YAHOO.env.ua.opera && (navigator.userAgent.toLowerCase().indexOf("mac") == -1) || (YAHOO.env.ua.webkit>420)) {
-                if(oSelf._elCurListItem) {
-                    if(oSelf._nKeyCode != nKeyCode) {
-                        if(oSelf._bContainerOpen) {
-                            YAHOO.util.Event.stopEvent(v);
-                        }
-                    }
-                    oSelf._selectItem(oSelf._elCurListItem);
-                }
-                else {
-                    oSelf._toggleContainer(false);
-                }
-            }
-            break;
-        case 27: // esc
-            oSelf._toggleContainer(false);
-            return;
-        case 39: // right
-            oSelf._jumpSelection();
-            break;
-        case 38: // up
-            if(oSelf._bContainerOpen) {
-                YAHOO.util.Event.stopEvent(v);
-                oSelf._moveSelection(nKeyCode);
-            }
-            break;
-        case 40: // down
-            if(oSelf._bContainerOpen) {
-                YAHOO.util.Event.stopEvent(v);
-                oSelf._moveSelection(nKeyCode);
-            }
-            break;
-        default: 
-            oSelf._bItemSelected = false;
-            oSelf._toggleHighlight(oSelf._elCurListItem, "from");
-
-            oSelf.textboxKeyEvent.fire(oSelf, nKeyCode);
-            break;
-    }
-
-    if(nKeyCode === 18){
-        oSelf._enableIntervalDetection();
-    }    
-    oSelf._nKeyCode = nKeyCode;
-};
-
-/**
- * Handles textbox keypress events.
- * @method _onTextboxKeyPress
- * @param v {HTMLEvent} The keypress event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onTextboxKeyPress = function(v,oSelf) {
-    var nKeyCode = v.keyCode;
-
-        // Expose only to non SF3 (bug 1978549) Mac browsers (bug 790337) and  Opera browsers (bug 583531),
-        // where stopEvent is ineffective on keydown events 
-        if(YAHOO.env.ua.opera || (navigator.userAgent.toLowerCase().indexOf("mac") != -1) && (YAHOO.env.ua.webkit < 420)) {
-            switch (nKeyCode) {
-            case 9: // tab
-                // select an item or clear out
-                if(oSelf._bContainerOpen) {
-                    if(oSelf.delimChar) {
-                        YAHOO.util.Event.stopEvent(v);
-                    }
-                    if(oSelf._elCurListItem) {
-                        oSelf._selectItem(oSelf._elCurListItem);
-                    }
-                    else {
-                        oSelf._toggleContainer(false);
-                    }
-                }
-                break;
-            case 13: // enter
-                if(oSelf._bContainerOpen) {
-                    YAHOO.util.Event.stopEvent(v);
-                    if(oSelf._elCurListItem) {
-                        oSelf._selectItem(oSelf._elCurListItem);
-                    }
-                    else {
-                        oSelf._toggleContainer(false);
-                    }
-                }
-                break;
-            default:
-                break;
-            }
-        }
-
-        //TODO: (?) limit only to non-IE, non-Mac-FF for Korean IME support (bug 811948)
-        // Korean IME detected
-        else if(nKeyCode == 229) {
-            oSelf._enableIntervalDetection();
-        }
-};
-
-/**
- * Handles textbox keyup events to trigger queries.
- *
- * @method _onTextboxKeyUp
- * @param v {HTMLEvent} The keyup event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onTextboxKeyUp = function(v,oSelf) {
-    var sText = this.value; //string in textbox
-    
-    // Check to see if any of the public properties have been updated
-    oSelf._initProps();
-
-    // Filter out chars that don't trigger queries
-    var nKeyCode = v.keyCode;
-    if(oSelf._isIgnoreKey(nKeyCode)) {
-        return;
-    }
-
-    // Clear previous timeout
-    if(oSelf._nDelayID != -1) {
-        clearTimeout(oSelf._nDelayID);
-    }
-
-    // Set new timeout
-    oSelf._nDelayID = setTimeout(function(){
-            oSelf._sendQuery(sText);
-        },(oSelf.queryDelay * 1000));
-};
-
-/**
- * Handles text input box receiving focus.
- *
- * @method _onTextboxFocus
- * @param v {HTMLEvent} The focus event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onTextboxFocus = function (v,oSelf) {
-    // Start of a new interaction
-    if(!oSelf._bFocused) {
-        oSelf._elTextbox.setAttribute("autocomplete","off");
-        oSelf._bFocused = true;
-        oSelf._sInitInputValue = oSelf._elTextbox.value;
-        oSelf.textboxFocusEvent.fire(oSelf);
-    }
-};
-
-/**
- * Handles text input box losing focus.
- *
- * @method _onTextboxBlur
- * @param v {HTMLEvent} The focus event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onTextboxBlur = function (v,oSelf) {
-    // Is a true blur
-    if(!oSelf._bOverContainer || (oSelf._nKeyCode == 9)) {
-        // Current query needs to be validated as a selection
-        if(!oSelf._bItemSelected) {
-            var elMatchListItem = oSelf._textMatchesOption();
-            // Container is closed or current query doesn't match any result
-            if(!oSelf._bContainerOpen || (oSelf._bContainerOpen && (elMatchListItem === null))) {
-                // Force selection is enabled so clear the current query
-                if(oSelf.forceSelection) {
-                    oSelf._clearSelection();
-                }
-                // Treat current query as a valid selection
-                else {
-                    oSelf.unmatchedItemSelectEvent.fire(oSelf, oSelf._sCurQuery);
-                }
-            }
-            // Container is open and current query matches a result
-            else {
-                // Force a selection when textbox is blurred with a match
-                if(oSelf.forceSelection) {
-                    oSelf._selectItem(elMatchListItem);
-                }
-            }
-        }
-
-        oSelf._clearInterval();
-        oSelf._bFocused = false;
-        if(oSelf._sInitInputValue !== oSelf._elTextbox.value) {
-            oSelf.textboxChangeEvent.fire(oSelf);
-        }
-        oSelf.textboxBlurEvent.fire(oSelf);
-
-        oSelf._toggleContainer(false);
-    }
-    // Not a true blur if it was a selection via mouse click
-    else {
-        oSelf._focus();
-    }
-};
-
-/**
- * Handles window unload event.
- *
- * @method _onWindowUnload
- * @param v {HTMLEvent} The unload event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-YAHOO.widget.AutoComplete.prototype._onWindowUnload = function(v,oSelf) {
-    if(oSelf && oSelf._elTextbox && oSelf.allowBrowserAutocomplete) {
-        oSelf._elTextbox.setAttribute("autocomplete","on");
-    }
-};
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Deprecated for Backwards Compatibility
-//
-/////////////////////////////////////////////////////////////////////////////
-/**
- * @method doBeforeSendQuery
- * @deprecated Use generateRequest.
- */
-YAHOO.widget.AutoComplete.prototype.doBeforeSendQuery = function(sQuery) {
-    return this.generateRequest(sQuery);
-};
-
-/**
- * @method getListItems
- * @deprecated Use getListEl().childNodes.
- */
-YAHOO.widget.AutoComplete.prototype.getListItems = function() {
-    var allListItemEls = [],
-        els = this._elList.childNodes;
-    for(var i=els.length-1; i>=0; i--) {
-        allListItemEls[i] = els[i];
-    }
-    return allListItemEls;
-};
-
-/////////////////////////////////////////////////////////////////////////
-//
-// Private static methods
-//
-/////////////////////////////////////////////////////////////////////////
-
-/**
- * Clones object literal or array of object literals.
- *
- * @method AutoComplete._cloneObject
- * @param o {Object} Object.
- * @private
- * @static     
- */
-YAHOO.widget.AutoComplete._cloneObject = function(o) {
-    if(!YAHOO.lang.isValue(o)) {
-        return o;
-    }
-    
-    var copy = {};
-    
-    if(YAHOO.lang.isFunction(o)) {
-        copy = o;
-    }
-    else if(YAHOO.lang.isArray(o)) {
-        var array = [];
-        for(var i=0,len=o.length;i<len;i++) {
-            array[i] = YAHOO.widget.AutoComplete._cloneObject(o[i]);
-        }
-        copy = array;
-    }
-    else if(YAHOO.lang.isObject(o)) { 
-        for (var x in o){
-            if(YAHOO.lang.hasOwnProperty(o, x)) {
-                if(YAHOO.lang.isValue(o[x]) && YAHOO.lang.isObject(o[x]) || YAHOO.lang.isArray(o[x])) {
-                    copy[x] = YAHOO.widget.AutoComplete._cloneObject(o[x]);
-                }
-                else {
-                    copy[x] = o[x];
-                }
-            }
-        }
-    }
-    else {
-        copy = o;
-    }
-
-    return copy;
-};
-
-
-
-
-YAHOO.register("autocomplete", YAHOO.widget.AutoComplete, {version: "2.8.0r4", build: "2449"});
diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/yui/datasource/datasource-debug.js b/koha-tmpl/intranet-tmpl/prog/en/lib/yui/datasource/datasource-debug.js
deleted file mode 100644 (file)
index 46fc083..0000000
+++ /dev/null
@@ -1,3067 +0,0 @@
-/*
-Copyright (c) 2009, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.8.0r4
-*/
-(function () {
-
-var lang   = YAHOO.lang,
-    util   = YAHOO.util,
-    Ev     = util.Event;
-
-/**
- * The DataSource utility provides a common configurable interface for widgets to
- * access a variety of data, from JavaScript arrays to online database servers.
- *
- * @module datasource
- * @requires yahoo, event
- * @optional json, get, connection 
- * @title DataSource Utility
- */
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * Base class for the YUI DataSource utility.
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.DataSourceBase
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.DataSourceBase = function(oLiveData, oConfigs) {
-    if(oLiveData === null || oLiveData === undefined) {
-        YAHOO.log("Could not instantiate DataSource due to invalid live database",
-                "error", this.toString());
-        return;
-    }
-    
-    this.liveData = oLiveData;
-    this._oQueue = {interval:null, conn:null, requests:[]};
-    this.responseSchema = {};   
-
-    // Set any config params passed in to override defaults
-    if(oConfigs && (oConfigs.constructor == Object)) {
-        for(var sConfig in oConfigs) {
-            if(sConfig) {
-                this[sConfig] = oConfigs[sConfig];
-            }
-        }
-    }
-    
-    // Validate and initialize public configs
-    var maxCacheEntries = this.maxCacheEntries;
-    if(!lang.isNumber(maxCacheEntries) || (maxCacheEntries < 0)) {
-        maxCacheEntries = 0;
-    }
-
-    // Initialize interval tracker
-    this._aIntervals = [];
-
-    /////////////////////////////////////////////////////////////////////////////
-    //
-    // Custom Events
-    //
-    /////////////////////////////////////////////////////////////////////////////
-
-    /**
-     * Fired when a request is made to the local cache.
-     *
-     * @event cacheRequestEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("cacheRequestEvent");
-
-    /**
-     * Fired when data is retrieved from the local cache.
-     *
-     * @event cacheResponseEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.response {Object} The response object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("cacheResponseEvent");
-
-    /**
-     * Fired when a request is sent to the live data source.
-     *
-     * @event requestEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.tId {Number} Transaction ID.     
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("requestEvent");
-
-    /**
-     * Fired when live data source sends response.
-     *
-     * @event responseEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.response {Object} The raw response object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.tId {Number} Transaction ID.     
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("responseEvent");
-
-    /**
-     * Fired when response is parsed.
-     *
-     * @event responseParseEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.response {Object} The parsed response object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("responseParseEvent");
-
-    /**
-     * Fired when response is cached.
-     *
-     * @event responseCacheEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.response {Object} The parsed response object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("responseCacheEvent");
-    /**
-     * Fired when an error is encountered with the live data source.
-     *
-     * @event dataErrorEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.response {String} The response object (if available).
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     * @param oArgs.message {String} The error message.
-     */
-    this.createEvent("dataErrorEvent");
-
-    /**
-     * Fired when the local cache is flushed.
-     *
-     * @event cacheFlushEvent
-     */
-    this.createEvent("cacheFlushEvent");
-
-    var DS = util.DataSourceBase;
-    this._sName = "DataSource instance" + DS._nIndex;
-    DS._nIndex++;
-    YAHOO.log("DataSource initialized", "info", this.toString());
-};
-
-var DS = util.DataSourceBase;
-
-lang.augmentObject(DS, {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase public constants
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Type is unknown.
- *
- * @property TYPE_UNKNOWN
- * @type Number
- * @final
- * @default -1
- */
-TYPE_UNKNOWN : -1,
-
-/**
- * Type is a JavaScript Array.
- *
- * @property TYPE_JSARRAY
- * @type Number
- * @final
- * @default 0
- */
-TYPE_JSARRAY : 0,
-
-/**
- * Type is a JavaScript Function.
- *
- * @property TYPE_JSFUNCTION
- * @type Number
- * @final
- * @default 1
- */
-TYPE_JSFUNCTION : 1,
-
-/**
- * Type is hosted on a server via an XHR connection.
- *
- * @property TYPE_XHR
- * @type Number
- * @final
- * @default 2
- */
-TYPE_XHR : 2,
-
-/**
- * Type is JSON.
- *
- * @property TYPE_JSON
- * @type Number
- * @final
- * @default 3
- */
-TYPE_JSON : 3,
-
-/**
- * Type is XML.
- *
- * @property TYPE_XML
- * @type Number
- * @final
- * @default 4
- */
-TYPE_XML : 4,
-
-/**
- * Type is plain text.
- *
- * @property TYPE_TEXT
- * @type Number
- * @final
- * @default 5
- */
-TYPE_TEXT : 5,
-
-/**
- * Type is an HTML TABLE element. Data is parsed out of TR elements from all TBODY elements.
- *
- * @property TYPE_HTMLTABLE
- * @type Number
- * @final
- * @default 6
- */
-TYPE_HTMLTABLE : 6,
-
-/**
- * Type is hosted on a server via a dynamic script node.
- *
- * @property TYPE_SCRIPTNODE
- * @type Number
- * @final
- * @default 7
- */
-TYPE_SCRIPTNODE : 7,
-
-/**
- * Type is local.
- *
- * @property TYPE_LOCAL
- * @type Number
- * @final
- * @default 8
- */
-TYPE_LOCAL : 8,
-
-/**
- * Error message for invalid dataresponses.
- *
- * @property ERROR_DATAINVALID
- * @type String
- * @final
- * @default "Invalid data"
- */
-ERROR_DATAINVALID : "Invalid data",
-
-/**
- * Error message for null data responses.
- *
- * @property ERROR_DATANULL
- * @type String
- * @final
- * @default "Null data"
- */
-ERROR_DATANULL : "Null data",
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase private static properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Internal class variable to index multiple DataSource instances.
- *
- * @property DataSourceBase._nIndex
- * @type Number
- * @private
- * @static
- */
-_nIndex : 0,
-
-/**
- * Internal class variable to assign unique transaction IDs.
- *
- * @property DataSourceBase._nTransactionId
- * @type Number
- * @private
- * @static
- */
-_nTransactionId : 0,
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase private static methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Get an XPath-specified value for a given field from an XML node or document.
- *
- * @method _getLocationValue
- * @param field {String | Object} Field definition.
- * @param context {Object} XML node or document to search within.
- * @return {Object} Data value or null.
- * @static
- * @private
- */
-_getLocationValue: function(field, context) {
-    var locator = field.locator || field.key || field,
-        xmldoc = context.ownerDocument || context,
-        result, res, value = null;
-
-    try {
-        // Standards mode
-        if(!lang.isUndefined(xmldoc.evaluate)) {
-            result = xmldoc.evaluate(locator, context, xmldoc.createNSResolver(!context.ownerDocument ? context.documentElement : context.ownerDocument.documentElement), 0, null);
-            while(res = result.iterateNext()) {
-                value = res.textContent;
-            }
-        }
-        // IE mode
-        else {
-            xmldoc.setProperty("SelectionLanguage", "XPath");
-            result = context.selectNodes(locator)[0];
-            value = result.value || result.text || null;
-        }
-        return value;
-
-    }
-    catch(e) {
-    }
-},
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase public static methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Executes a configured callback.  For object literal callbacks, the third
- * param determines whether to execute the success handler or failure handler.
- *  
- * @method issueCallback
- * @param callback {Function|Object} the callback to execute
- * @param params {Array} params to be passed to the callback method
- * @param error {Boolean} whether an error occurred
- * @param scope {Object} the scope from which to execute the callback
- * (deprecated - use an object literal callback)
- * @static     
- */
-issueCallback : function (callback,params,error,scope) {
-    if (lang.isFunction(callback)) {
-        callback.apply(scope, params);
-    } else if (lang.isObject(callback)) {
-        scope = callback.scope || scope || window;
-        var callbackFunc = callback.success;
-        if (error) {
-            callbackFunc = callback.failure;
-        }
-        if (callbackFunc) {
-            callbackFunc.apply(scope, params.concat([callback.argument]));
-        }
-    }
-},
-
-/**
- * Converts data to type String.
- *
- * @method DataSourceBase.parseString
- * @param oData {String | Number | Boolean | Date | Array | Object} Data to parse.
- * The special values null and undefined will return null.
- * @return {String} A string, or null.
- * @static
- */
-parseString : function(oData) {
-    // Special case null and undefined
-    if(!lang.isValue(oData)) {
-        return null;
-    }
-    
-    //Convert to string
-    var string = oData + "";
-
-    // Validate
-    if(lang.isString(string)) {
-        return string;
-    }
-    else {
-        YAHOO.log("Could not convert data " + lang.dump(oData) + " to type String", "warn", this.toString());
-        return null;
-    }
-},
-
-/**
- * Converts data to type Number.
- *
- * @method DataSourceBase.parseNumber
- * @param oData {String | Number | Boolean} Data to convert. Note, the following
- * values return as null: null, undefined, NaN, "". 
- * @return {Number} A number, or null.
- * @static
- */
-parseNumber : function(oData) {
-    if(!lang.isValue(oData) || (oData === "")) {
-        return null;
-    }
-
-    //Convert to number
-    var number = oData * 1;
-    
-    // Validate
-    if(lang.isNumber(number)) {
-        return number;
-    }
-    else {
-        YAHOO.log("Could not convert data " + lang.dump(oData) + " to type Number", "warn", this.toString());
-        return null;
-    }
-},
-// Backward compatibility
-convertNumber : function(oData) {
-    YAHOO.log("The method YAHOO.util.DataSourceBase.convertNumber() has been" +
-    " deprecated in favor of YAHOO.util.DataSourceBase.parseNumber()", "warn",
-    this.toString());
-    return DS.parseNumber(oData);
-},
-
-/**
- * Converts data to type Date.
- *
- * @method DataSourceBase.parseDate
- * @param oData {Date | String | Number} Data to convert.
- * @return {Date} A Date instance.
- * @static
- */
-parseDate : function(oData) {
-    var date = null;
-    
-    //Convert to date
-    if(!(oData instanceof Date)) {
-        date = new Date(oData);
-    }
-    else {
-        return oData;
-    }
-    
-    // Validate
-    if(date instanceof Date) {
-        return date;
-    }
-    else {
-        YAHOO.log("Could not convert data " + lang.dump(oData) + " to type Date", "warn", this.toString());
-        return null;
-    }
-},
-// Backward compatibility
-convertDate : function(oData) {
-    YAHOO.log("The method YAHOO.util.DataSourceBase.convertDate() has been" +
-    " deprecated in favor of YAHOO.util.DataSourceBase.parseDate()", "warn",
-    this.toString());
-    return DS.parseDate(oData);
-}
-
-});
-
-// Done in separate step so referenced functions are defined.
-/**
- * Data parsing functions.
- * @property DataSource.Parser
- * @type Object
- * @static
- */
-DS.Parser = {
-    string   : DS.parseString,
-    number   : DS.parseNumber,
-    date     : DS.parseDate
-};
-
-// Prototype properties and methods
-DS.prototype = {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase private properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Name of DataSource instance.
- *
- * @property _sName
- * @type String
- * @private
- */
-_sName : null,
-
-/**
- * Local cache of data result object literals indexed chronologically.
- *
- * @property _aCache
- * @type Object[]
- * @private
- */
-_aCache : null,
-
-/**
- * Local queue of request connections, enabled if queue needs to be managed.
- *
- * @property _oQueue
- * @type Object
- * @private
- */
-_oQueue : null,
-
-/**
- * Array of polling interval IDs that have been enabled, needed to clear all intervals.
- *
- * @property _aIntervals
- * @type Array
- * @private
- */
-_aIntervals : null,
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase public properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Max size of the local cache.  Set to 0 to turn off caching.  Caching is
- * useful to reduce the number of server connections.  Recommended only for data
- * sources that return comprehensive results for queries or when stale data is
- * not an issue.
- *
- * @property maxCacheEntries
- * @type Number
- * @default 0
- */
-maxCacheEntries : 0,
-
- /**
- * Pointer to live database.
- *
- * @property liveData
- * @type Object
- */
-liveData : null,
-
-/**
- * Where the live data is held:
- * 
- * <dl>  
- *    <dt>TYPE_UNKNOWN</dt>
- *    <dt>TYPE_LOCAL</dt>
- *    <dt>TYPE_XHR</dt>
- *    <dt>TYPE_SCRIPTNODE</dt>
- *    <dt>TYPE_JSFUNCTION</dt>
- * </dl> 
- *  
- * @property dataType
- * @type Number
- * @default YAHOO.util.DataSourceBase.TYPE_UNKNOWN
- *
- */
-dataType : DS.TYPE_UNKNOWN,
-
-/**
- * Format of response:
- *  
- * <dl>  
- *    <dt>TYPE_UNKNOWN</dt>
- *    <dt>TYPE_JSARRAY</dt>
- *    <dt>TYPE_JSON</dt>
- *    <dt>TYPE_XML</dt>
- *    <dt>TYPE_TEXT</dt>
- *    <dt>TYPE_HTMLTABLE</dt> 
- * </dl> 
- *
- * @property responseType
- * @type Number
- * @default YAHOO.util.DataSourceBase.TYPE_UNKNOWN
- */
-responseType : DS.TYPE_UNKNOWN,
-
-/**
- * Response schema object literal takes a combination of the following properties:
- *
- * <dl>
- * <dt>resultsList</dt> <dd>Pointer to array of tabular data</dd>
- * <dt>resultNode</dt> <dd>Pointer to node name of row data (XML data only)</dd>
- * <dt>recordDelim</dt> <dd>Record delimiter (text data only)</dd>
- * <dt>fieldDelim</dt> <dd>Field delimiter (text data only)</dd>
- * <dt>fields</dt> <dd>Array of field names (aka keys), or array of object literals
- * such as: {key:"fieldname",parser:YAHOO.util.DataSourceBase.parseDate}</dd>
- * <dt>metaFields</dt> <dd>Object literal of keys to include in the oParsedResponse.meta collection</dd>
- * <dt>metaNode</dt> <dd>Name of the node under which to search for meta information in XML response data</dd>
- * </dl>
- *
- * @property responseSchema
- * @type Object
- */
-responseSchema : null,
-
-/**
- * Additional arguments passed to the JSON parse routine.  The JSON string
- * is the assumed first argument (where applicable).  This property is not
- * set by default, but the parse methods will use it if present.
- *
- * @property parseJSONArgs
- * @type {MIXED|Array} If an Array, contents are used as individual arguments.
- *                     Otherwise, value is used as an additional argument.
- */
-// property intentionally undefined
-/**
- * When working with XML data, setting this property to true enables support for
- * XPath-syntaxed locators in schema definitions.
- *
- * @property useXPath
- * @type Boolean
- * @default false
- */
-useXPath : false,
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase public methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Public accessor to the unique name of the DataSource instance.
- *
- * @method toString
- * @return {String} Unique name of the DataSource instance.
- */
-toString : function() {
-    return this._sName;
-},
-
-/**
- * Overridable method passes request to cache and returns cached response if any,
- * refreshing the hit in the cache as the newest item. Returns null if there is
- * no cache hit.
- *
- * @method getCachedResponse
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} Callback object.
- * @param oCaller {Object} (deprecated) Use callback object.
- * @return {Object} Cached response object or null.
- */
-getCachedResponse : function(oRequest, oCallback, oCaller) {
-    var aCache = this._aCache;
-
-    // If cache is enabled...
-    if(this.maxCacheEntries > 0) {        
-        // Initialize local cache
-        if(!aCache) {
-            this._aCache = [];
-            YAHOO.log("Cache initialized", "info", this.toString());
-        }
-        // Look in local cache
-        else {
-            var nCacheLength = aCache.length;
-            if(nCacheLength > 0) {
-                var oResponse = null;
-                this.fireEvent("cacheRequestEvent", {request:oRequest,callback:oCallback,caller:oCaller});
-        
-                // Loop through each cached element
-                for(var i = nCacheLength-1; i >= 0; i--) {
-                    var oCacheElem = aCache[i];
-        
-                    // Defer cache hit logic to a public overridable method
-                    if(this.isCacheHit(oRequest,oCacheElem.request)) {
-                        // The cache returned a hit!
-                        // Grab the cached response
-                        oResponse = oCacheElem.response;
-                        this.fireEvent("cacheResponseEvent", {request:oRequest,response:oResponse,callback:oCallback,caller:oCaller});
-                        
-                        // Refresh the position of the cache hit
-                        if(i < nCacheLength-1) {
-                            // Remove element from its original location
-                            aCache.splice(i,1);
-                            // Add as newest
-                            this.addToCache(oRequest, oResponse);
-                            YAHOO.log("Refreshed cache position of the response for \"" +  oRequest + "\"", "info", this.toString());
-                        }
-                        
-                        // Add a cache flag
-                        oResponse.cached = true;
-                        break;
-                    }
-                }
-                YAHOO.log("The cached response for \"" + lang.dump(oRequest) +
-                        "\" is " + lang.dump(oResponse), "info", this.toString());
-                return oResponse;
-            }
-        }
-    }
-    else if(aCache) {
-        this._aCache = null;
-        YAHOO.log("Cache destroyed", "info", this.toString());
-    }
-    return null;
-},
-
-/**
- * Default overridable method matches given request to given cached request.
- * Returns true if is a hit, returns false otherwise.  Implementers should
- * override this method to customize the cache-matching algorithm.
- *
- * @method isCacheHit
- * @param oRequest {Object} Request object.
- * @param oCachedRequest {Object} Cached request object.
- * @return {Boolean} True if given request matches cached request, false otherwise.
- */
-isCacheHit : function(oRequest, oCachedRequest) {
-    return (oRequest === oCachedRequest);
-},
-
-/**
- * Adds a new item to the cache. If cache is full, evicts the stalest item
- * before adding the new item.
- *
- * @method addToCache
- * @param oRequest {Object} Request object.
- * @param oResponse {Object} Response object to cache.
- */
-addToCache : function(oRequest, oResponse) {
-    var aCache = this._aCache;
-    if(!aCache) {
-        return;
-    }
-
-    // If the cache is full, make room by removing stalest element (index=0)
-    while(aCache.length >= this.maxCacheEntries) {
-        aCache.shift();
-    }
-
-    // Add to cache in the newest position, at the end of the array
-    var oCacheElem = {request:oRequest,response:oResponse};
-    aCache[aCache.length] = oCacheElem;
-    this.fireEvent("responseCacheEvent", {request:oRequest,response:oResponse});
-    YAHOO.log("Cached the response for \"" +  oRequest + "\"", "info", this.toString());
-},
-
-/**
- * Flushes cache.
- *
- * @method flushCache
- */
-flushCache : function() {
-    if(this._aCache) {
-        this._aCache = [];
-        this.fireEvent("cacheFlushEvent");
-        YAHOO.log("Flushed the cache", "info", this.toString());
-    }
-},
-
-/**
- * Sets up a polling mechanism to send requests at set intervals and forward
- * responses to given callback.
- *
- * @method setInterval
- * @param nMsec {Number} Length of interval in milliseconds.
- * @param oRequest {Object} Request object.
- * @param oCallback {Function} Handler function to receive the response.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Interval ID.
- */
-setInterval : function(nMsec, oRequest, oCallback, oCaller) {
-    if(lang.isNumber(nMsec) && (nMsec >= 0)) {
-        YAHOO.log("Enabling polling to live data for \"" + oRequest + "\" at interval " + nMsec, "info", this.toString());
-        var oSelf = this;
-        var nId = setInterval(function() {
-            oSelf.makeConnection(oRequest, oCallback, oCaller);
-        }, nMsec);
-        this._aIntervals.push(nId);
-        return nId;
-    }
-    else {
-        YAHOO.log("Could not enable polling to live data for \"" + oRequest + "\" at interval " + nMsec, "info", this.toString());
-    }
-},
-
-/**
- * Disables polling mechanism associated with the given interval ID.
- *
- * @method clearInterval
- * @param nId {Number} Interval ID.
- */
-clearInterval : function(nId) {
-    // Remove from tracker if there
-    var tracker = this._aIntervals || [];
-    for(var i=tracker.length-1; i>-1; i--) {
-        if(tracker[i] === nId) {
-            tracker.splice(i,1);
-            clearInterval(nId);
-        }
-    }
-},
-
-/**
- * Disables all known polling intervals.
- *
- * @method clearAllIntervals
- */
-clearAllIntervals : function() {
-    var tracker = this._aIntervals || [];
-    for(var i=tracker.length-1; i>-1; i--) {
-        clearInterval(tracker[i]);
-    }
-    tracker = [];
-},
-
-/**
- * First looks for cached response, then sends request to live data. The
- * following arguments are passed to the callback function:
- *     <dl>
- *     <dt><code>oRequest</code></dt>
- *     <dd>The same value that was passed in as the first argument to sendRequest.</dd>
- *     <dt><code>oParsedResponse</code></dt>
- *     <dd>An object literal containing the following properties:
- *         <dl>
- *         <dt><code>tId</code></dt>
- *         <dd>Unique transaction ID number.</dd>
- *         <dt><code>results</code></dt>
- *         <dd>Schema-parsed data results.</dd>
- *         <dt><code>error</code></dt>
- *         <dd>True in cases of data error.</dd>
- *         <dt><code>cached</code></dt>
- *         <dd>True when response is returned from DataSource cache.</dd> 
- *         <dt><code>meta</code></dt>
- *         <dd>Schema-parsed meta data.</dd>
- *         </dl>
- *     <dt><code>oPayload</code></dt>
- *     <dd>The same value as was passed in as <code>argument</code> in the oCallback object literal.</dd>
- *     </dl> 
- *
- * @method sendRequest
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} An object literal with the following properties:
- *     <dl>
- *     <dt><code>success</code></dt>
- *     <dd>The function to call when the data is ready.</dd>
- *     <dt><code>failure</code></dt>
- *     <dd>The function to call upon a response failure condition.</dd>
- *     <dt><code>scope</code></dt>
- *     <dd>The object to serve as the scope for the success and failure handlers.</dd>
- *     <dt><code>argument</code></dt>
- *     <dd>Arbitrary data that will be passed back to the success and failure handlers.</dd>
- *     </dl> 
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Transaction ID, or null if response found in cache.
- */
-sendRequest : function(oRequest, oCallback, oCaller) {
-    // First look in cache
-    var oCachedResponse = this.getCachedResponse(oRequest, oCallback, oCaller);
-    if(oCachedResponse) {
-        DS.issueCallback(oCallback,[oRequest,oCachedResponse],false,oCaller);
-        return null;
-    }
-
-
-    // Not in cache, so forward request to live data
-    YAHOO.log("Making connection to live data for \"" + oRequest + "\"", "info", this.toString());
-    return this.makeConnection(oRequest, oCallback, oCaller);
-},
-
-/**
- * Overridable default method generates a unique transaction ID and passes 
- * the live data reference directly to the  handleResponse function. This
- * method should be implemented by subclasses to achieve more complex behavior
- * or to access remote data.          
- *
- * @method makeConnection
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} Callback object literal.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Transaction ID.
- */
-makeConnection : function(oRequest, oCallback, oCaller) {
-    var tId = DS._nTransactionId++;
-    this.fireEvent("requestEvent", {tId:tId, request:oRequest,callback:oCallback,caller:oCaller});
-
-    /* accounts for the following cases:
-    YAHOO.util.DataSourceBase.TYPE_UNKNOWN
-    YAHOO.util.DataSourceBase.TYPE_JSARRAY
-    YAHOO.util.DataSourceBase.TYPE_JSON
-    YAHOO.util.DataSourceBase.TYPE_HTMLTABLE
-    YAHOO.util.DataSourceBase.TYPE_XML
-    YAHOO.util.DataSourceBase.TYPE_TEXT
-    */
-    var oRawResponse = this.liveData;
-    
-    this.handleResponse(oRequest, oRawResponse, oCallback, oCaller, tId);
-    return tId;
-},
-
-/**
- * Receives raw data response and type converts to XML, JSON, etc as necessary.
- * Forwards oFullResponse to appropriate parsing function to get turned into
- * oParsedResponse. Calls doBeforeCallback() and adds oParsedResponse to 
- * the cache when appropriate before calling issueCallback().
- * 
- * The oParsedResponse object literal has the following properties:
- * <dl>
- *     <dd><dt>tId {Number}</dt> Unique transaction ID</dd>
- *     <dd><dt>results {Array}</dt> Array of parsed data results</dd>
- *     <dd><dt>meta {Object}</dt> Object literal of meta values</dd> 
- *     <dd><dt>error {Boolean}</dt> (optional) True if there was an error</dd>
- *     <dd><dt>cached {Boolean}</dt> (optional) True if response was cached</dd>
- * </dl>
- *
- * @method handleResponse
- * @param oRequest {Object} Request object
- * @param oRawResponse {Object} The raw response from the live database.
- * @param oCallback {Object} Callback object literal.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @param tId {Number} Transaction ID.
- */
-handleResponse : function(oRequest, oRawResponse, oCallback, oCaller, tId) {
-    this.fireEvent("responseEvent", {tId:tId, request:oRequest, response:oRawResponse,
-            callback:oCallback, caller:oCaller});
-    YAHOO.log("Received live data response for \"" + oRequest + "\"", "info", this.toString());
-    var xhr = (this.dataType == DS.TYPE_XHR) ? true : false;
-    var oParsedResponse = null;
-    var oFullResponse = oRawResponse;
-    
-    // Try to sniff data type if it has not been defined
-    if(this.responseType === DS.TYPE_UNKNOWN) {
-        var ctype = (oRawResponse && oRawResponse.getResponseHeader) ? oRawResponse.getResponseHeader["Content-Type"] : null;
-        if(ctype) {
-             // xml
-            if(ctype.indexOf("text/xml") > -1) {
-                this.responseType = DS.TYPE_XML;
-            }
-            else if(ctype.indexOf("application/json") > -1) { // json
-                this.responseType = DS.TYPE_JSON;
-            }
-            else if(ctype.indexOf("text/plain") > -1) { // text
-                this.responseType = DS.TYPE_TEXT;
-            }
-        }
-        else {
-            if(YAHOO.lang.isArray(oRawResponse)) { // array
-                this.responseType = DS.TYPE_JSARRAY;
-            }
-             // xml
-            else if(oRawResponse && oRawResponse.nodeType && (oRawResponse.nodeType === 9 || oRawResponse.nodeType === 1 || oRawResponse.nodeType === 11)) {
-                this.responseType = DS.TYPE_XML;
-            }
-            else if(oRawResponse && oRawResponse.nodeName && (oRawResponse.nodeName.toLowerCase() == "table")) { // table
-                this.responseType = DS.TYPE_HTMLTABLE;
-            }    
-            else if(YAHOO.lang.isObject(oRawResponse)) { // json
-                this.responseType = DS.TYPE_JSON;
-            }
-            else if(YAHOO.lang.isString(oRawResponse)) { // text
-                this.responseType = DS.TYPE_TEXT;
-            }
-        }
-    }
-
-    switch(this.responseType) {
-        case DS.TYPE_JSARRAY:
-            if(xhr && oRawResponse && oRawResponse.responseText) {
-                oFullResponse = oRawResponse.responseText; 
-            }
-            try {
-                // Convert to JS array if it's a string
-                if(lang.isString(oFullResponse)) {
-                    var parseArgs = [oFullResponse].concat(this.parseJSONArgs);
-                    // Check for YUI JSON Util
-                    if(lang.JSON) {
-                        oFullResponse = lang.JSON.parse.apply(lang.JSON,parseArgs);
-                    }
-                    // Look for JSON parsers using an API similar to json2.js
-                    else if(window.JSON && JSON.parse) {
-                        oFullResponse = JSON.parse.apply(JSON,parseArgs);
-                    }
-                    // Look for JSON parsers using an API similar to json.js
-                    else if(oFullResponse.parseJSON) {
-                        oFullResponse = oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));
-                    }
-                    // No JSON lib found so parse the string
-                    else {
-                        // Trim leading spaces
-                        while (oFullResponse.length > 0 &&
-                                (oFullResponse.charAt(0) != "{") &&
-                                (oFullResponse.charAt(0) != "[")) {
-                            oFullResponse = oFullResponse.substring(1, oFullResponse.length);
-                        }
-
-                        if(oFullResponse.length > 0) {
-                            // Strip extraneous stuff at the end
-                            var arrayEnd =
-Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));
-                            oFullResponse = oFullResponse.substring(0,arrayEnd+1);
-
-                            // Turn the string into an object literal...
-                            // ...eval is necessary here
-                            oFullResponse = eval("(" + oFullResponse + ")");
-
-                        }
-                    }
-                }
-            }
-            catch(e1) {
-            }
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseArrayData(oRequest, oFullResponse);
-            break;
-        case DS.TYPE_JSON:
-            if(xhr && oRawResponse && oRawResponse.responseText) {
-                oFullResponse = oRawResponse.responseText;
-            }
-            try {
-                // Convert to JSON object if it's a string
-                if(lang.isString(oFullResponse)) {
-                    var parseArgs = [oFullResponse].concat(this.parseJSONArgs);
-                    // Check for YUI JSON Util
-                    if(lang.JSON) {
-                        oFullResponse = lang.JSON.parse.apply(lang.JSON,parseArgs);
-                    }
-                    // Look for JSON parsers using an API similar to json2.js
-                    else if(window.JSON && JSON.parse) {
-                        oFullResponse = JSON.parse.apply(JSON,parseArgs);
-                    }
-                    // Look for JSON parsers using an API similar to json.js
-                    else if(oFullResponse.parseJSON) {
-                        oFullResponse = oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));
-                    }
-                    // No JSON lib found so parse the string
-                    else {
-                        // Trim leading spaces
-                        while (oFullResponse.length > 0 &&
-                                (oFullResponse.charAt(0) != "{") &&
-                                (oFullResponse.charAt(0) != "[")) {
-                            oFullResponse = oFullResponse.substring(1, oFullResponse.length);
-                        }
-    
-                        if(oFullResponse.length > 0) {
-                            // Strip extraneous stuff at the end
-                            var objEnd = Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));
-                            oFullResponse = oFullResponse.substring(0,objEnd+1);
-    
-                            // Turn the string into an object literal...
-                            // ...eval is necessary here
-                            oFullResponse = eval("(" + oFullResponse + ")");
-    
-                        }
-                    }
-                }
-            }
-            catch(e) {
-            }
-
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseJSONData(oRequest, oFullResponse);
-            break;
-        case DS.TYPE_HTMLTABLE:
-            if(xhr && oRawResponse.responseText) {
-                var el = document.createElement('div');
-                el.innerHTML = oRawResponse.responseText;
-                oFullResponse = el.getElementsByTagName('table')[0];
-            }
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseHTMLTableData(oRequest, oFullResponse);
-            break;
-        case DS.TYPE_XML:
-            if(xhr && oRawResponse.responseXML) {
-                oFullResponse = oRawResponse.responseXML;
-            }
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseXMLData(oRequest, oFullResponse);
-            break;
-        case DS.TYPE_TEXT:
-            if(xhr && lang.isString(oRawResponse.responseText)) {
-                oFullResponse = oRawResponse.responseText;
-            }
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseTextData(oRequest, oFullResponse);
-            break;
-        default:
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseData(oRequest, oFullResponse);
-            break;
-    }
-
-
-    // Clean up for consistent signature
-    oParsedResponse = oParsedResponse || {};
-    if(!oParsedResponse.results) {
-        oParsedResponse.results = [];
-    }
-    if(!oParsedResponse.meta) {
-        oParsedResponse.meta = {};
-    }
-
-    // Success
-    if(!oParsedResponse.error) {
-        // Last chance to touch the raw response or the parsed response
-        oParsedResponse = this.doBeforeCallback(oRequest, oFullResponse, oParsedResponse, oCallback);
-        this.fireEvent("responseParseEvent", {request:oRequest,
-                response:oParsedResponse, callback:oCallback, caller:oCaller});
-        // Cache the response
-        this.addToCache(oRequest, oParsedResponse);
-    }
-    // Error
-    else {
-        // Be sure the error flag is on
-        oParsedResponse.error = true;
-        this.fireEvent("dataErrorEvent", {request:oRequest, response: oRawResponse, callback:oCallback, 
-                caller:oCaller, message:DS.ERROR_DATANULL});
-        YAHOO.log(DS.ERROR_DATANULL, "error", this.toString());
-    }
-
-    // Send the response back to the caller
-    oParsedResponse.tId = tId;
-    DS.issueCallback(oCallback,[oRequest,oParsedResponse],oParsedResponse.error,oCaller);
-},
-
-/**
- * Overridable method gives implementers access to the original full response
- * before the data gets parsed. Implementers should take care not to return an
- * unparsable or otherwise invalid response.
- *
- * @method doBeforeParseData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full response from the live database.
- * @param oCallback {Object} The callback object.  
- * @return {Object} Full response for parsing.
-  
- */
-doBeforeParseData : function(oRequest, oFullResponse, oCallback) {
-    return oFullResponse;
-},
-
-/**
- * Overridable method gives implementers access to the original full response and
- * the parsed response (parsed against the given schema) before the data
- * is added to the cache (if applicable) and then sent back to callback function.
- * This is your chance to access the raw response and/or populate the parsed
- * response with any custom data.
- *
- * @method doBeforeCallback
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full response from the live database.
- * @param oParsedResponse {Object} The parsed response to return to calling object.
- * @param oCallback {Object} The callback object. 
- * @return {Object} Parsed response object.
- */
-doBeforeCallback : function(oRequest, oFullResponse, oParsedResponse, oCallback) {
-    return oParsedResponse;
-},
-
-/**
- * Overridable method parses data of generic RESPONSE_TYPE into a response object.
- *
- * @method parseData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full Array from the live database.
- * @return {Object} Parsed response object with the following properties:<br>
- *     - results {Array} Array of parsed data results<br>
- *     - meta {Object} Object literal of meta values<br>
- *     - error {Boolean} (optional) True if there was an error<br>
- */
-parseData : function(oRequest, oFullResponse) {
-    if(lang.isValue(oFullResponse)) {
-        var oParsedResponse = {results:oFullResponse,meta:{}};
-        YAHOO.log("Parsed generic data is " +
-                lang.dump(oParsedResponse), "info", this.toString());
-        return oParsedResponse;
-
-    }
-    YAHOO.log("Generic data could not be parsed: " + lang.dump(oFullResponse), 
-            "error", this.toString());
-    return null;
-},
-
-/**
- * Overridable method parses Array data into a response object.
- *
- * @method parseArrayData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full Array from the live database.
- * @return {Object} Parsed response object with the following properties:<br>
- *     - results (Array) Array of parsed data results<br>
- *     - error (Boolean) True if there was an error
- */
-parseArrayData : function(oRequest, oFullResponse) {
-    if(lang.isArray(oFullResponse)) {
-        var results = [],
-            i, j,
-            rec, field, data;
-        
-        // Parse for fields
-        if(lang.isArray(this.responseSchema.fields)) {
-            var fields = this.responseSchema.fields;
-            for (i = fields.length - 1; i >= 0; --i) {
-                if (typeof fields[i] !== 'object') {
-                    fields[i] = { key : fields[i] };
-                }
-            }
-
-            var parsers = {}, p;
-            for (i = fields.length - 1; i >= 0; --i) {
-                p = (typeof fields[i].parser === 'function' ?
-                          fields[i].parser :
-                          DS.Parser[fields[i].parser+'']) || fields[i].converter;
-                if (p) {
-                    parsers[fields[i].key] = p;
-                }
-            }
-
-            var arrType = lang.isArray(oFullResponse[0]);
-            for(i=oFullResponse.length-1; i>-1; i--) {
-                var oResult = {};
-                rec = oFullResponse[i];
-                if (typeof rec === 'object') {
-                    for(j=fields.length-1; j>-1; j--) {
-                        field = fields[j];
-                        data = arrType ? rec[j] : rec[field.key];
-
-                        if (parsers[field.key]) {
-                            data = parsers[field.key].call(this,data);
-                        }
-
-                        // Safety measure
-                        if(data === undefined) {
-                            data = null;
-                        }
-
-                        oResult[field.key] = data;
-                    }
-                }
-                else if (lang.isString(rec)) {
-                    for(j=fields.length-1; j>-1; j--) {
-                        field = fields[j];
-                        data = rec;
-
-                        if (parsers[field.key]) {
-                            data = parsers[field.key].call(this,data);
-                        }
-
-                        // Safety measure
-                        if(data === undefined) {
-                            data = null;
-                        }
-
-                        oResult[field.key] = data;
-                    }                
-                }
-                results[i] = oResult;
-            }    
-        }
-        // Return entire data set
-        else {
-            results = oFullResponse;
-        }
-        var oParsedResponse = {results:results};
-        YAHOO.log("Parsed array data is " +
-                lang.dump(oParsedResponse), "info", this.toString());
-        return oParsedResponse;
-
-    }
-    YAHOO.log("Array data could not be parsed: " + lang.dump(oFullResponse), 
-            "error", this.toString());
-    return null;
-},
-
-/**
- * Overridable method parses plain text data into a response object.
- *
- * @method parseTextData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full text response from the live database.
- * @return {Object} Parsed response object with the following properties:<br>
- *     - results (Array) Array of parsed data results<br>
- *     - error (Boolean) True if there was an error
- */
-parseTextData : function(oRequest, oFullResponse) {
-    if(lang.isString(oFullResponse)) {
-        if(lang.isString(this.responseSchema.recordDelim) &&
-                lang.isString(this.responseSchema.fieldDelim)) {
-            var oParsedResponse = {results:[]};
-            var recDelim = this.responseSchema.recordDelim;
-            var fieldDelim = this.responseSchema.fieldDelim;
-            if(oFullResponse.length > 0) {
-                // Delete the last line delimiter at the end of the data if it exists
-                var newLength = oFullResponse.length-recDelim.length;
-                if(oFullResponse.substr(newLength) == recDelim) {
-                    oFullResponse = oFullResponse.substr(0, newLength);
-                }
-                if(oFullResponse.length > 0) {
-                    // Split along record delimiter to get an array of strings
-                    var recordsarray = oFullResponse.split(recDelim);
-                    // Cycle through each record
-                    for(var i = 0, len = recordsarray.length, recIdx = 0; i < len; ++i) {
-                        var bError = false,
-                            sRecord = recordsarray[i];
-                        if (lang.isString(sRecord) && (sRecord.length > 0)) {
-                            // Split each record along field delimiter to get data
-                            var fielddataarray = recordsarray[i].split(fieldDelim);
-                            var oResult = {};
-                            
-                            // Filter for fields data
-                            if(lang.isArray(this.responseSchema.fields)) {
-                                var fields = this.responseSchema.fields;
-                                for(var j=fields.length-1; j>-1; j--) {
-                                    try {
-                                        // Remove quotation marks from edges, if applicable
-                                        var data = fielddataarray[j];
-                                        if (lang.isString(data)) {
-                                            if(data.charAt(0) == "\"") {
-                                                data = data.substr(1);
-                                            }
-                                            if(data.charAt(data.length-1) == "\"") {
-                                                data = data.substr(0,data.length-1);
-                                            }
-                                            var field = fields[j];
-                                            var key = (lang.isValue(field.key)) ? field.key : field;
-                                            // Backward compatibility
-                                            if(!field.parser && field.converter) {
-                                                field.parser = field.converter;
-                                                YAHOO.log("The field property converter has been deprecated" +
-                                                        " in favor of parser", "warn", this.toString());
-                                            }
-                                            var parser = (typeof field.parser === 'function') ?
-                                                field.parser :
-                                                DS.Parser[field.parser+''];
-                                            if(parser) {
-                                                data = parser.call(this, data);
-                                            }
-                                            // Safety measure
-                                            if(data === undefined) {
-                                                data = null;
-                                            }
-                                            oResult[key] = data;
-                                        }
-                                        else {
-                                            bError = true;
-                                        }
-                                    }
-                                    catch(e) {
-                                        bError = true;
-                                    }
-                                }
-                            }            
-                            // No fields defined so pass along all data as an array
-                            else {
-                                oResult = fielddataarray;
-                            }
-                            if(!bError) {
-                                oParsedResponse.results[recIdx++] = oResult;
-                            }
-                        }
-                    }
-                }
-            }
-            YAHOO.log("Parsed text data is " +
-                    lang.dump(oParsedResponse), "info", this.toString());
-            return oParsedResponse;
-        }
-    }
-    YAHOO.log("Text data could not be parsed: " + lang.dump(oFullResponse), 
-            "error", this.toString());
-    return null;
-            
-},
-
-/**
- * Overridable method parses XML data for one result into an object literal.
- *
- * @method parseXMLResult
- * @param result {XML} XML for one result.
- * @return {Object} Object literal of data for one result.
- */
-parseXMLResult : function(result) {
-    var oResult = {},
-        schema = this.responseSchema;
-        
-    try {
-        // Loop through each data field in each result using the schema
-        for(var m = schema.fields.length-1; m >= 0 ; m--) {
-            var field = schema.fields[m];
-            var key = (lang.isValue(field.key)) ? field.key : field;
-            var data = null;
-
-            if(this.useXPath) {
-                data = YAHOO.util.DataSource._getLocationValue(field, result);
-            }
-            else {
-                // Values may be held in an attribute...
-                var xmlAttr = result.attributes.getNamedItem(key);
-                if(xmlAttr) {
-                    data = xmlAttr.value;
-                }
-                // ...or in a node
-                else {
-                    var xmlNode = result.getElementsByTagName(key);
-                    if(xmlNode && xmlNode.item(0)) {
-                        var item = xmlNode.item(0);
-                        // For IE, then DOM...
-                        data = (item) ? ((item.text) ? item.text : (item.textContent) ? item.textContent : null) : null;
-                        // ...then fallback, but check for multiple child nodes
-                        if(!data) {
-                            var datapieces = [];
-                            for(var j=0, len=item.childNodes.length; j<len; j++) {
-                                if(item.childNodes[j].nodeValue) {
-                                    datapieces[datapieces.length] = item.childNodes[j].nodeValue;
-                                }
-                            }
-                            if(datapieces.length > 0) {
-                                data = datapieces.join("");
-                            }
-                        }
-                    }
-                }
-            }
-            
-            
-            // Safety net
-            if(data === null) {
-                   data = "";
-            }
-            // Backward compatibility
-            if(!field.parser && field.converter) {
-                field.parser = field.converter;
-                YAHOO.log("The field property converter has been deprecated" +
-                        " in favor of parser", "warn", this.toString());
-            }
-            var parser = (typeof field.parser === 'function') ?
-                field.parser :
-                DS.Parser[field.parser+''];
-            if(parser) {
-                data = parser.call(this, data);
-            }
-            // Safety measure
-            if(data === undefined) {
-                data = null;
-            }
-            oResult[key] = data;
-        }
-    }
-    catch(e) {
-        YAHOO.log("Error while parsing XML result: " + e.message);
-    }
-
-    return oResult;
-},
-
-
-
-/**
- * Overridable method parses XML data into a response object.
- *
- * @method parseXMLData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full XML response from the live database.
- * @return {Object} Parsed response object with the following properties<br>
- *     - results (Array) Array of parsed data results<br>
- *     - error (Boolean) True if there was an error
- */
-parseXMLData : function(oRequest, oFullResponse) {
-    var bError = false,
-        schema = this.responseSchema,
-        oParsedResponse = {meta:{}},
-        xmlList = null,
-        metaNode      = schema.metaNode,
-        metaLocators  = schema.metaFields || {},
-        i,k,loc,v;
-
-    // In case oFullResponse is something funky
-    try {
-        // Pull any meta identified
-        if(this.useXPath) {
-            for (k in metaLocators) {
-                oParsedResponse.meta[k] = YAHOO.util.DataSource._getLocationValue(metaLocators[k], oFullResponse);
-            }
-        }
-        else {
-            metaNode = metaNode ? oFullResponse.getElementsByTagName(metaNode)[0] :
-                       oFullResponse;
-
-            if (metaNode) {
-                for (k in metaLocators) {
-                    if (lang.hasOwnProperty(metaLocators, k)) {
-                        loc = metaLocators[k];
-                        // Look for a node
-                        v = metaNode.getElementsByTagName(loc)[0];
-
-                        if (v) {
-                            v = v.firstChild.nodeValue;
-                        } else {
-                            // Look for an attribute
-                            v = metaNode.attributes.getNamedItem(loc);
-                            if (v) {
-                                v = v.value;
-                            }
-                        }
-
-                        if (lang.isValue(v)) {
-                            oParsedResponse.meta[k] = v;
-                        }
-                    }
-                }
-            }
-        }
-        
-        // For result data
-        xmlList = (schema.resultNode) ?
-            oFullResponse.getElementsByTagName(schema.resultNode) :
-            null;
-    }
-    catch(e) {
-        YAHOO.log("Error while parsing XML data: " + e.message);
-    }
-    if(!xmlList || !lang.isArray(schema.fields)) {
-        bError = true;
-    }
-    // Loop through each result
-    else {
-        oParsedResponse.results = [];
-        for(i = xmlList.length-1; i >= 0 ; --i) {
-            var oResult = this.parseXMLResult(xmlList.item(i));
-            // Capture each array of values into an array of results
-            oParsedResponse.results[i] = oResult;
-        }
-    }
-    if(bError) {
-        YAHOO.log("XML data could not be parsed: " +
-                lang.dump(oFullResponse), "error", this.toString());
-        oParsedResponse.error = true;
-    }
-    else {
-        YAHOO.log("Parsed XML data is " +
-                lang.dump(oParsedResponse), "info", this.toString());
-    }
-    return oParsedResponse;
-},
-
-/**
- * Overridable method parses JSON data into a response object.
- *
- * @method parseJSONData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full JSON from the live database.
- * @return {Object} Parsed response object with the following properties<br>
- *     - results (Array) Array of parsed data results<br>
- *     - error (Boolean) True if there was an error
- */
-parseJSONData : function(oRequest, oFullResponse) {
-    var oParsedResponse = {results:[],meta:{}};
-    
-    if(lang.isObject(oFullResponse) && this.responseSchema.resultsList) {
-        var schema = this.responseSchema,
-            fields          = schema.fields,
-            resultsList     = oFullResponse,
-            results         = [],
-            metaFields      = schema.metaFields || {},
-            fieldParsers    = [],
-            fieldPaths      = [],
-            simpleFields    = [],
-            bError          = false,
-            i,len,j,v,key,parser,path;
-
-        // Function to convert the schema's fields into walk paths
-        var buildPath = function (needle) {
-            var path = null, keys = [], i = 0;
-            if (needle) {
-                // Strip the ["string keys"] and [1] array indexes
-                needle = needle.
-                    replace(/\[(['"])(.*?)\1\]/g,
-                    function (x,$1,$2) {keys[i]=$2;return '.@'+(i++);}).
-                    replace(/\[(\d+)\]/g,
-                    function (x,$1) {keys[i]=parseInt($1,10)|0;return '.@'+(i++);}).
-                    replace(/^\./,''); // remove leading dot
-
-                // If the cleaned needle contains invalid characters, the
-                // path is invalid
-                if (!/[^\w\.\$@]/.test(needle)) {
-                    path = needle.split('.');
-                    for (i=path.length-1; i >= 0; --i) {
-                        if (path[i].charAt(0) === '@') {
-                            path[i] = keys[parseInt(path[i].substr(1),10)];
-                        }
-                    }
-                }
-                else {
-                    YAHOO.log("Invalid locator: " + needle, "error", this.toString());
-                }
-            }
-            return path;
-        };
-
-
-        // Function to walk a path and return the pot of gold
-        var walkPath = function (path, origin) {
-            var v=origin,i=0,len=path.length;
-            for (;i<len && v;++i) {
-                v = v[path[i]];
-            }
-            return v;
-        };
-
-        // Parse the response
-        // Step 1. Pull the resultsList from oFullResponse (default assumes
-        // oFullResponse IS the resultsList)
-        path = buildPath(schema.resultsList);
-        if (path) {
-            resultsList = walkPath(path, oFullResponse);
-            if (resultsList === undefined) {
-                bError = true;
-            }
-        } else {
-            bError = true;
-        }
-        
-        if (!resultsList) {
-            resultsList = [];
-        }
-
-        if (!lang.isArray(resultsList)) {
-            resultsList = [resultsList];
-        }
-
-        if (!bError) {
-            // Step 2. Parse out field data if identified
-            if(schema.fields) {
-                var field;
-                // Build the field parser map and location paths
-                for (i=0, len=fields.length; i<len; i++) {
-                    field = fields[i];
-                    key    = field.key || field;
-                    parser = ((typeof field.parser === 'function') ?
-                        field.parser :
-                        DS.Parser[field.parser+'']) || field.converter;
-                    path   = buildPath(key);
-    
-                    if (parser) {
-                        fieldParsers[fieldParsers.length] = {key:key,parser:parser};
-                    }
-    
-                    if (path) {
-                        if (path.length > 1) {
-                            fieldPaths[fieldPaths.length] = {key:key,path:path};
-                        } else {
-                            simpleFields[simpleFields.length] = {key:key,path:path[0]};
-                        }
-                    } else {
-                        YAHOO.log("Invalid key syntax: " + key,"warn",this.toString());
-                    }
-                }
-
-                // Process the results, flattening the records and/or applying parsers if needed
-                for (i = resultsList.length - 1; i >= 0; --i) {
-                    var r = resultsList[i], rec = {};
-                    if(r) {
-                        for (j = simpleFields.length - 1; j >= 0; --j) {
-                            // Bug 1777850: data might be held in an array
-                            rec[simpleFields[j].key] =
-                                    (r[simpleFields[j].path] !== undefined) ?
-                                    r[simpleFields[j].path] : r[j];
-                        }
-
-                        for (j = fieldPaths.length - 1; j >= 0; --j) {
-                            rec[fieldPaths[j].key] = walkPath(fieldPaths[j].path,r);
-                        }
-
-                        for (j = fieldParsers.length - 1; j >= 0; --j) {
-                            var p = fieldParsers[j].key;
-                            rec[p] = fieldParsers[j].parser(rec[p]);
-                            if (rec[p] === undefined) {
-                                rec[p] = null;
-                            }
-                        }
-                    }
-                    results[i] = rec;
-                }
-            }
-            else {
-                results = resultsList;
-            }
-
-            for (key in metaFields) {
-                if (lang.hasOwnProperty(metaFields,key)) {
-                    path = buildPath(metaFields[key]);
-                    if (path) {
-                        v = walkPath(path, oFullResponse);
-                        oParsedResponse.meta[key] = v;
-                    }
-                }
-            }
-
-        } else {
-            YAHOO.log("JSON data could not be parsed due to invalid responseSchema.resultsList or invalid response: " +
-                    lang.dump(oFullResponse), "error", this.toString());
-
-            oParsedResponse.error = true;
-        }
-
-        oParsedResponse.results = results;
-    }
-    else {
-        YAHOO.log("JSON data could not be parsed: " +
-                lang.dump(oFullResponse), "error", this.toString());
-        oParsedResponse.error = true;
-    }
-
-    return oParsedResponse;
-},
-
-/**
- * Overridable method parses an HTML TABLE element reference into a response object.
- * Data is parsed out of TR elements from all TBODY elements. 
- *
- * @method parseHTMLTableData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full HTML element reference from the live database.
- * @return {Object} Parsed response object with the following properties<br>
- *     - results (Array) Array of parsed data results<br>
- *     - error (Boolean) True if there was an error
- */
-parseHTMLTableData : function(oRequest, oFullResponse) {
-    var bError = false;
-    var elTable = oFullResponse;
-    var fields = this.responseSchema.fields;
-    var oParsedResponse = {results:[]};
-
-    if(lang.isArray(fields)) {
-        // Iterate through each TBODY
-        for(var i=0; i<elTable.tBodies.length; i++) {
-            var elTbody = elTable.tBodies[i];
-    
-            // Iterate through each TR
-            for(var j=elTbody.rows.length-1; j>-1; j--) {
-                var elRow = elTbody.rows[j];
-                var oResult = {};
-                
-                for(var k=fields.length-1; k>-1; k--) {
-                    var field = fields[k];
-                    var key = (lang.isValue(field.key)) ? field.key : field;
-                    var data = elRow.cells[k].innerHTML;
-    
-                    // Backward compatibility
-                    if(!field.parser && field.converter) {
-                        field.parser = field.converter;
-                        YAHOO.log("The field property converter has been deprecated" +
-                                " in favor of parser", "warn", this.toString());
-                    }
-                    var parser = (typeof field.parser === 'function') ?
-                        field.parser :
-                        DS.Parser[field.parser+''];
-                    if(parser) {
-                        data = parser.call(this, data);
-                    }
-                    // Safety measure
-                    if(data === undefined) {
-                        data = null;
-                    }
-                    oResult[key] = data;
-                }
-                oParsedResponse.results[j] = oResult;
-            }
-        }
-    }
-    else {
-        bError = true;
-        YAHOO.log("Invalid responseSchema.fields", "error", this.toString());
-    }
-
-    if(bError) {
-        YAHOO.log("HTML TABLE data could not be parsed: " +
-                lang.dump(oFullResponse), "error", this.toString());
-        oParsedResponse.error = true;
-    }
-    else {
-        YAHOO.log("Parsed HTML TABLE data is " +
-                lang.dump(oParsedResponse), "info", this.toString());
-    }
-    return oParsedResponse;
-}
-
-};
-
-// DataSourceBase uses EventProvider
-lang.augmentProto(DS, util.EventProvider);
-
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * LocalDataSource class for in-memory data structs including JavaScript arrays,
- * JavaScript object literals (JSON), XML documents, and HTML tables.
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.LocalDataSource
- * @extends YAHOO.util.DataSourceBase 
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.LocalDataSource = function(oLiveData, oConfigs) {
-    this.dataType = DS.TYPE_LOCAL;
-    
-    if(oLiveData) {
-        if(YAHOO.lang.isArray(oLiveData)) { // array
-            this.responseType = DS.TYPE_JSARRAY;
-        }
-         // xml
-        else if(oLiveData.nodeType && oLiveData.nodeType == 9) {
-            this.responseType = DS.TYPE_XML;
-        }
-        else if(oLiveData.nodeName && (oLiveData.nodeName.toLowerCase() == "table")) { // table
-            this.responseType = DS.TYPE_HTMLTABLE;
-            oLiveData = oLiveData.cloneNode(true);
-        }    
-        else if(YAHOO.lang.isString(oLiveData)) { // text
-            this.responseType = DS.TYPE_TEXT;
-        }
-        else if(YAHOO.lang.isObject(oLiveData)) { // json
-            this.responseType = DS.TYPE_JSON;
-        }
-    }
-    else {
-        oLiveData = [];
-        this.responseType = DS.TYPE_JSARRAY;
-    }
-    
-    util.LocalDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
-};
-
-// LocalDataSource extends DataSourceBase
-lang.extend(util.LocalDataSource, DS);
-
-// Copy static members to LocalDataSource class
-lang.augmentObject(util.LocalDataSource, DS);
-
-
-
-
-
-
-
-
-
-
-
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * FunctionDataSource class for JavaScript functions.
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.FunctionDataSource
- * @extends YAHOO.util.DataSourceBase  
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.FunctionDataSource = function(oLiveData, oConfigs) {
-    this.dataType = DS.TYPE_JSFUNCTION;
-    oLiveData = oLiveData || function() {};
-    
-    util.FunctionDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
-};
-
-// FunctionDataSource extends DataSourceBase
-lang.extend(util.FunctionDataSource, DS, {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// FunctionDataSource public properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Context in which to execute the function. By default, is the DataSource
- * instance itself. If set, the function will receive the DataSource instance
- * as an additional argument. 
- *
- * @property scope
- * @type Object
- * @default null
- */
-scope : null,
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// FunctionDataSource public methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Overriding method passes query to a function. The returned response is then
- * forwarded to the handleResponse function.
- *
- * @method makeConnection
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} Callback object literal.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Transaction ID.
- */
-makeConnection : function(oRequest, oCallback, oCaller) {
-    var tId = DS._nTransactionId++;
-    this.fireEvent("requestEvent", {tId:tId,request:oRequest,callback:oCallback,caller:oCaller});
-
-    // Pass the request in as a parameter and
-    // forward the return value to the handler
-    
-    
-    var oRawResponse = (this.scope) ? this.liveData.call(this.scope, oRequest, this) : this.liveData(oRequest);
-    
-    // Try to sniff data type if it has not been defined
-    if(this.responseType === DS.TYPE_UNKNOWN) {
-        if(YAHOO.lang.isArray(oRawResponse)) { // array
-            this.responseType = DS.TYPE_JSARRAY;
-        }
-         // xml
-        else if(oRawResponse && oRawResponse.nodeType && oRawResponse.nodeType == 9) {
-            this.responseType = DS.TYPE_XML;
-        }
-        else if(oRawResponse && oRawResponse.nodeName && (oRawResponse.nodeName.toLowerCase() == "table")) { // table
-            this.responseType = DS.TYPE_HTMLTABLE;
-        }    
-        else if(YAHOO.lang.isObject(oRawResponse)) { // json
-            this.responseType = DS.TYPE_JSON;
-        }
-        else if(YAHOO.lang.isString(oRawResponse)) { // text
-            this.responseType = DS.TYPE_TEXT;
-        }
-    }
-
-    this.handleResponse(oRequest, oRawResponse, oCallback, oCaller, tId);
-    return tId;
-}
-
-});
-
-// Copy static members to FunctionDataSource class
-lang.augmentObject(util.FunctionDataSource, DS);
-
-
-
-
-
-
-
-
-
-
-
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * ScriptNodeDataSource class for accessing remote data via the YUI Get Utility. 
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.ScriptNodeDataSource
- * @extends YAHOO.util.DataSourceBase  
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.ScriptNodeDataSource = function(oLiveData, oConfigs) {
-    this.dataType = DS.TYPE_SCRIPTNODE;
-    oLiveData = oLiveData || "";
-    
-    util.ScriptNodeDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
-};
-
-// ScriptNodeDataSource extends DataSourceBase
-lang.extend(util.ScriptNodeDataSource, DS, {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScriptNodeDataSource public properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Alias to YUI Get Utility, to allow implementers to use a custom class.
- *
- * @property getUtility
- * @type Object
- * @default YAHOO.util.Get
- */
-getUtility : util.Get,
-
-/**
- * Defines request/response management in the following manner:
- * <dl>
- *     <!--<dt>queueRequests</dt>
- *     <dd>If a request is already in progress, wait until response is returned before sending the next request.</dd>
- *     <dt>cancelStaleRequests</dt>
- *     <dd>If a request is already in progress, cancel it before sending the next request.</dd>-->
- *     <dt>ignoreStaleResponses</dt>
- *     <dd>Send all requests, but handle only the response for the most recently sent request.</dd>
- *     <dt>allowAll</dt>
- *     <dd>Send all requests and handle all responses.</dd>
- * </dl>
- *
- * @property asyncMode
- * @type String
- * @default "allowAll"
- */
-asyncMode : "allowAll",
-
-/**
- * Callback string parameter name sent to the remote script. By default,
- * requests are sent to
- * &#60;URI&#62;?&#60;scriptCallbackParam&#62;=callbackFunction
- *
- * @property scriptCallbackParam
- * @type String
- * @default "callback"
- */
-scriptCallbackParam : "callback",
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScriptNodeDataSource public methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Creates a request callback that gets appended to the script URI. Implementers
- * can customize this string to match their server's query syntax.
- *
- * @method generateRequestCallback
- * @return {String} String fragment that gets appended to script URI that 
- * specifies the callback function 
- */
-generateRequestCallback : function(id) {
-    return "&" + this.scriptCallbackParam + "=YAHOO.util.ScriptNodeDataSource.callbacks["+id+"]" ;
-},
-
-/**
- * Overridable method gives implementers access to modify the URI before the dynamic
- * script node gets inserted. Implementers should take care not to return an
- * invalid URI.
- *
- * @method doBeforeGetScriptNode
- * @param {String} URI to the script 
- * @return {String} URI to the script
- */
-doBeforeGetScriptNode : function(sUri) {
-    return sUri;
-},
-
-/**
- * Overriding method passes query to Get Utility. The returned
- * response is then forwarded to the handleResponse function.
- *
- * @method makeConnection
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} Callback object literal.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Transaction ID.
- */
-makeConnection : function(oRequest, oCallback, oCaller) {
-    var tId = DS._nTransactionId++;
-    this.fireEvent("requestEvent", {tId:tId,request:oRequest,callback:oCallback,caller:oCaller});
-    
-    // If there are no global pending requests, it is safe to purge global callback stack and global counter
-    if(util.ScriptNodeDataSource._nPending === 0) {
-        util.ScriptNodeDataSource.callbacks = [];
-        util.ScriptNodeDataSource._nId = 0;
-    }
-    
-    // ID for this request
-    var id = util.ScriptNodeDataSource._nId;
-    util.ScriptNodeDataSource._nId++;
-    
-    // Dynamically add handler function with a closure to the callback stack
-    var oSelf = this;
-    util.ScriptNodeDataSource.callbacks[id] = function(oRawResponse) {
-        if((oSelf.asyncMode !== "ignoreStaleResponses")||
-                (id === util.ScriptNodeDataSource.callbacks.length-1)) { // Must ignore stale responses
-                
-            // Try to sniff data type if it has not been defined
-            if(oSelf.responseType === DS.TYPE_UNKNOWN) {
-                if(YAHOO.lang.isArray(oRawResponse)) { // array
-                    oSelf.responseType = DS.TYPE_JSARRAY;
-                }
-                 // xml
-                else if(oRawResponse.nodeType && oRawResponse.nodeType == 9) {
-                    oSelf.responseType = DS.TYPE_XML;
-                }
-                else if(oRawResponse.nodeName && (oRawResponse.nodeName.toLowerCase() == "table")) { // table
-                    oSelf.responseType = DS.TYPE_HTMLTABLE;
-                }    
-                else if(YAHOO.lang.isObject(oRawResponse)) { // json
-                    oSelf.responseType = DS.TYPE_JSON;
-                }
-                else if(YAHOO.lang.isString(oRawResponse)) { // text
-                    oSelf.responseType = DS.TYPE_TEXT;
-                }
-            }
-
-            oSelf.handleResponse(oRequest, oRawResponse, oCallback, oCaller, tId);
-        }
-        else {
-            YAHOO.log("DataSource ignored stale response for tId " + tId + "(" + oRequest + ")", "info", oSelf.toString());
-        }
-    
-        delete util.ScriptNodeDataSource.callbacks[id];
-    };
-    
-    // We are now creating a request
-    util.ScriptNodeDataSource._nPending++;
-    var sUri = this.liveData + oRequest + this.generateRequestCallback(id);
-    sUri = this.doBeforeGetScriptNode(sUri);
-    YAHOO.log("DataSource is querying URL " + sUri, "info", this.toString());
-    this.getUtility.script(sUri,
-            {autopurge: true,
-            onsuccess: util.ScriptNodeDataSource._bumpPendingDown,
-            onfail: util.ScriptNodeDataSource._bumpPendingDown});
-
-    return tId;
-}
-
-});
-
-// Copy static members to ScriptNodeDataSource class
-lang.augmentObject(util.ScriptNodeDataSource, DS);
-
-// Copy static members to ScriptNodeDataSource class
-lang.augmentObject(util.ScriptNodeDataSource,  {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScriptNodeDataSource private static properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Unique ID to track requests.
- *
- * @property _nId
- * @type Number
- * @private
- * @static
- */
-_nId : 0,
-
-/**
- * Counter for pending requests. When this is 0, it is safe to purge callbacks
- * array.
- *
- * @property _nPending
- * @type Number
- * @private
- * @static
- */
-_nPending : 0,
-
-/**
- * Global array of callback functions, one for each request sent.
- *
- * @property callbacks
- * @type Function[]
- * @static
- */
-callbacks : []
-
-});
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * XHRDataSource class for accessing remote data via the YUI Connection Manager
- * Utility
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.XHRDataSource
- * @extends YAHOO.util.DataSourceBase  
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.XHRDataSource = function(oLiveData, oConfigs) {
-    this.dataType = DS.TYPE_XHR;
-    this.connMgr = this.connMgr || util.Connect;
-    oLiveData = oLiveData || "";
-    
-    util.XHRDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
-};
-
-// XHRDataSource extends DataSourceBase
-lang.extend(util.XHRDataSource, DS, {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// XHRDataSource public properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
- /**
- * Alias to YUI Connection Manager, to allow implementers to use a custom class.
- *
- * @property connMgr
- * @type Object
- * @default YAHOO.util.Connect
- */
-connMgr: null,
-
- /**
- * Defines request/response management in the following manner:
- * <dl>
- *     <dt>queueRequests</dt>
- *     <dd>If a request is already in progress, wait until response is returned
- *     before sending the next request.</dd>
- *
- *     <dt>cancelStaleRequests</dt>
- *     <dd>If a request is already in progress, cancel it before sending the next
- *     request.</dd>
- *
- *     <dt>ignoreStaleResponses</dt>
- *     <dd>Send all requests, but handle only the response for the most recently
- *     sent request.</dd>
- *
- *     <dt>allowAll</dt>
- *     <dd>Send all requests and handle all responses.</dd>
- *
- * </dl>
- *
- * @property connXhrMode
- * @type String
- * @default "allowAll"
- */
-connXhrMode: "allowAll",
-
- /**
- * True if data is to be sent via POST. By default, data will be sent via GET.
- *
- * @property connMethodPost
- * @type Boolean
- * @default false
- */
-connMethodPost: false,
-
- /**
- * The connection timeout defines how many  milliseconds the XHR connection will
- * wait for a server response. Any non-zero value will enable the Connection Manager's
- * Auto-Abort feature.
- *
- * @property connTimeout
- * @type Number
- * @default 0
- */
-connTimeout: 0,
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// XHRDataSource public methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Overriding method passes query to Connection Manager. The returned
- * response is then forwarded to the handleResponse function.
- *
- * @method makeConnection
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} Callback object literal.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Transaction ID.
- */
-makeConnection : function(oRequest, oCallback, oCaller) {
-
-    var oRawResponse = null;
-    var tId = DS._nTransactionId++;
-    this.fireEvent("requestEvent", {tId:tId,request:oRequest,callback:oCallback,caller:oCaller});
-
-    // Set up the callback object and
-    // pass the request in as a URL query and
-    // forward the response to the handler
-    var oSelf = this;
-    var oConnMgr = this.connMgr;
-    var oQueue = this._oQueue;
-
-    /**
-     * Define Connection Manager success handler
-     *
-     * @method _xhrSuccess
-     * @param oResponse {Object} HTTPXMLRequest object
-     * @private
-     */
-    var _xhrSuccess = function(oResponse) {
-        // If response ID does not match last made request ID,
-        // silently fail and wait for the next response
-        if(oResponse && (this.connXhrMode == "ignoreStaleResponses") &&
-                (oResponse.tId != oQueue.conn.tId)) {
-            YAHOO.log("Ignored stale response", "warn", this.toString());
-            return null;
-        }
-        // Error if no response
-        else if(!oResponse) {
-            this.fireEvent("dataErrorEvent", {request:oRequest, response:null,
-                    callback:oCallback, caller:oCaller,
-                    message:DS.ERROR_DATANULL});
-            YAHOO.log(DS.ERROR_DATANULL, "error", this.toString());
-
-            // Send error response back to the caller with the error flag on
-            DS.issueCallback(oCallback,[oRequest, {error:true}], true, oCaller);
-
-            return null;
-        }
-        // Forward to handler
-        else {
-            // Try to sniff data type if it has not been defined
-            if(this.responseType === DS.TYPE_UNKNOWN) {
-                var ctype = (oResponse.getResponseHeader) ? oResponse.getResponseHeader["Content-Type"] : null;
-                if(ctype) {
-                    // xml
-                    if(ctype.indexOf("text/xml") > -1) {
-                        this.responseType = DS.TYPE_XML;
-                    }
-                    else if(ctype.indexOf("application/json") > -1) { // json
-                        this.responseType = DS.TYPE_JSON;
-                    }
-                    else if(ctype.indexOf("text/plain") > -1) { // text
-                        this.responseType = DS.TYPE_TEXT;
-                    }
-                }
-            }
-            this.handleResponse(oRequest, oResponse, oCallback, oCaller, tId);
-        }
-    };
-
-    /**
-     * Define Connection Manager failure handler
-     *
-     * @method _xhrFailure
-     * @param oResponse {Object} HTTPXMLRequest object
-     * @private
-     */
-    var _xhrFailure = function(oResponse) {
-        this.fireEvent("dataErrorEvent", {request:oRequest, response: oResponse,
-                callback:oCallback, caller:oCaller,
-                message:DS.ERROR_DATAINVALID});
-        YAHOO.log(DS.ERROR_DATAINVALID + ": " +
-                oResponse.statusText, "error", this.toString());
-
-        // Backward compatibility
-        if(lang.isString(this.liveData) && lang.isString(oRequest) &&
-            (this.liveData.lastIndexOf("?") !== this.liveData.length-1) &&
-            (oRequest.indexOf("?") !== 0)){
-                YAHOO.log("DataSources using XHR no longer automatically supply " + 
-                "a \"?\" between the host and query parameters" +
-                " -- please check that the request URL is correct", "warn", this.toString());
-        }
-
-        // Send failure response back to the caller with the error flag on
-        oResponse = oResponse || {};
-        oResponse.error = true;
-        DS.issueCallback(oCallback,[oRequest,oResponse],true, oCaller);
-
-        return null;
-    };
-
-    /**
-     * Define Connection Manager callback object
-     *
-     * @property _xhrCallback
-     * @param oResponse {Object} HTTPXMLRequest object
-     * @private
-     */
-     var _xhrCallback = {
-        success:_xhrSuccess,
-        failure:_xhrFailure,
-        scope: this
-    };
-
-    // Apply Connection Manager timeout
-    if(lang.isNumber(this.connTimeout)) {
-        _xhrCallback.timeout = this.connTimeout;
-    }
-
-    // Cancel stale requests
-    if(this.connXhrMode == "cancelStaleRequests") {
-            // Look in queue for stale requests
-            if(oQueue.conn) {
-                if(oConnMgr.abort) {
-                    oConnMgr.abort(oQueue.conn);
-                    oQueue.conn = null;
-                    YAHOO.log("Canceled stale request", "warn", this.toString());
-                }
-                else {
-                    YAHOO.log("Could not find Connection Manager abort() function", "error", this.toString());
-                }
-            }
-    }
-
-    // Get ready to send the request URL
-    if(oConnMgr && oConnMgr.asyncRequest) {
-        var sLiveData = this.liveData;
-        var isPost = this.connMethodPost;
-        var sMethod = (isPost) ? "POST" : "GET";
-        // Validate request
-        var sUri = (isPost || !lang.isValue(oRequest)) ? sLiveData : sLiveData+oRequest;
-        var sRequest = (isPost) ? oRequest : null;
-
-        // Send the request right away
-        if(this.connXhrMode != "queueRequests") {
-            oQueue.conn = oConnMgr.asyncRequest(sMethod, sUri, _xhrCallback, sRequest);
-        }
-        // Queue up then send the request
-        else {
-            // Found a request already in progress
-            if(oQueue.conn) {
-                var allRequests = oQueue.requests;
-                // Add request to queue
-                allRequests.push({request:oRequest, callback:_xhrCallback});
-
-                // Interval needs to be started
-                if(!oQueue.interval) {
-                    oQueue.interval = setInterval(function() {
-                        // Connection is in progress
-                        if(oConnMgr.isCallInProgress(oQueue.conn)) {
-                            return;
-                        }
-                        else {
-                            // Send next request
-                            if(allRequests.length > 0) {
-                                // Validate request
-                                sUri = (isPost || !lang.isValue(allRequests[0].request)) ? sLiveData : sLiveData+allRequests[0].request;
-                                sRequest = (isPost) ? allRequests[0].request : null;
-                                oQueue.conn = oConnMgr.asyncRequest(sMethod, sUri, allRequests[0].callback, sRequest);
-
-                                // Remove request from queue
-                                allRequests.shift();
-                            }
-                            // No more requests
-                            else {
-                                clearInterval(oQueue.interval);
-                                oQueue.interval = null;
-                            }
-                        }
-                    }, 50);
-                }
-            }
-            // Nothing is in progress
-            else {
-                oQueue.conn = oConnMgr.asyncRequest(sMethod, sUri, _xhrCallback, sRequest);
-            }
-        }
-    }
-    else {
-        YAHOO.log("Could not find Connection Manager asyncRequest() function", "error", this.toString());
-        // Send null response back to the caller with the error flag on
-        DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);
-    }
-
-    return tId;
-}
-
-});
-
-// Copy static members to XHRDataSource class
-lang.augmentObject(util.XHRDataSource, DS);
-
-
-
-
-
-
-
-
-
-
-
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * Factory class for creating a BaseDataSource subclass instance. The sublcass is
- * determined by oLiveData's type, unless the dataType config is explicitly passed in.  
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.DataSource
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.DataSource = function(oLiveData, oConfigs) {
-    oConfigs = oConfigs || {};
-    
-    // Point to one of the subclasses, first by dataType if given, then by sniffing oLiveData type.
-    var dataType = oConfigs.dataType;
-    if(dataType) {
-        if(dataType == DS.TYPE_LOCAL) {
-            lang.augmentObject(util.DataSource, util.LocalDataSource);
-            return new util.LocalDataSource(oLiveData, oConfigs);            
-        }
-        else if(dataType == DS.TYPE_XHR) {
-            lang.augmentObject(util.DataSource, util.XHRDataSource);
-            return new util.XHRDataSource(oLiveData, oConfigs);            
-        }
-        else if(dataType == DS.TYPE_SCRIPTNODE) {
-            lang.augmentObject(util.DataSource, util.ScriptNodeDataSource);
-            return new util.ScriptNodeDataSource(oLiveData, oConfigs);            
-        }
-        else if(dataType == DS.TYPE_JSFUNCTION) {
-            lang.augmentObject(util.DataSource, util.FunctionDataSource);
-            return new util.FunctionDataSource(oLiveData, oConfigs);            
-        }
-    }
-    
-    if(YAHOO.lang.isString(oLiveData)) { // strings default to xhr
-        lang.augmentObject(util.DataSource, util.XHRDataSource);
-        return new util.XHRDataSource(oLiveData, oConfigs);
-    }
-    else if(YAHOO.lang.isFunction(oLiveData)) {
-        lang.augmentObject(util.DataSource, util.FunctionDataSource);
-        return new util.FunctionDataSource(oLiveData, oConfigs);
-    }
-    else { // ultimate default is local
-        lang.augmentObject(util.DataSource, util.LocalDataSource);
-        return new util.LocalDataSource(oLiveData, oConfigs);
-    }
-};
-
-// Copy static members to DataSource class
-lang.augmentObject(util.DataSource, DS);
-
-})();
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * The static Number class provides helper functions to deal with data of type
- * Number.
- *
- * @namespace YAHOO.util
- * @requires yahoo
- * @class Number
- * @static
- */
- YAHOO.util.Number = {
-     /**
-     * Takes a native JavaScript Number and formats to string for display to user.
-     *
-     * @method format
-     * @param nData {Number} Number.
-     * @param oConfig {Object} (Optional) Optional configuration values:
-     *  <dl>
-     *   <dt>prefix {String}</dd>
-     *   <dd>String prepended before each number, like a currency designator "$"</dd>
-     *   <dt>decimalPlaces {Number}</dd>
-     *   <dd>Number of decimal places to round.</dd>
-     *   <dt>decimalSeparator {String}</dd>
-     *   <dd>Decimal separator</dd>
-     *   <dt>thousandsSeparator {String}</dd>
-     *   <dd>Thousands separator</dd>
-     *   <dt>suffix {String}</dd>
-     *   <dd>String appended after each number, like " items" (note the space)</dd>
-     *   <dt>negativeFormat</dt>
-     *   <dd>String used as a guide for how to indicate negative numbers.  The first '#' character in the string will be replaced by the number.  Default '-#'.</dd>
-     *  </dl>
-     * @return {String} Formatted number for display. Note, the following values
-     * return as "": null, undefined, NaN, "".
-     */
-    format : function(n, cfg) {
-        if (!isFinite(+n)) {
-            return '';
-        }
-
-        n   = !isFinite(+n) ? 0 : +n;
-        cfg = YAHOO.lang.merge(YAHOO.util.Number.format.defaults, (cfg || {}));
-
-        var neg    = n < 0,        absN   = Math.abs(n),
-            places = cfg.decimalPlaces,
-            sep    = cfg.thousandsSeparator,
-            s, bits, i;
-
-        if (places < 0) {
-            // Get rid of the decimal info
-            s = absN - (absN % 1) + '';
-            i = s.length + places;
-
-            // avoid 123 vs decimalPlaces -4 (should return "0")
-            if (i > 0) {
-                    // leverage toFixed by making 123 => 0.123 for the rounding
-                    // operation, then add the appropriate number of zeros back on
-                s = Number('.' + s).toFixed(i).slice(2) +
-                    new Array(s.length - i + 1).join('0');
-            } else {
-                s = "0";
-            }
-        } else {        // There is a bug in IE's toFixed implementation:
-            // for n in {(-0.94, -0.5], [0.5, 0.94)} n.toFixed() returns 0
-            // instead of -1 and 1. Manually handle that case.
-            s = absN < 1 && absN >= 0.5 && !places ? '1' : absN.toFixed(places);
-        }
-
-        if (absN > 1000) {
-            bits  = s.split(/\D/);
-            i  = bits[0].length % 3 || 3;
-
-            bits[0] = bits[0].slice(0,i) +
-                      bits[0].slice(i).replace(/(\d{3})/g, sep + '$1');
-
-            s = bits.join(cfg.decimalSeparator);
-        }
-
-        s = cfg.prefix + s + cfg.suffix;
-
-        return neg ? cfg.negativeFormat.replace(/#/,s) : s;
-    }
-};
-YAHOO.util.Number.format.defaults = {
-    decimalSeparator : '.',
-    decimalPlaces    : null,
-    thousandsSeparator : '',
-    prefix : '',
-    suffix : '',
-    negativeFormat : '-#'
-};
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-(function () {
-
-var xPad=function (x, pad, r)
-{
-    if(typeof r === 'undefined')
-    {
-        r=10;
-    }
-    for( ; parseInt(x, 10)<r && r>1; r/=10) {
-        x = pad.toString() + x;
-    }
-    return x.toString();
-};
-
-
-/**
- * The static Date class provides helper functions to deal with data of type Date.
- *
- * @namespace YAHOO.util
- * @requires yahoo
- * @class Date
- * @static
- */
- var Dt = {
-    formats: {
-        a: function (d, l) { return l.a[d.getDay()]; },
-        A: function (d, l) { return l.A[d.getDay()]; },
-        b: function (d, l) { return l.b[d.getMonth()]; },
-        B: function (d, l) { return l.B[d.getMonth()]; },
-        C: function (d) { return xPad(parseInt(d.getFullYear()/100, 10), 0); },
-        d: ['getDate', '0'],
-        e: ['getDate', ' '],
-        g: function (d) { return xPad(parseInt(Dt.formats.G(d)%100, 10), 0); },
-        G: function (d) {
-                var y = d.getFullYear();
-                var V = parseInt(Dt.formats.V(d), 10);
-                var W = parseInt(Dt.formats.W(d), 10);
-    
-                if(W > V) {
-                    y++;
-                } else if(W===0 && V>=52) {
-                    y--;
-                }
-    
-                return y;
-            },
-        H: ['getHours', '0'],
-        I: function (d) { var I=d.getHours()%12; return xPad(I===0?12:I, 0); },
-        j: function (d) {
-                var gmd_1 = new Date('' + d.getFullYear() + '/1/1 GMT');
-                var gmdate = new Date('' + d.getFullYear() + '/' + (d.getMonth()+1) + '/' + d.getDate() + ' GMT');
-                var ms = gmdate - gmd_1;
-                var doy = parseInt(ms/60000/60/24, 10)+1;
-                return xPad(doy, 0, 100);
-            },
-        k: ['getHours', ' '],
-        l: function (d) { var I=d.getHours()%12; return xPad(I===0?12:I, ' '); },
-        m: function (d) { return xPad(d.getMonth()+1, 0); },
-        M: ['getMinutes', '0'],
-        p: function (d, l) { return l.p[d.getHours() >= 12 ? 1 : 0 ]; },
-        P: function (d, l) { return l.P[d.getHours() >= 12 ? 1 : 0 ]; },
-        s: function (d, l) { return parseInt(d.getTime()/1000, 10); },
-        S: ['getSeconds', '0'],
-        u: function (d) { var dow = d.getDay(); return dow===0?7:dow; },
-        U: function (d) {
-                var doy = parseInt(Dt.formats.j(d), 10);
-                var rdow = 6-d.getDay();
-                var woy = parseInt((doy+rdow)/7, 10);
-                return xPad(woy, 0);
-            },
-        V: function (d) {
-                var woy = parseInt(Dt.formats.W(d), 10);
-                var dow1_1 = (new Date('' + d.getFullYear() + '/1/1')).getDay();
-                // First week is 01 and not 00 as in the case of %U and %W,
-                // so we add 1 to the final result except if day 1 of the year
-                // is a Monday (then %W returns 01).
-                // We also need to subtract 1 if the day 1 of the year is 
-                // Friday-Sunday, so the resulting equation becomes:
-                var idow = woy + (dow1_1 > 4 || dow1_1 <= 1 ? 0 : 1);
-                if(idow === 53 && (new Date('' + d.getFullYear() + '/12/31')).getDay() < 4)
-                {
-                    idow = 1;
-                }
-                else if(idow === 0)
-                {
-                    idow = Dt.formats.V(new Date('' + (d.getFullYear()-1) + '/12/31'));
-                }
-    
-                return xPad(idow, 0);
-            },
-        w: 'getDay',
-        W: function (d) {
-                var doy = parseInt(Dt.formats.j(d), 10);
-                var rdow = 7-Dt.formats.u(d);
-                var woy = parseInt((doy+rdow)/7, 10);
-                return xPad(woy, 0, 10);
-            },
-        y: function (d) { return xPad(d.getFullYear()%100, 0); },
-        Y: 'getFullYear',
-        z: function (d) {
-                var o = d.getTimezoneOffset();
-                var H = xPad(parseInt(Math.abs(o/60), 10), 0);
-                var M = xPad(Math.abs(o%60), 0);
-                return (o>0?'-':'+') + H + M;
-            },
-        Z: function (d) {
-               var tz = d.toString().replace(/^.*:\d\d( GMT[+-]\d+)? \(?([A-Za-z ]+)\)?\d*$/, '$2').replace(/[a-z ]/g, '');
-               if(tz.length > 4) {
-                       tz = Dt.formats.z(d);
-               }
-               return tz;
-       },
-        '%': function (d) { return '%'; }
-    },
-
-    aggregates: {
-        c: 'locale',
-        D: '%m/%d/%y',
-        F: '%Y-%m-%d',
-        h: '%b',
-        n: '\n',
-        r: 'locale',
-        R: '%H:%M',
-        t: '\t',
-        T: '%H:%M:%S',
-        x: 'locale',
-        X: 'locale'
-        //'+': '%a %b %e %T %Z %Y'
-    },
-
-     /**
-     * Takes a native JavaScript Date and formats to string for display to user.
-     *
-     * @method format
-     * @param oDate {Date} Date.
-     * @param oConfig {Object} (Optional) Object literal of configuration values:
-     *  <dl>
-     *   <dt>format &lt;String&gt;</dt>
-     *   <dd>
-     *   <p>
-     *   Any strftime string is supported, such as "%I:%M:%S %p". strftime has several format specifiers defined by the Open group at 
-     *   <a href="http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html">http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html</a>
-     *   </p>
-     *   <p>   
-     *   PHP added a few of its own, defined at <a href="http://www.php.net/strftime">http://www.php.net/strftime</a>
-     *   </p>
-     *   <p>
-     *   This javascript implementation supports all the PHP specifiers and a few more.  The full list is below:
-     *   </p>
-     *   <dl>
-     *    <dt>%a</dt> <dd>abbreviated weekday name according to the current locale</dd>
-     *    <dt>%A</dt> <dd>full weekday name according to the current locale</dd>
-     *    <dt>%b</dt> <dd>abbreviated month name according to the current locale</dd>
-     *    <dt>%B</dt> <dd>full month name according to the current locale</dd>
-     *    <dt>%c</dt> <dd>preferred date and time representation for the current locale</dd>
-     *    <dt>%C</dt> <dd>century number (the year divided by 100 and truncated to an integer, range 00 to 99)</dd>
-     *    <dt>%d</dt> <dd>day of the month as a decimal number (range 01 to 31)</dd>
-     *    <dt>%D</dt> <dd>same as %m/%d/%y</dd>
-     *    <dt>%e</dt> <dd>day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31')</dd>
-     *    <dt>%F</dt> <dd>same as %Y-%m-%d (ISO 8601 date format)</dd>
-     *    <dt>%g</dt> <dd>like %G, but without the century</dd>
-     *    <dt>%G</dt> <dd>The 4-digit year corresponding to the ISO week number</dd>
-     *    <dt>%h</dt> <dd>same as %b</dd>
-     *    <dt>%H</dt> <dd>hour as a decimal number using a 24-hour clock (range 00 to 23)</dd>
-     *    <dt>%I</dt> <dd>hour as a decimal number using a 12-hour clock (range 01 to 12)</dd>
-     *    <dt>%j</dt> <dd>day of the year as a decimal number (range 001 to 366)</dd>
-     *    <dt>%k</dt> <dd>hour as a decimal number using a 24-hour clock (range 0 to 23); single digits are preceded by a blank. (See also %H.)</dd>
-     *    <dt>%l</dt> <dd>hour as a decimal number using a 12-hour clock (range 1 to 12); single digits are preceded by a blank. (See also %I.) </dd>
-     *    <dt>%m</dt> <dd>month as a decimal number (range 01 to 12)</dd>
-     *    <dt>%M</dt> <dd>minute as a decimal number</dd>
-     *    <dt>%n</dt> <dd>newline character</dd>
-     *    <dt>%p</dt> <dd>either `AM' or `PM' according to the given time value, or the corresponding strings for the current locale</dd>
-     *    <dt>%P</dt> <dd>like %p, but lower case</dd>
-     *    <dt>%r</dt> <dd>time in a.m. and p.m. notation equal to %I:%M:%S %p</dd>
-     *    <dt>%R</dt> <dd>time in 24 hour notation equal to %H:%M</dd>
-     *    <dt>%s</dt> <dd>number of seconds since the Epoch, ie, since 1970-01-01 00:00:00 UTC</dd>
-     *    <dt>%S</dt> <dd>second as a decimal number</dd>
-     *    <dt>%t</dt> <dd>tab character</dd>
-     *    <dt>%T</dt> <dd>current time, equal to %H:%M:%S</dd>
-     *    <dt>%u</dt> <dd>weekday as a decimal number [1,7], with 1 representing Monday</dd>
-     *    <dt>%U</dt> <dd>week number of the current year as a decimal number, starting with the
-     *            first Sunday as the first day of the first week</dd>
-     *    <dt>%V</dt> <dd>The ISO 8601:1988 week number of the current year as a decimal number,
-     *            range 01 to 53, where week 1 is the first week that has at least 4 days
-     *            in the current year, and with Monday as the first day of the week.</dd>
-     *    <dt>%w</dt> <dd>day of the week as a decimal, Sunday being 0</dd>
-     *    <dt>%W</dt> <dd>week number of the current year as a decimal number, starting with the
-     *            first Monday as the first day of the first week</dd>
-     *    <dt>%x</dt> <dd>preferred date representation for the current locale without the time</dd>
-     *    <dt>%X</dt> <dd>preferred time representation for the current locale without the date</dd>
-     *    <dt>%y</dt> <dd>year as a decimal number without a century (range 00 to 99)</dd>
-     *    <dt>%Y</dt> <dd>year as a decimal number including the century</dd>
-     *    <dt>%z</dt> <dd>numerical time zone representation</dd>
-     *    <dt>%Z</dt> <dd>time zone name or abbreviation</dd>
-     *    <dt>%%</dt> <dd>a literal `%' character</dd>
-     *   </dl>
-     *  </dd>
-     * </dl>
-     * @param sLocale {String} (Optional) The locale to use when displaying days of week,
-     *  months of the year, and other locale specific strings.  The following locales are
-     *  built in:
-     *  <dl>
-     *   <dt>en</dt>
-     *   <dd>English</dd>
-     *   <dt>en-US</dt>
-     *   <dd>US English</dd>
-     *   <dt>en-GB</dt>
-     *   <dd>British English</dd>
-     *   <dt>en-AU</dt>
-     *   <dd>Australian English (identical to British English)</dd>
-     *  </dl>
-     *  More locales may be added by subclassing of YAHOO.util.DateLocale.
-     *  See YAHOO.util.DateLocale for more information.
-     * @return {String} Formatted date for display.
-     * @sa YAHOO.util.DateLocale
-     */
-    format : function (oDate, oConfig, sLocale) {
-        oConfig = oConfig || {};
-        
-        if(!(oDate instanceof Date)) {
-            return YAHOO.lang.isValue(oDate) ? oDate : "";
-        }
-
-        var format = oConfig.format || "%m/%d/%Y";
-
-        // Be backwards compatible, support strings that are
-        // exactly equal to YYYY/MM/DD, DD/MM/YYYY and MM/DD/YYYY
-        if(format === 'YYYY/MM/DD') {
-            format = '%Y/%m/%d';
-        } else if(format === 'DD/MM/YYYY') {
-            format = '%d/%m/%Y';
-        } else if(format === 'MM/DD/YYYY') {
-            format = '%m/%d/%Y';
-        }
-        // end backwards compatibility block
-        sLocale = sLocale || "en";
-
-        // Make sure we have a definition for the requested locale, or default to en.
-        if(!(sLocale in YAHOO.util.DateLocale)) {
-            if(sLocale.replace(/-[a-zA-Z]+$/, '') in YAHOO.util.DateLocale) {
-                sLocale = sLocale.replace(/-[a-zA-Z]+$/, '');
-            } else {
-                sLocale = "en";
-            }
-        }
-
-        var aLocale = YAHOO.util.DateLocale[sLocale];
-
-        var replace_aggs = function (m0, m1) {
-            var f = Dt.aggregates[m1];
-            return (f === 'locale' ? aLocale[m1] : f);
-        };
-
-        var replace_formats = function (m0, m1) {
-            var f = Dt.formats[m1];
-            if(typeof f === 'string') {             // string => built in date function
-                return oDate[f]();
-            } else if(typeof f === 'function') {    // function => our own function
-                return f.call(oDate, oDate, aLocale);
-            } else if(typeof f === 'object' && typeof f[0] === 'string') {  // built in function with padding
-                return xPad(oDate[f[0]](), f[1]);
-            } else {
-                return m1;
-            }
-        };
-
-        // First replace aggregates (run in a loop because an agg may be made up of other aggs)
-        while(format.match(/%[cDFhnrRtTxX]/)) {
-            format = format.replace(/%([cDFhnrRtTxX])/g, replace_aggs);
-        }
-
-        // Now replace formats (do not run in a loop otherwise %%a will be replace with the value of %a)
-        var str = format.replace(/%([aAbBCdegGHIjklmMpPsSuUVwWyYzZ%])/g, replace_formats);
-
-        replace_aggs = replace_formats = undefined;
-
-        return str;
-    }
- };
- YAHOO.namespace("YAHOO.util");
- YAHOO.util.Date = Dt;
-
-/**
- * The DateLocale class is a container and base class for all
- * localised date strings used by YAHOO.util.Date. It is used
- * internally, but may be extended to provide new date localisations.
- *
- * To create your own DateLocale, follow these steps:
- * <ol>
- *  <li>Find an existing locale that matches closely with your needs</li>
- *  <li>Use this as your base class.  Use YAHOO.util.DateLocale if nothing
- *   matches.</li>
- *  <li>Create your own class as an extension of the base class using
- *   YAHOO.lang.merge, and add your own localisations where needed.</li>
- * </ol>
- * See the YAHOO.util.DateLocale['en-US'] and YAHOO.util.DateLocale['en-GB']
- * classes which extend YAHOO.util.DateLocale['en'].
- *
- * For example, to implement locales for French french and Canadian french,
- * we would do the following:
- * <ol>
- *  <li>For French french, we have no existing similar locale, so use
- *   YAHOO.util.DateLocale as the base, and extend it:
- *   <pre>
- *      YAHOO.util.DateLocale['fr'] = YAHOO.lang.merge(YAHOO.util.DateLocale, {
- *          a: ['dim', 'lun', 'mar', 'mer', 'jeu', 'ven', 'sam'],
- *          A: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
- *          b: ['jan', 'f&eacute;v', 'mar', 'avr', 'mai', 'jun', 'jui', 'ao&ucirc;', 'sep', 'oct', 'nov', 'd&eacute;c'],
- *          B: ['janvier', 'f&eacute;vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao&ucirc;t', 'septembre', 'octobre', 'novembre', 'd&eacute;cembre'],
- *          c: '%a %d %b %Y %T %Z',
- *          p: ['', ''],
- *          P: ['', ''],
- *          x: '%d.%m.%Y',
- *          X: '%T'
- *      });
- *   </pre>
- *  </li>
- *  <li>For Canadian french, we start with French french and change the meaning of \%x:
- *   <pre>
- *      YAHOO.util.DateLocale['fr-CA'] = YAHOO.lang.merge(YAHOO.util.DateLocale['fr'], {
- *          x: '%Y-%m-%d'
- *      });
- *   </pre>
- *  </li>
- * </ol>
- *
- * With that, you can use your new locales:
- * <pre>
- *    var d = new Date("2008/04/22");
- *    YAHOO.util.Date.format(d, {format: "%A, %d %B == %x"}, "fr");
- * </pre>
- * will return:
- * <pre>
- *    mardi, 22 avril == 22.04.2008
- * </pre>
- * And
- * <pre>
- *    YAHOO.util.Date.format(d, {format: "%A, %d %B == %x"}, "fr-CA");
- * </pre>
- * Will return:
- * <pre>
- *   mardi, 22 avril == 2008-04-22
- * </pre>
- * @namespace YAHOO.util
- * @requires yahoo
- * @class DateLocale
- */
- YAHOO.util.DateLocale = {
-        a: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
-        A: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
-        b: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
-        B: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
-        c: '%a %d %b %Y %T %Z',
-        p: ['AM', 'PM'],
-        P: ['am', 'pm'],
-        r: '%I:%M:%S %p',
-        x: '%d/%m/%y',
-        X: '%T'
- };
-
- YAHOO.util.DateLocale['en'] = YAHOO.lang.merge(YAHOO.util.DateLocale, {});
-
- YAHOO.util.DateLocale['en-US'] = YAHOO.lang.merge(YAHOO.util.DateLocale['en'], {
-        c: '%a %d %b %Y %I:%M:%S %p %Z',
-        x: '%m/%d/%Y',
-        X: '%I:%M:%S %p'
- });
-
- YAHOO.util.DateLocale['en-GB'] = YAHOO.lang.merge(YAHOO.util.DateLocale['en'], {
-        r: '%l:%M:%S %P %Z'
- });
- YAHOO.util.DateLocale['en-AU'] = YAHOO.lang.merge(YAHOO.util.DateLocale['en']);
-
-})();
-
-YAHOO.register("datasource", YAHOO.util.DataSource, {version: "2.8.0r4", build: "2449"});
diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/yui/datasource/datasource-min.js b/koha-tmpl/intranet-tmpl/prog/en/lib/yui/datasource/datasource-min.js
deleted file mode 100644 (file)
index 0be5a00..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-Copyright (c) 2009, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.8.0r4
-*/
-(function(){var lang=YAHOO.lang,util=YAHOO.util,Ev=util.Event;util.DataSourceBase=function(oLiveData,oConfigs){if(oLiveData===null||oLiveData===undefined){return;}this.liveData=oLiveData;this._oQueue={interval:null,conn:null,requests:[]};this.responseSchema={};if(oConfigs&&(oConfigs.constructor==Object)){for(var sConfig in oConfigs){if(sConfig){this[sConfig]=oConfigs[sConfig];}}}var maxCacheEntries=this.maxCacheEntries;if(!lang.isNumber(maxCacheEntries)||(maxCacheEntries<0)){maxCacheEntries=0;}this._aIntervals=[];this.createEvent("cacheRequestEvent");this.createEvent("cacheResponseEvent");this.createEvent("requestEvent");this.createEvent("responseEvent");this.createEvent("responseParseEvent");this.createEvent("responseCacheEvent");this.createEvent("dataErrorEvent");this.createEvent("cacheFlushEvent");var DS=util.DataSourceBase;this._sName="DataSource instance"+DS._nIndex;DS._nIndex++;};var DS=util.DataSourceBase;lang.augmentObject(DS,{TYPE_UNKNOWN:-1,TYPE_JSARRAY:0,TYPE_JSFUNCTION:1,TYPE_XHR:2,TYPE_JSON:3,TYPE_XML:4,TYPE_TEXT:5,TYPE_HTMLTABLE:6,TYPE_SCRIPTNODE:7,TYPE_LOCAL:8,ERROR_DATAINVALID:"Invalid data",ERROR_DATANULL:"Null data",_nIndex:0,_nTransactionId:0,_getLocationValue:function(field,context){var locator=field.locator||field.key||field,xmldoc=context.ownerDocument||context,result,res,value=null;try{if(!lang.isUndefined(xmldoc.evaluate)){result=xmldoc.evaluate(locator,context,xmldoc.createNSResolver(!context.ownerDocument?context.documentElement:context.ownerDocument.documentElement),0,null);while(res=result.iterateNext()){value=res.textContent;}}else{xmldoc.setProperty("SelectionLanguage","XPath");result=context.selectNodes(locator)[0];value=result.value||result.text||null;}return value;}catch(e){}},issueCallback:function(callback,params,error,scope){if(lang.isFunction(callback)){callback.apply(scope,params);}else{if(lang.isObject(callback)){scope=callback.scope||scope||window;var callbackFunc=callback.success;if(error){callbackFunc=callback.failure;}if(callbackFunc){callbackFunc.apply(scope,params.concat([callback.argument]));}}}},parseString:function(oData){if(!lang.isValue(oData)){return null;}var string=oData+"";if(lang.isString(string)){return string;}else{return null;}},parseNumber:function(oData){if(!lang.isValue(oData)||(oData==="")){return null;}var number=oData*1;if(lang.isNumber(number)){return number;}else{return null;}},convertNumber:function(oData){return DS.parseNumber(oData);},parseDate:function(oData){var date=null;if(!(oData instanceof Date)){date=new Date(oData);}else{return oData;}if(date instanceof Date){return date;}else{return null;}},convertDate:function(oData){return DS.parseDate(oData);}});DS.Parser={string:DS.parseString,number:DS.parseNumber,date:DS.parseDate};DS.prototype={_sName:null,_aCache:null,_oQueue:null,_aIntervals:null,maxCacheEntries:0,liveData:null,dataType:DS.TYPE_UNKNOWN,responseType:DS.TYPE_UNKNOWN,responseSchema:null,useXPath:false,toString:function(){return this._sName;},getCachedResponse:function(oRequest,oCallback,oCaller){var aCache=this._aCache;if(this.maxCacheEntries>0){if(!aCache){this._aCache=[];}else{var nCacheLength=aCache.length;if(nCacheLength>0){var oResponse=null;this.fireEvent("cacheRequestEvent",{request:oRequest,callback:oCallback,caller:oCaller});for(var i=nCacheLength-1;i>=0;i--){var oCacheElem=aCache[i];if(this.isCacheHit(oRequest,oCacheElem.request)){oResponse=oCacheElem.response;this.fireEvent("cacheResponseEvent",{request:oRequest,response:oResponse,callback:oCallback,caller:oCaller});if(i<nCacheLength-1){aCache.splice(i,1);this.addToCache(oRequest,oResponse);}oResponse.cached=true;break;}}return oResponse;}}}else{if(aCache){this._aCache=null;}}return null;},isCacheHit:function(oRequest,oCachedRequest){return(oRequest===oCachedRequest);},addToCache:function(oRequest,oResponse){var aCache=this._aCache;if(!aCache){return;}while(aCache.length>=this.maxCacheEntries){aCache.shift();}var oCacheElem={request:oRequest,response:oResponse};aCache[aCache.length]=oCacheElem;this.fireEvent("responseCacheEvent",{request:oRequest,response:oResponse});},flushCache:function(){if(this._aCache){this._aCache=[];this.fireEvent("cacheFlushEvent");}},setInterval:function(nMsec,oRequest,oCallback,oCaller){if(lang.isNumber(nMsec)&&(nMsec>=0)){var oSelf=this;var nId=setInterval(function(){oSelf.makeConnection(oRequest,oCallback,oCaller);},nMsec);this._aIntervals.push(nId);return nId;}else{}},clearInterval:function(nId){var tracker=this._aIntervals||[];for(var i=tracker.length-1;i>-1;i--){if(tracker[i]===nId){tracker.splice(i,1);clearInterval(nId);}}},clearAllIntervals:function(){var tracker=this._aIntervals||[];for(var i=tracker.length-1;i>-1;i--){clearInterval(tracker[i]);}tracker=[];},sendRequest:function(oRequest,oCallback,oCaller){var oCachedResponse=this.getCachedResponse(oRequest,oCallback,oCaller);if(oCachedResponse){DS.issueCallback(oCallback,[oRequest,oCachedResponse],false,oCaller);return null;}return this.makeConnection(oRequest,oCallback,oCaller);},makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oRawResponse=this.liveData;this.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);return tId;},handleResponse:function(oRequest,oRawResponse,oCallback,oCaller,tId){this.fireEvent("responseEvent",{tId:tId,request:oRequest,response:oRawResponse,callback:oCallback,caller:oCaller});var xhr=(this.dataType==DS.TYPE_XHR)?true:false;var oParsedResponse=null;var oFullResponse=oRawResponse;if(this.responseType===DS.TYPE_UNKNOWN){var ctype=(oRawResponse&&oRawResponse.getResponseHeader)?oRawResponse.getResponseHeader["Content-Type"]:null;if(ctype){if(ctype.indexOf("text/xml")>-1){this.responseType=DS.TYPE_XML;}else{if(ctype.indexOf("application/json")>-1){this.responseType=DS.TYPE_JSON;}else{if(ctype.indexOf("text/plain")>-1){this.responseType=DS.TYPE_TEXT;}}}}else{if(YAHOO.lang.isArray(oRawResponse)){this.responseType=DS.TYPE_JSARRAY;
-}else{if(oRawResponse&&oRawResponse.nodeType&&(oRawResponse.nodeType===9||oRawResponse.nodeType===1||oRawResponse.nodeType===11)){this.responseType=DS.TYPE_XML;}else{if(oRawResponse&&oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){this.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){this.responseType=DS.TYPE_TEXT;}}}}}}}switch(this.responseType){case DS.TYPE_JSARRAY:if(xhr&&oRawResponse&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}try{if(lang.isString(oFullResponse)){var parseArgs=[oFullResponse].concat(this.parseJSONArgs);if(lang.JSON){oFullResponse=lang.JSON.parse.apply(lang.JSON,parseArgs);}else{if(window.JSON&&JSON.parse){oFullResponse=JSON.parse.apply(JSON,parseArgs);}else{if(oFullResponse.parseJSON){oFullResponse=oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));}else{while(oFullResponse.length>0&&(oFullResponse.charAt(0)!="{")&&(oFullResponse.charAt(0)!="[")){oFullResponse=oFullResponse.substring(1,oFullResponse.length);}if(oFullResponse.length>0){var arrayEnd=Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));oFullResponse=oFullResponse.substring(0,arrayEnd+1);oFullResponse=eval("("+oFullResponse+")");}}}}}}catch(e1){}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseArrayData(oRequest,oFullResponse);break;case DS.TYPE_JSON:if(xhr&&oRawResponse&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}try{if(lang.isString(oFullResponse)){var parseArgs=[oFullResponse].concat(this.parseJSONArgs);if(lang.JSON){oFullResponse=lang.JSON.parse.apply(lang.JSON,parseArgs);}else{if(window.JSON&&JSON.parse){oFullResponse=JSON.parse.apply(JSON,parseArgs);}else{if(oFullResponse.parseJSON){oFullResponse=oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));}else{while(oFullResponse.length>0&&(oFullResponse.charAt(0)!="{")&&(oFullResponse.charAt(0)!="[")){oFullResponse=oFullResponse.substring(1,oFullResponse.length);}if(oFullResponse.length>0){var objEnd=Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));oFullResponse=oFullResponse.substring(0,objEnd+1);oFullResponse=eval("("+oFullResponse+")");}}}}}}catch(e){}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseJSONData(oRequest,oFullResponse);break;case DS.TYPE_HTMLTABLE:if(xhr&&oRawResponse.responseText){var el=document.createElement("div");el.innerHTML=oRawResponse.responseText;oFullResponse=el.getElementsByTagName("table")[0];}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseHTMLTableData(oRequest,oFullResponse);break;case DS.TYPE_XML:if(xhr&&oRawResponse.responseXML){oFullResponse=oRawResponse.responseXML;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseXMLData(oRequest,oFullResponse);break;case DS.TYPE_TEXT:if(xhr&&lang.isString(oRawResponse.responseText)){oFullResponse=oRawResponse.responseText;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseTextData(oRequest,oFullResponse);break;default:oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseData(oRequest,oFullResponse);break;}oParsedResponse=oParsedResponse||{};if(!oParsedResponse.results){oParsedResponse.results=[];}if(!oParsedResponse.meta){oParsedResponse.meta={};}if(!oParsedResponse.error){oParsedResponse=this.doBeforeCallback(oRequest,oFullResponse,oParsedResponse,oCallback);this.fireEvent("responseParseEvent",{request:oRequest,response:oParsedResponse,callback:oCallback,caller:oCaller});this.addToCache(oRequest,oParsedResponse);}else{oParsedResponse.error=true;this.fireEvent("dataErrorEvent",{request:oRequest,response:oRawResponse,callback:oCallback,caller:oCaller,message:DS.ERROR_DATANULL});}oParsedResponse.tId=tId;DS.issueCallback(oCallback,[oRequest,oParsedResponse],oParsedResponse.error,oCaller);},doBeforeParseData:function(oRequest,oFullResponse,oCallback){return oFullResponse;},doBeforeCallback:function(oRequest,oFullResponse,oParsedResponse,oCallback){return oParsedResponse;},parseData:function(oRequest,oFullResponse){if(lang.isValue(oFullResponse)){var oParsedResponse={results:oFullResponse,meta:{}};return oParsedResponse;}return null;},parseArrayData:function(oRequest,oFullResponse){if(lang.isArray(oFullResponse)){var results=[],i,j,rec,field,data;if(lang.isArray(this.responseSchema.fields)){var fields=this.responseSchema.fields;for(i=fields.length-1;i>=0;--i){if(typeof fields[i]!=="object"){fields[i]={key:fields[i]};}}var parsers={},p;for(i=fields.length-1;i>=0;--i){p=(typeof fields[i].parser==="function"?fields[i].parser:DS.Parser[fields[i].parser+""])||fields[i].converter;if(p){parsers[fields[i].key]=p;}}var arrType=lang.isArray(oFullResponse[0]);for(i=oFullResponse.length-1;i>-1;i--){var oResult={};rec=oFullResponse[i];if(typeof rec==="object"){for(j=fields.length-1;j>-1;j--){field=fields[j];data=arrType?rec[j]:rec[field.key];if(parsers[field.key]){data=parsers[field.key].call(this,data);}if(data===undefined){data=null;}oResult[field.key]=data;}}else{if(lang.isString(rec)){for(j=fields.length-1;j>-1;j--){field=fields[j];data=rec;if(parsers[field.key]){data=parsers[field.key].call(this,data);}if(data===undefined){data=null;}oResult[field.key]=data;}}}results[i]=oResult;}}else{results=oFullResponse;}var oParsedResponse={results:results};return oParsedResponse;}return null;},parseTextData:function(oRequest,oFullResponse){if(lang.isString(oFullResponse)){if(lang.isString(this.responseSchema.recordDelim)&&lang.isString(this.responseSchema.fieldDelim)){var oParsedResponse={results:[]};var recDelim=this.responseSchema.recordDelim;var fieldDelim=this.responseSchema.fieldDelim;if(oFullResponse.length>0){var newLength=oFullResponse.length-recDelim.length;if(oFullResponse.substr(newLength)==recDelim){oFullResponse=oFullResponse.substr(0,newLength);
-}if(oFullResponse.length>0){var recordsarray=oFullResponse.split(recDelim);for(var i=0,len=recordsarray.length,recIdx=0;i<len;++i){var bError=false,sRecord=recordsarray[i];if(lang.isString(sRecord)&&(sRecord.length>0)){var fielddataarray=recordsarray[i].split(fieldDelim);var oResult={};if(lang.isArray(this.responseSchema.fields)){var fields=this.responseSchema.fields;for(var j=fields.length-1;j>-1;j--){try{var data=fielddataarray[j];if(lang.isString(data)){if(data.charAt(0)=='"'){data=data.substr(1);}if(data.charAt(data.length-1)=='"'){data=data.substr(0,data.length-1);}var field=fields[j];var key=(lang.isValue(field.key))?field.key:field;if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}else{bError=true;}}catch(e){bError=true;}}}else{oResult=fielddataarray;}if(!bError){oParsedResponse.results[recIdx++]=oResult;}}}}}return oParsedResponse;}}return null;},parseXMLResult:function(result){var oResult={},schema=this.responseSchema;try{for(var m=schema.fields.length-1;m>=0;m--){var field=schema.fields[m];var key=(lang.isValue(field.key))?field.key:field;var data=null;if(this.useXPath){data=YAHOO.util.DataSource._getLocationValue(field,result);}else{var xmlAttr=result.attributes.getNamedItem(key);if(xmlAttr){data=xmlAttr.value;}else{var xmlNode=result.getElementsByTagName(key);if(xmlNode&&xmlNode.item(0)){var item=xmlNode.item(0);data=(item)?((item.text)?item.text:(item.textContent)?item.textContent:null):null;if(!data){var datapieces=[];for(var j=0,len=item.childNodes.length;j<len;j++){if(item.childNodes[j].nodeValue){datapieces[datapieces.length]=item.childNodes[j].nodeValue;}}if(datapieces.length>0){data=datapieces.join("");}}}}}if(data===null){data="";}if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}}catch(e){}return oResult;},parseXMLData:function(oRequest,oFullResponse){var bError=false,schema=this.responseSchema,oParsedResponse={meta:{}},xmlList=null,metaNode=schema.metaNode,metaLocators=schema.metaFields||{},i,k,loc,v;try{if(this.useXPath){for(k in metaLocators){oParsedResponse.meta[k]=YAHOO.util.DataSource._getLocationValue(metaLocators[k],oFullResponse);}}else{metaNode=metaNode?oFullResponse.getElementsByTagName(metaNode)[0]:oFullResponse;if(metaNode){for(k in metaLocators){if(lang.hasOwnProperty(metaLocators,k)){loc=metaLocators[k];v=metaNode.getElementsByTagName(loc)[0];if(v){v=v.firstChild.nodeValue;}else{v=metaNode.attributes.getNamedItem(loc);if(v){v=v.value;}}if(lang.isValue(v)){oParsedResponse.meta[k]=v;}}}}}xmlList=(schema.resultNode)?oFullResponse.getElementsByTagName(schema.resultNode):null;}catch(e){}if(!xmlList||!lang.isArray(schema.fields)){bError=true;}else{oParsedResponse.results=[];for(i=xmlList.length-1;i>=0;--i){var oResult=this.parseXMLResult(xmlList.item(i));oParsedResponse.results[i]=oResult;}}if(bError){oParsedResponse.error=true;}else{}return oParsedResponse;},parseJSONData:function(oRequest,oFullResponse){var oParsedResponse={results:[],meta:{}};if(lang.isObject(oFullResponse)&&this.responseSchema.resultsList){var schema=this.responseSchema,fields=schema.fields,resultsList=oFullResponse,results=[],metaFields=schema.metaFields||{},fieldParsers=[],fieldPaths=[],simpleFields=[],bError=false,i,len,j,v,key,parser,path;var buildPath=function(needle){var path=null,keys=[],i=0;if(needle){needle=needle.replace(/\[(['"])(.*?)\1\]/g,function(x,$1,$2){keys[i]=$2;return".@"+(i++);}).replace(/\[(\d+)\]/g,function(x,$1){keys[i]=parseInt($1,10)|0;return".@"+(i++);}).replace(/^\./,"");if(!/[^\w\.\$@]/.test(needle)){path=needle.split(".");for(i=path.length-1;i>=0;--i){if(path[i].charAt(0)==="@"){path[i]=keys[parseInt(path[i].substr(1),10)];}}}else{}}return path;};var walkPath=function(path,origin){var v=origin,i=0,len=path.length;for(;i<len&&v;++i){v=v[path[i]];}return v;};path=buildPath(schema.resultsList);if(path){resultsList=walkPath(path,oFullResponse);if(resultsList===undefined){bError=true;}}else{bError=true;}if(!resultsList){resultsList=[];}if(!lang.isArray(resultsList)){resultsList=[resultsList];}if(!bError){if(schema.fields){var field;for(i=0,len=fields.length;i<len;i++){field=fields[i];key=field.key||field;parser=((typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""])||field.converter;path=buildPath(key);if(parser){fieldParsers[fieldParsers.length]={key:key,parser:parser};}if(path){if(path.length>1){fieldPaths[fieldPaths.length]={key:key,path:path};}else{simpleFields[simpleFields.length]={key:key,path:path[0]};}}else{}}for(i=resultsList.length-1;i>=0;--i){var r=resultsList[i],rec={};if(r){for(j=simpleFields.length-1;j>=0;--j){rec[simpleFields[j].key]=(r[simpleFields[j].path]!==undefined)?r[simpleFields[j].path]:r[j];}for(j=fieldPaths.length-1;j>=0;--j){rec[fieldPaths[j].key]=walkPath(fieldPaths[j].path,r);}for(j=fieldParsers.length-1;j>=0;--j){var p=fieldParsers[j].key;rec[p]=fieldParsers[j].parser(rec[p]);if(rec[p]===undefined){rec[p]=null;}}}results[i]=rec;}}else{results=resultsList;}for(key in metaFields){if(lang.hasOwnProperty(metaFields,key)){path=buildPath(metaFields[key]);if(path){v=walkPath(path,oFullResponse);oParsedResponse.meta[key]=v;}}}}else{oParsedResponse.error=true;}oParsedResponse.results=results;}else{oParsedResponse.error=true;}return oParsedResponse;},parseHTMLTableData:function(oRequest,oFullResponse){var bError=false;var elTable=oFullResponse;var fields=this.responseSchema.fields;var oParsedResponse={results:[]};if(lang.isArray(fields)){for(var i=0;i<elTable.tBodies.length;i++){var elTbody=elTable.tBodies[i];for(var j=elTbody.rows.length-1;j>-1;j--){var elRow=elTbody.rows[j];var oResult={};for(var k=fields.length-1;k>-1;k--){var field=fields[k];var key=(lang.isValue(field.key))?field.key:field;
-var data=elRow.cells[k].innerHTML;if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}oParsedResponse.results[j]=oResult;}}}else{bError=true;}if(bError){oParsedResponse.error=true;}else{}return oParsedResponse;}};lang.augmentProto(DS,util.EventProvider);util.LocalDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_LOCAL;if(oLiveData){if(YAHOO.lang.isArray(oLiveData)){this.responseType=DS.TYPE_JSARRAY;}else{if(oLiveData.nodeType&&oLiveData.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oLiveData.nodeName&&(oLiveData.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;oLiveData=oLiveData.cloneNode(true);}else{if(YAHOO.lang.isString(oLiveData)){this.responseType=DS.TYPE_TEXT;}else{if(YAHOO.lang.isObject(oLiveData)){this.responseType=DS.TYPE_JSON;}}}}}}else{oLiveData=[];this.responseType=DS.TYPE_JSARRAY;}util.LocalDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.LocalDataSource,DS);lang.augmentObject(util.LocalDataSource,DS);util.FunctionDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_JSFUNCTION;oLiveData=oLiveData||function(){};util.FunctionDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.FunctionDataSource,DS,{scope:null,makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oRawResponse=(this.scope)?this.liveData.call(this.scope,oRequest,this):this.liveData(oRequest);if(this.responseType===DS.TYPE_UNKNOWN){if(YAHOO.lang.isArray(oRawResponse)){this.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse&&oRawResponse.nodeType&&oRawResponse.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oRawResponse&&oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){this.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){this.responseType=DS.TYPE_TEXT;}}}}}}this.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);return tId;}});lang.augmentObject(util.FunctionDataSource,DS);util.ScriptNodeDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_SCRIPTNODE;oLiveData=oLiveData||"";util.ScriptNodeDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.ScriptNodeDataSource,DS,{getUtility:util.Get,asyncMode:"allowAll",scriptCallbackParam:"callback",generateRequestCallback:function(id){return"&"+this.scriptCallbackParam+"=YAHOO.util.ScriptNodeDataSource.callbacks["+id+"]";},doBeforeGetScriptNode:function(sUri){return sUri;},makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});if(util.ScriptNodeDataSource._nPending===0){util.ScriptNodeDataSource.callbacks=[];util.ScriptNodeDataSource._nId=0;}var id=util.ScriptNodeDataSource._nId;util.ScriptNodeDataSource._nId++;var oSelf=this;util.ScriptNodeDataSource.callbacks[id]=function(oRawResponse){if((oSelf.asyncMode!=="ignoreStaleResponses")||(id===util.ScriptNodeDataSource.callbacks.length-1)){if(oSelf.responseType===DS.TYPE_UNKNOWN){if(YAHOO.lang.isArray(oRawResponse)){oSelf.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse.nodeType&&oRawResponse.nodeType==9){oSelf.responseType=DS.TYPE_XML;}else{if(oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){oSelf.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){oSelf.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){oSelf.responseType=DS.TYPE_TEXT;}}}}}}oSelf.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);}else{}delete util.ScriptNodeDataSource.callbacks[id];};util.ScriptNodeDataSource._nPending++;var sUri=this.liveData+oRequest+this.generateRequestCallback(id);sUri=this.doBeforeGetScriptNode(sUri);this.getUtility.script(sUri,{autopurge:true,onsuccess:util.ScriptNodeDataSource._bumpPendingDown,onfail:util.ScriptNodeDataSource._bumpPendingDown});return tId;}});lang.augmentObject(util.ScriptNodeDataSource,DS);lang.augmentObject(util.ScriptNodeDataSource,{_nId:0,_nPending:0,callbacks:[]});util.XHRDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_XHR;this.connMgr=this.connMgr||util.Connect;oLiveData=oLiveData||"";util.XHRDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.XHRDataSource,DS,{connMgr:null,connXhrMode:"allowAll",connMethodPost:false,connTimeout:0,makeConnection:function(oRequest,oCallback,oCaller){var oRawResponse=null;var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oSelf=this;var oConnMgr=this.connMgr;var oQueue=this._oQueue;var _xhrSuccess=function(oResponse){if(oResponse&&(this.connXhrMode=="ignoreStaleResponses")&&(oResponse.tId!=oQueue.conn.tId)){return null;}else{if(!oResponse){this.fireEvent("dataErrorEvent",{request:oRequest,response:null,callback:oCallback,caller:oCaller,message:DS.ERROR_DATANULL});DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);return null;}else{if(this.responseType===DS.TYPE_UNKNOWN){var ctype=(oResponse.getResponseHeader)?oResponse.getResponseHeader["Content-Type"]:null;if(ctype){if(ctype.indexOf("text/xml")>-1){this.responseType=DS.TYPE_XML;}else{if(ctype.indexOf("application/json")>-1){this.responseType=DS.TYPE_JSON;}else{if(ctype.indexOf("text/plain")>-1){this.responseType=DS.TYPE_TEXT;}}}}}this.handleResponse(oRequest,oResponse,oCallback,oCaller,tId);}}};var _xhrFailure=function(oResponse){this.fireEvent("dataErrorEvent",{request:oRequest,response:oResponse,callback:oCallback,caller:oCaller,message:DS.ERROR_DATAINVALID});if(lang.isString(this.liveData)&&lang.isString(oRequest)&&(this.liveData.lastIndexOf("?")!==this.liveData.length-1)&&(oRequest.indexOf("?")!==0)){}oResponse=oResponse||{};
-oResponse.error=true;DS.issueCallback(oCallback,[oRequest,oResponse],true,oCaller);return null;};var _xhrCallback={success:_xhrSuccess,failure:_xhrFailure,scope:this};if(lang.isNumber(this.connTimeout)){_xhrCallback.timeout=this.connTimeout;}if(this.connXhrMode=="cancelStaleRequests"){if(oQueue.conn){if(oConnMgr.abort){oConnMgr.abort(oQueue.conn);oQueue.conn=null;}else{}}}if(oConnMgr&&oConnMgr.asyncRequest){var sLiveData=this.liveData;var isPost=this.connMethodPost;var sMethod=(isPost)?"POST":"GET";var sUri=(isPost||!lang.isValue(oRequest))?sLiveData:sLiveData+oRequest;var sRequest=(isPost)?oRequest:null;if(this.connXhrMode!="queueRequests"){oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,_xhrCallback,sRequest);}else{if(oQueue.conn){var allRequests=oQueue.requests;allRequests.push({request:oRequest,callback:_xhrCallback});if(!oQueue.interval){oQueue.interval=setInterval(function(){if(oConnMgr.isCallInProgress(oQueue.conn)){return;}else{if(allRequests.length>0){sUri=(isPost||!lang.isValue(allRequests[0].request))?sLiveData:sLiveData+allRequests[0].request;sRequest=(isPost)?allRequests[0].request:null;oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,allRequests[0].callback,sRequest);allRequests.shift();}else{clearInterval(oQueue.interval);oQueue.interval=null;}}},50);}}else{oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,_xhrCallback,sRequest);}}}else{DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);}return tId;}});lang.augmentObject(util.XHRDataSource,DS);util.DataSource=function(oLiveData,oConfigs){oConfigs=oConfigs||{};var dataType=oConfigs.dataType;if(dataType){if(dataType==DS.TYPE_LOCAL){lang.augmentObject(util.DataSource,util.LocalDataSource);return new util.LocalDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_XHR){lang.augmentObject(util.DataSource,util.XHRDataSource);return new util.XHRDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_SCRIPTNODE){lang.augmentObject(util.DataSource,util.ScriptNodeDataSource);return new util.ScriptNodeDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_JSFUNCTION){lang.augmentObject(util.DataSource,util.FunctionDataSource);return new util.FunctionDataSource(oLiveData,oConfigs);}}}}}if(YAHOO.lang.isString(oLiveData)){lang.augmentObject(util.DataSource,util.XHRDataSource);return new util.XHRDataSource(oLiveData,oConfigs);}else{if(YAHOO.lang.isFunction(oLiveData)){lang.augmentObject(util.DataSource,util.FunctionDataSource);return new util.FunctionDataSource(oLiveData,oConfigs);}else{lang.augmentObject(util.DataSource,util.LocalDataSource);return new util.LocalDataSource(oLiveData,oConfigs);}}};lang.augmentObject(util.DataSource,DS);})();YAHOO.util.Number={format:function(B,E){if(!isFinite(+B)){return"";}B=!isFinite(+B)?0:+B;E=YAHOO.lang.merge(YAHOO.util.Number.format.defaults,(E||{}));var C=B<0,F=Math.abs(B),A=E.decimalPlaces,I=E.thousandsSeparator,H,G,D;if(A<0){H=F-(F%1)+"";D=H.length+A;if(D>0){H=Number("."+H).toFixed(D).slice(2)+new Array(H.length-D+1).join("0");}else{H="0";}}else{H=F<1&&F>=0.5&&!A?"1":F.toFixed(A);}if(F>1000){G=H.split(/\D/);D=G[0].length%3||3;G[0]=G[0].slice(0,D)+G[0].slice(D).replace(/(\d{3})/g,I+"$1");H=G.join(E.decimalSeparator);}H=E.prefix+H+E.suffix;return C?E.negativeFormat.replace(/#/,H):H;}};YAHOO.util.Number.format.defaults={decimalSeparator:".",decimalPlaces:null,thousandsSeparator:"",prefix:"",suffix:"",negativeFormat:"-#"};(function(){var A=function(C,E,D){if(typeof D==="undefined"){D=10;}for(;parseInt(C,10)<D&&D>1;D/=10){C=E.toString()+C;}return C.toString();};var B={formats:{a:function(D,C){return C.a[D.getDay()];},A:function(D,C){return C.A[D.getDay()];},b:function(D,C){return C.b[D.getMonth()];},B:function(D,C){return C.B[D.getMonth()];},C:function(C){return A(parseInt(C.getFullYear()/100,10),0);},d:["getDate","0"],e:["getDate"," "],g:function(C){return A(parseInt(B.formats.G(C)%100,10),0);},G:function(E){var F=E.getFullYear();var D=parseInt(B.formats.V(E),10);var C=parseInt(B.formats.W(E),10);if(C>D){F++;}else{if(C===0&&D>=52){F--;}}return F;},H:["getHours","0"],I:function(D){var C=D.getHours()%12;return A(C===0?12:C,0);},j:function(G){var F=new Date(""+G.getFullYear()+"/1/1 GMT");var D=new Date(""+G.getFullYear()+"/"+(G.getMonth()+1)+"/"+G.getDate()+" GMT");var C=D-F;var E=parseInt(C/60000/60/24,10)+1;return A(E,0,100);},k:["getHours"," "],l:function(D){var C=D.getHours()%12;return A(C===0?12:C," ");},m:function(C){return A(C.getMonth()+1,0);},M:["getMinutes","0"],p:function(D,C){return C.p[D.getHours()>=12?1:0];},P:function(D,C){return C.P[D.getHours()>=12?1:0];},s:function(D,C){return parseInt(D.getTime()/1000,10);},S:["getSeconds","0"],u:function(C){var D=C.getDay();return D===0?7:D;},U:function(F){var C=parseInt(B.formats.j(F),10);var E=6-F.getDay();var D=parseInt((C+E)/7,10);return A(D,0);},V:function(F){var E=parseInt(B.formats.W(F),10);var C=(new Date(""+F.getFullYear()+"/1/1")).getDay();var D=E+(C>4||C<=1?0:1);if(D===53&&(new Date(""+F.getFullYear()+"/12/31")).getDay()<4){D=1;}else{if(D===0){D=B.formats.V(new Date(""+(F.getFullYear()-1)+"/12/31"));}}return A(D,0);},w:"getDay",W:function(F){var C=parseInt(B.formats.j(F),10);var E=7-B.formats.u(F);var D=parseInt((C+E)/7,10);return A(D,0,10);},y:function(C){return A(C.getFullYear()%100,0);},Y:"getFullYear",z:function(E){var D=E.getTimezoneOffset();var C=A(parseInt(Math.abs(D/60),10),0);var F=A(Math.abs(D%60),0);return(D>0?"-":"+")+C+F;},Z:function(C){var D=C.toString().replace(/^.*:\d\d( GMT[+-]\d+)? \(?([A-Za-z ]+)\)?\d*$/,"$2").replace(/[a-z ]/g,"");if(D.length>4){D=B.formats.z(C);}return D;},"%":function(C){return"%";}},aggregates:{c:"locale",D:"%m/%d/%y",F:"%Y-%m-%d",h:"%b",n:"\n",r:"locale",R:"%H:%M",t:"\t",T:"%H:%M:%S",x:"locale",X:"locale"},format:function(G,F,D){F=F||{};if(!(G instanceof Date)){return YAHOO.lang.isValue(G)?G:"";}var H=F.format||"%m/%d/%Y";if(H==="YYYY/MM/DD"){H="%Y/%m/%d";}else{if(H==="DD/MM/YYYY"){H="%d/%m/%Y";}else{if(H==="MM/DD/YYYY"){H="%m/%d/%Y";}}}D=D||"en";if(!(D in YAHOO.util.DateLocale)){if(D.replace(/-[a-zA-Z]+$/,"") in YAHOO.util.DateLocale){D=D.replace(/-[a-zA-Z]+$/,"");
-}else{D="en";}}var J=YAHOO.util.DateLocale[D];var C=function(L,K){var M=B.aggregates[K];return(M==="locale"?J[K]:M);};var E=function(L,K){var M=B.formats[K];if(typeof M==="string"){return G[M]();}else{if(typeof M==="function"){return M.call(G,G,J);}else{if(typeof M==="object"&&typeof M[0]==="string"){return A(G[M[0]](),M[1]);}else{return K;}}}};while(H.match(/%[cDFhnrRtTxX]/)){H=H.replace(/%([cDFhnrRtTxX])/g,C);}var I=H.replace(/%([aAbBCdegGHIjklmMpPsSuUVwWyYzZ%])/g,E);C=E=undefined;return I;}};YAHOO.namespace("YAHOO.util");YAHOO.util.Date=B;YAHOO.util.DateLocale={a:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],A:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],B:["January","February","March","April","May","June","July","August","September","October","November","December"],c:"%a %d %b %Y %T %Z",p:["AM","PM"],P:["am","pm"],r:"%I:%M:%S %p",x:"%d/%m/%y",X:"%T"};YAHOO.util.DateLocale["en"]=YAHOO.lang.merge(YAHOO.util.DateLocale,{});YAHOO.util.DateLocale["en-US"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"],{c:"%a %d %b %Y %I:%M:%S %p %Z",x:"%m/%d/%Y",X:"%I:%M:%S %p"});YAHOO.util.DateLocale["en-GB"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"],{r:"%l:%M:%S %P %Z"});YAHOO.util.DateLocale["en-AU"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"]);})();YAHOO.register("datasource",YAHOO.util.DataSource,{version:"2.8.0r4",build:"2449"});
\ No newline at end of file
diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/yui/datasource/datasource.js b/koha-tmpl/intranet-tmpl/prog/en/lib/yui/datasource/datasource.js
deleted file mode 100644 (file)
index 92d8155..0000000
+++ /dev/null
@@ -1,2996 +0,0 @@
-/*
-Copyright (c) 2009, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.8.0r4
-*/
-(function () {
-
-var lang   = YAHOO.lang,
-    util   = YAHOO.util,
-    Ev     = util.Event;
-
-/**
- * The DataSource utility provides a common configurable interface for widgets to
- * access a variety of data, from JavaScript arrays to online database servers.
- *
- * @module datasource
- * @requires yahoo, event
- * @optional json, get, connection 
- * @title DataSource Utility
- */
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * Base class for the YUI DataSource utility.
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.DataSourceBase
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.DataSourceBase = function(oLiveData, oConfigs) {
-    if(oLiveData === null || oLiveData === undefined) {
-        return;
-    }
-    
-    this.liveData = oLiveData;
-    this._oQueue = {interval:null, conn:null, requests:[]};
-    this.responseSchema = {};   
-
-    // Set any config params passed in to override defaults
-    if(oConfigs && (oConfigs.constructor == Object)) {
-        for(var sConfig in oConfigs) {
-            if(sConfig) {
-                this[sConfig] = oConfigs[sConfig];
-            }
-        }
-    }
-    
-    // Validate and initialize public configs
-    var maxCacheEntries = this.maxCacheEntries;
-    if(!lang.isNumber(maxCacheEntries) || (maxCacheEntries < 0)) {
-        maxCacheEntries = 0;
-    }
-
-    // Initialize interval tracker
-    this._aIntervals = [];
-
-    /////////////////////////////////////////////////////////////////////////////
-    //
-    // Custom Events
-    //
-    /////////////////////////////////////////////////////////////////////////////
-
-    /**
-     * Fired when a request is made to the local cache.
-     *
-     * @event cacheRequestEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("cacheRequestEvent");
-
-    /**
-     * Fired when data is retrieved from the local cache.
-     *
-     * @event cacheResponseEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.response {Object} The response object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("cacheResponseEvent");
-
-    /**
-     * Fired when a request is sent to the live data source.
-     *
-     * @event requestEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.tId {Number} Transaction ID.     
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("requestEvent");
-
-    /**
-     * Fired when live data source sends response.
-     *
-     * @event responseEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.response {Object} The raw response object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.tId {Number} Transaction ID.     
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("responseEvent");
-
-    /**
-     * Fired when response is parsed.
-     *
-     * @event responseParseEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.response {Object} The parsed response object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("responseParseEvent");
-
-    /**
-     * Fired when response is cached.
-     *
-     * @event responseCacheEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.response {Object} The parsed response object.
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     */
-    this.createEvent("responseCacheEvent");
-    /**
-     * Fired when an error is encountered with the live data source.
-     *
-     * @event dataErrorEvent
-     * @param oArgs.request {Object} The request object.
-     * @param oArgs.response {String} The response object (if available).
-     * @param oArgs.callback {Object} The callback object.
-     * @param oArgs.caller {Object} (deprecated) Use callback.scope.
-     * @param oArgs.message {String} The error message.
-     */
-    this.createEvent("dataErrorEvent");
-
-    /**
-     * Fired when the local cache is flushed.
-     *
-     * @event cacheFlushEvent
-     */
-    this.createEvent("cacheFlushEvent");
-
-    var DS = util.DataSourceBase;
-    this._sName = "DataSource instance" + DS._nIndex;
-    DS._nIndex++;
-};
-
-var DS = util.DataSourceBase;
-
-lang.augmentObject(DS, {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase public constants
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Type is unknown.
- *
- * @property TYPE_UNKNOWN
- * @type Number
- * @final
- * @default -1
- */
-TYPE_UNKNOWN : -1,
-
-/**
- * Type is a JavaScript Array.
- *
- * @property TYPE_JSARRAY
- * @type Number
- * @final
- * @default 0
- */
-TYPE_JSARRAY : 0,
-
-/**
- * Type is a JavaScript Function.
- *
- * @property TYPE_JSFUNCTION
- * @type Number
- * @final
- * @default 1
- */
-TYPE_JSFUNCTION : 1,
-
-/**
- * Type is hosted on a server via an XHR connection.
- *
- * @property TYPE_XHR
- * @type Number
- * @final
- * @default 2
- */
-TYPE_XHR : 2,
-
-/**
- * Type is JSON.
- *
- * @property TYPE_JSON
- * @type Number
- * @final
- * @default 3
- */
-TYPE_JSON : 3,
-
-/**
- * Type is XML.
- *
- * @property TYPE_XML
- * @type Number
- * @final
- * @default 4
- */
-TYPE_XML : 4,
-
-/**
- * Type is plain text.
- *
- * @property TYPE_TEXT
- * @type Number
- * @final
- * @default 5
- */
-TYPE_TEXT : 5,
-
-/**
- * Type is an HTML TABLE element. Data is parsed out of TR elements from all TBODY elements.
- *
- * @property TYPE_HTMLTABLE
- * @type Number
- * @final
- * @default 6
- */
-TYPE_HTMLTABLE : 6,
-
-/**
- * Type is hosted on a server via a dynamic script node.
- *
- * @property TYPE_SCRIPTNODE
- * @type Number
- * @final
- * @default 7
- */
-TYPE_SCRIPTNODE : 7,
-
-/**
- * Type is local.
- *
- * @property TYPE_LOCAL
- * @type Number
- * @final
- * @default 8
- */
-TYPE_LOCAL : 8,
-
-/**
- * Error message for invalid dataresponses.
- *
- * @property ERROR_DATAINVALID
- * @type String
- * @final
- * @default "Invalid data"
- */
-ERROR_DATAINVALID : "Invalid data",
-
-/**
- * Error message for null data responses.
- *
- * @property ERROR_DATANULL
- * @type String
- * @final
- * @default "Null data"
- */
-ERROR_DATANULL : "Null data",
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase private static properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Internal class variable to index multiple DataSource instances.
- *
- * @property DataSourceBase._nIndex
- * @type Number
- * @private
- * @static
- */
-_nIndex : 0,
-
-/**
- * Internal class variable to assign unique transaction IDs.
- *
- * @property DataSourceBase._nTransactionId
- * @type Number
- * @private
- * @static
- */
-_nTransactionId : 0,
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase private static methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Get an XPath-specified value for a given field from an XML node or document.
- *
- * @method _getLocationValue
- * @param field {String | Object} Field definition.
- * @param context {Object} XML node or document to search within.
- * @return {Object} Data value or null.
- * @static
- * @private
- */
-_getLocationValue: function(field, context) {
-    var locator = field.locator || field.key || field,
-        xmldoc = context.ownerDocument || context,
-        result, res, value = null;
-
-    try {
-        // Standards mode
-        if(!lang.isUndefined(xmldoc.evaluate)) {
-            result = xmldoc.evaluate(locator, context, xmldoc.createNSResolver(!context.ownerDocument ? context.documentElement : context.ownerDocument.documentElement), 0, null);
-            while(res = result.iterateNext()) {
-                value = res.textContent;
-            }
-        }
-        // IE mode
-        else {
-            xmldoc.setProperty("SelectionLanguage", "XPath");
-            result = context.selectNodes(locator)[0];
-            value = result.value || result.text || null;
-        }
-        return value;
-
-    }
-    catch(e) {
-    }
-},
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase public static methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Executes a configured callback.  For object literal callbacks, the third
- * param determines whether to execute the success handler or failure handler.
- *  
- * @method issueCallback
- * @param callback {Function|Object} the callback to execute
- * @param params {Array} params to be passed to the callback method
- * @param error {Boolean} whether an error occurred
- * @param scope {Object} the scope from which to execute the callback
- * (deprecated - use an object literal callback)
- * @static     
- */
-issueCallback : function (callback,params,error,scope) {
-    if (lang.isFunction(callback)) {
-        callback.apply(scope, params);
-    } else if (lang.isObject(callback)) {
-        scope = callback.scope || scope || window;
-        var callbackFunc = callback.success;
-        if (error) {
-            callbackFunc = callback.failure;
-        }
-        if (callbackFunc) {
-            callbackFunc.apply(scope, params.concat([callback.argument]));
-        }
-    }
-},
-
-/**
- * Converts data to type String.
- *
- * @method DataSourceBase.parseString
- * @param oData {String | Number | Boolean | Date | Array | Object} Data to parse.
- * The special values null and undefined will return null.
- * @return {String} A string, or null.
- * @static
- */
-parseString : function(oData) {
-    // Special case null and undefined
-    if(!lang.isValue(oData)) {
-        return null;
-    }
-    
-    //Convert to string
-    var string = oData + "";
-
-    // Validate
-    if(lang.isString(string)) {
-        return string;
-    }
-    else {
-        return null;
-    }
-},
-
-/**
- * Converts data to type Number.
- *
- * @method DataSourceBase.parseNumber
- * @param oData {String | Number | Boolean} Data to convert. Note, the following
- * values return as null: null, undefined, NaN, "". 
- * @return {Number} A number, or null.
- * @static
- */
-parseNumber : function(oData) {
-    if(!lang.isValue(oData) || (oData === "")) {
-        return null;
-    }
-
-    //Convert to number
-    var number = oData * 1;
-    
-    // Validate
-    if(lang.isNumber(number)) {
-        return number;
-    }
-    else {
-        return null;
-    }
-},
-// Backward compatibility
-convertNumber : function(oData) {
-    return DS.parseNumber(oData);
-},
-
-/**
- * Converts data to type Date.
- *
- * @method DataSourceBase.parseDate
- * @param oData {Date | String | Number} Data to convert.
- * @return {Date} A Date instance.
- * @static
- */
-parseDate : function(oData) {
-    var date = null;
-    
-    //Convert to date
-    if(!(oData instanceof Date)) {
-        date = new Date(oData);
-    }
-    else {
-        return oData;
-    }
-    
-    // Validate
-    if(date instanceof Date) {
-        return date;
-    }
-    else {
-        return null;
-    }
-},
-// Backward compatibility
-convertDate : function(oData) {
-    return DS.parseDate(oData);
-}
-
-});
-
-// Done in separate step so referenced functions are defined.
-/**
- * Data parsing functions.
- * @property DataSource.Parser
- * @type Object
- * @static
- */
-DS.Parser = {
-    string   : DS.parseString,
-    number   : DS.parseNumber,
-    date     : DS.parseDate
-};
-
-// Prototype properties and methods
-DS.prototype = {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase private properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Name of DataSource instance.
- *
- * @property _sName
- * @type String
- * @private
- */
-_sName : null,
-
-/**
- * Local cache of data result object literals indexed chronologically.
- *
- * @property _aCache
- * @type Object[]
- * @private
- */
-_aCache : null,
-
-/**
- * Local queue of request connections, enabled if queue needs to be managed.
- *
- * @property _oQueue
- * @type Object
- * @private
- */
-_oQueue : null,
-
-/**
- * Array of polling interval IDs that have been enabled, needed to clear all intervals.
- *
- * @property _aIntervals
- * @type Array
- * @private
- */
-_aIntervals : null,
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase public properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Max size of the local cache.  Set to 0 to turn off caching.  Caching is
- * useful to reduce the number of server connections.  Recommended only for data
- * sources that return comprehensive results for queries or when stale data is
- * not an issue.
- *
- * @property maxCacheEntries
- * @type Number
- * @default 0
- */
-maxCacheEntries : 0,
-
- /**
- * Pointer to live database.
- *
- * @property liveData
- * @type Object
- */
-liveData : null,
-
-/**
- * Where the live data is held:
- * 
- * <dl>  
- *    <dt>TYPE_UNKNOWN</dt>
- *    <dt>TYPE_LOCAL</dt>
- *    <dt>TYPE_XHR</dt>
- *    <dt>TYPE_SCRIPTNODE</dt>
- *    <dt>TYPE_JSFUNCTION</dt>
- * </dl> 
- *  
- * @property dataType
- * @type Number
- * @default YAHOO.util.DataSourceBase.TYPE_UNKNOWN
- *
- */
-dataType : DS.TYPE_UNKNOWN,
-
-/**
- * Format of response:
- *  
- * <dl>  
- *    <dt>TYPE_UNKNOWN</dt>
- *    <dt>TYPE_JSARRAY</dt>
- *    <dt>TYPE_JSON</dt>
- *    <dt>TYPE_XML</dt>
- *    <dt>TYPE_TEXT</dt>
- *    <dt>TYPE_HTMLTABLE</dt> 
- * </dl> 
- *
- * @property responseType
- * @type Number
- * @default YAHOO.util.DataSourceBase.TYPE_UNKNOWN
- */
-responseType : DS.TYPE_UNKNOWN,
-
-/**
- * Response schema object literal takes a combination of the following properties:
- *
- * <dl>
- * <dt>resultsList</dt> <dd>Pointer to array of tabular data</dd>
- * <dt>resultNode</dt> <dd>Pointer to node name of row data (XML data only)</dd>
- * <dt>recordDelim</dt> <dd>Record delimiter (text data only)</dd>
- * <dt>fieldDelim</dt> <dd>Field delimiter (text data only)</dd>
- * <dt>fields</dt> <dd>Array of field names (aka keys), or array of object literals
- * such as: {key:"fieldname",parser:YAHOO.util.DataSourceBase.parseDate}</dd>
- * <dt>metaFields</dt> <dd>Object literal of keys to include in the oParsedResponse.meta collection</dd>
- * <dt>metaNode</dt> <dd>Name of the node under which to search for meta information in XML response data</dd>
- * </dl>
- *
- * @property responseSchema
- * @type Object
- */
-responseSchema : null,
-
-/**
- * Additional arguments passed to the JSON parse routine.  The JSON string
- * is the assumed first argument (where applicable).  This property is not
- * set by default, but the parse methods will use it if present.
- *
- * @property parseJSONArgs
- * @type {MIXED|Array} If an Array, contents are used as individual arguments.
- *                     Otherwise, value is used as an additional argument.
- */
-// property intentionally undefined
-/**
- * When working with XML data, setting this property to true enables support for
- * XPath-syntaxed locators in schema definitions.
- *
- * @property useXPath
- * @type Boolean
- * @default false
- */
-useXPath : false,
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DataSourceBase public methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Public accessor to the unique name of the DataSource instance.
- *
- * @method toString
- * @return {String} Unique name of the DataSource instance.
- */
-toString : function() {
-    return this._sName;
-},
-
-/**
- * Overridable method passes request to cache and returns cached response if any,
- * refreshing the hit in the cache as the newest item. Returns null if there is
- * no cache hit.
- *
- * @method getCachedResponse
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} Callback object.
- * @param oCaller {Object} (deprecated) Use callback object.
- * @return {Object} Cached response object or null.
- */
-getCachedResponse : function(oRequest, oCallback, oCaller) {
-    var aCache = this._aCache;
-
-    // If cache is enabled...
-    if(this.maxCacheEntries > 0) {        
-        // Initialize local cache
-        if(!aCache) {
-            this._aCache = [];
-        }
-        // Look in local cache
-        else {
-            var nCacheLength = aCache.length;
-            if(nCacheLength > 0) {
-                var oResponse = null;
-                this.fireEvent("cacheRequestEvent", {request:oRequest,callback:oCallback,caller:oCaller});
-        
-                // Loop through each cached element
-                for(var i = nCacheLength-1; i >= 0; i--) {
-                    var oCacheElem = aCache[i];
-        
-                    // Defer cache hit logic to a public overridable method
-                    if(this.isCacheHit(oRequest,oCacheElem.request)) {
-                        // The cache returned a hit!
-                        // Grab the cached response
-                        oResponse = oCacheElem.response;
-                        this.fireEvent("cacheResponseEvent", {request:oRequest,response:oResponse,callback:oCallback,caller:oCaller});
-                        
-                        // Refresh the position of the cache hit
-                        if(i < nCacheLength-1) {
-                            // Remove element from its original location
-                            aCache.splice(i,1);
-                            // Add as newest
-                            this.addToCache(oRequest, oResponse);
-                        }
-                        
-                        // Add a cache flag
-                        oResponse.cached = true;
-                        break;
-                    }
-                }
-                return oResponse;
-            }
-        }
-    }
-    else if(aCache) {
-        this._aCache = null;
-    }
-    return null;
-},
-
-/**
- * Default overridable method matches given request to given cached request.
- * Returns true if is a hit, returns false otherwise.  Implementers should
- * override this method to customize the cache-matching algorithm.
- *
- * @method isCacheHit
- * @param oRequest {Object} Request object.
- * @param oCachedRequest {Object} Cached request object.
- * @return {Boolean} True if given request matches cached request, false otherwise.
- */
-isCacheHit : function(oRequest, oCachedRequest) {
-    return (oRequest === oCachedRequest);
-},
-
-/**
- * Adds a new item to the cache. If cache is full, evicts the stalest item
- * before adding the new item.
- *
- * @method addToCache
- * @param oRequest {Object} Request object.
- * @param oResponse {Object} Response object to cache.
- */
-addToCache : function(oRequest, oResponse) {
-    var aCache = this._aCache;
-    if(!aCache) {
-        return;
-    }
-
-    // If the cache is full, make room by removing stalest element (index=0)
-    while(aCache.length >= this.maxCacheEntries) {
-        aCache.shift();
-    }
-
-    // Add to cache in the newest position, at the end of the array
-    var oCacheElem = {request:oRequest,response:oResponse};
-    aCache[aCache.length] = oCacheElem;
-    this.fireEvent("responseCacheEvent", {request:oRequest,response:oResponse});
-},
-
-/**
- * Flushes cache.
- *
- * @method flushCache
- */
-flushCache : function() {
-    if(this._aCache) {
-        this._aCache = [];
-        this.fireEvent("cacheFlushEvent");
-    }
-},
-
-/**
- * Sets up a polling mechanism to send requests at set intervals and forward
- * responses to given callback.
- *
- * @method setInterval
- * @param nMsec {Number} Length of interval in milliseconds.
- * @param oRequest {Object} Request object.
- * @param oCallback {Function} Handler function to receive the response.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Interval ID.
- */
-setInterval : function(nMsec, oRequest, oCallback, oCaller) {
-    if(lang.isNumber(nMsec) && (nMsec >= 0)) {
-        var oSelf = this;
-        var nId = setInterval(function() {
-            oSelf.makeConnection(oRequest, oCallback, oCaller);
-        }, nMsec);
-        this._aIntervals.push(nId);
-        return nId;
-    }
-    else {
-    }
-},
-
-/**
- * Disables polling mechanism associated with the given interval ID.
- *
- * @method clearInterval
- * @param nId {Number} Interval ID.
- */
-clearInterval : function(nId) {
-    // Remove from tracker if there
-    var tracker = this._aIntervals || [];
-    for(var i=tracker.length-1; i>-1; i--) {
-        if(tracker[i] === nId) {
-            tracker.splice(i,1);
-            clearInterval(nId);
-        }
-    }
-},
-
-/**
- * Disables all known polling intervals.
- *
- * @method clearAllIntervals
- */
-clearAllIntervals : function() {
-    var tracker = this._aIntervals || [];
-    for(var i=tracker.length-1; i>-1; i--) {
-        clearInterval(tracker[i]);
-    }
-    tracker = [];
-},
-
-/**
- * First looks for cached response, then sends request to live data. The
- * following arguments are passed to the callback function:
- *     <dl>
- *     <dt><code>oRequest</code></dt>
- *     <dd>The same value that was passed in as the first argument to sendRequest.</dd>
- *     <dt><code>oParsedResponse</code></dt>
- *     <dd>An object literal containing the following properties:
- *         <dl>
- *         <dt><code>tId</code></dt>
- *         <dd>Unique transaction ID number.</dd>
- *         <dt><code>results</code></dt>
- *         <dd>Schema-parsed data results.</dd>
- *         <dt><code>error</code></dt>
- *         <dd>True in cases of data error.</dd>
- *         <dt><code>cached</code></dt>
- *         <dd>True when response is returned from DataSource cache.</dd> 
- *         <dt><code>meta</code></dt>
- *         <dd>Schema-parsed meta data.</dd>
- *         </dl>
- *     <dt><code>oPayload</code></dt>
- *     <dd>The same value as was passed in as <code>argument</code> in the oCallback object literal.</dd>
- *     </dl> 
- *
- * @method sendRequest
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} An object literal with the following properties:
- *     <dl>
- *     <dt><code>success</code></dt>
- *     <dd>The function to call when the data is ready.</dd>
- *     <dt><code>failure</code></dt>
- *     <dd>The function to call upon a response failure condition.</dd>
- *     <dt><code>scope</code></dt>
- *     <dd>The object to serve as the scope for the success and failure handlers.</dd>
- *     <dt><code>argument</code></dt>
- *     <dd>Arbitrary data that will be passed back to the success and failure handlers.</dd>
- *     </dl> 
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Transaction ID, or null if response found in cache.
- */
-sendRequest : function(oRequest, oCallback, oCaller) {
-    // First look in cache
-    var oCachedResponse = this.getCachedResponse(oRequest, oCallback, oCaller);
-    if(oCachedResponse) {
-        DS.issueCallback(oCallback,[oRequest,oCachedResponse],false,oCaller);
-        return null;
-    }
-
-
-    // Not in cache, so forward request to live data
-    return this.makeConnection(oRequest, oCallback, oCaller);
-},
-
-/**
- * Overridable default method generates a unique transaction ID and passes 
- * the live data reference directly to the  handleResponse function. This
- * method should be implemented by subclasses to achieve more complex behavior
- * or to access remote data.          
- *
- * @method makeConnection
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} Callback object literal.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Transaction ID.
- */
-makeConnection : function(oRequest, oCallback, oCaller) {
-    var tId = DS._nTransactionId++;
-    this.fireEvent("requestEvent", {tId:tId, request:oRequest,callback:oCallback,caller:oCaller});
-
-    /* accounts for the following cases:
-    YAHOO.util.DataSourceBase.TYPE_UNKNOWN
-    YAHOO.util.DataSourceBase.TYPE_JSARRAY
-    YAHOO.util.DataSourceBase.TYPE_JSON
-    YAHOO.util.DataSourceBase.TYPE_HTMLTABLE
-    YAHOO.util.DataSourceBase.TYPE_XML
-    YAHOO.util.DataSourceBase.TYPE_TEXT
-    */
-    var oRawResponse = this.liveData;
-    
-    this.handleResponse(oRequest, oRawResponse, oCallback, oCaller, tId);
-    return tId;
-},
-
-/**
- * Receives raw data response and type converts to XML, JSON, etc as necessary.
- * Forwards oFullResponse to appropriate parsing function to get turned into
- * oParsedResponse. Calls doBeforeCallback() and adds oParsedResponse to 
- * the cache when appropriate before calling issueCallback().
- * 
- * The oParsedResponse object literal has the following properties:
- * <dl>
- *     <dd><dt>tId {Number}</dt> Unique transaction ID</dd>
- *     <dd><dt>results {Array}</dt> Array of parsed data results</dd>
- *     <dd><dt>meta {Object}</dt> Object literal of meta values</dd> 
- *     <dd><dt>error {Boolean}</dt> (optional) True if there was an error</dd>
- *     <dd><dt>cached {Boolean}</dt> (optional) True if response was cached</dd>
- * </dl>
- *
- * @method handleResponse
- * @param oRequest {Object} Request object
- * @param oRawResponse {Object} The raw response from the live database.
- * @param oCallback {Object} Callback object literal.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @param tId {Number} Transaction ID.
- */
-handleResponse : function(oRequest, oRawResponse, oCallback, oCaller, tId) {
-    this.fireEvent("responseEvent", {tId:tId, request:oRequest, response:oRawResponse,
-            callback:oCallback, caller:oCaller});
-    var xhr = (this.dataType == DS.TYPE_XHR) ? true : false;
-    var oParsedResponse = null;
-    var oFullResponse = oRawResponse;
-    
-    // Try to sniff data type if it has not been defined
-    if(this.responseType === DS.TYPE_UNKNOWN) {
-        var ctype = (oRawResponse && oRawResponse.getResponseHeader) ? oRawResponse.getResponseHeader["Content-Type"] : null;
-        if(ctype) {
-             // xml
-            if(ctype.indexOf("text/xml") > -1) {
-                this.responseType = DS.TYPE_XML;
-            }
-            else if(ctype.indexOf("application/json") > -1) { // json
-                this.responseType = DS.TYPE_JSON;
-            }
-            else if(ctype.indexOf("text/plain") > -1) { // text
-                this.responseType = DS.TYPE_TEXT;
-            }
-        }
-        else {
-            if(YAHOO.lang.isArray(oRawResponse)) { // array
-                this.responseType = DS.TYPE_JSARRAY;
-            }
-             // xml
-            else if(oRawResponse && oRawResponse.nodeType && (oRawResponse.nodeType === 9 || oRawResponse.nodeType === 1 || oRawResponse.nodeType === 11)) {
-                this.responseType = DS.TYPE_XML;
-            }
-            else if(oRawResponse && oRawResponse.nodeName && (oRawResponse.nodeName.toLowerCase() == "table")) { // table
-                this.responseType = DS.TYPE_HTMLTABLE;
-            }    
-            else if(YAHOO.lang.isObject(oRawResponse)) { // json
-                this.responseType = DS.TYPE_JSON;
-            }
-            else if(YAHOO.lang.isString(oRawResponse)) { // text
-                this.responseType = DS.TYPE_TEXT;
-            }
-        }
-    }
-
-    switch(this.responseType) {
-        case DS.TYPE_JSARRAY:
-            if(xhr && oRawResponse && oRawResponse.responseText) {
-                oFullResponse = oRawResponse.responseText; 
-            }
-            try {
-                // Convert to JS array if it's a string
-                if(lang.isString(oFullResponse)) {
-                    var parseArgs = [oFullResponse].concat(this.parseJSONArgs);
-                    // Check for YUI JSON Util
-                    if(lang.JSON) {
-                        oFullResponse = lang.JSON.parse.apply(lang.JSON,parseArgs);
-                    }
-                    // Look for JSON parsers using an API similar to json2.js
-                    else if(window.JSON && JSON.parse) {
-                        oFullResponse = JSON.parse.apply(JSON,parseArgs);
-                    }
-                    // Look for JSON parsers using an API similar to json.js
-                    else if(oFullResponse.parseJSON) {
-                        oFullResponse = oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));
-                    }
-                    // No JSON lib found so parse the string
-                    else {
-                        // Trim leading spaces
-                        while (oFullResponse.length > 0 &&
-                                (oFullResponse.charAt(0) != "{") &&
-                                (oFullResponse.charAt(0) != "[")) {
-                            oFullResponse = oFullResponse.substring(1, oFullResponse.length);
-                        }
-
-                        if(oFullResponse.length > 0) {
-                            // Strip extraneous stuff at the end
-                            var arrayEnd =
-Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));
-                            oFullResponse = oFullResponse.substring(0,arrayEnd+1);
-
-                            // Turn the string into an object literal...
-                            // ...eval is necessary here
-                            oFullResponse = eval("(" + oFullResponse + ")");
-
-                        }
-                    }
-                }
-            }
-            catch(e1) {
-            }
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseArrayData(oRequest, oFullResponse);
-            break;
-        case DS.TYPE_JSON:
-            if(xhr && oRawResponse && oRawResponse.responseText) {
-                oFullResponse = oRawResponse.responseText;
-            }
-            try {
-                // Convert to JSON object if it's a string
-                if(lang.isString(oFullResponse)) {
-                    var parseArgs = [oFullResponse].concat(this.parseJSONArgs);
-                    // Check for YUI JSON Util
-                    if(lang.JSON) {
-                        oFullResponse = lang.JSON.parse.apply(lang.JSON,parseArgs);
-                    }
-                    // Look for JSON parsers using an API similar to json2.js
-                    else if(window.JSON && JSON.parse) {
-                        oFullResponse = JSON.parse.apply(JSON,parseArgs);
-                    }
-                    // Look for JSON parsers using an API similar to json.js
-                    else if(oFullResponse.parseJSON) {
-                        oFullResponse = oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));
-                    }
-                    // No JSON lib found so parse the string
-                    else {
-                        // Trim leading spaces
-                        while (oFullResponse.length > 0 &&
-                                (oFullResponse.charAt(0) != "{") &&
-                                (oFullResponse.charAt(0) != "[")) {
-                            oFullResponse = oFullResponse.substring(1, oFullResponse.length);
-                        }
-    
-                        if(oFullResponse.length > 0) {
-                            // Strip extraneous stuff at the end
-                            var objEnd = Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));
-                            oFullResponse = oFullResponse.substring(0,objEnd+1);
-    
-                            // Turn the string into an object literal...
-                            // ...eval is necessary here
-                            oFullResponse = eval("(" + oFullResponse + ")");
-    
-                        }
-                    }
-                }
-            }
-            catch(e) {
-            }
-
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseJSONData(oRequest, oFullResponse);
-            break;
-        case DS.TYPE_HTMLTABLE:
-            if(xhr && oRawResponse.responseText) {
-                var el = document.createElement('div');
-                el.innerHTML = oRawResponse.responseText;
-                oFullResponse = el.getElementsByTagName('table')[0];
-            }
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseHTMLTableData(oRequest, oFullResponse);
-            break;
-        case DS.TYPE_XML:
-            if(xhr && oRawResponse.responseXML) {
-                oFullResponse = oRawResponse.responseXML;
-            }
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseXMLData(oRequest, oFullResponse);
-            break;
-        case DS.TYPE_TEXT:
-            if(xhr && lang.isString(oRawResponse.responseText)) {
-                oFullResponse = oRawResponse.responseText;
-            }
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseTextData(oRequest, oFullResponse);
-            break;
-        default:
-            oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
-            oParsedResponse = this.parseData(oRequest, oFullResponse);
-            break;
-    }
-
-
-    // Clean up for consistent signature
-    oParsedResponse = oParsedResponse || {};
-    if(!oParsedResponse.results) {
-        oParsedResponse.results = [];
-    }
-    if(!oParsedResponse.meta) {
-        oParsedResponse.meta = {};
-    }
-
-    // Success
-    if(!oParsedResponse.error) {
-        // Last chance to touch the raw response or the parsed response
-        oParsedResponse = this.doBeforeCallback(oRequest, oFullResponse, oParsedResponse, oCallback);
-        this.fireEvent("responseParseEvent", {request:oRequest,
-                response:oParsedResponse, callback:oCallback, caller:oCaller});
-        // Cache the response
-        this.addToCache(oRequest, oParsedResponse);
-    }
-    // Error
-    else {
-        // Be sure the error flag is on
-        oParsedResponse.error = true;
-        this.fireEvent("dataErrorEvent", {request:oRequest, response: oRawResponse, callback:oCallback, 
-                caller:oCaller, message:DS.ERROR_DATANULL});
-    }
-
-    // Send the response back to the caller
-    oParsedResponse.tId = tId;
-    DS.issueCallback(oCallback,[oRequest,oParsedResponse],oParsedResponse.error,oCaller);
-},
-
-/**
- * Overridable method gives implementers access to the original full response
- * before the data gets parsed. Implementers should take care not to return an
- * unparsable or otherwise invalid response.
- *
- * @method doBeforeParseData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full response from the live database.
- * @param oCallback {Object} The callback object.  
- * @return {Object} Full response for parsing.
-  
- */
-doBeforeParseData : function(oRequest, oFullResponse, oCallback) {
-    return oFullResponse;
-},
-
-/**
- * Overridable method gives implementers access to the original full response and
- * the parsed response (parsed against the given schema) before the data
- * is added to the cache (if applicable) and then sent back to callback function.
- * This is your chance to access the raw response and/or populate the parsed
- * response with any custom data.
- *
- * @method doBeforeCallback
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full response from the live database.
- * @param oParsedResponse {Object} The parsed response to return to calling object.
- * @param oCallback {Object} The callback object. 
- * @return {Object} Parsed response object.
- */
-doBeforeCallback : function(oRequest, oFullResponse, oParsedResponse, oCallback) {
-    return oParsedResponse;
-},
-
-/**
- * Overridable method parses data of generic RESPONSE_TYPE into a response object.
- *
- * @method parseData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full Array from the live database.
- * @return {Object} Parsed response object with the following properties:<br>
- *     - results {Array} Array of parsed data results<br>
- *     - meta {Object} Object literal of meta values<br>
- *     - error {Boolean} (optional) True if there was an error<br>
- */
-parseData : function(oRequest, oFullResponse) {
-    if(lang.isValue(oFullResponse)) {
-        var oParsedResponse = {results:oFullResponse,meta:{}};
-        return oParsedResponse;
-
-    }
-    return null;
-},
-
-/**
- * Overridable method parses Array data into a response object.
- *
- * @method parseArrayData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full Array from the live database.
- * @return {Object} Parsed response object with the following properties:<br>
- *     - results (Array) Array of parsed data results<br>
- *     - error (Boolean) True if there was an error
- */
-parseArrayData : function(oRequest, oFullResponse) {
-    if(lang.isArray(oFullResponse)) {
-        var results = [],
-            i, j,
-            rec, field, data;
-        
-        // Parse for fields
-        if(lang.isArray(this.responseSchema.fields)) {
-            var fields = this.responseSchema.fields;
-            for (i = fields.length - 1; i >= 0; --i) {
-                if (typeof fields[i] !== 'object') {
-                    fields[i] = { key : fields[i] };
-                }
-            }
-
-            var parsers = {}, p;
-            for (i = fields.length - 1; i >= 0; --i) {
-                p = (typeof fields[i].parser === 'function' ?
-                          fields[i].parser :
-                          DS.Parser[fields[i].parser+'']) || fields[i].converter;
-                if (p) {
-                    parsers[fields[i].key] = p;
-                }
-            }
-
-            var arrType = lang.isArray(oFullResponse[0]);
-            for(i=oFullResponse.length-1; i>-1; i--) {
-                var oResult = {};
-                rec = oFullResponse[i];
-                if (typeof rec === 'object') {
-                    for(j=fields.length-1; j>-1; j--) {
-                        field = fields[j];
-                        data = arrType ? rec[j] : rec[field.key];
-
-                        if (parsers[field.key]) {
-                            data = parsers[field.key].call(this,data);
-                        }
-
-                        // Safety measure
-                        if(data === undefined) {
-                            data = null;
-                        }
-
-                        oResult[field.key] = data;
-                    }
-                }
-                else if (lang.isString(rec)) {
-                    for(j=fields.length-1; j>-1; j--) {
-                        field = fields[j];
-                        data = rec;
-
-                        if (parsers[field.key]) {
-                            data = parsers[field.key].call(this,data);
-                        }
-
-                        // Safety measure
-                        if(data === undefined) {
-                            data = null;
-                        }
-
-                        oResult[field.key] = data;
-                    }                
-                }
-                results[i] = oResult;
-            }    
-        }
-        // Return entire data set
-        else {
-            results = oFullResponse;
-        }
-        var oParsedResponse = {results:results};
-        return oParsedResponse;
-
-    }
-    return null;
-},
-
-/**
- * Overridable method parses plain text data into a response object.
- *
- * @method parseTextData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full text response from the live database.
- * @return {Object} Parsed response object with the following properties:<br>
- *     - results (Array) Array of parsed data results<br>
- *     - error (Boolean) True if there was an error
- */
-parseTextData : function(oRequest, oFullResponse) {
-    if(lang.isString(oFullResponse)) {
-        if(lang.isString(this.responseSchema.recordDelim) &&
-                lang.isString(this.responseSchema.fieldDelim)) {
-            var oParsedResponse = {results:[]};
-            var recDelim = this.responseSchema.recordDelim;
-            var fieldDelim = this.responseSchema.fieldDelim;
-            if(oFullResponse.length > 0) {
-                // Delete the last line delimiter at the end of the data if it exists
-                var newLength = oFullResponse.length-recDelim.length;
-                if(oFullResponse.substr(newLength) == recDelim) {
-                    oFullResponse = oFullResponse.substr(0, newLength);
-                }
-                if(oFullResponse.length > 0) {
-                    // Split along record delimiter to get an array of strings
-                    var recordsarray = oFullResponse.split(recDelim);
-                    // Cycle through each record
-                    for(var i = 0, len = recordsarray.length, recIdx = 0; i < len; ++i) {
-                        var bError = false,
-                            sRecord = recordsarray[i];
-                        if (lang.isString(sRecord) && (sRecord.length > 0)) {
-                            // Split each record along field delimiter to get data
-                            var fielddataarray = recordsarray[i].split(fieldDelim);
-                            var oResult = {};
-                            
-                            // Filter for fields data
-                            if(lang.isArray(this.responseSchema.fields)) {
-                                var fields = this.responseSchema.fields;
-                                for(var j=fields.length-1; j>-1; j--) {
-                                    try {
-                                        // Remove quotation marks from edges, if applicable
-                                        var data = fielddataarray[j];
-                                        if (lang.isString(data)) {
-                                            if(data.charAt(0) == "\"") {
-                                                data = data.substr(1);
-                                            }
-                                            if(data.charAt(data.length-1) == "\"") {
-                                                data = data.substr(0,data.length-1);
-                                            }
-                                            var field = fields[j];
-                                            var key = (lang.isValue(field.key)) ? field.key : field;
-                                            // Backward compatibility
-                                            if(!field.parser && field.converter) {
-                                                field.parser = field.converter;
-                                            }
-                                            var parser = (typeof field.parser === 'function') ?
-                                                field.parser :
-                                                DS.Parser[field.parser+''];
-                                            if(parser) {
-                                                data = parser.call(this, data);
-                                            }
-                                            // Safety measure
-                                            if(data === undefined) {
-                                                data = null;
-                                            }
-                                            oResult[key] = data;
-                                        }
-                                        else {
-                                            bError = true;
-                                        }
-                                    }
-                                    catch(e) {
-                                        bError = true;
-                                    }
-                                }
-                            }            
-                            // No fields defined so pass along all data as an array
-                            else {
-                                oResult = fielddataarray;
-                            }
-                            if(!bError) {
-                                oParsedResponse.results[recIdx++] = oResult;
-                            }
-                        }
-                    }
-                }
-            }
-            return oParsedResponse;
-        }
-    }
-    return null;
-            
-},
-
-/**
- * Overridable method parses XML data for one result into an object literal.
- *
- * @method parseXMLResult
- * @param result {XML} XML for one result.
- * @return {Object} Object literal of data for one result.
- */
-parseXMLResult : function(result) {
-    var oResult = {},
-        schema = this.responseSchema;
-        
-    try {
-        // Loop through each data field in each result using the schema
-        for(var m = schema.fields.length-1; m >= 0 ; m--) {
-            var field = schema.fields[m];
-            var key = (lang.isValue(field.key)) ? field.key : field;
-            var data = null;
-
-            if(this.useXPath) {
-                data = YAHOO.util.DataSource._getLocationValue(field, result);
-            }
-            else {
-                // Values may be held in an attribute...
-                var xmlAttr = result.attributes.getNamedItem(key);
-                if(xmlAttr) {
-                    data = xmlAttr.value;
-                }
-                // ...or in a node
-                else {
-                    var xmlNode = result.getElementsByTagName(key);
-                    if(xmlNode && xmlNode.item(0)) {
-                        var item = xmlNode.item(0);
-                        // For IE, then DOM...
-                        data = (item) ? ((item.text) ? item.text : (item.textContent) ? item.textContent : null) : null;
-                        // ...then fallback, but check for multiple child nodes
-                        if(!data) {
-                            var datapieces = [];
-                            for(var j=0, len=item.childNodes.length; j<len; j++) {
-                                if(item.childNodes[j].nodeValue) {
-                                    datapieces[datapieces.length] = item.childNodes[j].nodeValue;
-                                }
-                            }
-                            if(datapieces.length > 0) {
-                                data = datapieces.join("");
-                            }
-                        }
-                    }
-                }
-            }
-            
-            
-            // Safety net
-            if(data === null) {
-                   data = "";
-            }
-            // Backward compatibility
-            if(!field.parser && field.converter) {
-                field.parser = field.converter;
-            }
-            var parser = (typeof field.parser === 'function') ?
-                field.parser :
-                DS.Parser[field.parser+''];
-            if(parser) {
-                data = parser.call(this, data);
-            }
-            // Safety measure
-            if(data === undefined) {
-                data = null;
-            }
-            oResult[key] = data;
-        }
-    }
-    catch(e) {
-    }
-
-    return oResult;
-},
-
-
-
-/**
- * Overridable method parses XML data into a response object.
- *
- * @method parseXMLData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full XML response from the live database.
- * @return {Object} Parsed response object with the following properties<br>
- *     - results (Array) Array of parsed data results<br>
- *     - error (Boolean) True if there was an error
- */
-parseXMLData : function(oRequest, oFullResponse) {
-    var bError = false,
-        schema = this.responseSchema,
-        oParsedResponse = {meta:{}},
-        xmlList = null,
-        metaNode      = schema.metaNode,
-        metaLocators  = schema.metaFields || {},
-        i,k,loc,v;
-
-    // In case oFullResponse is something funky
-    try {
-        // Pull any meta identified
-        if(this.useXPath) {
-            for (k in metaLocators) {
-                oParsedResponse.meta[k] = YAHOO.util.DataSource._getLocationValue(metaLocators[k], oFullResponse);
-            }
-        }
-        else {
-            metaNode = metaNode ? oFullResponse.getElementsByTagName(metaNode)[0] :
-                       oFullResponse;
-
-            if (metaNode) {
-                for (k in metaLocators) {
-                    if (lang.hasOwnProperty(metaLocators, k)) {
-                        loc = metaLocators[k];
-                        // Look for a node
-                        v = metaNode.getElementsByTagName(loc)[0];
-
-                        if (v) {
-                            v = v.firstChild.nodeValue;
-                        } else {
-                            // Look for an attribute
-                            v = metaNode.attributes.getNamedItem(loc);
-                            if (v) {
-                                v = v.value;
-                            }
-                        }
-
-                        if (lang.isValue(v)) {
-                            oParsedResponse.meta[k] = v;
-                        }
-                    }
-                }
-            }
-        }
-        
-        // For result data
-        xmlList = (schema.resultNode) ?
-            oFullResponse.getElementsByTagName(schema.resultNode) :
-            null;
-    }
-    catch(e) {
-    }
-    if(!xmlList || !lang.isArray(schema.fields)) {
-        bError = true;
-    }
-    // Loop through each result
-    else {
-        oParsedResponse.results = [];
-        for(i = xmlList.length-1; i >= 0 ; --i) {
-            var oResult = this.parseXMLResult(xmlList.item(i));
-            // Capture each array of values into an array of results
-            oParsedResponse.results[i] = oResult;
-        }
-    }
-    if(bError) {
-        oParsedResponse.error = true;
-    }
-    else {
-    }
-    return oParsedResponse;
-},
-
-/**
- * Overridable method parses JSON data into a response object.
- *
- * @method parseJSONData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full JSON from the live database.
- * @return {Object} Parsed response object with the following properties<br>
- *     - results (Array) Array of parsed data results<br>
- *     - error (Boolean) True if there was an error
- */
-parseJSONData : function(oRequest, oFullResponse) {
-    var oParsedResponse = {results:[],meta:{}};
-    
-    if(lang.isObject(oFullResponse) && this.responseSchema.resultsList) {
-        var schema = this.responseSchema,
-            fields          = schema.fields,
-            resultsList     = oFullResponse,
-            results         = [],
-            metaFields      = schema.metaFields || {},
-            fieldParsers    = [],
-            fieldPaths      = [],
-            simpleFields    = [],
-            bError          = false,
-            i,len,j,v,key,parser,path;
-
-        // Function to convert the schema's fields into walk paths
-        var buildPath = function (needle) {
-            var path = null, keys = [], i = 0;
-            if (needle) {
-                // Strip the ["string keys"] and [1] array indexes
-                needle = needle.
-                    replace(/\[(['"])(.*?)\1\]/g,
-                    function (x,$1,$2) {keys[i]=$2;return '.@'+(i++);}).
-                    replace(/\[(\d+)\]/g,
-                    function (x,$1) {keys[i]=parseInt($1,10)|0;return '.@'+(i++);}).
-                    replace(/^\./,''); // remove leading dot
-
-                // If the cleaned needle contains invalid characters, the
-                // path is invalid
-                if (!/[^\w\.\$@]/.test(needle)) {
-                    path = needle.split('.');
-                    for (i=path.length-1; i >= 0; --i) {
-                        if (path[i].charAt(0) === '@') {
-                            path[i] = keys[parseInt(path[i].substr(1),10)];
-                        }
-                    }
-                }
-                else {
-                }
-            }
-            return path;
-        };
-
-
-        // Function to walk a path and return the pot of gold
-        var walkPath = function (path, origin) {
-            var v=origin,i=0,len=path.length;
-            for (;i<len && v;++i) {
-                v = v[path[i]];
-            }
-            return v;
-        };
-
-        // Parse the response
-        // Step 1. Pull the resultsList from oFullResponse (default assumes
-        // oFullResponse IS the resultsList)
-        path = buildPath(schema.resultsList);
-        if (path) {
-            resultsList = walkPath(path, oFullResponse);
-            if (resultsList === undefined) {
-                bError = true;
-            }
-        } else {
-            bError = true;
-        }
-        
-        if (!resultsList) {
-            resultsList = [];
-        }
-
-        if (!lang.isArray(resultsList)) {
-            resultsList = [resultsList];
-        }
-
-        if (!bError) {
-            // Step 2. Parse out field data if identified
-            if(schema.fields) {
-                var field;
-                // Build the field parser map and location paths
-                for (i=0, len=fields.length; i<len; i++) {
-                    field = fields[i];
-                    key    = field.key || field;
-                    parser = ((typeof field.parser === 'function') ?
-                        field.parser :
-                        DS.Parser[field.parser+'']) || field.converter;
-                    path   = buildPath(key);
-    
-                    if (parser) {
-                        fieldParsers[fieldParsers.length] = {key:key,parser:parser};
-                    }
-    
-                    if (path) {
-                        if (path.length > 1) {
-                            fieldPaths[fieldPaths.length] = {key:key,path:path};
-                        } else {
-                            simpleFields[simpleFields.length] = {key:key,path:path[0]};
-                        }
-                    } else {
-                    }
-                }
-
-                // Process the results, flattening the records and/or applying parsers if needed
-                for (i = resultsList.length - 1; i >= 0; --i) {
-                    var r = resultsList[i], rec = {};
-                    if(r) {
-                        for (j = simpleFields.length - 1; j >= 0; --j) {
-                            // Bug 1777850: data might be held in an array
-                            rec[simpleFields[j].key] =
-                                    (r[simpleFields[j].path] !== undefined) ?
-                                    r[simpleFields[j].path] : r[j];
-                        }
-
-                        for (j = fieldPaths.length - 1; j >= 0; --j) {
-                            rec[fieldPaths[j].key] = walkPath(fieldPaths[j].path,r);
-                        }
-
-                        for (j = fieldParsers.length - 1; j >= 0; --j) {
-                            var p = fieldParsers[j].key;
-                            rec[p] = fieldParsers[j].parser(rec[p]);
-                            if (rec[p] === undefined) {
-                                rec[p] = null;
-                            }
-                        }
-                    }
-                    results[i] = rec;
-                }
-            }
-            else {
-                results = resultsList;
-            }
-
-            for (key in metaFields) {
-                if (lang.hasOwnProperty(metaFields,key)) {
-                    path = buildPath(metaFields[key]);
-                    if (path) {
-                        v = walkPath(path, oFullResponse);
-                        oParsedResponse.meta[key] = v;
-                    }
-                }
-            }
-
-        } else {
-
-            oParsedResponse.error = true;
-        }
-
-        oParsedResponse.results = results;
-    }
-    else {
-        oParsedResponse.error = true;
-    }
-
-    return oParsedResponse;
-},
-
-/**
- * Overridable method parses an HTML TABLE element reference into a response object.
- * Data is parsed out of TR elements from all TBODY elements. 
- *
- * @method parseHTMLTableData
- * @param oRequest {Object} Request object.
- * @param oFullResponse {Object} The full HTML element reference from the live database.
- * @return {Object} Parsed response object with the following properties<br>
- *     - results (Array) Array of parsed data results<br>
- *     - error (Boolean) True if there was an error
- */
-parseHTMLTableData : function(oRequest, oFullResponse) {
-    var bError = false;
-    var elTable = oFullResponse;
-    var fields = this.responseSchema.fields;
-    var oParsedResponse = {results:[]};
-
-    if(lang.isArray(fields)) {
-        // Iterate through each TBODY
-        for(var i=0; i<elTable.tBodies.length; i++) {
-            var elTbody = elTable.tBodies[i];
-    
-            // Iterate through each TR
-            for(var j=elTbody.rows.length-1; j>-1; j--) {
-                var elRow = elTbody.rows[j];
-                var oResult = {};
-                
-                for(var k=fields.length-1; k>-1; k--) {
-                    var field = fields[k];
-                    var key = (lang.isValue(field.key)) ? field.key : field;
-                    var data = elRow.cells[k].innerHTML;
-    
-                    // Backward compatibility
-                    if(!field.parser && field.converter) {
-                        field.parser = field.converter;
-                    }
-                    var parser = (typeof field.parser === 'function') ?
-                        field.parser :
-                        DS.Parser[field.parser+''];
-                    if(parser) {
-                        data = parser.call(this, data);
-                    }
-                    // Safety measure
-                    if(data === undefined) {
-                        data = null;
-                    }
-                    oResult[key] = data;
-                }
-                oParsedResponse.results[j] = oResult;
-            }
-        }
-    }
-    else {
-        bError = true;
-    }
-
-    if(bError) {
-        oParsedResponse.error = true;
-    }
-    else {
-    }
-    return oParsedResponse;
-}
-
-};
-
-// DataSourceBase uses EventProvider
-lang.augmentProto(DS, util.EventProvider);
-
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * LocalDataSource class for in-memory data structs including JavaScript arrays,
- * JavaScript object literals (JSON), XML documents, and HTML tables.
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.LocalDataSource
- * @extends YAHOO.util.DataSourceBase 
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.LocalDataSource = function(oLiveData, oConfigs) {
-    this.dataType = DS.TYPE_LOCAL;
-    
-    if(oLiveData) {
-        if(YAHOO.lang.isArray(oLiveData)) { // array
-            this.responseType = DS.TYPE_JSARRAY;
-        }
-         // xml
-        else if(oLiveData.nodeType && oLiveData.nodeType == 9) {
-            this.responseType = DS.TYPE_XML;
-        }
-        else if(oLiveData.nodeName && (oLiveData.nodeName.toLowerCase() == "table")) { // table
-            this.responseType = DS.TYPE_HTMLTABLE;
-            oLiveData = oLiveData.cloneNode(true);
-        }    
-        else if(YAHOO.lang.isString(oLiveData)) { // text
-            this.responseType = DS.TYPE_TEXT;
-        }
-        else if(YAHOO.lang.isObject(oLiveData)) { // json
-            this.responseType = DS.TYPE_JSON;
-        }
-    }
-    else {
-        oLiveData = [];
-        this.responseType = DS.TYPE_JSARRAY;
-    }
-    
-    util.LocalDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
-};
-
-// LocalDataSource extends DataSourceBase
-lang.extend(util.LocalDataSource, DS);
-
-// Copy static members to LocalDataSource class
-lang.augmentObject(util.LocalDataSource, DS);
-
-
-
-
-
-
-
-
-
-
-
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * FunctionDataSource class for JavaScript functions.
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.FunctionDataSource
- * @extends YAHOO.util.DataSourceBase  
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.FunctionDataSource = function(oLiveData, oConfigs) {
-    this.dataType = DS.TYPE_JSFUNCTION;
-    oLiveData = oLiveData || function() {};
-    
-    util.FunctionDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
-};
-
-// FunctionDataSource extends DataSourceBase
-lang.extend(util.FunctionDataSource, DS, {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// FunctionDataSource public properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Context in which to execute the function. By default, is the DataSource
- * instance itself. If set, the function will receive the DataSource instance
- * as an additional argument. 
- *
- * @property scope
- * @type Object
- * @default null
- */
-scope : null,
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// FunctionDataSource public methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Overriding method passes query to a function. The returned response is then
- * forwarded to the handleResponse function.
- *
- * @method makeConnection
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} Callback object literal.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Transaction ID.
- */
-makeConnection : function(oRequest, oCallback, oCaller) {
-    var tId = DS._nTransactionId++;
-    this.fireEvent("requestEvent", {tId:tId,request:oRequest,callback:oCallback,caller:oCaller});
-
-    // Pass the request in as a parameter and
-    // forward the return value to the handler
-    
-    
-    var oRawResponse = (this.scope) ? this.liveData.call(this.scope, oRequest, this) : this.liveData(oRequest);
-    
-    // Try to sniff data type if it has not been defined
-    if(this.responseType === DS.TYPE_UNKNOWN) {
-        if(YAHOO.lang.isArray(oRawResponse)) { // array
-            this.responseType = DS.TYPE_JSARRAY;
-        }
-         // xml
-        else if(oRawResponse && oRawResponse.nodeType && oRawResponse.nodeType == 9) {
-            this.responseType = DS.TYPE_XML;
-        }
-        else if(oRawResponse && oRawResponse.nodeName && (oRawResponse.nodeName.toLowerCase() == "table")) { // table
-            this.responseType = DS.TYPE_HTMLTABLE;
-        }    
-        else if(YAHOO.lang.isObject(oRawResponse)) { // json
-            this.responseType = DS.TYPE_JSON;
-        }
-        else if(YAHOO.lang.isString(oRawResponse)) { // text
-            this.responseType = DS.TYPE_TEXT;
-        }
-    }
-
-    this.handleResponse(oRequest, oRawResponse, oCallback, oCaller, tId);
-    return tId;
-}
-
-});
-
-// Copy static members to FunctionDataSource class
-lang.augmentObject(util.FunctionDataSource, DS);
-
-
-
-
-
-
-
-
-
-
-
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * ScriptNodeDataSource class for accessing remote data via the YUI Get Utility. 
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.ScriptNodeDataSource
- * @extends YAHOO.util.DataSourceBase  
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.ScriptNodeDataSource = function(oLiveData, oConfigs) {
-    this.dataType = DS.TYPE_SCRIPTNODE;
-    oLiveData = oLiveData || "";
-    
-    util.ScriptNodeDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
-};
-
-// ScriptNodeDataSource extends DataSourceBase
-lang.extend(util.ScriptNodeDataSource, DS, {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScriptNodeDataSource public properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Alias to YUI Get Utility, to allow implementers to use a custom class.
- *
- * @property getUtility
- * @type Object
- * @default YAHOO.util.Get
- */
-getUtility : util.Get,
-
-/**
- * Defines request/response management in the following manner:
- * <dl>
- *     <!--<dt>queueRequests</dt>
- *     <dd>If a request is already in progress, wait until response is returned before sending the next request.</dd>
- *     <dt>cancelStaleRequests</dt>
- *     <dd>If a request is already in progress, cancel it before sending the next request.</dd>-->
- *     <dt>ignoreStaleResponses</dt>
- *     <dd>Send all requests, but handle only the response for the most recently sent request.</dd>
- *     <dt>allowAll</dt>
- *     <dd>Send all requests and handle all responses.</dd>
- * </dl>
- *
- * @property asyncMode
- * @type String
- * @default "allowAll"
- */
-asyncMode : "allowAll",
-
-/**
- * Callback string parameter name sent to the remote script. By default,
- * requests are sent to
- * &#60;URI&#62;?&#60;scriptCallbackParam&#62;=callbackFunction
- *
- * @property scriptCallbackParam
- * @type String
- * @default "callback"
- */
-scriptCallbackParam : "callback",
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScriptNodeDataSource public methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Creates a request callback that gets appended to the script URI. Implementers
- * can customize this string to match their server's query syntax.
- *
- * @method generateRequestCallback
- * @return {String} String fragment that gets appended to script URI that 
- * specifies the callback function 
- */
-generateRequestCallback : function(id) {
-    return "&" + this.scriptCallbackParam + "=YAHOO.util.ScriptNodeDataSource.callbacks["+id+"]" ;
-},
-
-/**
- * Overridable method gives implementers access to modify the URI before the dynamic
- * script node gets inserted. Implementers should take care not to return an
- * invalid URI.
- *
- * @method doBeforeGetScriptNode
- * @param {String} URI to the script 
- * @return {String} URI to the script
- */
-doBeforeGetScriptNode : function(sUri) {
-    return sUri;
-},
-
-/**
- * Overriding method passes query to Get Utility. The returned
- * response is then forwarded to the handleResponse function.
- *
- * @method makeConnection
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} Callback object literal.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Transaction ID.
- */
-makeConnection : function(oRequest, oCallback, oCaller) {
-    var tId = DS._nTransactionId++;
-    this.fireEvent("requestEvent", {tId:tId,request:oRequest,callback:oCallback,caller:oCaller});
-    
-    // If there are no global pending requests, it is safe to purge global callback stack and global counter
-    if(util.ScriptNodeDataSource._nPending === 0) {
-        util.ScriptNodeDataSource.callbacks = [];
-        util.ScriptNodeDataSource._nId = 0;
-    }
-    
-    // ID for this request
-    var id = util.ScriptNodeDataSource._nId;
-    util.ScriptNodeDataSource._nId++;
-    
-    // Dynamically add handler function with a closure to the callback stack
-    var oSelf = this;
-    util.ScriptNodeDataSource.callbacks[id] = function(oRawResponse) {
-        if((oSelf.asyncMode !== "ignoreStaleResponses")||
-                (id === util.ScriptNodeDataSource.callbacks.length-1)) { // Must ignore stale responses
-                
-            // Try to sniff data type if it has not been defined
-            if(oSelf.responseType === DS.TYPE_UNKNOWN) {
-                if(YAHOO.lang.isArray(oRawResponse)) { // array
-                    oSelf.responseType = DS.TYPE_JSARRAY;
-                }
-                 // xml
-                else if(oRawResponse.nodeType && oRawResponse.nodeType == 9) {
-                    oSelf.responseType = DS.TYPE_XML;
-                }
-                else if(oRawResponse.nodeName && (oRawResponse.nodeName.toLowerCase() == "table")) { // table
-                    oSelf.responseType = DS.TYPE_HTMLTABLE;
-                }    
-                else if(YAHOO.lang.isObject(oRawResponse)) { // json
-                    oSelf.responseType = DS.TYPE_JSON;
-                }
-                else if(YAHOO.lang.isString(oRawResponse)) { // text
-                    oSelf.responseType = DS.TYPE_TEXT;
-                }
-            }
-
-            oSelf.handleResponse(oRequest, oRawResponse, oCallback, oCaller, tId);
-        }
-        else {
-        }
-    
-        delete util.ScriptNodeDataSource.callbacks[id];
-    };
-    
-    // We are now creating a request
-    util.ScriptNodeDataSource._nPending++;
-    var sUri = this.liveData + oRequest + this.generateRequestCallback(id);
-    sUri = this.doBeforeGetScriptNode(sUri);
-    this.getUtility.script(sUri,
-            {autopurge: true,
-            onsuccess: util.ScriptNodeDataSource._bumpPendingDown,
-            onfail: util.ScriptNodeDataSource._bumpPendingDown});
-
-    return tId;
-}
-
-});
-
-// Copy static members to ScriptNodeDataSource class
-lang.augmentObject(util.ScriptNodeDataSource, DS);
-
-// Copy static members to ScriptNodeDataSource class
-lang.augmentObject(util.ScriptNodeDataSource,  {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScriptNodeDataSource private static properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Unique ID to track requests.
- *
- * @property _nId
- * @type Number
- * @private
- * @static
- */
-_nId : 0,
-
-/**
- * Counter for pending requests. When this is 0, it is safe to purge callbacks
- * array.
- *
- * @property _nPending
- * @type Number
- * @private
- * @static
- */
-_nPending : 0,
-
-/**
- * Global array of callback functions, one for each request sent.
- *
- * @property callbacks
- * @type Function[]
- * @static
- */
-callbacks : []
-
-});
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * XHRDataSource class for accessing remote data via the YUI Connection Manager
- * Utility
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.XHRDataSource
- * @extends YAHOO.util.DataSourceBase  
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.XHRDataSource = function(oLiveData, oConfigs) {
-    this.dataType = DS.TYPE_XHR;
-    this.connMgr = this.connMgr || util.Connect;
-    oLiveData = oLiveData || "";
-    
-    util.XHRDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
-};
-
-// XHRDataSource extends DataSourceBase
-lang.extend(util.XHRDataSource, DS, {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// XHRDataSource public properties
-//
-/////////////////////////////////////////////////////////////////////////////
-
- /**
- * Alias to YUI Connection Manager, to allow implementers to use a custom class.
- *
- * @property connMgr
- * @type Object
- * @default YAHOO.util.Connect
- */
-connMgr: null,
-
- /**
- * Defines request/response management in the following manner:
- * <dl>
- *     <dt>queueRequests</dt>
- *     <dd>If a request is already in progress, wait until response is returned
- *     before sending the next request.</dd>
- *
- *     <dt>cancelStaleRequests</dt>
- *     <dd>If a request is already in progress, cancel it before sending the next
- *     request.</dd>
- *
- *     <dt>ignoreStaleResponses</dt>
- *     <dd>Send all requests, but handle only the response for the most recently
- *     sent request.</dd>
- *
- *     <dt>allowAll</dt>
- *     <dd>Send all requests and handle all responses.</dd>
- *
- * </dl>
- *
- * @property connXhrMode
- * @type String
- * @default "allowAll"
- */
-connXhrMode: "allowAll",
-
- /**
- * True if data is to be sent via POST. By default, data will be sent via GET.
- *
- * @property connMethodPost
- * @type Boolean
- * @default false
- */
-connMethodPost: false,
-
- /**
- * The connection timeout defines how many  milliseconds the XHR connection will
- * wait for a server response. Any non-zero value will enable the Connection Manager's
- * Auto-Abort feature.
- *
- * @property connTimeout
- * @type Number
- * @default 0
- */
-connTimeout: 0,
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// XHRDataSource public methods
-//
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Overriding method passes query to Connection Manager. The returned
- * response is then forwarded to the handleResponse function.
- *
- * @method makeConnection
- * @param oRequest {Object} Request object.
- * @param oCallback {Object} Callback object literal.
- * @param oCaller {Object} (deprecated) Use oCallback.scope.
- * @return {Number} Transaction ID.
- */
-makeConnection : function(oRequest, oCallback, oCaller) {
-
-    var oRawResponse = null;
-    var tId = DS._nTransactionId++;
-    this.fireEvent("requestEvent", {tId:tId,request:oRequest,callback:oCallback,caller:oCaller});
-
-    // Set up the callback object and
-    // pass the request in as a URL query and
-    // forward the response to the handler
-    var oSelf = this;
-    var oConnMgr = this.connMgr;
-    var oQueue = this._oQueue;
-
-    /**
-     * Define Connection Manager success handler
-     *
-     * @method _xhrSuccess
-     * @param oResponse {Object} HTTPXMLRequest object
-     * @private
-     */
-    var _xhrSuccess = function(oResponse) {
-        // If response ID does not match last made request ID,
-        // silently fail and wait for the next response
-        if(oResponse && (this.connXhrMode == "ignoreStaleResponses") &&
-                (oResponse.tId != oQueue.conn.tId)) {
-            return null;
-        }
-        // Error if no response
-        else if(!oResponse) {
-            this.fireEvent("dataErrorEvent", {request:oRequest, response:null,
-                    callback:oCallback, caller:oCaller,
-                    message:DS.ERROR_DATANULL});
-
-            // Send error response back to the caller with the error flag on
-            DS.issueCallback(oCallback,[oRequest, {error:true}], true, oCaller);
-
-            return null;
-        }
-        // Forward to handler
-        else {
-            // Try to sniff data type if it has not been defined
-            if(this.responseType === DS.TYPE_UNKNOWN) {
-                var ctype = (oResponse.getResponseHeader) ? oResponse.getResponseHeader["Content-Type"] : null;
-                if(ctype) {
-                    // xml
-                    if(ctype.indexOf("text/xml") > -1) {
-                        this.responseType = DS.TYPE_XML;
-                    }
-                    else if(ctype.indexOf("application/json") > -1) { // json
-                        this.responseType = DS.TYPE_JSON;
-                    }
-                    else if(ctype.indexOf("text/plain") > -1) { // text
-                        this.responseType = DS.TYPE_TEXT;
-                    }
-                }
-            }
-            this.handleResponse(oRequest, oResponse, oCallback, oCaller, tId);
-        }
-    };
-
-    /**
-     * Define Connection Manager failure handler
-     *
-     * @method _xhrFailure
-     * @param oResponse {Object} HTTPXMLRequest object
-     * @private
-     */
-    var _xhrFailure = function(oResponse) {
-        this.fireEvent("dataErrorEvent", {request:oRequest, response: oResponse,
-                callback:oCallback, caller:oCaller,
-                message:DS.ERROR_DATAINVALID});
-
-        // Backward compatibility
-        if(lang.isString(this.liveData) && lang.isString(oRequest) &&
-            (this.liveData.lastIndexOf("?") !== this.liveData.length-1) &&
-            (oRequest.indexOf("?") !== 0)){
-        }
-
-        // Send failure response back to the caller with the error flag on
-        oResponse = oResponse || {};
-        oResponse.error = true;
-        DS.issueCallback(oCallback,[oRequest,oResponse],true, oCaller);
-
-        return null;
-    };
-
-    /**
-     * Define Connection Manager callback object
-     *
-     * @property _xhrCallback
-     * @param oResponse {Object} HTTPXMLRequest object
-     * @private
-     */
-     var _xhrCallback = {
-        success:_xhrSuccess,
-        failure:_xhrFailure,
-        scope: this
-    };
-
-    // Apply Connection Manager timeout
-    if(lang.isNumber(this.connTimeout)) {
-        _xhrCallback.timeout = this.connTimeout;
-    }
-
-    // Cancel stale requests
-    if(this.connXhrMode == "cancelStaleRequests") {
-            // Look in queue for stale requests
-            if(oQueue.conn) {
-                if(oConnMgr.abort) {
-                    oConnMgr.abort(oQueue.conn);
-                    oQueue.conn = null;
-                }
-                else {
-                }
-            }
-    }
-
-    // Get ready to send the request URL
-    if(oConnMgr && oConnMgr.asyncRequest) {
-        var sLiveData = this.liveData;
-        var isPost = this.connMethodPost;
-        var sMethod = (isPost) ? "POST" : "GET";
-        // Validate request
-        var sUri = (isPost || !lang.isValue(oRequest)) ? sLiveData : sLiveData+oRequest;
-        var sRequest = (isPost) ? oRequest : null;
-
-        // Send the request right away
-        if(this.connXhrMode != "queueRequests") {
-            oQueue.conn = oConnMgr.asyncRequest(sMethod, sUri, _xhrCallback, sRequest);
-        }
-        // Queue up then send the request
-        else {
-            // Found a request already in progress
-            if(oQueue.conn) {
-                var allRequests = oQueue.requests;
-                // Add request to queue
-                allRequests.push({request:oRequest, callback:_xhrCallback});
-
-                // Interval needs to be started
-                if(!oQueue.interval) {
-                    oQueue.interval = setInterval(function() {
-                        // Connection is in progress
-                        if(oConnMgr.isCallInProgress(oQueue.conn)) {
-                            return;
-                        }
-                        else {
-                            // Send next request
-                            if(allRequests.length > 0) {
-                                // Validate request
-                                sUri = (isPost || !lang.isValue(allRequests[0].request)) ? sLiveData : sLiveData+allRequests[0].request;
-                                sRequest = (isPost) ? allRequests[0].request : null;
-                                oQueue.conn = oConnMgr.asyncRequest(sMethod, sUri, allRequests[0].callback, sRequest);
-
-                                // Remove request from queue
-                                allRequests.shift();
-                            }
-                            // No more requests
-                            else {
-                                clearInterval(oQueue.interval);
-                                oQueue.interval = null;
-                            }
-                        }
-                    }, 50);
-                }
-            }
-            // Nothing is in progress
-            else {
-                oQueue.conn = oConnMgr.asyncRequest(sMethod, sUri, _xhrCallback, sRequest);
-            }
-        }
-    }
-    else {
-        // Send null response back to the caller with the error flag on
-        DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);
-    }
-
-    return tId;
-}
-
-});
-
-// Copy static members to XHRDataSource class
-lang.augmentObject(util.XHRDataSource, DS);
-
-
-
-
-
-
-
-
-
-
-
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * Factory class for creating a BaseDataSource subclass instance. The sublcass is
- * determined by oLiveData's type, unless the dataType config is explicitly passed in.  
- *
- * @namespace YAHOO.util
- * @class YAHOO.util.DataSource
- * @constructor
- * @param oLiveData {HTMLElement}  Pointer to live data.
- * @param oConfigs {object} (optional) Object literal of configuration values.
- */
-util.DataSource = function(oLiveData, oConfigs) {
-    oConfigs = oConfigs || {};
-    
-    // Point to one of the subclasses, first by dataType if given, then by sniffing oLiveData type.
-    var dataType = oConfigs.dataType;
-    if(dataType) {
-        if(dataType == DS.TYPE_LOCAL) {
-            lang.augmentObject(util.DataSource, util.LocalDataSource);
-            return new util.LocalDataSource(oLiveData, oConfigs);            
-        }
-        else if(dataType == DS.TYPE_XHR) {
-            lang.augmentObject(util.DataSource, util.XHRDataSource);
-            return new util.XHRDataSource(oLiveData, oConfigs);            
-        }
-        else if(dataType == DS.TYPE_SCRIPTNODE) {
-            lang.augmentObject(util.DataSource, util.ScriptNodeDataSource);
-            return new util.ScriptNodeDataSource(oLiveData, oConfigs);            
-        }
-        else if(dataType == DS.TYPE_JSFUNCTION) {
-            lang.augmentObject(util.DataSource, util.FunctionDataSource);
-            return new util.FunctionDataSource(oLiveData, oConfigs);            
-        }
-    }
-    
-    if(YAHOO.lang.isString(oLiveData)) { // strings default to xhr
-        lang.augmentObject(util.DataSource, util.XHRDataSource);
-        return new util.XHRDataSource(oLiveData, oConfigs);
-    }
-    else if(YAHOO.lang.isFunction(oLiveData)) {
-        lang.augmentObject(util.DataSource, util.FunctionDataSource);
-        return new util.FunctionDataSource(oLiveData, oConfigs);
-    }
-    else { // ultimate default is local
-        lang.augmentObject(util.DataSource, util.LocalDataSource);
-        return new util.LocalDataSource(oLiveData, oConfigs);
-    }
-};
-
-// Copy static members to DataSource class
-lang.augmentObject(util.DataSource, DS);
-
-})();
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * The static Number class provides helper functions to deal with data of type
- * Number.
- *
- * @namespace YAHOO.util
- * @requires yahoo
- * @class Number
- * @static
- */
- YAHOO.util.Number = {
-     /**
-     * Takes a native JavaScript Number and formats to string for display to user.
-     *
-     * @method format
-     * @param nData {Number} Number.
-     * @param oConfig {Object} (Optional) Optional configuration values:
-     *  <dl>
-     *   <dt>prefix {String}</dd>
-     *   <dd>String prepended before each number, like a currency designator "$"</dd>
-     *   <dt>decimalPlaces {Number}</dd>
-     *   <dd>Number of decimal places to round.</dd>
-     *   <dt>decimalSeparator {String}</dd>
-     *   <dd>Decimal separator</dd>
-     *   <dt>thousandsSeparator {String}</dd>
-     *   <dd>Thousands separator</dd>
-     *   <dt>suffix {String}</dd>
-     *   <dd>String appended after each number, like " items" (note the space)</dd>
-     *   <dt>negativeFormat</dt>
-     *   <dd>String used as a guide for how to indicate negative numbers.  The first '#' character in the string will be replaced by the number.  Default '-#'.</dd>
-     *  </dl>
-     * @return {String} Formatted number for display. Note, the following values
-     * return as "": null, undefined, NaN, "".
-     */
-    format : function(n, cfg) {
-        if (!isFinite(+n)) {
-            return '';
-        }
-
-        n   = !isFinite(+n) ? 0 : +n;
-        cfg = YAHOO.lang.merge(YAHOO.util.Number.format.defaults, (cfg || {}));
-
-        var neg    = n < 0,        absN   = Math.abs(n),
-            places = cfg.decimalPlaces,
-            sep    = cfg.thousandsSeparator,
-            s, bits, i;
-
-        if (places < 0) {
-            // Get rid of the decimal info
-            s = absN - (absN % 1) + '';
-            i = s.length + places;
-
-            // avoid 123 vs decimalPlaces -4 (should return "0")
-            if (i > 0) {
-                    // leverage toFixed by making 123 => 0.123 for the rounding
-                    // operation, then add the appropriate number of zeros back on
-                s = Number('.' + s).toFixed(i).slice(2) +
-                    new Array(s.length - i + 1).join('0');
-            } else {
-                s = "0";
-            }
-        } else {        // There is a bug in IE's toFixed implementation:
-            // for n in {(-0.94, -0.5], [0.5, 0.94)} n.toFixed() returns 0
-            // instead of -1 and 1. Manually handle that case.
-            s = absN < 1 && absN >= 0.5 && !places ? '1' : absN.toFixed(places);
-        }
-
-        if (absN > 1000) {
-            bits  = s.split(/\D/);
-            i  = bits[0].length % 3 || 3;
-
-            bits[0] = bits[0].slice(0,i) +
-                      bits[0].slice(i).replace(/(\d{3})/g, sep + '$1');
-
-            s = bits.join(cfg.decimalSeparator);
-        }
-
-        s = cfg.prefix + s + cfg.suffix;
-
-        return neg ? cfg.negativeFormat.replace(/#/,s) : s;
-    }
-};
-YAHOO.util.Number.format.defaults = {
-    decimalSeparator : '.',
-    decimalPlaces    : null,
-    thousandsSeparator : '',
-    prefix : '',
-    suffix : '',
-    negativeFormat : '-#'
-};
-
-
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-(function () {
-
-var xPad=function (x, pad, r)
-{
-    if(typeof r === 'undefined')
-    {
-        r=10;
-    }
-    for( ; parseInt(x, 10)<r && r>1; r/=10) {
-        x = pad.toString() + x;
-    }
-    return x.toString();
-};
-
-
-/**
- * The static Date class provides helper functions to deal with data of type Date.
- *
- * @namespace YAHOO.util
- * @requires yahoo
- * @class Date
- * @static
- */
- var Dt = {
-    formats: {
-        a: function (d, l) { return l.a[d.getDay()]; },
-        A: function (d, l) { return l.A[d.getDay()]; },
-        b: function (d, l) { return l.b[d.getMonth()]; },
-        B: function (d, l) { return l.B[d.getMonth()]; },
-        C: function (d) { return xPad(parseInt(d.getFullYear()/100, 10), 0); },
-        d: ['getDate', '0'],
-        e: ['getDate', ' '],
-        g: function (d) { return xPad(parseInt(Dt.formats.G(d)%100, 10), 0); },
-        G: function (d) {
-                var y = d.getFullYear();
-                var V = parseInt(Dt.formats.V(d), 10);
-                var W = parseInt(Dt.formats.W(d), 10);
-    
-                if(W > V) {
-                    y++;
-                } else if(W===0 && V>=52) {
-                    y--;
-                }
-    
-                return y;
-            },
-        H: ['getHours', '0'],
-        I: function (d) { var I=d.getHours()%12; return xPad(I===0?12:I, 0); },
-        j: function (d) {
-                var gmd_1 = new Date('' + d.getFullYear() + '/1/1 GMT');
-                var gmdate = new Date('' + d.getFullYear() + '/' + (d.getMonth()+1) + '/' + d.getDate() + ' GMT');
-                var ms = gmdate - gmd_1;
-                var doy = parseInt(ms/60000/60/24, 10)+1;
-                return xPad(doy, 0, 100);
-            },
-        k: ['getHours', ' '],
-        l: function (d) { var I=d.getHours()%12; return xPad(I===0?12:I, ' '); },
-        m: function (d) { return xPad(d.getMonth()+1, 0); },
-        M: ['getMinutes', '0'],
-        p: function (d, l) { return l.p[d.getHours() >= 12 ? 1 : 0 ]; },
-        P: function (d, l) { return l.P[d.getHours() >= 12 ? 1 : 0 ]; },
-        s: function (d, l) { return parseInt(d.getTime()/1000, 10); },
-        S: ['getSeconds', '0'],
-        u: function (d) { var dow = d.getDay(); return dow===0?7:dow; },
-        U: function (d) {
-                var doy = parseInt(Dt.formats.j(d), 10);
-                var rdow = 6-d.getDay();
-                var woy = parseInt((doy+rdow)/7, 10);
-                return xPad(woy, 0);
-            },
-        V: function (d) {
-                var woy = parseInt(Dt.formats.W(d), 10);
-                var dow1_1 = (new Date('' + d.getFullYear() + '/1/1')).getDay();
-                // First week is 01 and not 00 as in the case of %U and %W,
-                // so we add 1 to the final result except if day 1 of the year
-                // is a Monday (then %W returns 01).
-                // We also need to subtract 1 if the day 1 of the year is 
-                // Friday-Sunday, so the resulting equation becomes:
-                var idow = woy + (dow1_1 > 4 || dow1_1 <= 1 ? 0 : 1);
-                if(idow === 53 && (new Date('' + d.getFullYear() + '/12/31')).getDay() < 4)
-                {
-                    idow = 1;
-                }
-                else if(idow === 0)
-                {
-                    idow = Dt.formats.V(new Date('' + (d.getFullYear()-1) + '/12/31'));
-                }
-    
-                return xPad(idow, 0);
-            },
-        w: 'getDay',
-        W: function (d) {
-                var doy = parseInt(Dt.formats.j(d), 10);
-                var rdow = 7-Dt.formats.u(d);
-                var woy = parseInt((doy+rdow)/7, 10);
-                return xPad(woy, 0, 10);
-            },
-        y: function (d) { return xPad(d.getFullYear()%100, 0); },
-        Y: 'getFullYear',
-        z: function (d) {
-                var o = d.getTimezoneOffset();
-                var H = xPad(parseInt(Math.abs(o/60), 10), 0);
-                var M = xPad(Math.abs(o%60), 0);
-                return (o>0?'-':'+') + H + M;
-            },
-        Z: function (d) {
-               var tz = d.toString().replace(/^.*:\d\d( GMT[+-]\d+)? \(?([A-Za-z ]+)\)?\d*$/, '$2').replace(/[a-z ]/g, '');
-               if(tz.length > 4) {
-                       tz = Dt.formats.z(d);
-               }
-               return tz;
-       },
-        '%': function (d) { return '%'; }
-    },
-
-    aggregates: {
-        c: 'locale',
-        D: '%m/%d/%y',
-        F: '%Y-%m-%d',
-        h: '%b',
-        n: '\n',
-        r: 'locale',
-        R: '%H:%M',
-        t: '\t',
-        T: '%H:%M:%S',
-        x: 'locale',
-        X: 'locale'
-        //'+': '%a %b %e %T %Z %Y'
-    },
-
-     /**
-     * Takes a native JavaScript Date and formats to string for display to user.
-     *
-     * @method format
-     * @param oDate {Date} Date.
-     * @param oConfig {Object} (Optional) Object literal of configuration values:
-     *  <dl>
-     *   <dt>format &lt;String&gt;</dt>
-     *   <dd>
-     *   <p>
-     *   Any strftime string is supported, such as "%I:%M:%S %p". strftime has several format specifiers defined by the Open group at 
-     *   <a href="http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html">http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html</a>
-     *   </p>
-     *   <p>   
-     *   PHP added a few of its own, defined at <a href="http://www.php.net/strftime">http://www.php.net/strftime</a>
-     *   </p>
-     *   <p>
-     *   This javascript implementation supports all the PHP specifiers and a few more.  The full list is below:
-     *   </p>
-     *   <dl>
-     *    <dt>%a</dt> <dd>abbreviated weekday name according to the current locale</dd>
-     *    <dt>%A</dt> <dd>full weekday name according to the current locale</dd>
-     *    <dt>%b</dt> <dd>abbreviated month name according to the current locale</dd>
-     *    <dt>%B</dt> <dd>full month name according to the current locale</dd>
-     *    <dt>%c</dt> <dd>preferred date and time representation for the current locale</dd>
-     *    <dt>%C</dt> <dd>century number (the year divided by 100 and truncated to an integer, range 00 to 99)</dd>
-     *    <dt>%d</dt> <dd>day of the month as a decimal number (range 01 to 31)</dd>
-     *    <dt>%D</dt> <dd>same as %m/%d/%y</dd>
-     *    <dt>%e</dt> <dd>day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31')</dd>
-     *    <dt>%F</dt> <dd>same as %Y-%m-%d (ISO 8601 date format)</dd>
-     *    <dt>%g</dt> <dd>like %G, but without the century</dd>
-     *    <dt>%G</dt> <dd>The 4-digit year corresponding to the ISO week number</dd>
-     *    <dt>%h</dt> <dd>same as %b</dd>
-     *    <dt>%H</dt> <dd>hour as a decimal number using a 24-hour clock (range 00 to 23)</dd>
-     *    <dt>%I</dt> <dd>hour as a decimal number using a 12-hour clock (range 01 to 12)</dd>
-     *    <dt>%j</dt> <dd>day of the year as a decimal number (range 001 to 366)</dd>
-     *    <dt>%k</dt> <dd>hour as a decimal number using a 24-hour clock (range 0 to 23); single digits are preceded by a blank. (See also %H.)</dd>
-     *    <dt>%l</dt> <dd>hour as a decimal number using a 12-hour clock (range 1 to 12); single digits are preceded by a blank. (See also %I.) </dd>
-     *    <dt>%m</dt> <dd>month as a decimal number (range 01 to 12)</dd>
-     *    <dt>%M</dt> <dd>minute as a decimal number</dd>
-     *    <dt>%n</dt> <dd>newline character</dd>
-     *    <dt>%p</dt> <dd>either `AM' or `PM' according to the given time value, or the corresponding strings for the current locale</dd>
-     *    <dt>%P</dt> <dd>like %p, but lower case</dd>
-     *    <dt>%r</dt> <dd>time in a.m. and p.m. notation equal to %I:%M:%S %p</dd>
-     *    <dt>%R</dt> <dd>time in 24 hour notation equal to %H:%M</dd>
-     *    <dt>%s</dt> <dd>number of seconds since the Epoch, ie, since 1970-01-01 00:00:00 UTC</dd>
-     *    <dt>%S</dt> <dd>second as a decimal number</dd>
-     *    <dt>%t</dt> <dd>tab character</dd>
-     *    <dt>%T</dt> <dd>current time, equal to %H:%M:%S</dd>
-     *    <dt>%u</dt> <dd>weekday as a decimal number [1,7], with 1 representing Monday</dd>
-     *    <dt>%U</dt> <dd>week number of the current year as a decimal number, starting with the
-     *            first Sunday as the first day of the first week</dd>
-     *    <dt>%V</dt> <dd>The ISO 8601:1988 week number of the current year as a decimal number,
-     *            range 01 to 53, where week 1 is the first week that has at least 4 days
-     *            in the current year, and with Monday as the first day of the week.</dd>
-     *    <dt>%w</dt> <dd>day of the week as a decimal, Sunday being 0</dd>
-     *    <dt>%W</dt> <dd>week number of the current year as a decimal number, starting with the
-     *            first Monday as the first day of the first week</dd>
-     *    <dt>%x</dt> <dd>preferred date representation for the current locale without the time</dd>
-     *    <dt>%X</dt> <dd>preferred time representation for the current locale without the date</dd>
-     *    <dt>%y</dt> <dd>year as a decimal number without a century (range 00 to 99)</dd>
-     *    <dt>%Y</dt> <dd>year as a decimal number including the century</dd>
-     *    <dt>%z</dt> <dd>numerical time zone representation</dd>
-     *    <dt>%Z</dt> <dd>time zone name or abbreviation</dd>
-     *    <dt>%%</dt> <dd>a literal `%' character</dd>
-     *   </dl>
-     *  </dd>
-     * </dl>
-     * @param sLocale {String} (Optional) The locale to use when displaying days of week,
-     *  months of the year, and other locale specific strings.  The following locales are
-     *  built in:
-     *  <dl>
-     *   <dt>en</dt>
-     *   <dd>English</dd>
-     *   <dt>en-US</dt>
-     *   <dd>US English</dd>
-     *   <dt>en-GB</dt>
-     *   <dd>British English</dd>
-     *   <dt>en-AU</dt>
-     *   <dd>Australian English (identical to British English)</dd>
-     *  </dl>
-     *  More locales may be added by subclassing of YAHOO.util.DateLocale.
-     *  See YAHOO.util.DateLocale for more information.
-     * @return {String} Formatted date for display.
-     * @sa YAHOO.util.DateLocale
-     */
-    format : function (oDate, oConfig, sLocale) {
-        oConfig = oConfig || {};
-        
-        if(!(oDate instanceof Date)) {
-            return YAHOO.lang.isValue(oDate) ? oDate : "";
-        }
-
-        var format = oConfig.format || "%m/%d/%Y";
-
-        // Be backwards compatible, support strings that are
-        // exactly equal to YYYY/MM/DD, DD/MM/YYYY and MM/DD/YYYY
-        if(format === 'YYYY/MM/DD') {
-            format = '%Y/%m/%d';
-        } else if(format === 'DD/MM/YYYY') {
-            format = '%d/%m/%Y';
-        } else if(format === 'MM/DD/YYYY') {
-            format = '%m/%d/%Y';
-        }
-        // end backwards compatibility block
-        sLocale = sLocale || "en";
-
-        // Make sure we have a definition for the requested locale, or default to en.
-        if(!(sLocale in YAHOO.util.DateLocale)) {
-            if(sLocale.replace(/-[a-zA-Z]+$/, '') in YAHOO.util.DateLocale) {
-                sLocale = sLocale.replace(/-[a-zA-Z]+$/, '');
-            } else {
-                sLocale = "en";
-            }
-        }
-
-        var aLocale = YAHOO.util.DateLocale[sLocale];
-
-        var replace_aggs = function (m0, m1) {
-            var f = Dt.aggregates[m1];
-            return (f === 'locale' ? aLocale[m1] : f);
-        };
-
-        var replace_formats = function (m0, m1) {
-            var f = Dt.formats[m1];
-            if(typeof f === 'string') {             // string => built in date function
-                return oDate[f]();
-            } else if(typeof f === 'function') {    // function => our own function
-                return f.call(oDate, oDate, aLocale);
-            } else if(typeof f === 'object' && typeof f[0] === 'string') {  // built in function with padding
-                return xPad(oDate[f[0]](), f[1]);
-            } else {
-                return m1;
-            }
-        };
-
-        // First replace aggregates (run in a loop because an agg may be made up of other aggs)
-        while(format.match(/%[cDFhnrRtTxX]/)) {
-            format = format.replace(/%([cDFhnrRtTxX])/g, replace_aggs);
-        }
-
-        // Now replace formats (do not run in a loop otherwise %%a will be replace with the value of %a)
-        var str = format.replace(/%([aAbBCdegGHIjklmMpPsSuUVwWyYzZ%])/g, replace_formats);
-
-        replace_aggs = replace_formats = undefined;
-
-        return str;
-    }
- };
- YAHOO.namespace("YAHOO.util");
- YAHOO.util.Date = Dt;
-
-/**
- * The DateLocale class is a container and base class for all
- * localised date strings used by YAHOO.util.Date. It is used
- * internally, but may be extended to provide new date localisations.
- *
- * To create your own DateLocale, follow these steps:
- * <ol>
- *  <li>Find an existing locale that matches closely with your needs</li>
- *  <li>Use this as your base class.  Use YAHOO.util.DateLocale if nothing
- *   matches.</li>
- *  <li>Create your own class as an extension of the base class using
- *   YAHOO.lang.merge, and add your own localisations where needed.</li>
- * </ol>
- * See the YAHOO.util.DateLocale['en-US'] and YAHOO.util.DateLocale['en-GB']
- * classes which extend YAHOO.util.DateLocale['en'].
- *
- * For example, to implement locales for French french and Canadian french,
- * we would do the following:
- * <ol>
- *  <li>For French french, we have no existing similar locale, so use
- *   YAHOO.util.DateLocale as the base, and extend it:
- *   <pre>
- *      YAHOO.util.DateLocale['fr'] = YAHOO.lang.merge(YAHOO.util.DateLocale, {
- *          a: ['dim', 'lun', 'mar', 'mer', 'jeu', 'ven', 'sam'],
- *          A: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
- *          b: ['jan', 'f&eacute;v', 'mar', 'avr', 'mai', 'jun', 'jui', 'ao&ucirc;', 'sep', 'oct', 'nov', 'd&eacute;c'],
- *          B: ['janvier', 'f&eacute;vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao&ucirc;t', 'septembre', 'octobre', 'novembre', 'd&eacute;cembre'],
- *          c: '%a %d %b %Y %T %Z',
- *          p: ['', ''],
- *          P: ['', ''],
- *          x: '%d.%m.%Y',
- *          X: '%T'
- *      });
- *   </pre>
- *  </li>
- *  <li>For Canadian french, we start with French french and change the meaning of \%x:
- *   <pre>
- *      YAHOO.util.DateLocale['fr-CA'] = YAHOO.lang.merge(YAHOO.util.DateLocale['fr'], {
- *          x: '%Y-%m-%d'
- *      });
- *   </pre>
- *  </li>
- * </ol>
- *
- * With that, you can use your new locales:
- * <pre>
- *    var d = new Date("2008/04/22");
- *    YAHOO.util.Date.format(d, {format: "%A, %d %B == %x"}, "fr");
- * </pre>
- * will return:
- * <pre>
- *    mardi, 22 avril == 22.04.2008
- * </pre>
- * And
- * <pre>
- *    YAHOO.util.Date.format(d, {format: "%A, %d %B == %x"}, "fr-CA");
- * </pre>
- * Will return:
- * <pre>
- *   mardi, 22 avril == 2008-04-22
- * </pre>
- * @namespace YAHOO.util
- * @requires yahoo
- * @class DateLocale
- */
- YAHOO.util.DateLocale = {
-        a: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
-        A: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
-        b: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
-        B: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
-        c: '%a %d %b %Y %T %Z',
-        p: ['AM', 'PM'],
-        P: ['am', 'pm'],
-        r: '%I:%M:%S %p',
-        x: '%d/%m/%y',
-        X: '%T'
- };
-
- YAHOO.util.DateLocale['en'] = YAHOO.lang.merge(YAHOO.util.DateLocale, {});
-
- YAHOO.util.DateLocale['en-US'] = YAHOO.lang.merge(YAHOO.util.DateLocale['en'], {
-        c: '%a %d %b %Y %I:%M:%S %p %Z',
-        x: '%m/%d/%Y',
-        X: '%I:%M:%S %p'
- });
-
- YAHOO.util.DateLocale['en-GB'] = YAHOO.lang.merge(YAHOO.util.DateLocale['en'], {
-        r: '%l:%M:%S %P %Z'
- });
- YAHOO.util.DateLocale['en-AU'] = YAHOO.lang.merge(YAHOO.util.DateLocale['en']);
-
-})();
-
-YAHOO.register("datasource", YAHOO.util.DataSource, {version: "2.8.0r4", build: "2449"});
index f4f0def..aae324a 100644 (file)
@@ -5,7 +5,7 @@
 //<![CDATA[
 
      $(document).ready(function() {
-        $('#abouttabs > ul').tabs();
+        $('#abouttabs').tabs();
      });
 //]]>
 </script>
 
     <div id="abouttabs" class="toptabs numbered">
         <ul>
-        <li><a href="about.pl#about">Server Information</a></li>
-        <li><a href="about.pl#perl">Perl modules</a></li>
-        <li><a href="about.pl#team">Koha Team</a></li>
-        <li><a href="about.pl#licenses">Licenses</a></li>
-        <li><a href="about.pl#translations">Translations</a></li>
-        <li><a href="about.pl#history">Koha Timeline</a></li>
+        <li><a href="#about">Server Information</a></li>
+        <li><a href="#perl">Perl modules</a></li>
+        <li><a href="#team">Koha Team</a></li>
+        <li><a href="#licenses">Licenses</a></li>
+        <li><a href="#translations">Translations</a></li>
+        <li><a href="#history">Koha Timeline</a></li>
         </ul>
 
         <div id="about">
@@ -89,7 +89,7 @@
                 <li><a href="http://library.org.nz">Horowhenua Library Trust</a>, New Zealand, and Rosalie Blake, Head of Libraries, (Koha 1.0)</li>
                 <li>The <a href="http://myacpl.org">Nelsonville Public Library System</a>, Ohio, USA (MARC sponsorship, documentation, template maintenance)</li>
                 <li><a href="http://www.emn.fr">EMN (Ecole des Mines de Nantes)</a>, France (Suggestions, Stats wizards and improved LDAP sponsorship)</li>
-                <li><a href="http://www.mines-paristech.fr">Mines Paristech (previously Ecole Nationale Supérieure des Mines de Paris)</a><, France (biblio frameworks, MARC authorities, OPAC basket, Serials sponsorship)</li>
+                <li><a href="http://www.mines-paristech.fr">Mines Paristech (previously Ecole Nationale Supérieure des Mines de Paris)</a>, France (biblio frameworks, MARC authorities, OPAC basket, Serials sponsorship)</li>
                 <li><a href="http://www.mediathequeouestprovence.fr/">SAN-Ouest Provence</a>, France (Koha 3.0 enhancements to patrons and holds modules)</li>
                 <li>The <a href="http://ccfls.org">Crawford County Federated Library System</a>, PA, USA (Koha 3.0 Zebra Integration sponsorship)</li>
                 <li>The <a href="http://www.geauga.lib.oh.us/">Geauga County Public Library</a>, OH, USA (Koha 3.0 beta testing)</li>
index 5b34721..9ab47f3 100644 (file)
@@ -99,7 +99,7 @@ function submitForm(form) {
  $(document).ready(function() {
   //  $("#toolbar").empty();
     yuiToolbar();
-    $("#basket_groups > ul").tabs();
+    $("#basket_groups").tabs();
  });
 
 // YUI Toolbar Functions
index beb4e2d..c3b169d 100644 (file)
                 <td>[% loop_order.ecost %]</td>
                 <td>[% loop_order.ordertotal %]</td>
                                <td>
-                                   <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;datereceived=[% loop_order.invoicedatereceived %]&amp;invoice=[% loop_order.invoice %]&amp;gst=[% loop_order.gst %]&amp;freight=[% loop_order.freight %]&amp;booksellerid=[% loop_order.booksellerid %]">Receive</a>
+                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;datereceived=[% invoicedatereceived %]&amp;invoice=[% invoice %]&amp;gst=[% loop_order.gst %]&amp;freight=[% loop_order.freight %]&amp;booksellerid=[% loop_order.booksellerid %]">Receive</a>
                                    
                                </td>
                                <td>
index aae5925..4b25992 100644 (file)
@@ -89,7 +89,7 @@
             Add budget
         [% END %]
     [% END %]
-
+    [% IF ( duplicate_form ) %]&rsaquo; Duplicate budget[% END %]
     [% IF ( delete_confirm ) %]&rsaquo;
             Delete budget '[% budget_period_description %]'?
     [% END %]
             Delete budget '[% budget_period_description %]'?
         [% END %]
     [% END %]
-
+    <!-- duplicate a budget -->
+    [% IF ( duplicate_form ) %]
+        <a href="/cgi-bin/koha/admin/aqbudgetperiods.pl">Budgets</a> &rsaquo; Duplicate budget
+    [% END %]
     <!-- display budget periods list -->
     <!-- ########################################## -->
     [% IF ( else ) %]
 [% INCLUDE 'budgets-admin-toolbar.inc' %]
 
 [% IF ( duplicate_form ) %]
+<h3>Duplicate budget</h3>
 <form action="/cgi-bin/koha/admin/aqbudgetperiods.pl" name="f" method="post">
     <fieldset class="rows">
     <input type="hidden" name="op" value="duplicate_budget" />
     </fieldset>
 
     <fieldset class="action">
-        <input type="button" value="Save Changes"  onclick="CheckDuplicateForm(this.form)"    />
+        <input type="button" value="Save Changes"  onclick="CheckDuplicateForm(this.form)" /> <a class="cancel" href="/cgi-bin/koha/admin/aqbudgets.pl?budget_period_id=[% budget_period_id %]">Cancel</a>
     </fieldset>
 
 </form>
         <!-- ###################################### -->
         <input type="button" value="Save changes"  onclick="Check(this.form)"    />
         <!--             <input type="submit" value="Save Changes"  />  -->
-        <!--            <a href="/cgi-bin/koha/admin/aqbudgetperiods.pl" class="cancel">Cancel</a> -->
+        [% IF ( budget_period_id ) %]<a href="/cgi-bin/koha/admin/aqbudgets.pl?budget_period_id=[% budget_period_id %]" class="cancel">Cancel</a>[% END %]
     </fieldset>
 
 </form>
index 2880572..a99e203 100644 (file)
@@ -5,7 +5,7 @@
 //<![CDATA[
 
         $(document).ready(function() {
-               $('#subfieldtabs > ul').tabs();
+        $('#subfieldtabs').tabs();
         });
 
 function displayMoreConstraint(numlayer){
@@ -59,10 +59,10 @@ function displayMoreConstraint(numlayer){
                 [% FOREACH loo IN loop %]
                     [% IF ( loo.new_subfield ) %]
                         [% IF ( tagfield >=10 ) %]<!-- display new only for > 10 fields -->
-                        <li><a href="/cgi-bin/koha/admin/auth_subfields_structure.pl#sub[% loo.tagsubfield %]field" title="[% loo.liblibrarian %]">New</a></li>
+                        <li><a href="#sub[% loo.tagsubfield %]field" title="[% loo.liblibrarian %]">New</a></li>
                         [% END %]
                     [% ELSE %]
-                        <li><a href="/cgi-bin/koha/admin/auth_subfields_structure.pl#sub[% loo.tagsubfield %]field" title="[% loo.liblibrarian %]">
+                        <li><a href="#sub[% loo.tagsubfield %]field" title="[% loo.liblibrarian %]">
                             [% loo.tagsubfield %]
                     </a></li>
                     [% END %]
index 0deebe1..3af0724 100644 (file)
 <script type="text/JavaScript" language="JavaScript">
 //<![CDATA[
      $(document).ready(function() {
-        $('#icons > ul').tabs();
+        $('#icons').tabs();
      });
 //]]>
 </script>
 <style type="text/css">
        fieldset.rows div.toptabs li { clear:none;margin-right:.5em;padding-bottom:0;width:auto; }
-       fieldset.rows div.toptabs .ui-tabs-nav li.ui-tabs-selected {background-color : transparent; }
+    fieldset.rows div.toptabs .ui-tabs-nav li.ui-tabs-selected {background-color : #F4F8F9; }
        fieldset.rows .ui-tabs-panel { margin-right : 10px; margin-left : 10px;margin-bottom:10px;}
+    fieldset.rows .ui-tabs-nav { margin-left : 10px; }
 </style>
 </head>
 <body id="admin_authorised_values" class="admin">
             <input type="text" name="lib_opac" id="lib_opac" value="[% lib_opac %]" maxlength="80" />
         </li>
                </ol>
-               <div id="icons" class="toptabs">
+        <div id="icons" class="toptabs" style="clear:both">
         <h5 style="margin-left:10px;">Choose an icon:</h5>
                        <ul>
-                                       <li><a href="/cgi-bin/koha/admin/authorised_values.pl?op=add_form&amp;category=[% category %]#none">None</a></li>
+                  <li><a href="#none">None</a></li>
                                  [% FOREACH imageset IN imagesets %]
-                                       [% IF ( imageset.imagesetactive ) %]<li class="ui-tabs-selected">[% ELSE %]<li>[% END %]<a href="/cgi-bin/koha/admin/authorised_values.pl?op=add_form&amp;category=[% imageset.category %]#[% imageset.imagesetname %]">[% imageset.imagesetname %]</a></li>
+                        [% IF ( imageset.imagesetactive ) %]<li class="ui-tabs-selected">[% ELSE %]<li>[% END %]<a href="#[% imageset.imagesetname %]">[% imageset.imagesetname %]</a></li>
                                  [% END %]
                        </ul>
-               </div>
   <div id="none"><ul>
   <li><label for="noimage">No image: </label><input type="radio" name="imageurl" id="noimage" value="removeImage" /></li>
   </ul>
   <br class="clear" />
   </div>
   [% END %]
-  
+  </div>
         </fieldset>
        <fieldset class="action"> <input type="hidden" name="id" value="[% id %]" />
         <input type="submit" value="Save" /> <a class="cancel" href="/cgi-bin/koha/admin/authorised_values.pl?searchfield=[% category %]">Cancel</a></fieldset>
index c9bd51c..1c2a7ac 100644 (file)
@@ -10,7 +10,7 @@
                $("#CheckAll").click(function(){ $("#transferlimit_tabs").checkCheckboxes();});
                $("#UncheckAll").click(function(){ $("#transferlimit_tabs").unCheckCheckboxes();});
                $("#SwapAll").click(function(){ $("#transferlimit_tabs").toggleCheckboxes();});
-           $('#transferlimit_tabs > ul').tabs();
+        $('#transferlimit_tabs').tabs();
 
                 $('#branchselect').change(function() {
                    $('#selectlibrary').submit();
index 1d327be..4834ff3 100644 (file)
         </fieldset>
 
     <fieldset class="action">
-        <input type="submit" value="Submit" onclick="Check(this.form)" />
+        <input type="submit" value="Submit" onclick="Check(this.form); return false;" />
         <a href="/cgi-bin/koha/admin/currency.pl" class="cancel">Cancel</a>
     </fieldset>
     </form>
index 83650c3..875ff1b 100644 (file)
@@ -40,7 +40,7 @@ table.grid td.default {
 <script type="text/javascript">//<![CDATA[
 var $branch = "[% branch %]";
 $(function(){
-    $('#alerttabs > ul').tabs();
+    $('#alerttabs').tabs();
 
     var blocked            = _('Blocked!');
     var saving             = _('Saving...');
index 16cd705..cb3f9ba 100644 (file)
@@ -85,14 +85,15 @@ function Check(f) {
        }
 }
      $(document).ready(function() {
-        $('#icons > ul').tabs();
+        $('#icons').tabs();
      });
 //]]>
 </script>
 <style type="text/css">
        fieldset.rows div.toptabs li { clear:none;margin-right:.5em;padding-bottom:0;width:auto; }
-       fieldset.rows div.toptabs .ui-tabs-nav li.ui-tabs-selected {background-color : transparent; }
+  fieldset.rows div.toptabs .ui-tabs-nav li.ui-tabs-selected {background-color : #F4F8F9; }
        fieldset.rows .ui-tabs-panel { margin-right : 10px; margin-left : 10px;margin-bottom:10px;}
+  fieldset.rows .ui-tabs-nav { margin-left : 10px; }
 </style>
 </head>
 <body id="admin_itemtypes" class="admin">
@@ -175,21 +176,20 @@ Item types administration
      [% IF ( noItemTypeImages ) %]
         <li><span class="label">Image: </span>Item type images are disabled. To enable them, turn off the <a href="/cgi-bin/koha/admin/preferences.pl?op=search&amp;searchfield=noItemTypeImages">noItemTypeImages system preference</a></li></ol>
         [% ELSE %]</ol>
-               <div id="icons" class="toptabs">
+    <div id="icons" class="toptabs" style="clear:both">
         <h5 style="margin-left:10px;">Choose an icon:</h5>
                        <ul>
-                                       <li><a href="/cgi-bin/koha/admin/itemtypes.pl#none">None</a></li>
+          <li><a href="#none">None</a></li>
                                  [% FOREACH imageset IN imagesets %]
-            [% IF ( imageset.imagesetactive ) %]<li class="ui-tabs-selected">[% ELSE %]<li>[% END %]<a href="/cgi-bin/koha/admin/itemtypes.pl#[% imageset.imagesetname %]">[% imageset.imagesetname %]</a></li>
+            [% IF ( imageset.imagesetactive ) %]<li class="ui-tabs-selected">[% ELSE %]<li>[% END %]<a href="#[% imageset.imagesetname %]">[% imageset.imagesetname %]</a></li>
                                  [% END %]
-                  [% IF ( remote_image ) %]<li class="ui-tabs-selected">[% ELSE %]<li>[% END %]<a href="/cgi-bin/koha/admin/itemtypes.pl#remote">Remote image</a></li>
+                  [% IF ( remote_image ) %]<li class="ui-tabs-selected">[% ELSE %]<li>[% END %]<a href="#remote">Remote image</a></li>
                        </ul>
-               </div>
   <div id="none"><ul>
   <li><label for="noimage">No image: </label><input type="radio" name="image" id="noimage" value="removeImage" /></li>
   </ul>
   <br class="clear" /></div>
-        
+
   [% FOREACH imageset IN imagesets %]
   <div id="[% imageset.imagesetname %]"><ul>
   [% FOREACH image IN imageset.images %]
@@ -225,6 +225,7 @@ Item types administration
   <br class="clear" />
 </div>
 [% END %]
+</div>
 <ol>
       <li>
           <label for="notforloan">Not for loan</label>   [% IF ( notforloan ) %]
index fc01b87..6938348 100644 (file)
@@ -6,7 +6,7 @@
 //<![CDATA[
 
 $(document).ready(function() {
-    $('#subfieldtabs > ul').tabs();
+    $('#subfieldtabs').tabs();
         $("a.displaymore").click(function(){
         var link = $(this);
         var constraints = $("#"+$(this).attr("href").replace("#",""));
index 10e1d13..fe5fd05 100644 (file)
@@ -40,6 +40,10 @@ Cataloging:
         -
     Record Structure:
         -
+            - Fill in the default language for field 008 Range 35-37 (e.g. eng, nor, ger, see <a href="http://www.loc.gov/marc/languages/language_code.html">MARC Code List for Languages</a>)
+            - pref: DefaultLanguageField008
+            - " Empty defaults to eng."
+        -
             - Interpret and store MARC records in the
             - pref: marcflavour
               choices:
index 00974a6..d2d11b4 100644 (file)
@@ -358,6 +358,18 @@ Circulation:
                   yes: Allow
                   no: "Don't allow"
             - suspended holds to be automatically resumed by a set date.
+        -
+            - pref: SuspendHoldsIntranet
+              choices:
+                  yes: Allow
+                  no: "Don't allow"
+            - holds to be suspended from the intranet.
+        -
+            - pref: SuspendHoldsOpac
+              choices:
+                  yes: Allow
+                  no: "Don't allow"
+            - holds to be suspended from the OPAC.
     Fines Policy:
         -
             - Calculate fines based on days overdue
index 55b4457..58d67f0 100644 (file)
@@ -121,3 +121,9 @@ Patrons:
            choices:
                now: current date.
                dateexpiry: current membership expiry date.
+     -
+         - pref: TalkingTechItivaPhoneNotification
+           choices:
+               yes: Enable
+               no: Disable
+         - patron phone notifications using Talking Tech i-tiva (overdues, predues and holds notices currently supported).
index 6512360..e684179 100644 (file)
@@ -8,7 +8,7 @@
 
      var fields_in_use = {};
         $(document).ready(function() {
-               $('#authoritytabs > ul').tabs();
+        $('#authoritytabs').tabs();
         $('.tag').each(function() {
             var field_id = this.getAttribute('id').substring(0, 7);
             if (field_id in fields_in_use) {
@@ -529,14 +529,14 @@ function searchauthority() {
     var addauthButton = new YAHOO.widget.Button({
                                             id: "addauth",
                                             type: "button",
-                                            label: "Save",
+                                            label: _("Save"),
                                             container: "addauthc",
                                             onclick: {fn: Check }
                                         });
     var addauthButton2 = new YAHOO.widget.Button({
                                             id: "addauth2",
                                             type: "button",
-                                            label: "Save",
+                                            label: _("Save"),
                                             container: "action",
                                             onclick: {fn: Check }
                                         });
@@ -592,9 +592,9 @@ function searchauthority() {
 <div id="authoritytabs" class="toptabs numbered">
        <ul> [% FOREACH BIG_LOO IN BIG_LOOP %]
             <li>[% IF ( BIG_LOO.number ) %]
-                <a href="/cgi-bin/authorities/authorties.pl#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
+                <a href="#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
             [% ELSE %]
-                <a href="/cgi-bin/authorities/authorties.pl#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
+                <a href="#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
             [% END %]</li>
         [% END %]</ul>
 
index 6b36351..e21f846 100644 (file)
@@ -12,7 +12,7 @@
 //<![CDATA[
 
         $(document).ready(function() {
-               $('#authoritiestabs>ul').tabs();
+    $('#authoritiestabs').tabs();
         });
 
 function confirm_deletion() {
@@ -131,7 +131,7 @@ function searchauthority() {
     <ul>
         [% FOREACH BIG_LOO IN BIG_LOOP %]
             <li>
-                <a href="/cgi-bin/koha/cataloguing/addbiblio.pl#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
+                <a href="#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
             </li>
         [% END %]
     </ul>
index c143995..7fd5607 100644 (file)
@@ -70,7 +70,13 @@ function jumpfull(page)
                         <td>[% resul.summary %]</td>
                         <td>[% resul.used %] times</td>
                         <td>
-                          <a href="javascript:jumpfull('blinddetail-biblio-search.pl?authid=[% resul.authid %]&amp;index=[% index %]')">choose</a>
+                          [% IF resul.repets %]
+                            [% FOREACH repet IN resul.repets %]
+                            <a href="javascript:jumpfull('blinddetail-biblio-search.pl?authid=[% resul.authid %]&amp;index=[% repet.index %]&amps;repet=[% repet.repet %]')" title="[% repet.value %]">[% repet.repet %]</a>
+                            [% END %]
+                          [% ELSE %]
+                            <a href="javascript:jumpfull('blinddetail-biblio-search.pl?authid=[% resul.authid %]&amp;index=[% index %]')">choose</a>
+                          [% END %]
                         </td>
                         <td><a href="authorities.pl?authid=[% resul.authid %]">Edit authority</a></td>
                     </tr>
index 62ae572..8495c60 100644 (file)
@@ -11,7 +11,7 @@
 //<![CDATA[
 
         $(document).ready(function() {
-               $('#bibliotabs > ul').tabs();
+        $('#bibliotabs').tabs();
         });
 
 function Changefwk(FwkList) {
@@ -65,37 +65,37 @@ function Changefwk(FwkList) {
 <div id="bibliotabs" class="toptabs numbered">
        <ul>
             [% IF ( tab0XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab0XX">0</a></li>
+                <li><a href="#tab0XX">0</a></li>
             [% END %]
             [% IF ( tab1XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab1XX">1</a></li>
+                <li><a href="#tab1XX">1</a></li>
             [% END %]
             [% IF ( tab2XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab2XX">2</a></li>
+                <li><a href="#tab2XX">2</a></li>
             [% END %]
             [% IF ( tab3XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab3XX">3</a></li>
+                <li><a href="#tab3XX">3</a></li>
             [% END %]
             [% IF ( tab4XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab4XX">4</a></li>
+                <li><a href="#tab4XX">4</a></li>
             [% END %]
             [% IF ( tab5XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab5XX">5</a></li>
+                <li><a href="#tab5XX">5</a></li>
             [% END %]
             [% IF ( tab6XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab6XX">6</a></li>
+                <li><a href="#tab6XX">6</a></li>
             [% END %]
             [% IF ( tab7XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab7XX">7</a></li>
+                <li><a href="#tab7XX">7</a></li>
             [% END %]
             [% IF ( tab8XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab8XX">8</a></li>
+                <li><a href="#tab8XX">8</a></li>
             [% END %]
             [% IF ( tab9XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab9XX">9</a></li>
+                <li><a href="#tab9XX">9</a></li>
             [% END %]
             [% IF ( tab10XX ) %]
-                <li><a href="/cgi-bin/koha/catalogue/MARCdetail.pl#tab10XX">Item(s)</a></li>
+                <li><a href="#tab10XX">Item(s)</a></li>
             [% END %]
         </ul>
     <div id="tab0XX">
index 2ea2737..43560d0 100644 (file)
@@ -15,7 +15,7 @@
        }
        $(document).ready(function() {
                $("input[name=q]:eq(0)").focus();
-                $('#advsearches > ul').tabs();
+        $('#advsearches').tabs();
        });
 </script>
 </head>
       <ul>
       [% FOREACH advsearchloo IN advancedsearchesloop %]
         <li id="advsearch-tab-[% advsearchloo.advanced_search_type %]">
-           <a href="/cgi-bin/koha/opac-search.pl#advsearch-[% advsearchloo.advanced_search_type %]">
+           <a href="#advsearch-[% advsearchloo.advanced_search_type %]">
            [% IF ( advsearchloo.advanced_search_type == 'itemtypes' ) %]Item type
            [% ELSIF ( advsearchloo.advanced_search_type == 'ccode' ) %]Collection
            [% ELSIF ( advsearchloo.advanced_search_type == 'loc' ) %]Shelving location
index c92a891..ce52040 100644 (file)
@@ -36,7 +36,7 @@ function verify_images() {
         });
 }
      $(document).ready(function() {
-        $('#bibliodetails > ul').tabs();
+        $('#bibliodetails').tabs();
      });
      [% IF ( AmazonEnabled ) %]$(window).load(function() {
         verify_images();
@@ -45,7 +45,7 @@ function verify_images() {
 </script>
 </head>
 
-<body id="catalog_detail" class="catalog">
+<body id="catalog_detail" class="catalog" onload="document.getElementById('search-form').focus();">
 
 [% INCLUDE 'header.inc' %]
 [% INCLUDE 'cat-search.inc' %]
@@ -255,12 +255,12 @@ function verify_images() {
 <div id="bibliodetails" class="toptabs">
 
 <ul>   
-<li><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber %]#holdings">Holdings</a></li>
-<li><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber %]#description">Descriptions</a></li>
-[% IF ( subscriptionsnumber ) %]<li><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber %]#subscriptions">Subscriptions</a></li>[% END %]
-[% IF ( FRBRizeEditions ) %][% IF ( XISBNS ) %]<li><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber %]#editions">Editions</a></li>[% END %][% END %]
-[% IF ( AmazonSimilarItems ) %]<li><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber %]#related">Related titles</a></li>[% END %]
-[% IF ( LocalCoverImages ) %][% IF ( localimages || CAN_user_tools_upload_local_cover_images ) %]<li><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber %]#images">Images</a></li>[% END %][% END %]
+<li><a href="#holdings">Holdings</a></li>
+<li><a href="#description">Descriptions</a></li>
+[% IF ( subscriptionsnumber ) %]<li><a href="#subscriptions">Subscriptions</a></li>[% END %]
+[% IF ( FRBRizeEditions ) %][% IF ( XISBNS ) %]<li><a href="#editions">Editions</a></li>[% END %][% END %]
+[% IF ( AmazonSimilarItems ) %]<li><a href="#related">Related titles</a></li>[% END %]
+[% IF ( LocalCoverImages ) %][% IF ( localimages || CAN_user_tools_upload_local_cover_images ) %]<li><a href="#images">Images</a></li>[% END %][% END %]
  </ul>
 
 <div id="holdings">
index a9e9841..f934fbe 100644 (file)
@@ -8,7 +8,7 @@
 
      var fields_in_use = {};
         $(document).ready(function() {
-               $('#addbibliotabs > ul').tabs().bind('show.ui-tabs', function(e, ui) {
+        $('#addbibliotabs').tabs().bind('show.ui-tabs', function(e, ui) {
                        $("#"+ui.panel.id+" input:eq(0)").focus();
                });
         $('.tag').each(function() {
@@ -39,7 +39,7 @@
 
        });
 
-       $('#header_search > ul').tabs().bind('show.ui-tabs', function(e, ui) { $('#header_search > div:not(.ui-tabs-hide)').find('input').eq(0).focus(); });
+    $('#header_search').tabs().bind('show.ui-tabs', function(e, ui) { $('#header_search > div:not(.ui-tabs-hide)').find('input').eq(0).focus(); });
 
 
 function confirmnotdup(redirect){
@@ -804,9 +804,9 @@ function unHideSubfield(index,labelindex) { // FIXME :: is it used ?
 <div id="addbibliotabs" class="toptabs numbered">
        <ul>[% FOREACH BIG_LOO IN BIG_LOOP %]
           <li>  [% IF ( BIG_LOO.number ) %]
-                <a href="/cgi-bin/koha/cataloguing/addbiblio.pl#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
+                <a href="#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
             [% ELSE %]
-                <a href="/cgi-bin/koha/cataloguing/addbiblio.pl#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
+                <a href="#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
             [% END %]</li>
         [% END %]</ul>
 
index 296f795..6692274 100644 (file)
@@ -231,7 +231,7 @@ $(document).ready(function() {
     [% IF ( opisadd ) %]
         <h2 id="additema">Add item</h2>
     [% ELSE %]
-        <h2 id="edititem">Edit item #[% itemnumber %]</h2>
+        <h2 id="edititem">Edit Item #[% itemnumber %][% IF ( barcode ) %] / Barcode [% barcode %][% END %]</h2>
     [% END %]
        <fieldset class="rows">
        <ol>
index 745680c..9c910ec 100644 (file)
@@ -19,7 +19,7 @@ div#result { margin-top: 1em; }
 
 $(document).ready(function(){
     // Creating tabs
-    $("#tabs > ul").tabs();
+    $("#tabs").tabs();
 
     // Getting marc structure via ajax
     tagslib = [];
index 3db24d3..ffd29d2 100644 (file)
@@ -91,7 +91,7 @@ tr.selected { background-color : #FFFFCC; } tr.selected td { background-color :
        <div class="yui-g">
     <div class="yui-u first">
            <fieldset class="rows"> 
-                <ol><li><label for="title">Title: </label> <input type="text" id="title"  name="title" value="[% title %]" /></li>
+        <ol><li><label for="title">Title: </label> <input type="text" id="title"  name="title" value="[% title |html %]" /></li>
                 <li><label for="isbn">ISBN/ISSN: </label> <input type="text" id="isbn" name="isbn" value="[% isbn %]" /></li>
         <li><label for="lccall">LC call number: </label> <input type="text" id="lccall" name="lccall" value="" /></li>
         <li><label for="controlnumber">Control no.: </label> <input type="text" id="controlnumber" name="controlnumber" value="" /></li>
index aaa0464..11ee5f9 100644 (file)
@@ -15,7 +15,7 @@
 });[% END %]
 [% UNLESS ( borrowernumber ) %][% UNLESS ( CGIselectborrower ) %]window.onload=function(){ $('#findborrower').focus(); };[% END %][% END %]
         $(document).ready(function() {
-               $('#patronlists > ul').tabs();
+        $('#patronlists').tabs();
                [% IF ( UseTablesortForCirc ) %]$.tablesorter.defaults.widgets = ['zebra'];
                $("#issuest").tablesorter({[% IF ( dateformat_metric ) %]
                dateFormat: 'uk',[% END %]
@@ -226,7 +226,7 @@ function refocus(calendar) {
 </form>
 </div>
 
-[% IF ( dateexpiry ) %]<div class="dialog message">Patron's account has been renewed until [% dateexpiry %]</div>[% END %]
+[% IF ( dateexpiry ) %]<div class="dialog message">Patron's account has been renewed until [% dateexpiry | $KohaDates %]</div>[% END %]
 
 [% IF additional_materials %]
     <div id="materials" class="dialog message">Note about the accompanying materials: <br />
@@ -258,7 +258,7 @@ function refocus(calendar) {
 [% END %]
 
 [% IF ( RESERVED ) %]
-    <li>Item <i>[% getTitleMessageIteminfo %]</i> ([% getBarcodeMessageIteminfo %]) has been on hold for <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% resborrowernumber %]">[% resfirstname %] [% ressurname %]</a> ([% rescardnumber %]) at [% resbranchname %] since [% resreservedate %]</li>
+    <li>Item <i>[% getTitleMessageIteminfo %]</i> ([% getBarcodeMessageIteminfo %]) has been on hold for <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% resborrowernumber %]">[% resfirstname %] [% ressurname %]</a> ([% rescardnumber %]) at [% resbranchname %] since [% resreservedate | $KohaDates %]</li>
 [% END %]
 
 [% IF ( ISSUED_TO_ANOTHER ) %]
@@ -554,7 +554,7 @@ No patron matched <span class="ex">[% message %]</span>
 
                        [% IF ( warndeparture ) %]
                        <li><span class="circ-hlt">Expiration:</span> Patron's card will expire soon.
-                       Patron's card expires on [% expiry %] <a href="/cgi-bin/koha/members/setstatus.pl?borrowernumber=[% borrowernumber %]&amp;cardnumber=[% cardnumber %]&amp;destination=circ&amp;reregistration=y">Renew</a> or <a href="/cgi-bin/koha/members/memberentry.pl?op=modify&amp;destination=circ&amp;borrowernumber=[% borrowernumber %]&amp;categorycode=[% categorycode %]">Edit Details</a>
+            Patron's card expires on [% expiry | $KohaDates %] <a href="/cgi-bin/koha/members/setstatus.pl?borrowernumber=[% borrowernumber %]&amp;cardnumber=[% cardnumber %]&amp;destination=circ&amp;reregistration=y">Renew</a> or <a href="/cgi-bin/koha/members/memberentry.pl?op=modify&amp;destination=circ&amp;borrowernumber=[% borrowernumber %]&amp;categorycode=[% categorycode %]">Edit Details</a>
 
                        </li>
                        [% END %]
@@ -567,7 +567,7 @@ No patron matched <span class="ex">[% message %]</span>
 
                        [% IF ( expired ) %]
                        <li><span class="circ-hlt">Expiration:</span> Patron's card has expired.
-                       [% IF ( expiry ) %]Patron's card expired on [% expiry %][% END %] <a href="/cgi-bin/koha/members/setstatus.pl?borrowernumber=[% borrowernumber %]&amp;cardnumber=[% cardnumber %]&amp;destination=circ&amp;reregistration=y">Renew</a> or <a href="/cgi-bin/koha/members/memberentry.pl?op=modify&amp;destination=circ&amp;borrowernumber=[% borrowernumber %]&amp;categorycode=[% categorycode %]">Edit Details</a>
+            [% IF ( expiry ) %]Patron's card expired on [% expiry | $KohaDates %][% END %] <a href="/cgi-bin/koha/members/setstatus.pl?borrowernumber=[% borrowernumber %]&amp;cardnumber=[% cardnumber %]&amp;destination=circ&amp;reregistration=y">Renew</a> or <a href="/cgi-bin/koha/members/memberentry.pl?op=modify&amp;destination=circ&amp;borrowernumber=[% borrowernumber %]&amp;categorycode=[% categorycode %]">Edit Details</a>
 
                        </li>
                        [% END %]
@@ -582,7 +582,7 @@ No patron matched <span class="ex">[% message %]</span>
 
             [% IF ( userdebarred ) %]
                <li class="blocker">
-               <span class="circ-hlt"> Restricted:</span> Patron's account is restricted [% IF (userdebarreddate ) %] until [% userdebarreddate %] [% END %] [% IF (debarredcomment ) %] with the comment "[% debarredcomment %]"[% END %]
+               <span class="circ-hlt"> Restricted:</span> Patron's account is restricted [% IF (userdebarreddate ) %] until [% userdebarreddate | $KohaDates %] [% END %] [% IF (debarredcomment ) %] with the comment "[% debarredcomment %]"[% END %]
                <form class="inline compact" action="/cgi-bin/koha/members/setstatus.pl" method="post">
                        <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
                        <input type="hidden" name="destination" value="circ" />
@@ -619,7 +619,7 @@ No patron matched <span class="ex">[% message %]</span>
                    <h4>Holds waiting:</h4>
                                [% FOREACH WaitingReserveLoo IN WaitingReserveLoop %]
                                    <ul>
-                                       <li> <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% WaitingReserveLoo.biblionumber %]">[% WaitingReserveLoo.title |html %]</a> ([% WaitingReserveLoo.itemtype %]), [% IF ( WaitingReserveLoo.author ) %]by [% WaitingReserveLoo.author %][% END %] Hold placed on [% WaitingReserveLoo.reservedate %].
+                            <li> <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% WaitingReserveLoo.biblionumber %]">[% WaitingReserveLoo.title |html %]</a> ([% WaitingReserveLoo.itemtype %]), [% IF ( WaitingReserveLoo.author ) %]by [% WaitingReserveLoo.author %][% END %] Hold placed on [% WaitingReserveLoo.reservedate | $KohaDates %].
                                    [% IF ( WaitingReserveLoo.waitingat ) %]
                                        <br />[% IF ( WaitingReserveLoo.waitinghere ) %]<strong class="waitinghere">[% ELSE %]<strong>[% END %]Waiting at [% WaitingReserveLoo.waitingat %]</strong>
                                    [% END %]
@@ -677,17 +677,17 @@ No patron matched <span class="ex">[% message %]</span>
 
 <ul>
 <li>    [% IF ( issuecount ) %]
-            <a href="/cgi-bin/koha/circ/circulation.pl#checkouts">[% issuecount %] Checkout(s)</a>
+            <a href="#checkouts">[% issuecount %] Checkout(s)</a>
     [% ELSE %]
-            <a href="/cgi-bin/koha/circ/circulation.pl#checkouts">0 Checkouts</a>
+            <a href="#checkouts">0 Checkouts</a>
     [% END %]</li>
 [% IF ( displayrelissues ) %]
-<li><a href="/cgi-bin/koha/circ/circulation.pl#relissues">Relatives' checkouts</a></li>
+<li><a href="#relissues">Relatives' checkouts</a></li>
 [% END %]
 <li>[% IF ( countreserv ) %]
-            <a href="/cgi-bin/koha/circ/circulation.pl#reserves">[% countreserv %] Hold(s)</a>
+            <a href="#reserves">[% countreserv %] Hold(s)</a>
     [% ELSE %]
-            <a href="/cgi-bin/koha/circ/circulation.pl#reserves">0 Holds</a>
+            <a href="#reserves">0 Holds</a>
     [% END %]</li>
 
 </ul>
@@ -724,11 +724,11 @@ No patron matched <span class="ex">[% message %]</span>
     <tr class="highlight">
     [% END %]
         [% IF ( todayissue.od ) %]<td class="od">[% ELSE %]<td>[% END %]
-        [% todayissue.dd %]
+        [% todayissue.duedate | $KohaDates %]
         </td>
         <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% todayissue.biblionumber %]&amp;type=intra"><strong>[% todayissue.title |html %]</strong></a>[% IF ( todayissue.author ) %], by [% todayissue.author %][% END %][% IF ( todayissue.itemnotes ) %]- <span class="circ-hlt">[% todayissue.itemnotes %]</span>[% END %] <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% todayissue.biblionumber %]&amp;itemnumber=[% todayissue.itemnumber %]#item[% todayissue.itemnumber %]">[% todayissue.barcode %]</a></td>
         <td>[% UNLESS ( noItemTypeImages ) %] [% IF ( todayissue.itemtype_image ) %]<img src="[% todayissue.itemtype_image %]" alt="" />[% END %][% END %][% todayissue.itemtype %]</td>
-        <td>[% todayissue.checkoutdate %]</td>
+        <td>[% todayissue.checkoutdate | $KohaDates %]</td>
         [% IF ( todayissue.multiple_borrowers ) %]<td>[% todayissue.firstname %] [% todayissue.surname %]</td>[% END %]
         <td>[% todayissue.issuingbranchname %]</td>
         <td>[% todayissue.itemcallnumber %]</td>
@@ -797,13 +797,13 @@ No patron matched <span class="ex">[% message %]</span>
         <tr class="highlight">
     [% END %]
         [% IF ( previssue.od ) %]<td class="od">[% ELSE %]<td>[% END %]
-        [% previssue.dd %]
+        [% previssue.duedate | $KohaDates %]
         </td>
         <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% previssue.biblionumber %]&amp;type=intra"><strong>[% previssue.title |html %]</strong></a>[% IF ( previssue.author ) %], by [% previssue.author %][% END %] [% IF ( previssue.itemnotes ) %]- [% previssue.itemnotes %][% END %] <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% previssue.biblionumber %]&amp;itemnumber=[% previssue.itemnumber %]#item[% previssue.itemnumber %]">[% previssue.barcode %]</a></td>
         <td>
             [% previssue.itemtype %]
         </td>
-        <td>[% previssue.displaydate %]</td>
+        <td>[% previssue.issuedate | $KohaDates %]</td>
         [% IF ( previssue.multiple_borrowers ) %]<td>[% previssue.firstname %] [% previssue.surname %]</td>[% END %]
         <td>[% previssue.issuingbranchname %]</td>
         <td>[% previssue.itemcallnumber %]</td>
@@ -965,7 +965,7 @@ No patron matched <span class="ex">[% message %]</span>
                <tbody>
         [% FOREACH reservloo IN reservloop %]
         <tr class="[% reservloo.color %]">
-                    <td>[% reservloo.reservedate %]</td>
+                    <td>[% reservloo.reservedate | $KohaDates %]</td>
                     <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% reservloo.biblionumber %]"><strong>[% reservloo.title |html %]</strong></a>[% IF ( reservloo.author ) %], by [% reservloo.author %][% END %]</td>
                     <td>[% reservloo.itemcallnumber %]</td>
                                        <td><em>[% IF ( reservloo.barcodereserv ) %]Item [% reservloo.barcodereserv %]
@@ -994,6 +994,7 @@ No patron matched <span class="ex">[% message %]</span>
             <fieldset class="action"><input type="submit" class="cancel" name="submit" value="Cancel marked holds" /></fieldset>
     </form>
 
+    [% IF SuspendHoldsIntranet %]
     <fieldset class="action">
         <form action="/cgi-bin/koha/reserve/modrequest_suspendall.pl" method="post">
             <input type="hidden" name="from" value="circ" />
@@ -1045,8 +1046,9 @@ No patron matched <span class="ex">[% message %]</span>
             <input type="submit" value="Resume all suspended holds" />
        </form>
     </fieldset>
+    [% END # IF SuspendHoldsIntranet %]
 
-       [% ELSE %]
+[% ELSE %]
        <p>Patron has nothing on hold.</p>
 [% END %]
 </div> <!-- reservesloop -->
index 835724f..1ed01f0 100644 (file)
@@ -1,4 +1,6 @@
 [% USE KohaDates %]
+[% USE KohaBranchName %]
+
 [% INCLUDE 'doc-head-open.inc' %]
 <title>Koha &rsaquo; Circulation &rsaquo; Check in [% title |html %]</title>
 [% INCLUDE 'doc-head-close.inc' %]
@@ -91,7 +93,7 @@ $(document).ready(function () {
 </div>
 [% END %]
 <!-- case of a mistake in transfer loop -->
-[% IF ( WrongTransfer ) %]<div id="return2" class="dialog message"><!-- WrongTransfer --><h3>Please return <a href="/cgi-bin/koha/catalogue/detail.pl?type=intra&amp;biblionumber=[% itembiblionumber %]">[% title |html %]</a> to [% TransferWaitingAt %]</h3><h3><a href="#" onclick="Dopop('transfer-slip.pl?transferitem=[% itemnumber %]&amp;&amp;branchcode=[% homebranch %]&amp;op=slip'); return true;">Print slip</a> or <a href="/cgi-bin/koha/circ/returns.pl?itemnumber=[% itemnumber %]&amp;canceltransfer=1">Cancel transfer</a></h3>
+[% IF ( WrongTransfer ) %]<div id="return2" class="dialog message"><!-- WrongTransfer --><h3>Please return <a href="/cgi-bin/koha/catalogue/detail.pl?type=intra&amp;biblionumber=[% itembiblionumber %]">[% title |html %]</a> to [% TransferWaitingAt | $KohaBranchName %]</h3><h3><a href="#" onclick="Dopop('transfer-slip.pl?transferitem=[% itemnumber %]&amp;&amp;branchcode=[% homebranch %]&amp;op=slip'); return true;">Print slip</a> or <a href="/cgi-bin/koha/circ/returns.pl?itemnumber=[% itemnumber %]&amp;canceltransfer=1">Cancel transfer</a></h3>
 [% IF ( wborcnum ) %]<h5>Hold for:</h5>
         <ul><li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">
             [% borsurname %], [% borfirstname %]</a> ([% borcnum %])</li>
index f4b4d4c..0101d7f 100644 (file)
@@ -11,7 +11,7 @@ $.tablesorter.addParser({
     type: 'text'
 });
      $(document).ready(function() {
-         $('#resultlist > ul').tabs();
+         $('#resultlist').tabs();
          $("th a").hide();
          $.tablesorter.defaults.widgets = ['zebra'];
          $("#holdst,#holdso").tablesorter({[% IF ( dateformat == 'metric' ) %]
@@ -69,8 +69,8 @@ $.tablesorter.addParser({
     [% ELSE %]
         <div id="resultlist" class="toptabs">
             <ul>
-                <li><a href="/cgi-bin/koha/circ/waitingreserves.pl#holdswaiting">[% reservecount %] Hold(s) waiting</a></li>
-                <li><a href="/cgi-bin/koha/circ/waitingreserves.pl#holdsover">[% overcount %] Hold(s) over</a></li>
+                <li><a href="#holdswaiting">[% reservecount %] Hold(s) waiting</a></li>
+                <li><a href="#holdsover">[% overcount %] Hold(s) over</a></li>
             </ul>
             <div id="holdswaiting">
             [% IF ( reserveloop ) %]
index 4d0cd59..4340b11 100644 (file)
@@ -1,21 +1,21 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Vendor contracts</h1>
+<h1>Vendor Contracts</h1>
 
-<p>You can define contracts (with a start and end date) and attach it to a vendor. This is used so that at the end of the year you can see how much you spent on a specific contract with a vendor. In some places, contracts are set up with a minimum and maximum yearly amount.</p>
+<p>You can define contracts (with a start and end date) and attach them to a vendor. This is used so that at the end of the year you can see how much you spent on a specific contract with a vendor. In some places, contracts are set up with a minimum and maximum yearly amount.</p>
 
-<h2>Add a contract</h2>
+<h2>Add a Contract</h2>
 
-<p>At the top of a vendor search results page with only result or at the top of a vendor information page you will see a 'New contract' button.</p>
+<p>At the top of a Vendor Information Page, you will see a 'New Contract' button.</p>
 
 <p>The contract form will ask for some very basic information about the contract.</p>
 
-<p style="color: #ff0000">Important: You will not be able to enter a contract retrospectively, the end date must not be before today's date.</p>
+<p style="color: #ff0000">Important: You cannot enter a contract retrospectively. The end date must not be before today's date.</p>
 
 <p>Once the contract is saved it will appear below the vendor information.</p>
 
 <p>It will also be an option when creating a basket.</p>
 
-<p><strong>See the full documentation for vendor contracts in the <a href="http://manual.koha-community.org/3.6/en/acqvendors.html#vendorcontracts">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Vendor Contracts in the <a href="http://manual.koha-community.org/3.8/en/acqvendors.html#vendorcontracts">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index 85ed10f..9d64838 100644 (file)
@@ -2,12 +2,14 @@
 
 <h1>Acquisitions</h1>
 
-<p>The Koha acquisitions module provides a way where the library can record orders placed with vendors and manage purchase budgets.</p>
+<p>The Koha Acquisitions module provides a way for the library to record orders placed with vendors and manage purchase budgets.</p>
 
-<p>You do not need to use acquisitions to add items to your catalog, acquisitions is used only to track vendors and spending against your budgets.</p>
+<p>You do not need to use Acquisitions to add items to your catalog. Acquisitions is used only to track vendors and spending against your budgets.</p>
 
-<p>Before using the acquisitions module you will want to make sure that you have completed all of the set up.</p>
+<p>Before using the Acquisitions Module, you will want to make sure that you have completed all of the set up.</p>
 
-<p>First, set your acquisitions system preferences and acquisitions administration to match your library's workflow.</p>
+<p>First, set your Acquisitions System Preferences and Acquisitions Administration to match your library's workflow.</p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+<p><strong>See the full documentation for Acquisitions in the <a href="http://manual.koha-community.org/3.8/en/acqmodule.html">manual</a> (online).</strong></p>
+
+[% INCLUDE 'help-bottom.inc' %]
index 4a6967c..2b457c4 100644 (file)
@@ -1,51 +1,48 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h2>Placing an order</h2>
+<h2>Placing an Order</h2>
 
 <p>Once your basket is created you are presented with several options for adding items to the order.</p>
 
 <ul>
-       <li>If you are ordering another copy of an existing item, you can simply search for the record in your system
+    <li>If you are ordering another copy of an existing item, you can simply search for the record in your system.
 <ul>
-       <li>From the results, simply click 'Order' to be brought to the order form
+    <li>From the results, simply click 'Order' to be brought to the order form.
 <ul>
-       <li>All of the details associated with the item will already be listed under 'Catalog details'</li>
+    <li>All of the details associated with the item will already be listed under 'Catalog details.'</li>
 </ul>
 </li>
 </ul>
 </li>
-       <li>If you allow patrons to make purchase suggestions (learn more in the Managing Suggestions section of this manual) then you can place orders from those suggestions
-<ul>
-       <li>
-<ul>
-    <li>From this form you can make changes to the catalog details if necessary</li>
+    <li>If you allow patrons to make purchase suggestions (learn more in the Managing Suggestions section of this manual), then you can place orders from those suggestions.
+    <li>From this form you can make changes to the Catalog Details if necessary.</li>
 </ul>
 </li>
 </ul>
 </li>
-       <li>To order from a record that can't be found anywhere else, choose the 'From a new (empty) record'
+    <li>To order from a record that can't be found anywhere else, choose the 'From a new (empty) record.'
 <ul>
-       <li>You will be presented with an empty form to fill in all of the necessary details about the item you are ordering</li>
+    <li>You will be presented with an empty form to fill in all of the necessary details about the item you are ordering.</li>
 </ul>
 </li>
-       <li>If you want to search other libraries for an item to purchase you can use the 'From an external source' option which will allow you to order from a MARC record found via a Z39.50 search
+    <li>If you want to search other libraries for an item to purchase, you can use the 'From an external source' option that will allow you to order from a MARC record found via a Z39.50 search.
 <ul>
-    <li>From the results click the 'Order' link next to the item you want to purchase</li>
-    <li>If the item you're ordering from an external source looks like it might be a duplicate, Koha will warn you and give you options on how to proceed
+    <li>From the results, click the Order link next to the item you want to purchase.</li>
+    <li>If the item you're ordering from an external source looks like it might be a duplicate, Koha will warn you and give you options on how to proceed.
 <ul>
-    <li>From the warning you can choose to just order another copy on the existing bib record, create a new bib record, or cancel your order of this item.</li>
+    <li>From the warning, you can choose to order another copy on the existing bib record, create a new bib record, or cancel your order of this item.</li>
 </ul>
 </li>
-       <li>In the order form that pops up you will not be able to edit the catalog details</li>
+    <li>In the order form that pops up, you will not be able to edit the catalog details.</li>
 </ul>
 </li>
-       <li>The final option for ordering is to order from a staged record (learn more about staging records)
+    <li>The final option for ordering is to order from a staged record (learn more about staging records).
 <ul>
-       <li>From the list of files you are presented with, choose the 'Add orders' link
+    <li>From the list of files with which you are presented, choose the 'Add orders' link.
 <ul>
-       <li>From the list of records, click 'Add order' next to the item you want to add to your order
+    <li>From the list of records, click 'Add order' next to the item that you want to add to your order.
 <ul>
-       <li>From the order form you will not be able to edit the catalog details.</li>
+    <li>From the order form, you will not be able to edit the catalog details.</li>
 </ul>
 </li>
 </ul>
 </li>
 </ul>
 
-<p>Once you have entered the info about the item you need to enter the Accounting information.</p>
+<p/>
+<p>Once you have entered the info about the item, you need to enter the Accounting information.</p>
 
 <ul>
-       <li>Quantity is populated by the number of items you've added to the order above</li>
+    <li>Quantity is populated by the number of items you've added to the order above.</li>
        <li>The list of funds is populated by the funds you have assigned in the Acquisitions Administration area.</li>
-       <li>The vendor price will be used to calculate the rest of the amount fields below</li>
+    <li>The vendor price will be used to calculate the rest of the amount fields below.</li>
        <li>If the price is uncertain, check the uncertain price box.
 <ul>
-       <li>A basket with at least one uncertain price can't be closed</li>
+    <li>A basket with at least one uncertain price can't be closed.</li>
 </ul>
 </li>
-    <li>If you added planning values when creating the fund those values will appear in the two planning value fields</li>
+    <li>If you added Planning Values when creating the Fund, those values will appear in the two Planning Value fields.</li>
 </ul>
 
-<p>Once an item is added to the basket you will be presented with a basket summary.</p>
-
-<p>From here you can edit or remove the items you have added.</p>
-
-<p>Also on the summary page you have the option to edit the information you entered about the basket by clicking the 'Edit basket header information' button, deleting the basket altogether by clicking the 'Delete this basket' button, or exporting your basket as a CSV file by clicking the 'Export this basket as CSV' button.</p>
+<p/>
+<p>Once an item is added to the basket you will be presented with a basket summary. From here, you can edit or remove the items that you have added.</p>
+<p>On the summary page, you also have the option to edit the information that you entered about the basket by clicking the 'Edit basket header information' button, to delete the basket altogether by clicking the 'Delete this basket' button, or to export your basket as a CSV file by clicking the 'Export this basket as CSV' button.</p>
 
-<p>Once you're sure your basket is complete you can click 'Close this basket' button to indicate that this basket is complete and has been sent to the vendor.</p>
+<p>Once you're sure your basket is complete, you can click 'Close this basket' button to indicate that this basket is complete and has been sent to the vendor.</p>
 
-<p style="color: #ff0000">Important: A basket with at least one items marked as 'uncertain price' will not be able to be closed</p>
+<p style="color: #ff0000">Important: A basket with at least one item marked as 'uncertain price' will not be able to be closed</p>
 
-<p>Clicking the 'Uncertain prices' button will up a list of items with uncertain prices to quick editing.</p>
 
-<p style="color: #ff0000">Important: The Uncertain Prices page is independent of the basket, it is linked to the vendor, so you will see all items on order for this vendor with uncertain prices.</p>
+<p>Clicking the 'Uncertain Prices' button will call up a list of items with uncertain prices to quick editing.</p>
 
-<h2>Printing baskets</h2>
+<p style="color: #ff0000">Important: The Uncertain Prices page is independent of the basket. It is linked to the vendor so you will see all items on order with uncertain prices for that vender.</p>
 
-<p>When you are finished adding items to your basket you want to click 'Close this basket'</p>
+<h2>Printing Baskets</h2>
 
-<p>You will be asked if you want to create a purchase order at this time.</p>
+<p>When you are finished adding items to your basket, click 'Close this Basket.' You will be asked if you want to create a purchase order at this time.</p>
 
-<p>Your completed order will be listed on the Basket Grouping page for the printing or further modification.</p>
+<p>Your completed order will be listed on the Basket Grouping page for printing or further modification.</p>
 
-<p>Clicking 'Print' below your order will generate a PDF for printing. The PDF will have all of your library information followed by the items in your order.</p>
+<p>Clicking 'Print' below your order will generate a PDF for printing, which will have all of your library information followed by the items in your order.</p>
 
-<p><strong>See the full documentation for ordering in the <a href="http://manual.koha-community.org/3.6/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Ordering in the <a href="http://manual.koha-community.org/3.8/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index 093552e..40255e9 100644 (file)
@@ -1,14 +1,14 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Basket groups</h1>
+<h1>Basket Groups</h1>
 
 <p>A basket group is a group of closed baskets that you can perform actions on.</p>
 
 <h2>Create a basket group</h2>
 
-<p>A basket group is simply a group of baskets. In some libraries, you have several staff members that create baskets, and, at the end of a period of time, someone then groups them together to send to the vendor in bulk. That said, it is possible to have one basket in a basket group if that's the workflow used in your library.</p>
+<p>A basket group is simply a group of baskets. In some libraries, you have several staff members who create baskets, and, at the end of a period of time, someone then groups them together to send to the vendor in bulk. That said, it is possible to have one basket in a basket group if that's the workflow used in your library.</p>
 
-<p><strong>See the full documentation for basket groups in the <a href="http://manual.koha-community.org/3.6/en/placingacqorder.html#acqbasketgroup">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Basket Groups in the <a href="http://manual.koha-community.org/3.8/en/placingacqorder.html#acqbasketgroup">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
 
index 1fe4e87..1df42ef 100644 (file)
@@ -1,18 +1,18 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h2>Adding a basket</h2>
+<h2>Adding a Basket</h2>
 
-<p>When adding a basket you want to give it a name that will help you identify it later. The notes fields are optional and can contain any type of information.</p>
+<p>When adding a basket, give it a name that will help you identify it later. The notes fields are optional and can contain any type of information.</p>
 
-<p>If you have added contracts to the vendor you're ordering from, you will also have an option to choose which contract you're ordering these items under.</p>
+<p>If you have added contracts to the vendor from whom you are ordering, you will also have an option to choose which contract you are ordering those items under.</p>
 
-<p>When finished, click 'Save'</p>
+<p>When finished, click 'Save.'</p>
 
-<h2>Editing basket headers</h2>
+<h2>Editing Basket Headers</h2>
 
-<p>After creating your basket you can edit the name of the basket, the notes associated with it and the contract you're ordering against.</p>
+<p>After creating your basket, you can edit the name of the basket, the notes associated with it and the contract you're ordering against.</p>
 
-<p><strong>See the full documentation for ordering in the <a href="http://manual.koha-community.org/3.6/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Ordering in the <a href="http://manual.koha-community.org/3.8/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
 
index 1a75807..0ceca1e 100644 (file)
@@ -1,19 +1,19 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Acquisitions searching</h1>
+<h1>Acquisitions Searching</h1>
 
-<p>At the top of the various Acquisition pages there is a quick search box where you can perform either a vendor search or an order search.</p>
+<p>At the top of the various Acquisition pages, there is a quick search box where you can perform either a Vendor Search or an Order Search.</p>
 
-<p>In the vendor search you can enter any part of the vendor name to get results.</p>
+<p>In the Vendor Search, you can enter any part of the vendor name to get results.</p>
 
-<p>Using the orders search you can search for items that have been ordered with or without the vendor.</p>
+<p>Using the Orders Search, you can search for items that have been ordered with or without the vendor.</p>
 
 <p>You can enter info in one or both fields and you can enter any part of the title and/or vendor name.</p>
 
-<p>Clicking the plus sign to the right of the vendor search box will expand the search and allow you to search for additional fields.</p>
+<p>Clicking the plus sign to the right of the Vendor search box will expand the search and allow you to search for additional fields.</p>
 
-<p>Clicking "Advanced search" to the right of the search button will give you all of the order search options available.</p>
+<p>Clicking Advanced Search to the right of the search button will give you all of the order search options available.</p>
 
-<p><strong>See the full documentation for acquisitions searching in the <a href="http://manual.koha-community.org/3.6/en/acqsearch.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Acquisitions Searching in the <a href="http://manual.koha-community.org/3.8/en/acqsearch.html">manual</a> (online).</strong></p>
        
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index 8432692..57bad58 100644 (file)
@@ -1,20 +1,20 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Acquisitions searching</h1>
+<h1>Acquisitions Searching</h1>
 
-<p>At the top of the various Acquisition pages there is a quick search box where you can perform either a vendor search or an order search.</p>
+<p>At the top of the various Acquisition pages is a quick search box where you can perform either a Vendor Search or an Order Search.</p>
 
-<p>In the vendor search you can enter any part of the vendor name to get results.</p>
+<p>In the Vendor Search, you can enter any part of the vendor name to get results.</p>
 
-<p>Using the orders search you can search for items that have been ordered with or without the vendor.</p>
+<p>Using the Orders Search, you can search for items that have been ordered with or without the vendor.</p>
 
-<p>You can enter info in one or both fields and you can enter any part of the title and/or vendor name.</p>
+<p>You can enter info in one or both fields, and you can enter any part of the title and/or vendor name.</p>
 
-<p>Clicking the plus sign to the right of the vendor search box will expand the search and allow you to search for additional fields.</p>
+<p>Clicking the plus sign to the right of the Vendor search box will expand the search and allow you to search for additional fields.</p>
 
-<p>Clicking "Advanced search" to the right of the search button will give you all of the order search options available.</p>
+<p>Clicking Advanced Search to the right of the search button will give you all of the order search options available.</p>
 
-<p><strong>See the full documentation for acquisitions searching in the <a href="http://manual.koha-community.org/3.6/en/acqsearch.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Acquisitions Searching in the <a href="http://manual.koha-community.org/3.8/en/acqsearch.html">manual</a> (online).</strong></p>
        
 [% INCLUDE 'help-bottom.inc' %]
 
index f02522d..20d93ef 100644 (file)
@@ -1,17 +1,21 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Claims &amp; late orders</h1>
+<h1>Claims &amp; Late Orders</h1>
 
-<p>If you have entered in an email address for the vendors in your system you can send them claim emails when an order is late. Before you can send claims you will need to set up an acquisitions claim notice.</p>
+<p>If you have entered an email address for the vendors in your system, you can send them claim emails when an order is late. Before you can send claims, you will need to set up an acquisitions claim notice.</p>
 
-<p>Upon clicking on the link to 'Late orders' from the Acquisitions page you will be presented with a series of filter options on the left hand side.</p>
+<p>Upon clicking the link to 'Late Orders' from the Acquisitions page, you will be presented with a series of filter options on the left hand side. These filters will be applied only to closed baskets.</p>
 
-<p>Once you filter your orders to show you the things you consider to be late you will be presented with a list of these items.</p>
+<p><strong>Note:</strong> The vendor pull down only shows vendors with closed baskets that are late.</p>
 
-<p>To the right of each late title you will be see a checkbox. Check off the ones you want a claim letter sent to and click 'Claim order.' This will automatically send an email to the vendor at the email address you have on file.</p>
+<p>Once you filter your orders to show you the things you consider to be late, you will be presented with a list of these items.</p>
 
-<p>If you would rather use a different acquisition claim letter (other than the default) you can create that in the notices module and choose it from the menu above the list of late items.</p>
+<p>To the right of each late title you will be see a checkbox. Check the ones that you want a claim letter sent to and click 'Claim Order' at the bottom right of the list. This will automatically send an email to the vendor at the email address you have on file.</p>
 
-<p><strong>See the full documentation for claims and late orders in the <a href="http://manual.koha-community.org/3.6/en/acqclaims.html">manual</a> (online).</strong></p>
+<p><strong>Note:</strong> The Estimated Delivery Date is based on the Delivery time value entered on the vendor record.</p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+<p>There is a default acquisitions cliam letter. If you would rather use a different one, you can create that in the notices module and choose it from the menu above the list of late items.</p>
+
+<p><strong>See the full documentation for Claims and Late Orders in the <a href="http://manual.koha-community.org/3.8/en/acqclaims.html">manual</a> (online).</strong></p>
+
+[% INCLUDE 'help-bottom.inc' %]
index 5ebeccd..7bdb253 100644 (file)
@@ -1,17 +1,14 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Order from an existing record</h1>
+<h1>Order from an Existing Record</h1>
 
-<p>If you are ordering another copy of an existing item, you can simply search for the record in your system</p>
+<p>If you are ordering another copy of an existing item, you can simply search for the record in your system.</p>
 
 <ul>
-       <li>From the results, simply click 'Order' to be brought to the order form
-<ul>
+    <li>From the results, simply click 'Order' to be brought to the order form.</li>
        <li>All of the details associated with the item will already be listed under 'Catalog details'</li>
 </ul>
-</li>
-</ul>
 
-<p><strong>See the full documentation for ordering in the <a href="http://manual.koha-community.org/3.6/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Ordering in the <a href="http://manual.koha-community.org/3.8/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index bd65b41..e0b7801 100644 (file)
@@ -1,13 +1,13 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Order from a new empty record</h1>
+<h1>Order from a New Empty Record</h1>
 
-<p>To order from a record that can't be found anywhere else, choose the 'From a new (empty) record'</p>
+<p>To order from a record that can't be found anywhere else, choose the 'From a new (empty) record.'</p>
 
 <ul>
-       <li>You will be presented with an empty form to fill in all of the necessary details about the item you are ordering</li>
+    <li>You will be presented with an empty form to fill in all of the necessary details about the item.</li>
 </ul>
 
-<p><strong>See the full documentation for ordering in the <a href="http://manual.koha-community.org/3.6/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Ordering in the <a href="http://manual.koha-community.org/3.8/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index 3e7dbe1..fd32094 100644 (file)
@@ -1,13 +1,13 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Order from purchase suggestion</h1>
+<h1>Order from Purchase Suggestion</h1>
 
-<p>If you allow patrons to make purchase suggestions then you can place orders from those suggestions</p>
+<p>If you allow patrons to make purchase suggestions, then you can place orders from those suggestions.</p>
 
 <ul>
-    <li>From this form you can make changes to the catalog details if necessary</li>
+    <li>From this form you, can make changes to the Catalog Details if necessary.</li>
 </ul>
 
-<p><strong>See the full documentation for Ordering in the <a href="http://manual.koha-community.org/3.6/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Ordering in the <a href="http://manual.koha-community.org/3.8/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index a2bd19d..b961c36 100644 (file)
@@ -1,19 +1,21 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Receiving orders</h1>
+<h1>Receiving Orders</h1>
 
 <p>Orders can be received from the vendor information page or the vendor search results page.</p>
 
-<p>After clicking 'Receive shipment' you will be asked to enter a vendor invoice number and a shipment received date.</p>
+<p>After clicking 'Receive shipment,' you will be asked to enter a vendor invoice number and a shipment received date.</p>
 
-<p>The receive page will list all items still on order with the vendor regardless of the basket the item is from.</p>
+<p>The receive page will list all items still on order with the vendor, regardless of which basket contains the item.</p>
 
 <p>To receive a specific item, click the 'Receive' link to the right of the item.</p>
 
-<p>From this form you can alter the cost information. You can also choose to only receive 1 of multiple items if only 1 arrived. Once you have made any changes necessary, click 'Save' to mark the item as received.</p>
+<p>From this form, you can alter the cost information. You can also choose to only receive one of multiple items if only one arrived. Once you have made any necessary changes, click 'Save' to mark the item as received.</p>
+
+<p>When you're finished receiving items, you can navigate away from this page or click the 'Finish receiving' button at the bottom of the screen.</p>
 
 <p>You will also see that the item is received if you view the basket.</p>
 
-<p><strong>See the full documentation for Receiving orders in the <a href="http://manual.koha-community.org/3.6/en/receiveacqorder.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Receiving Orders in the <a href="http://manual.koha-community.org/3.8/en/receiveacqorder.html">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index 14d0c96..f3426f3 100644 (file)
@@ -1,19 +1,21 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Receiving orders</h1>
+<h1>Receiving Orders</h1>
 
-<p>Orders can be received from the vendor information page or the vendor search results page.</p>
+<p>Orders can be received from the Vendor Information page or the Vendor Search Results page.</p>
 
-<p>After clicking 'Receive shipment' you will be asked to enter a vendor invoice number and a shipment received date.</p>
+<p>After clicking 'Receive shipment,' you will be asked to enter a vendor invoice number and a shipment received date.</p>
 
-<p>The receive page will list all items still on order with the vendor regardless of the basket the item is from.</p>
+<p>The Receive page will list all items still on order with the vendor, no matter which basket the item is from.</p>
 
 <p>To receive a specific item, click the 'Receive' link to the right of the item.</p>
 
-<p>From this form you can alter the cost information. You can also choose to only receive 1 of multiple items if only 1 arrived. Once you have made any changes necessary, click 'Save' to mark the item as received.</p>
+<p>From this form, you can alter the cost information. You can also choose to only receive one of multiple items if only one arrived. Once you have made any necessary changes, click 'Save' to mark the item as received.</p>
+
+<p>When you're finished receiving items, you can navigate away from this page or click the 'Finish receiving' button at the bottom of the screen.</p>
 
 <p>You will also see that the item is received if you view the basket.</p>
 
-<p><strong>See the full documentation for receiving orders in the <a href="http://manual.koha-community.org/3.6/en/receiveacqorder.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Receiving Orders in the <a href="http://manual.koha-community.org/3.8/en/receiveacqorder.html">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index 14d0c96..416fa19 100644 (file)
@@ -1,19 +1,21 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Receiving orders</h1>
+<h1>Receiving Orders</h1>
 
 <p>Orders can be received from the vendor information page or the vendor search results page.</p>
 
-<p>After clicking 'Receive shipment' you will be asked to enter a vendor invoice number and a shipment received date.</p>
+<p>After clicking 'Receive shipment,' you will be asked to enter a vendor invoice number and a shipment received date.</p>
 
-<p>The receive page will list all items still on order with the vendor regardless of the basket the item is from.</p>
+<p>The Receive Page will list all items still on order with the vendor regardless of the basket the item is from.</p>
 
 <p>To receive a specific item, click the 'Receive' link to the right of the item.</p>
 
-<p>From this form you can alter the cost information. You can also choose to only receive 1 of multiple items if only 1 arrived. Once you have made any changes necessary, click 'Save' to mark the item as received.</p>
+<p>From this form, you can alter the cost information. You can also choose to only receive one of multiple items if only one arrived. Once you have made any necessary changes, click 'Save' to mark the item as received.</p>
+
+<p>When you're finished receiving items, you can navigate away from this page or click the 'Finish receiving' button at the bottom of the screen.</p>
 
 <p>You will also see that the item is received if you view the basket.</p>
 
-<p><strong>See the full documentation for receiving orders in the <a href="http://manual.koha-community.org/3.6/en/receiveacqorder.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Receiving Orders in the <a href="http://manual.koha-community.org/3.8/en/receiveacqorder.html">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index e24b13d..00d6eb5 100644 (file)
@@ -2,52 +2,55 @@
 
 <h1>Vendors</h1>
 
-<p>Before any orders can be places you must first enter at least one vendor.</p>
+<p>Before any orders can be placed, you must first enter at least one vendor.</p>
 
-<h2>Add a vendor</h2>
+<h2>Add a Vendor</h2>
 
-<p>To add a vendor click the 'New vendor' button on the Acquisitions page.</p>
+<p>To add a vendor, click the 'New Vendor' button on the Acquisitions page.</p>
 
-<p>The vendor add form is broken into three pieces.</p>
+<p>The vendor add form is broken into three pieces:</p>
 
 <ul>
-    <li>The first section is for basic information about the vendor
+    <li>The first section is for basic information about the vendor.
 <ul>
-    <li>Of these fields, only the vendor name is required, the rest of the information should be added to help with generating claim letters and invoices</li>
+    <li>Of these fields, only the vendor name is required. The rest of the information should be added to help with generating claim letters and invoices.</li>
 </ul>
 </li>
-    <li>The second section is for information regarding your contact at the vendor's office
+    <li>The second section is for information regarding your contact at the Vendor's office.
 <ul>
-       <li>None of these fields are required, they should only be entered if you want to keep track of your contact's information within Koha</li>
+    <li>None of these fields are required. They should only be entered if you want to keep track of your contact information within Koha.</li>
 </ul>
 </li>
-       <li>The final section is for billing information
+    <li>The final section is for billing information:
 <ul>
-       <li>To be able to order from a vendor you must make them 'Active'</li>
-    <li>For list prices and invoice prices choose the currency
+    <li>To be able to order from a vendor, you must make them 'Active.'</li>
+    <li>For List Prices and Invoice Prices, choose the currency.
 <ul>
-    <li>Currencies are assigned in the Currencies &amp; Exchange rates admin area</li>
+    <li>Currencies are assigned in the Currencies &amp; Exchange Rates admin area.</li>
 </ul>
 </li>
-    <li>If the vendor offers a consistent blank discount, enter that in the 'Discount' field
+    <li>If your library is charged tax, mark your Tax Number as registered.</li>
+    <li>Note: if you list prices and/or invoice prices, include tax.</li>
+    <li>If the vendor offers a consistent blank discount, enter that in the 'Discount' field.
 <ul>
        <li>You can enter item specific discounts when placing an order</li>
 </ul>
 </li>
-       <li>GST rate is for any tax the vendor may charge</li>
-       <li>Notes are for internal use</li>
+    <li>Enter your tax rate if your library is charged taxes on orders.</li>
+    <li>If you know how long it usually takes orders to arrive from this vendor, you can enter a delivery time. This will allow Koha to estimate when orders will arrive at your library on the late orders report.</li>
+    <li>Notes are for internal use.</li>
 </ul>
 </li>
 </ul>
 
-<h2>View/Edit a vendor</h2>
+<h2>View/Edit a Vendor</h2>
 
-<p>To view a vendor's information page you must search for the vendor from the Acquisitions home page. Your search can be for any part of the vendor's name.</p>
-
-<p>From the results, click on the name of the vendor you want to view or edit.</p>
+<p>To view a vendor's information page, you must search for the vendor from the Acquisitions home page. Your search can be for any part of the vendor's name. From the results, click on the name of the vendor you want to view or edit.</p>
 
 <p>To make changes to the vendor, simply click the 'Edit' button.</p>
 
-<p><strong>See the full documentation for managing vendors in the <a href="http://manual.koha-community.org/3.6/en/acqvendors.html">manual</a> (online).</strong></p>
+<p>If the vendor has no baskets attached to it, a 'Delete' button will also be visible, allowing the vendor to be deleted.</p>
+
+<p><strong>See the full documentation for managing Vendors in the <a href="http://manual.koha-community.org/3.8/en/acqvendors.html">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index 7afff73..9873e1a 100644 (file)
@@ -1,19 +1,19 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Order from an external source</h1>
+<h1>Order from an External Source</h1>
 
-<p>If you want to search other libraries for an item to purchase you can use the 'From an external source' option which will allow you to order from a MARC record found via a Z39.50 search</p>
+<p>If you want to search other libraries for an item to purchase, use the 'From an external source' option, which will allow you to order from a MARC record found via a Z39.50 search.</p>
 
 <ul>
-       <li>From the results click the Order link next to the item you want to purchase</li>
-       <li>If the item you're ordering from an external source looks like it might be a duplicate, Koha will warn you and give you options on how to proceed
+    <li>From the results, click the Order link next to the item you want to purchase.</li>
+    <li>If the item you're ordering from an external source looks like it might be a duplicate, Koha will warn you and give you options for how to proceed.
 <ul>
-       <li>From the warning you can choose to just order another copy on the existing bib record, create a new bib record, or cancel your order of this item.</li>
+    <li>From the warning, you can choose to order another copy on the existing bib record, create a new bib record, or cancel your order of this item.</li>
 </ul>
 </li>
-       <li>In the order form that pops up you will not be able to edit the catalog details</li>
+    <li>In the order form that pops up, you will not be able to edit the catalog details</li>
 </ul>
 
-<p><strong>See the full documentation for Ordering in the <a href="http://manual.koha-community.org/3.6/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Ordering in the <a href="http://manual.koha-community.org/3.8/en/placingacqorder.html#createacqbasket">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index fc17c03..944ba79 100644 (file)
@@ -1,35 +1,35 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Administration help</h1>
+<h1>Administration Help</h1>
 
-<p>The administration area is where you set all of your preferences for the system. Preference are broken down into several categories.</p>
+<p>The administration area is where you set all of your preferences for the system. Preference are broken down into several categories, detailed below.</p>
 
-<h3>Global system preferences</h3>
+<h3>Global System Preferences</h3>
 
-<p>Koha has an extensive set of system preferences. The system preferences control all the various features within Koha and whether they are active in your install or not. System preferences are generally set once at install and then not changed.</p>
+<p>Koha has an extensive set of system preferences. The system preferences control all the various features within Koha, whether they are active in your install or not. System preferences are set at install and are generally not changed afterwards.</p>
 
-<p>If  you are not sure what combination of system preferences to use, try using one of the sample profiles at install. </p>
+<p>If you are not sure what combination of system preferences to use, try using one of the sample profiles at install.</p>
 
-<p style="color: #990000">IMPORTANT: many preferences interact with each other. Turning on one system preference may require that others are also set.</p>
+<p style="color: #990000">IMPORTANT: Many preferences interact with each other. Turning on one system preference may require that others are also set.</p>
 
-<h3>Basic parameters</h3>
+<h3>Basic Parameters</h3>
 
-<p>Basic parameters is where library policies are set and governed. It is best to set your system preferences, and then to work through the Basic Parameters in the order that they appear on this page.</p>
+<p>"Basic Parameters" is where library policies are set and governed. It is best to set your system preferences and then work through the basic parameters in the order that they appear on this page.</p>
 
-<p>Note not all basic parameters are required to be set. For example if you do not plan to use budget based acquisitions, then Accounts and Budgets, Currencies and Exchange Rates can be ignored.</p>
+<p>Please note that it is not required to set all the basic parameters. For example, if you do not plan to use budget based acquisitions, then 'Funds,' 'Budgets,' and 'Currencies and Exchange Rates' can be ignored.</p>
 
-<h3>Patrons and circulation</h3>
+<h3>Patrons and Circulation</h3>
 
-<p>These parameters help with the control of patron records and circulation rules.  It is best to make sure you set the basic parameters before visiting this section.</p>
+<p>These parameters help control patron records and circulation rules. It is best to set the basic parameters before visiting this section.</p>
 
 <h3>Catalog</h3>
 
-<p>Catalog parameters assist in configuring the cataloging functionality within Koha.  
+<p>Catalog parameters assist in configuring the cataloging functionality within Koha.</p>
 
-<h3>Additional parameters</h3>
+<h3>Additional Parameters</h3>
 
-<p>This list of parameters includes functionality that didn't fit in any other category.  These items are optional and may not need to be altered depending on how your library is using Koha.</p>
-<p>
-<p><strong>See the full documentation for system administration in the <a href="http://manual.koha-community.org/3.6/en/administration.html">manual</a> (online).</strong></p>
+<p>This list of parameters includes functionalities that didn't fit in any other category.  These items are optional and may not need to be altered, depending on your library's needs.</p>
+
+<p><strong>See the full documentation for system Administration in the <a href="http://manual.koha-community.org/3.8/en/administration.html">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index 86b8372..44c6f26 100644 (file)
@@ -2,24 +2,24 @@
 
 <h1>Budgets</h1>
 
-<p>Budgets are the top level used for tracking accounting values related to acquisitions.</p>
+<p>The 'Budgets' functionality is used for tracking accounting values related to acquisitions.</p>
 
-<p>An example would be to create a budget for the current year and then breaking that into funds for different areas of the library.</p>
+<p>'Budgets' can be used to create a budget for the current year and then break it into Funds for different areas of the library.</p>
 
 <h2>Add a budget</h2>
 
-<p>To add a budget click the 'New budget' button.</p>
+<p>To add a budget, click the 'New Budget' button.</p>
 
 <ul>
-       <li>Choose the time period this budget is for, whether it's an academic year, a fiscal year, a quarter, etc.</li>
-    <li>The description should be something that will help you identify the budget when ordering</li>
-       <li>In the amount box do not use any symbols, simply enter the amount of the budget with numbers and decimals.</li>
-       <li>Marking a budget active makes it usable when placing orders in the acquisitions module, even if the order is placed after the budget end date. This will allow you to record orders that were places in a previous budget period.</li>
-       <li>Locking a budget means that Funds will not be able to be modified by librarians</li>
+    <li>Choose a time period for the budget, be it an academic year, a fiscal year, a quarter, or other unit of time.</li>
+    <li>The description should help you identify the budget when ordering.</li>
+    <li>Do not use any symbols other than the decimal separator in the amount box.</li>
+    <li>Marking a budget 'Active' makes it usable when placing orders in the acquisitions module, even if an order is placed after the budget end date. This will allow you to record orders that were placed in a previous budget period.</li>
+    <li>Locking a budget prevents other librarians from modifying that fund.</li>
 </ul>
 
-<p>Once you have made your edits, click the 'Save changes' button. You will be brought to a list of your existing budgets.</p>
+<p>Once you have made your edits, click the 'Save Changes' button. You will be brought to a list of your existing budgets.</p>
 
-<p><strong>See the full documentation for budgets in the <a href="http://manual.koha-community.org/3.6/en/acqadmin.html#budgetplanning">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Budgets in the <a href="http://manual.koha-community.org/3.8/en/acqadmin.html#budgetplanning">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index bfb5402..f57bbc2 100644 (file)
@@ -4,33 +4,33 @@
 
 <p>Budgets are broken into funds.</p>
 
-<h2>Add a fund</h2>
+<h2>Add a Fund</h2>
 
-<p>A fund is added to a budget.</p>
+<p>Funds can be added to a budget.</p>
 
 <p style="color: #990000;">Important: A budget must be defined before a fund can be created.</p>
 
-<p>To add a new fund click the New button and then choose which budget you would like to add the fund to.</p>
+<p>To add a new fund, click the 'New' button and choose the budget to which you would like to add the fund.</p>
 
-<p>In the form that appears you wan to enter the basics about your fund.</p>
+<p>In the form that appears, enter the basics about your fund.</p>
 
-<p>The three first fields are required, the rest are optional</p>
+<p>The three first fields are required. The rest are optional.</p>
 
 <ul>
-    <li>Fund code is a unique identifier for your fund</li>
-    <li>The fund name should be something that librarians will understand</li>
-       <li>Amount should be entered with only numbers and decimals, no other characters</li>
-       <li>You can choose to assign this fund to a librarian. Doing so will make it so that only that librarian can make changes to the Fund</li>
-       <li>Choose which library will be using this fund</li>
-       <li>You can restrict who can order from this fund by choosing either the owner or the library from the 'Restrict access to' menu</li>
-       <li>Notes are simply for any descriptive notes you might want to add so that librarians know when to use this fund</li>
-    <li>Planning categories are used for statistical purposes. To learn more about planning categories, check out the <a href="http://manual.koha-community.org/3.6/en/acqfaq.html#planningcatfaq">planning category FAQ</a>.</li>
+    <li>'Fund Code' is a unique identifier for your fund.</li>
+    <li>Use a fund name that clearly describes said fund.</li>
+    <li>The fund's amount should be should only include numerals and a decimal separator. No other characters should be entered.</li>
+    <li>You can assign a fund to a particular librarian. This option will restrict making changes to that fund to the assigned librarian.</li>
+    <li>Choose which library will use the fund</li>
+    <li>You can restrict who can order from a fund by selecting an owner or a library from the 'Restrict access to' menu.</li>
+    <li>The 'Notes' field is for descriptions to detail when librarians should use the fund.</li>
+    li>Planning categories are used for statistical purposes. To learn more about planning categories, check out the Planning Category FAQ.</li>
 </ul>
 
 <p>When complete, click 'Submit' and you will be brought to a list of all of the funds for the budget.</p>
 
-<p>To the right of each fund you will find the 'Edit,' 'Delete,' and 'Add child fund' options. A child fund simply a sub-fund of the fund listed. An example would be to have a fund for 'Fiction' and under that have a fund for 'New releases' and a fund for 'Science fiction.' It is an optional way to further organize your finances.</p>
+<p>To the right of each fund you will find the 'Edit,' 'Delete,' and 'Add Child Fund' options. A Child Fund a sub-fund of the parent fund. For example, one might have a parent fund for 'Fiction,' and Child Funds for 'New Releases' and 'Science Fiction.' It is an optional way to further organize your finances.</p>
 
-<p><strong>See the full documentation for funds in the <a href="http://manual.koha-community.org/3.6/en/acqadmin.html#funds">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Funds in the <a href="http://manual.koha-community.org/3.8/en/acqadmin.html#funds">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index 2fac044..4667748 100644 (file)
@@ -1,17 +1,17 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Budget planning</h1>
+<h1>Budget Planning</h1>
 
-<p>When viewing the list of funds click the 'Planning' button and choose how you would like to plan to spend your budget.</p>
+<p>When viewing the list of funds, click the 'Budget Planning' button and choose how you would like to plan to spend your budget.</p>
 
-<p>If you choose 'Plan by MONTHS' you will see the budgeted amount broken down by months.</p>
+<p>If you choose 'Plan by Months' you will see the budgeted amount broken down by months.</p>
 
-<p>To hide some of the columns you can click the minus sign (-) to the right (or below as in the screenshot above) the dates. To add more columns you can click the plus sign (+) found above the 'Auto-fill row' buttons.</p>
+<p>To hide some of the columns, click the minus sign (-) to the right or below the dates. To add more columns, click the plus sign (+) found above the 'Auto-fill row' buttons.</p>
 
-<p>From here you can plan your budget spending by manually entering values or by clicking the 'Auto-fill row' button. If you choose to auto-fill the form the system will try to divide the amount accordingly, you may have to make some edits to split things more accurately.</p>
+<p>From here, you can plan your budget spending by manually entering values or by clicking the 'Auto-fill row' button. If you choose to auto-fill the form, the system will automatically divide the total. Therefore, you may have to adjust the allocations manually to better reflect your library's needs.</p>
 
-<p>Once your changes are made, click the 'Save' button. If you would like to export your data as a CSV file you can do so by entering a file name in the 'Output to a file named' field and clicking the 'Output' button.</p>
+<p>Once your changes are made, click the 'Save' button. If you would like to export your data as a CSV file, enter a file name in the 'Output to a file named' field and click the 'Output' button.</p>
 
-<p><strong>See the full documentation for Budget planning in the <a href="http://manual.koha-community.org/3.6/en/acqadmin.html#fundsplanning">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Budget Planning in the <a href="http://manual.koha-community.org/3.8/en/acqadmin.html#fundsplanning">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index 6e68cf2..2ce350d 100644 (file)
@@ -1,62 +1,30 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>MARC record subfields</h1>
+<h1>MARC Record Subfields</h1>
 
-<p>Frameworks are made up of MARC fields and subfields. To make edits to most frameworks you must edit the fields and subfields. Clicking 'Edit' to the right of each subfield will allow you to make changes to the text associated with the field</p>
+<p>'Frameworks' are made up of MARC fields and subfields. To make edits to most frameworks, you must edit the fields and subfields. Click 'Edit' (on the right of each subfield) to make changes to the text associated with the field.</p>
 
 <ul>
-       <li>Each field has a tag (which is the MARC tag)
+     <li>Each field has a tag (the MARC tag).
 <ul>
-       <li>The 'Label for lib' is what will show in the staff client if you have advancedMARCeditor set to display labels</li>
-       <li>The 'Label for OPAC' is what will show on the MARC view in the OPAC</li>
-       <li>If you check 'Repeatable' then the field will have a plus sign next to it allowing you to add multiples of that tag</li>
-       <li>If you check 'Mandatory' the record will not be allowed to save unless you have a value assigned to this tag</li>
-       <li>'Authorized value' is where you define an authorized value that your catalogers can choose from a pull down to fill this field in
-To edit the subfields associated with the tag, click 'Subfields' to the right of the tag on the 'MARC structure' listing</li>
+  <li>'Label for lib' is what will show in the staff client if you have advancedMARCeditor set to display labels.</li>
+   <li>'Label for OPAC' is what will show on the MARC view in the OPAC.</li>
+      <li>If you check 'Repeatable,' the field will have a plus sign next to it that will allow you to add multiples of that tag.</li>
+       <li>If you check 'Mandatory,' the record will not be allowed to save unless you have a value assigned to this tag.</li>
+        <li>'Authorized value' is where you chose an authorized value list from which your catalogers can select a value for this subfield. To edit the subfields associated with the tag, click 'Subfields' to the right of the tag on the 'MARC Structure' listing.</li>
 </ul>
 </li>
      <li>From the list of subfields you can click 'Delete' to the right of each to delete the subfields</li>
-       <li>To edit the subfields click 'Edit Subfields'</li>
-       <li>For each subfield you can set the following values
<li>From the list of subfields, you can click 'Delete' to the right of each to erase the subfield in question.</li>
+    <li>To edit the subfields, click 'Edit Subfields.'</li>
+        <li>For each subfield, you can set the following values:
 <ul>
-       <li>Text for librarian
-<ul>
-       <li>what appears before the subfield in the librarian interface</li>
-</ul>
-</li>
-       <li>Text for OPAC
-<ul>
-       <li>what appears before the field in the OPAC.</li>
-       <li>If left empty, the text for librarian is used instead</li>
-</ul>
-</li>
-       <li>Repeatable
-<ul>
-       <li>the field will have a plus sign next to it allowing you to add multiples of that tag</li>
-</ul>
-</li>
-       <li>Mandatory
-<ul>
-       <li>the record will not be allowed to save unless you have a value assigned to this tag</li>
-</ul>
-</li>
-       <li>Managed in tab
-<ul>
-       <li>defines the tab where the subfield is shown. All subfields of a given field must be in the same tab or ignored. Ignore means that the subfield is not managed.</li>
-</ul>
-</li>
-</ul>
-<ul>
-       <li>Default value
-<ul>
-       <li>defines what you want to appear in the field by default, this will be editable, but it saves time if you use the same note over and over or the same value in a field often.</li>
-</ul>
-</li>
-</ul>
-<ul>
-       <li>hidden
-<ul>
-       <li>allows you to select from 19 possible visibility conditions, 17 of which are implemented. They are the following:
+  <li>'Text for librarian' is what appears before the subfield in the librarian interface.</li>
+  <li>'Text for OPAC' is what appears before the field in the OPAC.If left empty, the text for librarian is used instead</li>
+    <li>If 'Repeatable' is checked, the field  will have a plus sign next to it in the MARC cataloguing monologue which allows you to add multiples of that tag.</li>
+      <li>'Mandatory' prevents the user from saving a record  unless there is a value assigned to the tag.</li>
+      <li>'Managed in tab' defines the tab where the subfield is shown. All subfields of a given field must either be in the same tab or ignored. 'Ignore' means that the subfield is not managed.</li>
+      <li>'Default value' defines what you want to appear in the field by default. This field will be editable, but it saves time if you use the same note over and over.</li>
+       <li>'Hidden' allows you to select from nineteen possible visibility conditions, seventeen of which are implemented. They are the following:
 <ul>
        <li>-9 =&gt; Future use</li>
        <li>-8 =&gt; Flag</li>
@@ -78,66 +46,24 @@ To edit the subfields associated with the tag, click 'Subfields' to the right of
        <li>8 =&gt; !OPAC !Intranet !Editor !Collapsed</li>
        <li>9 =&gt; Future use</li>
 </ul>
-</li>
-    <li>( ! means 'not visible' or in the case of 'collapsed,' 'not collapsed')</li>
-</ul>
-</li>
-</ul>
-<ul>
-    <li>Is a URL
-<ul>
-    <li>if checked, it means that the subfield is a URL and can be clicked</li>
-</ul>
-</li>
-</ul>
-<ul>
-       <li>Link
-<ul>
-    <li>If you enter a field/subfield here (200b), a link appears after the subfield in the MARC detail view. This view is present only in the staff client, not the OPAC. If the librarian clicks on the link, a search is done on the database for the field/subfield with the same value. This can be used for 2 main topics :
-<ul>
-       <li>on a field like author (200f in UNIMARC), put 200f here, you will be able to see all bib records with the same author.</li>
-       <li>on a field that is a link (4xx) to reach another bib record. For example, put 011a in 464$x, will find the serials that are with this ISSN.</li>
-</ul>
-</li>
-       <li style="color: #990000;">Important: This value should not change after data has been added to your catalog</li>
-</ul>
-</li>
-</ul>
-<ul>
-       <li>Koha link
-<ul>
-       <li>Koha is multi-MARC compliant. So, it does not know what the 245$a means, neither what 200$f (those 2 fields being both the title in MARC21 and UNIMARC). So, in this list you can "map" a MARC subfield to its meaning. Koha constantly maintains consistency between a subfield and its meaning. When the user want to search on "title", this link is used to find what is searched (245 if you're MARC21, 200 if you're UNIMARC).</li>
 </ul>
-</li>
-</ul>
-<ul>
-       <li>Authorized value
 <ul>
-       <li>means the value cannot by typed by the librarian, but must be chosen from a pull down generated by the authorized value list</li>
-    <li>In the example above, the 504a field will show the MARC504 authorized values when cataloging</li>
+    <li>(! means 'not visible' or in the case of collapsed 'not collapsed')</li>
+    <li>If 'Is a url' is checked, the subfield is a url and can be clicked</li>
+    <li>'Authorized Value' allows the librarian to select an authorized value list from which cataloguers must choose an option.</li>
 </ul>
 </li>
 </ul>
 <ul>
-       <li>Thesaurus
-<ul>
-       <li>means that the value is not free text, but must be searched in the authority/thesaurus of the selected category</li>
+    <li>The 'Thesaurus' chooses the authority file to which the field should be linked.</li>
 </ul>
-</li>
-</ul>
-<ul>
-       <li>Plugin
 <ul>
-       <li>means the value is calculated or managed by a plugin. Plugins can do almost anything.</li>
-       <li>For example, in UNIMARC there are plugins for every 1xx fields that are coded fields. The plugin is a huge help for cataloger ! There are also two plugins (unimarc_plugin_210c and unimarc_plugin_225a that can "magically" find the editor from an ISBN, and the collection list for the editor)</li>
+    <li>'Plugin' allows the librarian to choose a plugin to calculate or manage a subfield. Plugins can do almost anything. For example, in UNIMARC there are plugins for all 1xx fields that are coded fields. There are also two plugins (unimarc_plugin_210c and unimarc_plugin_225a) that can find the editor from an ISBN, as well as the collection list for the editor.</li>
 </ul>
-</li>
-</ul>
-</li>
-    <li>To save your changes simply click the 'Save changes' button at the top of the screen</li>
+    <li>To save your changes, click the 'Save Changes' button at the top of the screen.</li>
 </ul>
 
-<p><strong>See the full documentation for authorities in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#authoritiesadmin">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Authorities in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#authoritiesadmin">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
 
index 5760f2f..77c7be1 100644 (file)
@@ -1,26 +1,24 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Authority record tags</h1>
+<h1>Authority Record Tags</h1>
 
-<p>To add a field to an authority framework click the 'New Tag' button at the top of the authority framework definition</p>
-
-<p>This will open up a blank form for entering MARC field data</p>
+<p>To add a field to a Authority Framework, click the 'New Tag' button at the top of the Authority Framework definition.This will open up a blank form for entering MARC field data.</p>
 
 <p>Enter the information about your new tag:</p>
 
 <ul>
-       <li>The 'Tag' is the MARC field number</li>
-       <li>The 'Label for lib' is the text that will appear in the staff client when in the cataloging module</li>
-       <li>The 'Label for OPAC' is the text that will appear in the OPAC when viewing the MARC version of the record</li>
-       <li>If this field can be repeated, check the 'Repeatable' box</li>
-       <li>If this field is mandatory, check the 'Mandatory' box</li>
-       <li>If you want this field to be a pull down with limited possible answers, choose which 'Authorized value' list you want to use</li>
+      <li>The 'Tag' is the MARC field number.</li>
+   <li>The 'Label for lib' is the text that will appear in the staff client when in the cataloging module.</li>
+   <li>The 'Label for OPAC' is the text that will appear in the OPAC when viewing the MARC version of the record.</li>
+    <li>If this field can be repeated, check the 'Repeatable' box.</li>
+    <li>If this field is mandatory, check the 'Mandatory' box.</li>
+        <li>If you want this field to be a drop-down menu with limited possible answers, choose which 'Authorized value' list you want to use.</li>
 </ul>
 
-<p>When you're finished, click 'Save changes' and you will be presented with your new field</p>
+<p>When you're finished, click 'Save Changes' and you will be presented with your new field.</p>
 
-<p>To the right of the new field is a link to 'Subfields,' you will need to add subfields before this tag will appear in your MARC editor.</p>
+<p>To the right of the new field is a link to 'Subfields.' You will need to add subfields before this tag will appear in your MARC editor.</p>
 
-<p><strong>See the full documentation for authorities in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#authoritiesadmin">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Authorities in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#authoritiesadmin">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index 31786ce..e44d213 100644 (file)
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Authorized values</h1>
+<h1>Authorized Values</h1>
 
-<p>Authorized values can be used in several areas of Koha. One reason you would add an authorized value category would be to control the values that can be entered into MARC fields by catalogers.</p>
+<p>Authorized Values can be used in several areas of Koha. One reason you would add an authorized value category would be to control the values that can be entered into MARC fields by catalogers.</p>
 
-<h2>Existing values</h2>
+<h2>Existing Values</h2>
 
-<p>Koha installs with pre-defined values that your library is likely to use, for instance 'Lost'.</p>
-
-<ul>
-       <li>Asort1
-<ul>
-       <li>Used for acquisitions statistical purposes</li>
-</ul>
-</li>
-       <li>Asort2
-<ul>
-       <li>Used for acquisitions statistical purposes</li>
-</ul>
-</li>
-       <li>BOR_NOTES
-<ul>
-       <li>Values for custom patron notes that appear on the circulation screen and the OPAC</li>
-</ul>
-</li>
-       <li>Bsort1
-<ul>
-       <li>Used for patron statistical purposes</li>
-</ul>
-</li>
-       <li>Bsort2
-<ul>
-       <li>Used for patron statistical purposes</li>
-</ul>
-</li>
-       <li>CART
-<ul>
-       <li>Is the shelving cart location, used by InProcessingToShelvingCart and ReturnToShelvingCart</li>
-</ul>
-</li>
-       <li>CCODE
-<ul>
-       <li>Collection codes (appears when cataloging and working with items)</li>
-</ul>
-</li>
-       <li>DAMAGED
-<ul>
-       <li>Descriptions for items marked as damaged (appears when cataloging and working with items)</li>
-</ul>
-</li>
-       <li>HINGS_AS
-<ul>
-    <li>General holdings: Acquisition status designator :: This data element specifies acquisition status for the unit at the time of the holdings report.a</li>
-</ul>
-</li>
-       <li>HINGS_C
-<ul>
-    <li>General holdings: Completeness designator</li>
-</ul>
-</li>
-       <li>HINGS_PF
-<ul>
-    <li>Physical form designators</li>
-</ul>
-</li>
-       <li>HINGS_RD
-<ul>
-    <li>General holdings: Retention designator :: This data element specifies the retention policy for the unit at the time of the holdings report.</li>
-</ul>
-</li>
-       <li>HINGS_UT
-<ul>
-    <li>General holdings: Type of unit designator</li>
-</ul>
-</li>
-       <li>LOC
-<ul>
-       <li>Shelving location (usually appears when adding or editing an item)</li>
-</ul>
-</li>
-       <li>LOST
-<ul>
-       <li>Descriptions for the items marked as lost (appears when adding or editing an item)</li>
-       <li>Values given to lost statuses should be numeric and not alphabetical in order for statuses to appear properly</li>
-</ul>
-</li>
-       <li>MANUAL_INV
-<ul>
-       <li>Values for manual invoicing types</li>
-</ul>
-</li>
-       <li>NOT_LOAN
-<ul>
-       <li>Reasons why a title is not for loan</li>
-</ul>
-</li>
-       <li>PROC
-<ul>
-       <li>The location to be used for NewItemsDefaultLocation (change description as desired), also the location expected by InProcessingToShelvingCart.</li>
-</ul>
-</li>
-       <li>RESTRICTED
-<ul>
-       <li>Restricted status of an item</li>
-</ul>
-</li>
-       <li>SUGGEST
-<ul>
-       <li>List of patron suggestion reject or accept reasons (appears when managing suggestions)</li>
-</ul>
-</li>
-       <li>WITHDRAWN
-<ul>
-       <li>Description of a withdrawn item (appears when adding or editing an item)</li>
-</ul>
-</li>
+<p>Koha installs with pre-defined values that your library is likely to use, for instance, 'Lost.'</p> By default, this includes:
+<ul>
+    <li>'Asort1,' for acquisitions statistical purposes.</li>
+    <li>'Asort2,' used for acquisitions statistical purposes.</li>
+    <li>'BOR_NOTES' is for values for custom patron notes that appear on the circulation screen and the OPAC.</li>
+    <li>'Bsort1' is for patron statistical purposes.</li>
+    <li>'Bsort2' is used for patron statistical purposes.</li>
+    <li>'CART' is the shelving cart location, used by InProcessingToShelvingCart and ReturnToShelvingCart</li>
+    <li>'CCODE' is for collection codes (appears when cataloging and working with items).</li>
+    <li>'DAMAGED' is for descriptions of damaged items, and appears when cataloging and working with items.</li>
+    <li>'HINGS_AS' is for General Holdings: Acquisition Status Designator, a data element that specifies the acquisition status for the unit at the time of the holdings report.</li>
+    <li>'HINGS_C' is for General Holdings: Completeness Designator.</li>
+    <li>'HINGS_PF' is for Physical Form Designators</li>
+    <li>'HINGS_RD' is for General Holdings: Retention Designator, a data element that specifies the retention policy for the unit at the time of the holdings report.</li>
+    <li>'HINGS_UT' is for General Holdings: Type of Unit Designator.</li>
+    <li>'LOC' is for the shelving location and usually appears when adding or editing an item.</li>
+    <li>'LOST' is for descriptions for items marked as lost. It appears when adding or editing an item. Values given to lost statuses should be numeric (not alphabetical) in order for statuses to appear properly.</li>
+    <li>'MANUAL_INV' includes values for manual invoicing.</li>
+    <li>'NOT_LOAN' is used to list reasons why a title is not for loan.</li>
+    <li>'PROC' is for the location to be used for NewItemsDefaultLocation (change description as desired), also the location expected by InProcessingToShelvingCart.</li>
+    <li>'RESTRICTED' is used for the restricted status of an item</li>
+    <li>'SUGGEST' is for a list of reasons to accept or reject patron suggestions. It appears when managing suggestions.</li>
+    <li>'WITHDRAWN' is for a description of a withdrawn item. It appears when adding or editing an item.</li>
 </ul>
 
-<h2>Add new authorized value category</h2>
+<h2>Add New Authorized Value Category</h2>
 
 <p>In addition to the existing categories that come by default with Koha, librarians can add their own authorized value categories to control data that is entered into the system. To add a new category:</p>
 
 <ul>
-    <li>Click 'New category'</li>
-    <li>Limit your category to 11 characters (something short to make it clear what the category is for)</li>
-       <li>When adding a new category you're asked to create at least one authorized value
+    <li>Click 'New Category.'</li>
+    <li>Limit your Category to eleven characters (something short to make it clear what the category is for).</li>
+    <li>When adding a new category, you're asked to create at least one authorized value:
 <ul>
-    <li>Enter a code for your authorized value into the 'Authorized value' field</li>
-    <li>Use the description field for the actual value that will be entered</li>
+    <li>Enter a code for your Authorized Value into the 'Authorized value' field.</li>
+    <li>Use the Description field for the actual value that will be entered.</li>
 </ul>
 </li>
-       <li>Click 'Save'</li>
-    <li>Your new category and value will appear on the list of authorized values</li>
+    <li>Click 'Save.'</li>
+    <li>Your new category and value will appear on the list of Authorized Values.</li>
 </ul>
 
-<h2>Add new authorized value</h2>
+<h2>Add New Authorized Value</h2>
 
 <p>New authorized values can be added to any existing or new category. To add a value:</p>
 
 <ul>
        <li>Click 'New authorized value for ...'</li>
-    <li>Enter a code for your authorized value into the 'Authorized value' field</li>
-    <li>Use the description field for the actual value that will be entered</li>
-       <li>Click 'Save'</li>
-       <li>The new value will appear in the list along with existing values</li>
+    <li>Enter a code for your Authorized Value into the 'Authorized value' field.</li>
+    <li>Use the Description field for the actual value that will be entered.</li>
+    <li>Click 'Save.'</li>
+    <li>The new value will appear in the list along with existing values.</li>
 </ul>
 
-<p><strong>See the full documentation for authorized values in the <a href="http://manual.koha-community.org/3.6/en/basicparams.html#authorizedvalues">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Authorized Values in the <a href="http://manual.koha-community.org/3.8/en/basicparams.html#authorizedvalues">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index c315db9..efe74a3 100644 (file)
@@ -1,11 +1,11 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Authority types</h1>
+<h1>Authority Types</h1>
 
-<p>Authority types are basically MARC frameworks for authority records and because of that the rules below refer to the bibliographic frameworks.</p>
+<p>Authority Types are MARC Frameworks for Authority records. Therefore, the rules below refer to the bibliographic frameworks.</p>
 
-<p>Koha comes with many of the necessary authority frameworks already installed.</p>
+<p>Koha comes with many of the necessary Authority frameworks already installed.</p>
 
-<p><strong>See the full documentation for authorities in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#authoritiesadmin">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Authorities in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#authoritiesadmin">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index 4810dd6..faa53a4 100644 (file)
@@ -1,39 +1,39 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>MARC bibliographic frameworks</h1>
+<h1>MARC Bibliographic Frameworks</h1>
 
-<p>Think of frameworks as templates for creating new bibliographic records. Koha comes with some predefined frameworks that can be edited or deleted, and librarians can create their own frameworks for content specific to their libraries.</p>
+<p>Think of Frameworks as templates for creating new bibliographic records. Koha comes with some predefined frameworks that can be edited or deleted, and librarians can create their own frameworks for content specific to their libraries.</p>
 
-<p>Do not delete or edit the default framework since this will cause problems with your cataloging records - always create a new template based on the default framework, or alter the other frameworks.</p>
+<p>Do not delete or edit the Default Framework since this will cause problems with your cataloging records - always create a new template based on the Default Framework, or alter the other Frameworks.</p>
 
 <p>After clicking the 'MARC structure' link to the right of each framework you can decide how many fields you want to see on one screen by using the pagination options at the top of the table.</p>
 
-<h2>Add new framework</h2>
+<h2>Add New Framework</h2>
 
 <p>To add a new framework</p>
 
 <ul>
-    <li>Click 'New framework'
+   <li>Click 'New Framework'
 <ul>
        <li>Enter a code of 4 or fewer characters</li>
   <li>Use the description field to enter a more detailed definition of your framework</li>
<li>Use the Description field to enter a more detailed definition of your framework</li>
 </ul>
 </li>
        <li>Click 'Submit'</li>
-    <li>Once your framework is added click 'MARC structure' to the right of it on the list of frameworks
+  <li>Once your Framework is added click 'MARC structure' to the right of it on the list of Frameworks
 <ul>
-    <li>You will be asked to choose a framework to base your new framework off of, this will make it easier than starting from scratch</li>
+      <li>You will be asked to choose a Framework to base your new Framework off of, this will make it easier than starting from scratch</li>
 </ul>
 </li>
-    <li>Once your framework appears on the screen you can edit or delete each field by following the instructions for editing subfields</li>
+    <li>Once your Framework appears on the screen you can edit or delete each field by following the instructions for editing subfields</li>
 </ul>
 
-<h2>Edit Existing frameworks</h2>
+<h2>Edit Existing Frameworks</h2>
 
-<p>Clicking 'Edit' to the right of a framework will only allow you to edit the description for the framework</p>
+<p>Clicking 'Edit' to the right of a Framework will only allow you to edit the Description for the Framework</p>
 
-<p>To make edits to the fields associated with the framework you must first click 'MARC Structure' and then follow the instructions for editing subfields</p>
+<p>To make edits to the fields associated with the Framework you must first click 'MARC Structure' and then follow the instructions for editing subfields</p>
 
-<p><strong>See the full documentation for frameworks in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#marcbibframeworks">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Frameworks in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#marcbibframeworks">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 6a61215..baac455 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Library transfer limits</h1>
+<h1>Library Transfer Limits</h1>
 
 <p>Limit the ability to transfer items between libraries based on the library sending, the library receiving, and the collection code involved.</p>
 
@@ -16,6 +16,6 @@
 
 <p>In the above example, Centerville library will allow patrons to return items from all libraries except Liberty and Franklin to their library.</p>
 
-<p><strong>See the full documentation for library transfer limits in the <a href="http://manual.koha-community.org/3.6/en/patscirc.html#libtransferlimits">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Library Transfer Limits in the <a href="http://manual.koha-community.org/3.8/en/patscirc.html#libtransferlimits">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index dc76796..da2d595 100644 (file)
@@ -1,17 +1,17 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Libraries &amp; groups</h1>
+<h1>Libraries &amp; Groups</h1>
 
 <p>When setting up your Koha system you will want to add information for every library that will be sharing your system. This data is used in several areas of Koha.</p>
 
 <p>When visiting this page you are presented with a list of the libraries and groups that have already been added to the system.</p>
 
-<h2>Adding a library</h2>
+<h2>Adding a Library</h2>
 
 <p>To add a new library:</p>
 
 <ul>
-    <li>Click 'New library'</li>
+   <li>Click 'New Library'</li>
        <li>Fill in the data requested on the form that follows
 <ul>
        <li>Of the fields listed, only 'Library code' and 'Name' are required</li>
@@ -21,7 +21,7 @@
 </li>
 </ul>
 
-<h2>Editing/Deleting a library</h2>
+<h2>Editing/Deleting a Library</h2>
 
 <p>You will be unable to delete any library that has patrons or items attached to it.</p>
 
 
 <h2>Adding a group</h2>
 
-<p>To add a search domain or library property group click the 'New group' button at the top of the screen.</p>
+<p>To add a Search Domain or Library Property Group click the 'New Group' button at the top of the screen.</p>
 
 <p>Of the fields on the group form, 'Category code' and 'Name' are the only required fields</p>
 
-<h2>Search domain groups</h2>
+<h2>Search Domain Groups</h2>
 
-<p>Search domain groups allow you to search a group of libraries at the same time instead of searching just one library or all libraries.</p>
+<p>Search Domain Groups allow you to search a group of libraries at the same time instead of searching just one library or all libraries.</p>
 
-<p>To see Search domain groups in action visit the staff client advanced search page in your Koha system</p>
+<p>To see Search Domain Groups in action visit the staff client advanced search page in your Koha system</p>
 
-<h2>Library property groups</h2>
+<h2>Library Property Groups</h2>
 
 <p>You can assign specific categories to your libraries by adding groups for them.</p>
 
 <p>Properties are then applied to libraries via the add or edit library form.</p>
 
-<p><strong>See the full documentation for libraries &amp; groups in the <a href="http://manual.koha-community.org/3.6/en/basicparams.html#libsgroups">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Libraries &amp; Groups in the <a href="http://manual.koha-community.org/3.8/en/basicparams.html#libsgroups">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index aeec6eb..cd6b054 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Patron categories</h1>
+<h1>Patron Categories</h1>
 
 <p>Patron categories allow you to organize your patrons into different roles, age groups, and patron types.</p>
 
 
 <h2>Adding a patron category</h2>
 
-<p>To add a new patron category click 'New category' at the top of the page</p>
+<p>To add a new patron category click 'New Category' at the top of the page</p>
 
 <ul>
-    <li>The 'Category code' is an identifier for your new code.
+      <li>The 'Category Code' is an identifier for your new code.
 <ul>
        <li style="color: #990000;">Important: The category code is limited to 10 characters (numbers and letters)</li>
 </ul>
@@ -77,6 +77,6 @@
 </li>
 </ul>
 
-<p><strong>See the full documentation for patron categories in the <a href="http://manual.koha-community.org/3.6/en/patscirc.html#patcats">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Patron Categories in the <a href="http://manual.koha-community.org/3.8/en/patscirc.html#patcats">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 5bc9d57..1e43fb0 100644 (file)
@@ -1,11 +1,11 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>MARC bibliographic framework test</h1>
+<h1>MARC Bibliographic Framework Test</h1>
 
 <p>This tool checks the MARC structure in your frameworks.</p>
 
-<p>If you change your MARC bibliographic framework it's recommended that you run this tool to test for errors in your definition.</p>
+<p>If you change your MARC Bibliographic framework it's recommended that you run this tool to test for errors in your definition.</p>
 
-<p><strong>See the full documentation for the MARC bibliographic framework test in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#marcbibframeworkstest">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for the MARC Bibliographic Framework Test in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#marcbibframeworkstest">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 5cfc9de..98b1b4d 100644 (file)
@@ -1,10 +1,10 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Cities and towns</h1>
+<h1>Cities and Towns</h1>
 
 <p>To standardize patron input you can define cities or towns within your region so that when new patrons are added librarians simply have to select the town from a list instead of having to type the town and zip (or postal) code information.</p>
 
-<h2>Adding a city</h2>
+<h2>Adding a City</h2>
 
 <p>To add a new city, click the 'New City' button at the top of the page and enter the city name, state and zip/postal code.</p>
 
 
 <p>Cities can be edited or deleted at any time.</p>
 
-<h2>Viewing cities on patron add form</h2>
+<h2>Viewing Cities on Patron Add Form</h2>
 
-<p>If you have defined local cities using the 'New city' form, then when adding or editing a patron record you will see those cities in a pull down menu to make city selection easy.</p>
+<p>If you have defined local cities using the New city form, then when adding or editing a patron record you will see those cities in a pull down menu to make city selection easy.</p>
 
 <p>This will allow for easy entry of local cities into the patron record without risking the potential for typos or mistaken zip/postal codes.</p>
 
-<p><strong>See the full documentation for cities and towns in the <a href="http://manual.koha-community.org/3.6/en/patscirc.html#citytowns">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Cities and Towns in the <a href="http://manual.koha-community.org/3.8/en/patscirc.html#citytowns">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 24ce608..3e4c79b 100644 (file)
@@ -1,14 +1,14 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Classification sources</h1>
+<h1>Classification Sources</h1>
 
-<p>Source of classification or shelving scheme is an authorized values category that is mapped to field 942$2 in Koha's MARC bibliographic frameworks.</p>
+<p>Source of classification or shelving scheme is an Authorized Values category that is mapped to field 942$2 in Koha's MARC Bibliographic frameworks.</p>
 
 <p>Commonly used values of this field are:</p>
 
 <ul>
-    <li>ddc - Dewey Decimal classification</li>
-    <li>lcc - Library of Congress classification</li>
+        <li>ddc - Dewey Decimal Classification</li>
+    <li>lcc - Library of Congress Classification</li>
 </ul>
 
 <p>If you chose to install classification sources during Koha's installation, you would see other values too:</p>
 <ul>
        <li>ANSCR (sound recordings)</li>
        <li>SuDOC classification</li>
   <li>Universal decimal classification</li>
-    <li>Other/Generic classification</li>
<li>Universal Decimal Classification</li>
+      <li>Other/Generic Classification</li>
 </ul>
 
-<h2>Adding/Editing classification sources</h2>
+<h2>Adding/Editing Classification Sources</h2>
 
 <p>You can add your own source of classification by using the New Classification Source button. To edit use the Edit link.</p>
 
@@ -32,7 +32,7 @@
        <li>Select the appropriate filing rule from the drop down list.</li>
 </ul>
 
-<h2>Classification filing rules</h2>
+<h2>Classification Filing Rules</h2>
 
 <p>Filing rules determine the order in which items are placed on shelves.</p>
 
@@ -44,7 +44,7 @@
        <li>Generic</li>
 </ul>
 
-<p>Filing rules are mapped to classification sources. You can setup new filing rules by using the 'New filing rule' button. To edit use the Edit link.</p>
+<p>Filing rules are mapped to Classification sources. You can setup new filing rules by using the New Filing Rule button. To edit use the Edit link.</p>
 
 <p>When creating or editing:</p>
 
@@ -53,6 +53,6 @@
        <li>Choose an appropriate filing routine - dewey, generic or lcc</li>
 </ul>
 
-<p><strong>See the full documentation for classification sources in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#classificationsources">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Classification Sources in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#classificationsources">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 7e6bc26..ff4245c 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Currencies and exchange rates</h1>
+<h1>Currencies and Exchange Rates</h1>
 
 <p>If you place orders from more than one country you will want to input currency exchange rates so that your acquisitions module will properly calculate totals.</p>
 
@@ -8,6 +8,6 @@
 
 <p>The active currency is the main currency you use in your library. Your active currency will have a check mark in the 'Active' column. If you don't have an active currency you will see an error message telling you to choose an active currency.</p>
 
-<p><strong>See the full documentation for currencies and exchange rates in the <a href="http://manual.koha-community.org/3.6/en/acqadmin.html#currexchangeadmin">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Currencies and Exchange Rates in the <a href="http://manual.koha-community.org/3.8/en/acqadmin.html#currexchangeadmin">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 1a942c7..9981403 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Keyword to MARC mapping</h1>
+<h1>Keyword to MARC Mapping</h1>
 
 <p>This tool will allow you to map MARC fields to a set of predefined keywords.</p>
 
@@ -20,6 +20,6 @@
 
 <p>Future developments will include additional keyword assigned fields.</p>
 
-<p><strong>See the full documentation for keyword to MARC mapping in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#keywordmapping">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Keyword to MARC Mapping in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#keywordmapping">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index db6da0b..f9bafcc 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Item circulation alerts</h1>
+<h1>Item Circulation Alerts</h1>
 
 <p>Libraries can decide if they want to have patrons automatically notified of circulation events (check ins and check outs).</p>
 
@@ -19,6 +19,6 @@
        <li>By default all item types and all patrons are notified of check ins and check outs. To change this, click on the item/patron type combo that you would like to stop notices for.</li>
 </ul>
 
-<p><strong>See the full documentation for item circulation alerts in the <a href="http://manual.koha-community.org/3.6/en/patscirc.html#itemcircalerts">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Item Circulation Alerts in the <a href="http://manual.koha-community.org/3.8/en/patscirc.html#itemcircalerts">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 949928d..6759063 100644 (file)
@@ -1,17 +1,17 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Item types</h1>
+<h1>Item Types</h1>
 
 <p>Koha allows you to organize your collection by item types and collection codes.</p>
 
 <p>Item types typically refer to the material type (book, cd, dvd, etc), but can be used in any way that works for your library.</p>
 
-<h2>Adding item types</h2>
+<h2>Adding Item Types</h2>
 
-<p>To add a new item type, simply click the 'New item type' button at the top of the Item types page.</p>
+<p>To add a new item type, simply click the 'New Item Type' button at the top of the Item Types page.</p>
 
 <ul>
-    <li>In the 'Item type' field, enter a short code for your item type</li>
+   <li>In the 'Item Type' field, enter a short code for your item type</li>
        <li>The description is the plain text definition of the item type</li>
        <li>You can choose to have an image associated with your item type
 <ul>
@@ -20,7 +20,7 @@
        <li>Or you can just have no image associated with the item type</li>
        <li style="color: #990000;">Important: To have your item type images appear in the OPAC you need to set noItemTypeImages to 'Show'
 <ul>
   <li>Get there: More &gt; Administration &gt; Global system preferences &gt; Admin</li>
<li>Get there: More &gt; Administration &gt; Global System Preferences &gt; Admin</li>
 </ul>
 </li>
 </ul>
        <li>This will charge the patron on checkout</li>
 </ul>
 </li>
-    <li>When finished, click 'Save changes'
+  <li>When finished, click 'Save Changes'
 <ul>
-    <li>Tip: All fields, with the exception of the 'Item type' will be editable from the item types list</li>
+   <li>Tip: All fields, with the exception of the 'Item Type' will be editable from the Item Types list</li>
 </ul>
 </li>
        <li>Your new item type will now appear on the list</li>
 </ul>
 
-<h2>Editing item types</h2>
+<h2>Editing Item Types</h2>
 
 <p>Each item type has an Edit button beside it. To edit an item simply click the 'Edit' link.</p>
 
-<p>You will not be able to edit the code you assigned as the 'Item type' but you will be able to edit the description for the item.</p>
+<p>You will not be able to edit the code you assigned as the 'Item Type' but you will be able to edit the description for the item.</p>
 
-<h2>Deleting item types</h2>
+<h2>Deleting Item Types</h2>
 
 <p>Each item has a Delete button beside it. To delete an item, simply click the 'Delete' link.</p>
 
 <p>You will not be able to delete item types that are being used by items within your system.</p>
 
-<p><strong>See the full documentation for item types in the <a href="http://manual.koha-community.org/3.6/en/basicparams.html#itemtypeadmin">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Item Types in the <a href="http://manual.koha-community.org/3.8/en/basicparams.html#itemtypeadmin">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 8164a19..6b7c75a 100644 (file)
@@ -1,17 +1,17 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Koha to MARC mapping</h1>
+<h1>Koha to MARC Mapping</h1>
 
-<p>While Koha stores the entire MARC record, it also stores common fields for easy access in various tables in the database. Koha to MARC mapping is used to tell Koha where to find these values in the MARC record. In many cases you will not have to change the default values set by in this tool on installation, but it is important to know that the tool is here and can be used at any time.</p>
+<p>While Koha stores the entire MARC record, it also stores common fields for easy access in various tables in the database. Koha to MARC Mapping is used to tell Koha where to find these values in the MARC record. In many cases you will not have to change the default values set by in this tool on installation, but it is important to know that the tool is here and can be used at any time.</p>
 
-<p>The Koha to MARC mapping page offers you the option of choosing from one of three tables in the database to assign values to.</p>
+<p>The Koha to MARC Mapping page offers you the option of choosing from one of three tables in the database to assign values to.</p>
 
-<p>After choosing the table you would like to view, click 'OK.' To edit any mapping click on the 'Koha filed' or the 'Edit' link.</p>
+<p>After choosing the table you would like to view, click 'OK.' To edit any mapping click on the 'Koha Filed' or the 'Edit' link.</p>
 
 <p>Choose which MARC field you would like to map to this Koha Field and click the 'OK' button. If you would like to clear all mappings, click the 'Click to "Unmap"' button.<p>
 
 <p style="color: #990000;">Important: At this time you can map only 1 MARC field to 1 Koha field. This means that you won't be able to map both the 100a and the 700a to the author field, you need to choose one or the other.</p>
 
-<p><strong>See the full documentation for Koha to MARC mapping in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#kohamarcmapping">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Koha to MARC Mapping in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#kohamarcmapping">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index f55ff05..65b53b9 100644 (file)
@@ -1,8 +1,8 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>MARC bibliographic frameworks subfields</h1>
+<h1>MARC Bibliographic Frameworks Subfields</h1>
 
-<p>Frameworks are made up of MARC fields and subfields. To make edits to most frameworks you must edit the fields and subfields. Clicking 'Edit' to the right of each subfield will allow you to make changes to the text associated with the field</p>
+<p>Frameworks are made up of MARC fields and subfields. To make edits to most Frameworks you must edit the fields and subfields. Clicking 'Edit' to the right of each subfield will allow you to make changes to the text associated with the field</p>
 
 <ul>
        <li>Each field has a tag (which is the MARC tag)
        <li>If you check 'Repeatable' then the field will have a plus sign next to it allowing you to add multiples of that tag</li>
        <li>If you check 'Mandatory' the record will not be allowed to save unless you have a value assigned to this tag</li>
        <li>'Authorized value' is where you define an authorized value that your catalogers can choose from a pull down to fill this field in
-To edit the subfields associated with the tag, click 'Subfields' to the right of the tag on the 'MARC structure' listing</li>
+To edit the subfields associated with the tag, click 'Subfields' to the right of the tag on the 'MARC Structure' listing</li>
 </ul>
 </li>
        <li>From the list of subfields you can click 'Delete' to the right of each to delete the subfields</li>
   <li>To edit the subfields click 'Edit subfields'</li>
<li>To edit the subfields click 'Edit Subfields'</li>
        <li>For each subfield you can set the following values
 <ul>
        <li>Text for librarian
@@ -91,9 +91,9 @@ To edit the subfields associated with the tag, click 'Subfields' to the right of
 </li>
 </ul>
 <ul>
-    <li>Is a URL
+       <li>Is a url
 <ul>
-    <li>if checked, it means that the subfield is a URL and can be clicked</li>
+      <li>if checked, it means that the subfield is a url and can be clicked</li>
 </ul>
 </li>
 </ul>
@@ -141,9 +141,9 @@ To edit the subfields associated with the tag, click 'Subfields' to the right of
 </li>
 </ul>
 </li>
-    <li>To save your changes simply click the 'Save changes' button at the top of the screen</li>
+      <li>To save your changes simply click the 'Save Changes' button at the top of the screen</li>
 </ul>
 
-<p><strong>See the full documentation for MARC frameworks in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#marcbibframeworks">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for MARC Frameworks in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#marcbibframeworks">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index ce93e70..3ba7a39 100644 (file)
@@ -1,8 +1,8 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>MARC bibliographic frameworks tags</h1>
+<h1>MARC Bibliographic Frameworks Tags</h1>
 
-<p>To add a field to a framework click the 'New tag' button at the top of the framework definition</p>
+<p>To add a field to a Framework click the 'New Tag' button at the top of the Framework definition</p>
 
 <p>This will open up a blank form for entering MARC field data</p>
 
        <li>If you want this field to be a pull down with limited possible answers, choose which 'Authorized value' list you want to use</li>
 </ul>
 
-<p>When you're finished, click 'Save changes' and you will be presented with your new field</p>
+<p>When you're finished, click 'Save Changes' and you will be presented with your new field</p>
 
 <p>To the right of the new field is a link to 'Subfields,' you will need to add subfields before this tag will appear in your MARC editor.</p>
 
-<p><strong>See the full documentation for MARC frameworks in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#marcbibframeworks">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for MARC Frameworks in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#marcbibframeworks">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index a01f5db..4e51c56 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Record matching rules</h1>
+<h1>Record Matching Rules</h1>
 
 <p>Record matching rules are used when importing MARC records into Koha.</p>
 
@@ -9,7 +9,7 @@
 <p>To create a new matching rule:</p>
 
 <ul>
-    <li>Click 'New record matching rule'
+    <li>Click 'New Record Matching Rule'
 <ul>
        <li>Choose a unique name and enter it in the 'Matching rule code' field</li>
        <li>'Description' can be anything you want to make it clear to you what rule you're picking</li>
@@ -27,7 +27,7 @@
 </li>
 </ul>
 
-<h2>Sample record matching rule: Control number</h2>
+<h2>Sample Record Matching Rule: Control Number</h2>
 
 <ul>
        <li>Match threshold: 100</li>
@@ -43,9 +43,9 @@
        <li>Offset: 0</li>
        <li>Length: 0</li>
        <li>Normalization rule: Control-number</li>
-    <li>Required match checks: none (remove the blank one)</li>
+   <li>Required Match checks: none (remove the blank one)</li>
 </ul>
 
-<p><strong>See the full documentation for Record matching Rules in the <a href="http://manual.koha-community.org/3.6/en/catadmin.html#recordmatchingrules">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Record Matching Rules in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#recordmatchingrules">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index ba85010..7e59c5a 100644 (file)
@@ -1,40 +1,23 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>OAI-PMH sets mappings configuration</h1>
+<h1>OAI-PMH Sets Mappings Configuration</h1>
 
-<p>
-    Here you can define how a set will be build (what records will belong to
-    this set) by defining mappings. Mappings are a list of conditions on record
-    content. A record only need to match one condition to belong to the set.
-<p>
+<p>Here you can define how a set will be build (what records will belong to this set) by defining mappings. Mappings are a list of conditions on record content. A record only need to match one condition to belong to the set.</p>
 
 <h2>Defining a mapping</h2>
+
 <ol>
-    <li>
-        Fill the fields 'Field', 'Subfield' and 'Value'. For example if you
-        want to include in this set all records that have a 999$9 equal to
-        'XXX'. Fill 'Field' with 999, 'Subfield' with 9 and 'Value' with XXX.
-    </li>
-    <li>
-        If you want to add another condition, click on 'OR' button and repeat
-        step 1.
-    </li>
+    <li>Fill the fields 'Field', 'Subfield' and 'Value'. For example if you want to include in this set all records that have a 999$9 equal to 'XXX'. Fill 'Field' with 999, 'Subfield' with 9 and 'Value' with XXX.</li>
+    <li>If you want to add another condition, click on 'OR' button and repeat step 1.</li>
     <li>Click on 'Save'</li>
 </ol>
 
-<p>
-    To delete a condition, just leave at least one of 'Field', 'Subfield' or
-    'Value' empty and click on 'Save'.
-</p>
-
-<p>
-    Note: Actually, a condition is true if value in the corresponding subfield
-    is strictly equal to what is defined if 'Value'. A record having
-    999$9 = 'XXX YYY' will not belong to a set where condition is
-    999$9 = 'XXX'.
-    <br />
-    And it is case sensitive : a record having 999$9 = 'xxx' will not belong
-    to a set where condition is 999$9 = 'XXX'.
-</p>
+<p>To delete a condition, just leave at least one of 'Field', 'Subfield' or 'Value' empty and click on 'Save'.</p>
+
+<p>Note: Actually, a condition is true if value in the corresponding subfield is strictly equal to what is defined if 'Value'. A record having 999$9 = 'XXX YYY' will not belong to a set where condition is 999$9 = 'XXX'.</p>
+
+<p>And it is case sensitive : a record having 999$9 = 'xxx' will not belong to a set where condition is 999$9 = 'XXX'.</p>
+
+<p><strong>See the full documentation for OAI Sets in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#oaisetsconfig">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index c99ea3a..9944c40 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>OAI-PMH sets configuration</h1>
+<h1>OAI-PMH Sets Configuration</h1>
 
 <p>On this page you can create, modify and delete OAI-PMH sets<p>
 
@@ -9,41 +9,26 @@
 <ol>
     <li>Click on the link 'Add a new set'</li>
     <li>Fill the mandatory fields 'setSpec' and 'setName'</li>
-    <li>
-        Then you can add descriptions for this set. To do this click on
-        'Add description' and fill the newly created text box. You can add as
-        many descriptions as you want.
-    </li>
+    <li>Then you can add descriptions for this set. To do this click on 'Add description' and fill the newly created text box. You can add as many descriptions as you want.</li>
     <li>Click on 'Save' button'</li>
 </ol>
 
 <h2>Modify a set</h2>
 
-<p>
-    To modify a set, just click on the link 'Modify' on the same line of the
-    set you want to modify. A form similar to set creation form will appear and
-    allow you to modify the setSpec, setName and descriptions.
-<p>
+<p>To modify a set, just click on the link 'Modify' on the same line of the set you want to modify. A form similar to set creation form will appear and allow you to modify the setSpec, setName and descriptions.</p>
 
 <h2>Delete a set</h2>
 
-<p>
-    To delete a set, just click on the link 'Delete' on the same line of the
-    set you want to delete.
-</p>
+<p>To delete a set, just click on the link 'Delete' on the same line of the set you want to delete.</p>
 
 <h2>Define mappings</h2>
 
-<p>
-    The 'Define mappings' link allow you to tell how the set will be build
-    (what records will belong to this set)
-</p>
+<p>The 'Define mappings' link allow you to tell how the set will be build (what records will belong to this set)</p>
 
 <h2>Build sets</h2>
 
-<p>
-    Once you have configured all your sets, you have to build the sets. This is
-    done by calling the script misc/migration_tools/build_oai_sets.pl.
-</p>
+<p>Once you have configured all your sets, you have to build the sets. This is done by calling the script misc/migration_tools/build_oai_sets.pl.</p>
+
+<p><strong>See the full documentation for OAI Sets in the <a href="http://manual.koha-community.org/3.8/en/catadmin.html#oaisetsconfig">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index 899df27..c14ee80 100644 (file)
@@ -1,31 +1,35 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Patron attribute types</h1>
+<h1>Patron Attribute Types</h1>
 
 <p>Patron attributes can be used to define custom fields to associate with your patron records. In order to enable the use of custom fields you need to set the ExtendedPatronAttributes system preference.</p>
 
+<ul>
+   <li><em>Get there:</em> More &gt; Administration &gt; Patrons &amp; Circulation &gt; Patron attribute types</li>
+</ul>
+
 <p>A common use for this field would be for a student ID number or a Driver's license number.</p>
 
-<h2>Adding patron attributes</h2>
+<h3>Adding Patron Attributes</h3>
 
-<p>To add a new patron attribute type, click the 'New patron attribute type' button at the top of the page</p>
+<p>To add a new Patron Attribute Type, click the 'New Patron Attribute Type' button at the top of the page</p>
 
 <ul>
-    <li>In the 'Patron attribute type code', enter a short code to identify this field
+     <li>In the 'Patron attribute type code', enter a short code to identify this field
 <ul>
-       <li>This field is limited to 10 characters (numbers and letters only)</li>
-       <li>This setting cannot be changed after an attribute is defined</li>
+        <li style="color: #990000;">Important: This field is limited to 10 characters (numbers and letters only)</li>
+  <li style="color: #990000;">Important: This setting cannot be changed after an attribute is defined</li>
 </ul>
 </li>
        <li>In the 'Description' field, enter a longer (plain text) explanation of what this field will contain</li>
        <li>Check the box next to 'Repeatable' to let a patron record have multiple values of this attribute.
 <ul>
      <li>This setting cannot be changed after an attribute is defined</li>
<li style="color: #990000;">Important: This setting cannot be changed after an attribute is defined</li>
 </ul>
 </li>
        <li>If 'Unique identifier' is checked, the attribute will be a unique identifier which means, if a value is given to a patron record, the same value cannot be given to a different record.
 <ul>
      <li>This setting cannot be changed after an attribute is defined</li>
<li style="color: #990000;">Important: This setting cannot be changed after an attribute is defined</li>
 </ul>
 </li>
        <li>Check 'Allow password' to make it possible to associate a password with this attribute.</li>
        <li>Check 'Display in check-out' to make this attribute visible in the patron's short detail display on the left of the checkout screen and other patron pages</li>
        <li>Authorized value category; if one is selected, the patron record input page will only allow values to be chosen from the authorized value list.
 <ul>
-       <li>You will first need to add an authorized value list for it to appear in this menu</li>
-       <li>An authorized value list is not enforced during batch patron import.</li>
+ <li>You will first need to add an authorized value list for it to appear in this menu
+<ul>
+     <li><em>Get there: </em>More &gt; Administration &gt; Basic Parameters &gt; Authorized Values</li>
 </ul>
 </li>
+ <li style="color: #990000;"> Important: an authorized value list is not enforced during batch patron import.</li>
+</ul>
+</li>
+  <li>If you'd like to only show this attribute on patrons of one type choose that patron type from the 'Category' pull down</li>
+        <li>If you have a lot of attributes it might be handy to group them so that you can easily find them for editing. If you create an Authorized Value for PA_CLASS it will show in the 'Class' pull down and you can then change your attributes page to have sections of attributes</li>
        <li>Click Save to save your new attribute</li>
 </ul>
 
-<p>Once added your attribute will appear on the list of attributes and also on the patron record add/edit form</p>
+<p>Once added your attribute will appear on the list of attributes and also on the patron record add/edit form</o>
+
+<p>If you have set up classes for organizing attributes they will appear that way on the add/edit patron form</p>
 
-<h2>Editing/Deleting patron attributes</h2>
+<h3>Editing/Deleting Patron Attributes</h3>
 
 <p>Each patron attribute has an edit and a delete link beside it on the list of attributes.</p>
 
@@ -57,6 +69,6 @@
 
 <p>You will be unable to delete an attribute if it's in use.</p>
 
-<p><strong>See the full documentation for patron attribute types in the <a href="http://manual.koha-community.org/3.6/en/patscirc.html#patronattributetypes">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Patron Attribute Types in the <a href="http://manual.koha-community.org/3.8/en/patscirc.html#patronattributetypes">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index bdb40f5..7e5ae7e 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>System preferences</h1>
+<h1>System Preferences</h1>
 
 <p>Global system preferences control the way your Koha system works in general. Set these preferences before anything else in Koha.</p>
 
                <li><strong>Cataloging:</strong> holds preferences that control the cataloging functions.  This is where you choose your MARC flavor, set up Z39.50 and barcoding.</li>
                <li><strong>Circulation:</strong> holds preferences that control circulation functions such as holds and  fines.</li>
                <li><strong>Creators:</strong> this tab contains preferences related to modules that create objects.</li>
-        <li><strong>Enhanced content:</strong> holds preferences that will add content from outside sources to your OPAC and Staff Client.  This is where you can turn on cover images, FRBR and tagging.</li>
+          <li><strong>Enhanced Content:</strong> holds preferences that will add content from outside sources to your OPAC and Staff Client.  This is where you can turn on cover images, FRBR and tagging.</li>
                <li><strong>I18N/L10N:</strong> holds preferences related to internationalization and localization such as date formats and languages.</li>
-        <li><strong>Local use:</strong> this tab will usually be empty unless your library has a preference just for your library.</li>
+           <li><strong>Local Use:</strong> this tab will usually be empty unless your library has a preference just for your library.</li>
                <li><strong>Logs:</strong> turn on/off logging functionality in your system.</li>
                <li><strong>OPAC:</strong> customize the OPAC and OPAC functions (aside from the Enhanced Content preferences).</li>
                <li><strong>Patrons:</strong> holds preferences that control how your system handles patron functions.  Some preferences include the minimum password length and membership number settings.</li>
                <li><strong>Searching:</strong> holds preference related to advanced search functions such as removing stop words or allowing stemming.</li>
                <li><strong>Serials</strong> holds all preferences related to managing serial subscriptions.</li>
-        <li><strong>Staff client:</strong> customize the staff client by editing the stylesheet and navigation menu.</li>
-        <li><strong>Web services:</strong> includes preferences related to services like OAI-PMH.</li>
+              <li><strong>Staff Client:</strong> customize the staff client by editing the stylesheet and navigation menu.</li>
+              <li><strong>Web Services:</strong> includes preferences related to services like OAI-PMH.</li>
        </ul>
        
-<p><strong>See the full documentation for system preferences in the <a href="http://manual.koha-community.org/3.6/en/administration.html#globalsysprefs">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for System Preferences in the <a href="http://manual.koha-community.org/3.8/en/administration.html#globalsysprefs">manual</a> (online).</strong></p>
        
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index bc4522f..5874a98 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Printer administration</h1>
+<h1>Printer Administration</h1>
 
 <p>If you are going to be using a printer (or several printers) that are attached to your Koha server for producing statistical and operations reports, then you need to give each printer a name and tell Koha how to access it. You do this by telling Koha which print queue to use.</p>
 
index aab8858..926175a 100644 (file)
@@ -1,15 +1,15 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Adding road types</h1>
+<h1>Adding Road Types</h1>
 
-<p>To add a road type, click 'New road type' and then enter the road type the way you'd like it displayed.</p>
+<p>To add a road type, click 'New Road Type' and then enter the road type the way you'd like it displayed.</p>
 
 <p>Once you submit the form, your new road type will be listed on the Road Types page</p>
 
-<h2>Viewing road types on patron add form</h2>
+<h2>Viewing Road Types on Patron Add form</h2>
 
 <p>When adding or editing a patron, if you have road types defined, there will be a pull down to choose the road type from.</p>
 
-<p><strong>See the full documentation for road types in the <a href="http://manual.koha-community.org/3.6/en/patscirc.html#roadtypes">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Road Types in the <a href="http://manual.koha-community.org/3.8/en/patscirc.html#roadtypes">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 4cb116f..583a637 100644 (file)
@@ -1,10 +1,15 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Circulation and fines rules</h1>
+<h1>Circulation and Fines Rules</h1>
 
 <p>These rules define how your items are circulated, how/when fines are calculated and how holds are handled.</p>
 
+<ul>
+    <li><em>Get there:</em> More &gt; Administration &gt; Patrons &amp; Circulation &gt; Circulation and fines rules</li>
+</ul>
+
 <p>The rules are applied from most specific to less specific, using the first found in this order:</p>
+
 <ul>
        <li>same library, same patron type, same item type</li>
        <li>same library, same patron type, all item type</li>
        <li>all libraries, all patron types, all item types</li>
 </ul>
 
-<p style="background-color: #ffe599;">Tip: If you are a single library system choose your library name before creating rules (sometimes having only rules for the 'all libraries' option can cause issues with holds)</p>
+<p style="background-color: #ffe599;">Tip: If you are a single library system choose your branch name before creating rules (sometimes having only rules for the 'all libraries' option can cause issues with holds)
 
-<p style="color: #990000;">Important: At the very least you will need to set a default circulation rule. This rule should be set for all item types, all libraries and all patron categories. That will catch all instances that do not match a specific rule. When checking out if you do not have a rule for all libraries, all item types and all patron types then you may see patrons getting blocked from placing holds. You will also want a rule for your specific library set for all item types and all patron types to avoid this holds issue. Koha needs to know what rule to fall back on.</p>
+<p style="color: #990000;">Important: At the very least you will need to set a default circulation rule. This rule should be set for all item types, all libraries and all patron categories. That will catch all instances that do not match a specific rule. When checking out if you do not have a rule for all libraries, all item types and all patron types then you may see patrons getting blocked from placing holds. You will also want a rule for your specific library set for all item types and all patron types to avoid this holds issue. Koha needs to know what rule to fall back on.
 
-<h2>Default circulation rules</h2>
+<h3>Default Circulation Rules</h3>
 
-<p>Using the issuing rules matrix you can define rules that depend on patron/item type combos. To set your rules, choose a library from the pull down (or 'all libraries' if you want to apply these rules to all libraries):</p>
+<p>Using the issuing rules matrix you can define rules that depend on patron/item type combos. To set your rules, choose a library from the pull down (or 'all libraries' if you want to apply these rules to all branches)</p>
 
 <p>From the matrix you can choose any combination of patron categories and item types to apply the rules to</p>
+
 <ul>
        <li>First choose which patron category you'd like the rule to be applied to. If you leave this to 'All' it will apply to all patron categories</li>
        <li>Choose the 'Item Type' you would like this rule to apply to. If you leave this to 'All' it will apply to all item types</li>
        <li>Limit the number of items a patron can have checked out at the same time by entering a number in the 'Current Checkouts Allowed' field</li>
-       <li>Define the period of time and item can be checked out to a patron by entering the number of days in the 'Loan Period' box.</li>
+     <li>Define the period of time an item can be checked out to a patron by entering the number of units (days or hours) in the 'Loan Period' box.</li>
+    <li>Choose which unit of time, Days or Hours, that the loan period and fines will be calculate in</li>
        <li>You can also define a hard due date for a specific patron category and item type. A hard due date ignores your usual circulation rules and makes it so that all items of the type defined are due on, before or after the date you specify.</li>
-       <li>'Fine Amount' should have the amount you would like to charge for overdue items</li>
+   <li>'Fine Amount' should have the amount you would like to charge for overdue items
 <ul>
-    <li>Important: Enter only numbers and decimal points (no currency symbols).</li>
+       <li style="color: #990000;">Important: Enter only numbers and decimal points (no currency symbols).</li>
+
 </ul>
-    <li>The 'Fine grace period' is the period of time an item can be overdue before you start charging fines.</li>
-    <li>Enter the 'Fine charging interval' in days (ex. charge fines every 1 day, or every 2 days)</li>
-    <li>If your library 'fines' patrons by suspending their account you can enter the number of days their fine should be suspended in the 'Suspension in days' field</li>
-    <li>Next decide if the patron can renew this item type and if so, enter how many times they can renew it in the 'Renewals allowed' box</li>
-    <li>If the patron can place holds on this item type, enter the total numbers of items (of this type) that can be put on hold in the 'Holds allowed' field</li>
-    <li>Finally, if you charge a rental fee for the item type and want to give a specific patron type a discount on that fee, enter the percentage discount (without the % symbol) in the 'Rental discount' field</li>
+</li>
+  <li>Enter the 'Fine Charging Interval' in the unit you set (ex. charge fines every 1 day, or every 2 hours)</li>
+       <li>The 'Fine Grace Period' is the period of time an item can be overdue before you start charging fines.
+<ul>
+ <li style="color: #990000;">Important: This can only be set for the Day unit, not in Hours</li>
+</ul>
+</li>
+    <li>If your library 'fines' patrons by suspending their account you can enter the number of days their fine should be suspended in the 'Suspension in Days' field
+<ul>
+ <li style="color: #990000;">Important: This can only be set for the Day unit, not in Hours</li>
+</ul>
+</li>
+    <li>Next decide if the patron can renew this item type and if so, enter how many times they can renew it in the 'Renewals Allowed' box</li>
+    <li>If the patron can place holds on this item type, enter the total numbers of items (of this type) that can be put on hold in the 'Holds Allowed' field</li>
+ <li>Finally, if you charge a rental fee for the item type and want to give a specific patron type a discount on that fee, enter the percentage discount (without the % symbol) in the 'Rental Discount' field</li>
 </ul>
 
 <p>When finished, click 'Add' to save your changes. To modify a rule, create a new one with the same patron type and item type. If you would like to delete your rule, simply click the 'Delete' link to the right of the rule.</p>
 
 <p>After choosing to clone you will be presented with a confirmation message.</p>
 
-<h2>Default checkouts and hold policy</h2>
+<h3>Default Checkouts and Hold Policy</h3>
 
 <p>You can set a default maximum number of checkouts and hold policy that will be used if none is defined below for a particular item type or category.</p>
 
 <p>From this menu you can set a default to apply to all item types and patrons in the library.</p>
+
 <ul>
-    <li>In 'Total current checkouts allowed' enter the total number of items patrons can have checked out at one time</li>
-    <li>Control where patrons can place holds from using the 'Hold policy' menu</li>
+  <li>In 'Total Current Checkouts Allowed' enter the total number of items patrons can have checked out at one time</li>
+ <li>Control where patrons can place holds from using the 'Hold Policy' menu
 <ul>
-    <li>From any library: Patrons from any library may put this item on hold. (default if none is defined)</li>
-    <li>From home library: Only patrons from the item's home library may put this book on hold.</li>
-    <li>No holds allowed: No patron may put this book on hold.</li>
+       <li>From Any Library: Patrons from any library may put this item on hold. (default if none is defined)</li>
+    <li>From Home Library: Only patrons from the item's home library may put this book on hold.</li>
+       <li>No Holds Allowed: No patron may put this book on hold.</li>
 </ul>
+</li>
+    <li>Control where the item returns to once it is checked in
+<ul>
+       <li>Item returns home</li>
+     <li>Item returns to issuing branch</li>
+        <li>Item floats
+<ul>
+   <li>When an item floats it stays where it was checked in and does not ever return 'home'</li>
+</ul>
+</li>
+</ul>
+</li>
        <li>Once your policy is set, you can unset it by clicking the 'Unset' link to the right of the rule</li>
 </ul>
-<h2>Checkouts per patron</h2>
+
+<h3>Checkouts Per Patron</h3>
 
 <p>For this library, you can specify the maximum number of loans that a patron of a given category can make, regardless of the item type.</p>
 
 <p style="background-color: #ffe599;">Tip: If the total amount loanable for a given patron category is left blank, no limit applies, except possibly for a limit you define for a specific item type.</p>
 
-<h2>Item hold policies</h2>
+<h3>Item Hold Policies</h3>
 
-<p>For this library, you can edit rules for given itemtypes, regardless of the patron's category. Currently, this means hold policies.</p>
+For this library, you can edit rules for given itemtypes, regardless of the patron's category. Currently, this means hold policies.
+
+<p>The various Hold Policies have the following effects:</p>
 
-<p>The various policies have the following effects:</p>
 <ul>
-    <li>From any library: Patrons from any library may put this item on hold. (default if none is defined)</li>
-    <li>From home library: Only patrons from the item's home library may put this book on hold.</li>
-    <li>No holds allowed: No patron may put this book on hold.</li>
+   <li>From Any Library: Patrons from any library may put this item on hold. (default if none is defined)</li>
+    <li>From Home Library: Only patrons from the item's home library may put this book on hold.</li>
+       <li>No Holds Allowed: No patron may put this book on hold.</li>
 </ul>
 
 <p style="color: #990000;">Important: Note that if the system preference AllowHoldPolicyOverride set to 'allow', these policies can be overridden by your circulation staff.</p>
 
-<p style="color: #990000;">Important: These policies are based on the patron's home library, not the library that the reserving staff member is from.</p>
+<p style="color: #990000;">Important: These policies are based on the patron's home branch, not the branch that the reserving staff member is from.</p>
+
+<p>The various Return Policies have the following effects:</p>
+
+<ul>
+ <li>Item returns home: The item will prompt the librarian to transfer the item to its home library
+<ul>
+        <li style="color: #990000;">Important: If the AutomaticItemReturn preference is set to automatically transfer the items home, then a prompt will not appear</li>
+</ul>
+</li>
+   <li>Item returns to issuing branch: The item will prompt the librarian to transfer the item back to the library where it was checked out
+<ul>
+  <li style="color: #990000;">Important: If the AutomaticItemReturn preference is set to automatically transfer the items home, then a prompt will not appear</li>
+</ul>
+</li>
+   <li>Item floats: The item will not be transferred from the branch it was checked in at, instead it will remain there until transferred manually or checked in at another branch</li>
+</ul>
 
-<p><strong>See the full documentation for circulation and fine rules in the <a href="http://manual.koha-community.org/3.6/en/patscirc.html#circfinerules">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Circulation and Fine Rules in the <a href="http://manual.koha-community.org/3.8/en/patscirc.html#circfinerules">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index 2081d98..bbdda18 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Stop words</h1>
+<h1>Stop Words</h1>
 
 <p style="color: #990000">Important: If NoZebra is set to 'Use' this option will not appear on the administration menu</p>
 
@@ -8,10 +8,10 @@
 
 <p>Koha comes with a standard list of stop words that can be edited by visiting the Stop Word administration area.</p>
 
-<p>To add a new stop word to the list, click the 'New stop word' button and add the word you'd like ignored</p>
+<p>To add a new stop word to the list, click the 'New Stop Word' button and add the word you'd like ignored</p>
 
 <p style="color: #990000">Important: If you change something in this table, ask your administrator to run misc/batchRebuildBiblioTables.pl script.</p>
 
-<p><strong>See the full documentation for stop words in the <a href="http://manual.koha-community.org/3.6/en/additionaladmin.html#stopwordsadmin">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Stop Words in the <a href="http://manual.koha-community.org/3.8/en/additionaladmin.html#stopwordsadmin">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index 4eec624..431f9f7 100644 (file)
@@ -1,6 +1,6 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Z39.50 servers</h1>
+<h1>Z39.50 Servers</h1>
 
 <p>Koha has a powerful copy cataloging tool. Using Koha you can connect to any Z39.50 target that is publicly available or that you have the log in information to.</p>
 
@@ -8,16 +8,16 @@
 
 <p>To find additional targets you use IndexData's IRSpy: <a href="http://irspy.indexdata.com">http://irspy.indexdata.com</a></p>
 
-<h2>Add a Z39.50 target</h2>
+<h2>Add a Z39.50 Target</h2>
 <ul>
-    <li>From the main Z39.50 page, click 'New Z39.50 server'
+   <li>From the main Z39.50 page, click 'New Z39.50 Server'
 <ul>
        <li>Userid and Password are only required for servers that are password protected</li>
 </ul>
 </li>
 </ul>
 
-<h2>Suggested Z39.50 targets</h2>
+<h2>Suggested Z39.50 Targets</h2>
 
 <p>The following targets have been used successfully by other Koha libraries (in the Americas):</p>
 
@@ -38,6 +38,6 @@
        <li>VANCOUVER PUBLIC LIBRARY z3950.vpl.ca:210 Horizon</li>
 </ul>
 
-<p><strong>See the full documentation for Z39.50 servers in the <a href="http://manual.koha-community.org/3.6/en/additionaladmin.html#z3950admin">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Z39.50 Servers in the <a href="http://manual.koha-community.org/3.8/en/additionaladmin.html#z3950admin">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index fd9af7c..ca81ae8 100644 (file)
@@ -1,15 +1,15 @@
 [% INCLUDE 'help-top.inc' %]
 
-<h1>Offline circulation file (.koc) uploader</h1>
+<h1>Offline Circulation File (.koc) Uploader</h1>
 
-<p>The offline circulation tool for Windows will generate a KOC file that you can upload into Koha once your system comes back up.</p>
+<p>The offline circulation tool for Windows generates a KOC file which you can upload into Koha once your system comes back up.</p>
 
-<p>Browse your computer for the *.koc file</p>
+<p>Browse your computer for the *.koc file.</p>
 
-<p>Once the file is uploaded, click the process the file</p>
+<p>Once the file is uploaded, click the 'Process Offline Circulation' button.</p>
 
-<p>When this is complete you'll see the summary of actions from when you were offline (including any errors).</p>
+<p>When this process  is complete, you will see a summary of actions from when you were offline (including any errors).</p>
 
-<p><strong>See the full documentation for the offline circulation file uploader in the <a href="http://manual.koha-community.org/3.6/en/offlinecirc.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for the Offline Circulation File Uploader in the <a href="http://manual.koha-community.org/3.8/en/offlinecirc.html">manual</a> (online).</strong></p>
 
-[% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
+[% INCLUDE 'help-bottom.inc' %]
index ba9704d..369ba8e 100644 (file)
@@ -8,6 +8,6 @@
 
 <p>In your results you will see all subscriptions that will expire before the date you entered. From there you can choose to view the subscription further or renew it in one click.</P>
 
-<p><strong>See the full documentation for Checking Serial Expiration in the <a href="http://manual.koha-community.org/3.6/en/serialexpiration.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Checking Serial Expiration in the <a href="http://manual.koha-community.org/3.8/en/serialexpiration.html">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index b27f9b4..c6d8ade 100644 (file)
@@ -12,7 +12,7 @@
 
 <p>From the list of late issues you can choose which ones you want to send a claim email to by clicking the checkbox to the left of late issue, choosing the notice template to use and clicking the 'Send notification' button.</p>
 
-<p><strong>See the full documentation for Serial Claims in the <a href="http://manual.koha-community.org/3.6/en/serialclaims.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Serial Claims in the <a href="http://manual.koha-community.org/3.8/en/serialclaims.html">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
 
index 7faf405..911e239 100644 (file)
@@ -16,6 +16,6 @@
 
 <p>If RoutingListAddReserves is set to on then patrons listed in the routing list will automatically be added to the holds list for the issue.</p>
 
-<p><strong>See the full documentation for Routing Lists in the <a href="http://manual.koha-community.org/3.6/en/routinglist.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Routing Lists in the <a href="http://manual.koha-community.org/3.8/en/routinglist.html">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 2160325..45916df 100644 (file)
@@ -10,6 +10,6 @@
 
 <p>If you are adding multiple issues at once or if the latest expected issue is late, you can click the 'Generate Next' button to generate the next issue based on the subscription pattern.</p>
 
-<p><strong>See the full documentation for Serials in the <a href="http://manual.koha-community.org/3.6/en/serials.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Serials in the <a href="http://manual.koha-community.org/3.8/en/serials.html">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index f2d3464..f3f76fc 100644 (file)
@@ -24,6 +24,6 @@
 
 <p>Clicking this button will generate the next issue for you and mark the previously expected issue as 'Late' automatically. You can then check the 'Edit' box to the right of each issue and edit the status on multiple issues at once.</p>
 
-<p><strong>See the full documentation for Receiving a Serial in the <a href="http://manual.koha-community.org/3.6/en/receiveissues.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Receiving a Serial in the <a href="http://manual.koha-community.org/3.8/en/receiveissues.html">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
index c5a794d..d4ee4f5 100644 (file)
@@ -6,7 +6,7 @@
 
 <p>You can search for existing subscriptions by using the search box at the top of the page. You can search for any part of the serial title or ISSN.</p>
 
-<p><strong>See the full documentation for Serials in the <a href="http://manual.koha-community.org/3.6/en/serials.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Serials in the <a href="http://manual.koha-community.org/3.8/en/serials.html">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
 
index d16fe4b..247ded7 100644 (file)
@@ -83,7 +83,7 @@
 
 <p>Click 'Save Subscription' to save the information you have entered.</p>
 
-<p><strong>See the full documentation for Adding a Subscription in the <a href="http://manual.koha-community.org/3.6/en/serials.html#newsubscription">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Adding a Subscription in the <a href="http://manual.koha-community.org/3.8/en/serials.html#newsubscription">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
 
index 7d23d60..fbada5d 100644 (file)
@@ -6,6 +6,6 @@
 
 <p>From here you can edit your subscription, renew it and/or recieve issues.</p>
 
-<p><strong>See the full documentation for Serials in the <a href="http://manual.koha-community.org/3.6/en/serials.html">manual</a> (online).</strong></p>
+<p><strong>See the full documentation for Serials in the <a href="http://manual.koha-community.org/3.8/en/serials.html">manual</a> (online).</strong></p>
 
 [% INCLUDE 'help-bottom.inc' %]
\ No newline at end of file
index 995ea8c..5b5d581 100644 (file)
@@ -17,9 +17,9 @@
 <form action="/cgi-bin/koha/members/boraccount.pl" method="get"><input type="hidden" name="borrowernumber" id="borrowernumber" value="[% borrowernumber %]" /></form>
 
 <!-- The manual invoice and credit buttons -->
-<div class="toptabs">
-<ul class="ui-tabs-nav">
-       <li class="ui-tabs-selected"><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% borrowernumber %]">Account</a></li>
+<div class="statictabs">
+<ul>
+    <li class="active"><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% borrowernumber %]">Account</a></li>
        <li><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% borrowernumber %]" >Pay fines</a></li>
        <li><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% borrowernumber %]" >Create manual invoice</a></li>
        <li><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% borrowernumber %]" >Create manual credit</a></li>
index 2a965ae..8b71856 100644 (file)
@@ -23,12 +23,12 @@ $(document).ready(function(){
 [% INCLUDE 'members-toolbar.inc' %]
 
 <!-- The manual invoice and credit buttons -->
-<div class="toptabs">
-<ul class="ui-tabs-nav">
+<div class="statictabs">
+<ul>
        <li><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% borrowernumber %]">Account</a></li>
        <li><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% borrowernumber %]" >Pay fines</a></li>
        <li><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% borrowernumber %]" >Create manual invoice</a></li>
-       <li class="ui-tabs-selected"><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% borrowernumber %]" >Create manual credit</a></li>
+    <li class="active"><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% borrowernumber %]" >Create manual credit</a></li>
 </ul>
 <div class="tabs-container">
 
index c4f3142..217882e 100644 (file)
@@ -23,11 +23,11 @@ $(document).ready(function(){
 [% INCLUDE 'members-toolbar.inc' %]
 
 <!-- The manual invoice and credit buttons -->
-<div class="toptabs">
-<ul class="ui-tabs-nav">
+<div class="statictabs">
+<ul>
        <li><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% borrowernumber %]">Account</a></li>
        <li><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% borrowernumber %]" >Pay fines</a></li>
-       <li class="ui-tabs-selected"><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% borrowernumber %]" >Create manual invoice</a></li>
+    <li class="active"><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% borrowernumber %]" >Create manual invoice</a></li>
        <li><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% borrowernumber %]" >Create manual credit</a></li>
 </ul>
 <div class="tabs-container">
index 1e756df..351e162 100644 (file)
@@ -20,7 +20,7 @@ $.tablesorter.addParser({
     type: 'text' 
 });
 $(document).ready(function() {
-       $('#finesholdsissues > ul').tabs();
+    $('#finesholdsissues').tabs();
        $.tablesorter.defaults.widgets = ['zebra'];
        $("#issuest").tablesorter({[% IF ( dateformat_metric ) %]
                dateFormat: 'uk',[% END %]
@@ -410,15 +410,14 @@ function validate1(date) {
 
 <div id="finesholdsissues" class="toptabs">
     <ul>
-        <li><a href="/cgi-bin/koha/members/moremember.pl#checkedout">[% issueloop.size %] Checkout(s)</a></li>
+        <li><a href="#checkedout">[% issueloop.size %] Checkout(s)</a></li>
     [% IF relissueloop.size %]
-        <li><a href="/cgi-bin/koha/members/moremember.pl#relissues">Relatives' Checkouts</a></li>
+        <li><a href="#relissues">Relatives' Checkouts</a></li>
     [% END %]
-        <li><a href="/cgi-bin/koha/members/moremember.pl#finesandcharges">Fines &amp; Charges</a></li>
+        <li><a href="#finesandcharges">Fines &amp; Charges</a></li>
         <li>[% IF ( countreserv ) %]
-            <a href="/cgi-bin/koha/members/moremember.pl#onhold">[% countreserv %] Hold(s)</a>
-    [% ELSE %]
-            <a href="/cgi-bin/koha/members/moremember.pl#onhold">0 Holds</a>
+            <a href="#onhold">[% countreserv %] Hold(s)</a>    [% ELSE %]
+            <a href="#onhold">0 Holds</a>
     [% END %]</li>
     </ul>
 
@@ -646,6 +645,8 @@ function validate1(date) {
 
         <fieldset class="action"><input type="submit" class="cancel" name="submit" value="Cancel marked holds" /></fieldset>
     </form>
+
+    [% IF SuspendHoldsIntranet %]
     <fieldset class="action">
         <form action="/cgi-bin/koha/reserve/modrequest_suspendall.pl" method="post">
             <input type="hidden" name="from" value="borrower" />
@@ -697,6 +698,7 @@ function validate1(date) {
             <input type="submit" value="Resume all suspended holds" />
        </form>
     </fieldset>
+    [% END # IF SuspendHoldsIntranet %]
 
     [% ELSE %]<p>Patron has nothing on hold.</p>[% END %]
        </div>
index fb06325..4c1b362 100644 (file)
 [% INCLUDE 'members-toolbar.inc' borrowernumber=borrower.borrowernumber %]
 
 <!-- The manual invoice and credit buttons -->
-<div class="toptabs">
-<ul class="ui-tabs-nav">
+<div class="statictabs">
+<ul>
        <li><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% borrower.borrowernumber %]">Account</a></li>
-       <li class="ui-tabs-selected"><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% borrower.borrowernumber %]" >Pay fines</a></li>
+    <li class="active"><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% borrower.borrowernumber %]" >Pay fines</a></li>
        <li><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% borrower.borrowernumber %]" >Create manual invoice</a></li>
        <li><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% borrower.borrowernumber %]" >Create manual credit</a></li>
 </ul>
index d5102cc..3461e8a 100644 (file)
@@ -68,12 +68,12 @@ function moneyFormat(textObj) {
 
 
 <!-- The manual invoice and credit buttons -->
-<div class="toptabs">
-<ul class="ui-tabs-nav">
+<div class="statictabs">
+<ul>
     <li>
     <a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% borrower.borrowernumber %]">Account</a>
     </li>
-    <li class="ui-tabs-selected">
+    <li class="active">
     <a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% borrower.borrowernumber %]" >Pay fines</a>
     </li>
     <li>
index 5e734ee..8e8470b 100644 (file)
@@ -598,7 +598,7 @@ function checkMultiHold() {
             <th><img src="/intranet-tmpl/[% theme %]/img/go-bottom.png" border="0" alt="Toggle set to lowest priority" /></th>
         [% END %]
        <th>&nbsp;</th>
-       <th>&nbsp;</th>
+    [% IF SuspendHoldsIntranet %]<th>&nbsp;</th><!-- Suspend Holds Column Header -->[% END %]
       </tr>
   [% FOREACH reserveloo IN biblioloo.reserveloop %]
   [% UNLESS ( loop.odd ) %]<tr class="highlight">[% ELSE %]<tr>[% END %]
@@ -730,6 +730,7 @@ function checkMultiHold() {
                 </a>
        </td>
 
+        [% IF SuspendHoldsIntranet %]
        <td>
        [% UNLESS ( reserveloo.wait ) %]
             <input type="button" value="[% IF ( reserveloo.suspend ) %]Unsuspend[% ELSE %]Suspend[% END %]" onclick="window.location.href='request.pl?action=toggleSuspend&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;date=[% reserveloo.date %]&amp;suspend_until=' + $('#suspend_until_[% reserveloo.borrowernumber %]').val()" />
@@ -768,6 +769,8 @@ function checkMultiHold() {
                <input type="hidden" name="suspend_until" value="" />
        [% END %]
        </td>
+        [% END # IF SuspendHoldsIntranet %]
+
       </tr>
 
   [% END %] <!-- existing reserveloop -->
index 515e388..b609d83 100644 (file)
 <h1>Comments</h1>
 
 <!-- The manual invoice and credit buttons -->
-<div class="toptabs">
-<ul class="ui-tabs-nav">
-    [% IF ( status ) %]<li class="ui-tabs-selected">[% ELSE %]<li>[% END %]<a href="/cgi-bin/koha/reviews/reviewswaiting.pl?status=1">Approved comments</a></li>
-    [% IF ( status ) %]<li>[% ELSE %]<li class="ui-tabs-selected">[% END %]<a href="/cgi-bin/koha/reviews/reviewswaiting.pl" >Comments awaiting moderation</a></li>
+<div class="statictabs">
+<ul>
+    [% IF ( status ) %]<li class="active">[% ELSE %]<li>[% END %]<a href="/cgi-bin/koha/reviews/reviewswaiting.pl?status=1">Approved comments</a></li>
+    [% IF ( status ) %]<li>[% ELSE %]<li class="active">[% END %]<a href="/cgi-bin/koha/reviews/reviewswaiting.pl" >Comments awaiting moderation</a></li>
 </ul>
 <div class="tabs-container">
 
index a478461..23b496b 100644 (file)
@@ -41,7 +41,7 @@ function generateNext(subscriptionid) {
 }
 
 $(document).ready(function() {
-       $('#subscription_years > ul').tabs();
+    $('#subscription_years').tabs();
 });
  
 
@@ -179,7 +179,7 @@ $(document).ready(function() {
 <ul>
        [% FOREACH year IN years %]
         [% IF ( year.year ) %]
-            <li><a href="/cgi-bin/koha/serials/serials-collection.pl?subscriptionid=[% year.subscriptionid %]#subscription-year-[% year.year %]">[% year.year %]</a></li>
+            <li><a href="#subscription-year-[% year.year %]">[% year.year %]</a></li>
         [% END %]
     [% END %]
 </ul>
index 93e28d4..d2ded73 100644 (file)
@@ -33,7 +33,7 @@ function popup(subscriptionid) {
     newin=window.open("subscription-renew.pl?mode=popup&subscriptionid="+subscriptionid,'popup','width=590,height=440,toolbar=false,scrollbars=yes');
 }
 $(document).ready(function() {
-    $("#subscription_description > ul").tabs();
+    $("#subscription_description").tabs();
     $("#renewsub").click(function(){
         popup([% subscriptionid %]);
         return false;
@@ -82,10 +82,10 @@ $(document).ready(function() {
 
 <div id="subscription_description" class="toptabs">
 <ul class="ui-tabs-nav">
-    <li><a href="/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=[% subscriptionid %]#subscription_info">Information</a></li>
-    <li><a href="/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=[% subscriptionid %]#subscription_planning">Planning</a></li>
-    <li><a href="/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=[% subscriptionid %]#subscription_issues">Issues</a></li>
-    <li><a href="/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=[% subscriptionid %]#subscription_summary">Summary</a></li>
+    <li><a href="#subscription_info">Information</a></li>
+    <li><a href="#subscription_planning">Planning</a></li>
+    <li><a href="#subscription_issues">Issues</a></li>
+    <li><a href="#subscription_summary">Summary</a></li>
 </ul>
 
 <div id="subscription_info">
index 4a92f85..9bce8c7 100644 (file)
@@ -40,7 +40,7 @@ function displayOther(id,show,hide){
 }
 $(document).ready(function() {
     yuiToolbar();
-    $('#suggestiontabs > ul').tabs({
+    $('#suggestiontabs').tabs({
         select: function(ui) {
             $("#loadingtab").show();
         },
@@ -329,7 +329,7 @@ $(document).ready(function() { calcNewsuggTotal(); });
 <div id="suggestiontabs" class="toptabs">
 <ul class="ui-tabs-nav">
 [% FOREACH suggestion IN suggestions %]
-[% IF ( suggestion.first ) %]<li class="ui-tabs-selected">[% ELSE %]<li>[% END %]<a href="suggestion.pl#[% suggestion.suggestiontype %]">[% IF ( suggestion.suggestiontypelabel ) %]
+[% IF ( suggestion.first ) %]<li class="ui-tabs-selected">[% ELSE %]<li>[% END %]<a href="#[% suggestion.suggestiontype %]">[% IF ( suggestion.suggestiontypelabel ) %]
     [% IF (suggestion.suggestiontypelabel == "Pending") %]Pending
     [% ELSIF (suggestion.suggestiontypelabel == "Accepted") %]Accepted
     [% ELSIF (suggestion.suggestiontypelabel == "Checked") %]Checked
@@ -340,7 +340,6 @@ $(document).ready(function() { calcNewsuggTotal(); });
     [% ELSE %]No name[% END %] ([% suggestion.suggestionscount %])</a></li>
 [% END %]
     </ul>
-    </div>
 [% END %]
 
 [% FOREACH suggestion IN suggestions %]
@@ -431,6 +430,7 @@ $(document).ready(function() { calcNewsuggTotal(); });
 [% END %]
 </div>
 [% END %]
+    </div>
 [% END %]
 </div>
 </div>
@@ -458,7 +458,7 @@ $(document).ready(function() { calcNewsuggTotal(); });
                 </fieldset>
                                 <fieldset class="brief"><h4 class="collapse"><a href="#">Suggestion information</a></h4>
                     <ol>
-                      <li><label for="status"> Status:</label><select name="STATUS" id="STATUS"><option value="">Any</option>
+                      <li><label for="STATUS"> Status:</label><select name="STATUS" id="STATUS"><option value="">Any</option>
                         [% IF (statusselected_ASKED ) %]<option value="ASKED" selected="selected">Pending</option> 
                         [% ELSE %]<option value="ASKED">Pending</option>[% END %]
                         [% IF (statusselected_ACCEPTED ) %]<option value="ACCEPTED" selected="selected">Accepted</option>
index 242e7f9..74624ea 100644 (file)
@@ -6,7 +6,7 @@ function reloadPage(p) {
        if (id != 0) { document.location = "/cgi-bin/koha/tools/csv-profiles.pl?id=" + id; }
 }
      $(document).ready(function() {
-        $('#csvexporttabs > ul').tabs();
+        $('#csvexporttabs').tabs();
      });
 //]]>
 </script>
@@ -39,14 +39,14 @@ function reloadPage(p) {
                                    [% END %]
 <div id="csvexporttabs" class="toptabs">
 <ul>
-       <li><a href="csv-profiles.pl#csvnew">New profile</a></li>
+    <li><a href="#csvnew">New profile</a></li>
        [% IF ( existing_profiles ) %]
        [% IF ( selected_profile_id ) %]
        <li class="ui-tabs-selected">
        [% ELSE %]
        <li>
         [% END %]
-       <a href="csv-profiles.pl#csvedit">Edit existing profile</a></li> [% END %]
+    <a href="#csvedit">Edit existing profile</a></li> [% END %]
 </ul>
        <div id="csvnew">
                                        <h3>New CSV export profile</h3>
index 29a23db..12b53c3 100644 (file)
@@ -9,7 +9,7 @@ $(document).ready(function() {
         $('#branch').change(function() {
                 $('#selectlibrary').submit();
         });
-           $('#rulestabs > ul').tabs();
+        $('#rulestabs').tabs();
 });
 //]]>
 </script>
index 179e2c4..0c71a41 100644 (file)
@@ -1,5 +1,5 @@
 [% INCLUDE 'doc-head-open.inc' %]
-<title>Koha &rsaquo; [% IF ( viewshelf ) %]Lists &rsaquo; Contents of [% shelfname | html %][% ELSE %]lists[% END %][% IF ( shelves ) %] &rsaquo; Create new list[% END %][% IF ( edit ) %] &rsaquo; Edit list [% shelfname | html %][% END %]</title>
+<title>Koha &rsaquo; [% IF ( viewshelf ) %]Lists &rsaquo; Contents of [% shelfname | html %][% ELSE %]Lists[% END %][% IF ( shelves ) %] &rsaquo; Create new list[% END %][% IF ( edit ) %] &rsaquo; Edit list [% shelfname | html %][% END %]</title>
 [% INCLUDE 'doc-head-close.inc' %]
 <script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
 <script type="text/javascript">
@@ -360,23 +360,23 @@ function placeHold () {
 
 [% UNLESS ( vseflag ) %]
         <h2>Lists</h2>
-               <div class="toptabs">
-        <ul class="ui-tabs-nav">
+        <div class="statictabs">
+        <ul>
         [% IF ( showprivateshelves ) %]
-            <li id="privateshelves_tab" class="ui-tabs-selected"><a href="/cgi-bin/koha/virtualshelves/shelves.pl?display=privateshelves">Your lists</a></li>
+            <li id="privateshelves_tab" class="active"><a href="/cgi-bin/koha/virtualshelves/shelves.pl?display=privateshelves">Your lists</a></li>
         [% ELSE %]
             <li id="privateshelves_tab" class=""><a href="/cgi-bin/koha/virtualshelves/shelves.pl?display=privateshelves">Your lists</a></li>
         [% END %]
         [% IF ( showpublicshelves ) %]
-            <li id="publicshelves_tab" class="ui-tabs-selected"><a href="/cgi-bin/koha/virtualshelves/shelves.pl?display=publicshelves">Public lists</a></li>
+            <li id="publicshelves_tab" class="active"><a href="/cgi-bin/koha/virtualshelves/shelves.pl?display=publicshelves">Public lists</a></li>
         [% ELSE %]
             <li id="publicshelves_tab" class=""><a href="/cgi-bin/koha/virtualshelves/shelves.pl?display=publicshelves">Public lists</a></li>
         [% END %]
         </ul>
         [% IF ( showprivateshelves ) %]
-               <div id="privateshelves" class="ui-tabs-panel" style="display:block;">
+        <div id="privateshelves" class="tabs-container" style="display:block;">
                [% ELSE %]
-               <div id="privateshelves" class="ui-tabs-panel" style="display:none;">
+        <div id="privateshelves" class="tabs-container" style="display:none;">
                [% END %]
             [% IF ( shelveslooppriv ) %]
                        <div class="pages">[% pagination_bar %]</div>
@@ -426,9 +426,9 @@ function placeHold () {
                </div><!-- /privateshelves -->
 
         [% IF ( showpublicshelves ) %]
-               <div id="publicshelves" class="ui-tabs-panel" style="display:block;">
+        <div id="publicshelves" class="tabs-container" style="display:block;">
                [% ELSE %]
-               <div id="publicshelves" class="ui-tabs-panel" style="display:none;">
+        <div id="publicshelves" class="tabs-container" style="display:none;">
                [% END %]
         [% IF ( shelvesloop ) %]
                <div class="pages">[% pagination_bar %]</div>
index ea538aa..6223025 100644 (file)
@@ -5,7 +5,10 @@ a {
        font-weight : bold;
 }
 
-a, a:visited {
+a,
+a:visited,
+.ui-widget-content a,
+.ui-widget-content a:visited {
        color : #006699;
 }
 
@@ -1949,31 +1952,6 @@ span.starMT {
        top : auto;
 }
 
-ul.ui-tabs-nav li {
-       margin-right : .5em;
-}
-
-ul.ui-tabs-nav li a, ul.ui-tabs-nav li span.a {
-       background-color : #F3F3F3;
-       border-top : 1px solid #E8E8E8;
-       border-left : 1px solid #E8E8E8;
-       border-right : 1px solid #E8E8E8;
-       border-bottom : 0;
-       padding : .2em 1em;
-       text-align : center;
-       text-decoration : none;
-}
-
-ul.ui-tabs-nav li.ui-tabs-selected a, ul.ui-tabs-nav li.ui-tabs-selected span.a {
-       background-color : #FFF;
-       border-top : 1px solid #E8E8E8;
-       border-left : 1px solid #E8E8E8;
-       border-right : 1px solid #E8E8E8;
-       border-bottom : 1px solid #FFF;
-       margin-bottom : -5px;
-       text-align : center;
-}
-
 #views {
        border-bottom : 1px solid #E8E8E8;
        margin-bottom : .5em;
@@ -2168,6 +2146,7 @@ div.ft {
 #recentcomments {
        margin:auto;
        max-width:750px;
+    margin-left: 13.3207em;
 }
 
 .searchresults .commentline {
@@ -2451,6 +2430,161 @@ span.sep {
     margin: 5px;
 }
 
+/* jQuery UI standard tabs */
+.ui-tabs-nav .ui-tabs-selected a,
+.ui-tabs-nav a:hover,
+.ui-tabs-nav a:focus,
+.ui-tabs-nav a:active,
+.ui-tabs-nav span.a {
+    background: none repeat scroll 0 0 transparent;
+    outline: 0 none;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected {
+    background-color : #FFF;
+    border : 1px solid #D8D8D8;
+}
+
+.ui-widget,
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+    font-family : inherit;
+    font-size : inherit;
+}
+ul.ui-tabs-nav li {
+    list-style : none;
+}
+.ui-tabs.ui-widget-content {
+    background : transparent none;
+    border : 0;
+}
+
+.ui-tabs .ui-tabs-panel {
+    border : 1px solid #D8D8D8;
+}
+.ui-tabs-nav.ui-widget-header {
+    border : 0;
+    background : none;
+}
+.ui-tabs .ui-tabs-nav li {
+    background: #F3F3F3 none;
+    border: 1px solid #D8D8D8;
+    margin-right : .4em;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a {
+    color : #000;
+    font-weight : bold;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-state-default.ui-state-hover {
+    background : #F3F3F3 none;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected.ui-state-hover {
+    background : #FFF none;
+}
+
+.ui-tabs .ui-state-default a,
+.ui-tabs .ui-state-default a:link,
+.ui-tabs .ui-state-default a:visited {
+    color: #006699;
+}
+
+.ui-tabs .ui-state-hover a,
+.ui-tabs .ui-state-hover a:link,
+.ui-tabs .ui-state-hover a:visited {
+    color: #990033;
+}
+
+.statictabs ul {
+    background: none repeat scroll 0 0 transparent;
+    border: 0 none;
+    margin: 0;
+    padding: 0.2em 0.2em 0;
+    border-bottom-right-radius: 4px;
+    border-bottom-left-radius: 4px;
+    border-top-right-radius: 4px;
+    border-top-left-radius: 4px;
+    color: #222222;
+    font-weight: bold;
+    font-size: 100%;
+    line-height: 1.3;
+    list-style: none outside none;
+    outline: 0 none;
+    text-decoration: none;
+}
+
+.statictabs ul:after {
+    clear: both;
+}
+
+.statictabs ul:before,
+.statictabs ul:after {
+    content: "";
+    display: table;
+}
+
+.statictabs ul li {
+    background: none repeat scroll 0 0 #E6F0F2;
+    border: 1px solid #B9D8D9;
+    border-bottom: 0 none !important;
+    border-top-right-radius: 4px;
+    border-top-left-radius: 4px;
+    float: left;
+    list-style: none outside none;
+    margin-bottom: 0;
+    margin-right: 0.4em;
+    padding: 0;
+    position: relative;
+    white-space: nowrap;
+    top: 1px;
+    color: #555555;
+    font-weight: normal;
+
+}
+
+.statictabs ul li.active {
+    background-color: #FFFFFF;
+    color: #212121;
+    font-weight: normal;
+    padding-bottom: 1px;
+}
+
+.statictabs ul li a {
+    color: #004D99;
+    cursor: pointer;
+    float: left;
+    padding: 0.5em 1em;
+    text-decoration: none;
+}
+
+.statictabs ul li a:hover {
+    background-color : #EDF4F5;
+    border-top-right-radius: 4px;
+    border-top-left-radius: 4px;
+    color : #538200;
+}
+
+.statictabs ul li.active a {
+    color: #000000;
+    font-weight: bold;
+    cursor: text;
+    background: none repeat scroll 0 0 transparent;
+    outline: 0 none;
+}
+
+.statictabs .tabs-container {
+    border: 1px solid #B9D8D9;
+    background: none repeat scroll 0 0 transparent;
+    display: block;
+    padding: 1em 1.4em;
+    border-bottom-right-radius: 4px;
+    border-bottom-left-radius: 4px;
+    color: #222222;
+}
+
 /* ## BABELTHEQUE ## */
 /* Uncomment if babeltheque configuration no contains these lines */
 /*
index 53a43c1..8634cfd 100644 (file)
@@ -2,6 +2,7 @@
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta name="generator" content="Koha [% Version %]" /> <!-- leave this for stats -->
 <link rel="shortcut icon" href="[% IF ( OpacFavicon ) %][% OpacFavicon %][% ELSE %][% themelang %]/includes/favicon.ico[% END %]" type="image/x-icon" />
+<link rel="stylesheet" type="text/css" href="[% themelang %]/lib/jquery/jquery-ui.css" />
 [% IF ( opacstylesheet ) %]<link rel="stylesheet" type="text/css" href="[% opacstylesheet %]" />[% ELSE %]
 [% IF ( opaclayoutstylesheet ) %]<link rel="stylesheet" type="text/css" href="[% themelang %]/css/[% opaclayoutstylesheet %]" />[% ELSE %]<link rel="stylesheet" type="text/css" href="[% themelang %]/css/opac.css" />[% END %][% END %]
 [% IF ( opaccolorstylesheet ) %]
     <link rel="stylesheet" type="text/css" href="[% themelang %]/css/[% opac_css_override %]" />
 [% END %]
 <link rel="stylesheet" type="text/css" media="print" href="[% themelang %]/css/print.css" />
-<link rel="stylesheet" type="text/css" href="[% themelang %]/lib/jquery/plugins/ui.tabs.css" />
 [% IF ( OPACUserCSS ) %]<style type="text/css">[% OPACUserCSS %]</style>[% END %]
 <!-- yui js --> 
 <script type="text/javascript" src="[% yuipath %]/utilities/utilities.js"></script> 
 <script type="text/javascript" src="[% yuipath %]/container/container-min.js"></script> 
 <script type="text/javascript" src="[% yuipath %]/menu/menu-min.js"></script> 
 <script type="text/javascript" src="[% themelang %]/lib/jquery/jquery.js"></script>
-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/ui.tabs.js"></script>
+<script type="text/javascript" src="[% themelang %]/lib/jquery/jquery-ui.js"></script>
 <script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.hoverIntent.minified.js"></script>
 <script type="text/javascript" language="javascript" src="[% themelang %]/js/script.js"></script>
 [% IF ( OPACAmazonCoverImages ) %]
diff --git a/koha-tmpl/opac-tmpl/prog/en/lib/jquery/jquery-ui.css b/koha-tmpl/opac-tmpl/prog/en/lib/jquery/jquery-ui.css
new file mode 100644 (file)
index 0000000..e66faf0
--- /dev/null
@@ -0,0 +1,357 @@
+/*!
+ * jQuery UI CSS Framework 1.8.20
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
+.ui-helper-clearfix:after { clear: both; }
+.ui-helper-clearfix { zoom: 1; }
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*!
+ * jQuery UI CSS Framework 1.8.20
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!
+ * jQuery UI Autocomplete 1.8.20
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.20
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+    list-style:none;
+    padding: 2px;
+    margin: 0;
+    display:block;
+    float: left;
+}
+.ui-menu .ui-menu {
+    margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+    margin:0;
+    padding: 0;
+    zoom: 1;
+    float: left;
+    clear: left;
+    width: 100%;
+}
+.ui-menu .ui-menu-item a {
+    text-decoration:none;
+    display:block;
+    padding:.2em .4em;
+    line-height:1.5;
+    zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+    font-weight: normal;
+    margin: -1px;
+}
+/*!
+ * jQuery UI Tabs 1.8.20
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/koha-tmpl/opac-tmpl/prog/en/lib/jquery/jquery-ui.js b/koha-tmpl/opac-tmpl/prog/en/lib/jquery/jquery-ui.js
new file mode 100644 (file)
index 0000000..789014a
--- /dev/null
@@ -0,0 +1,25 @@
+/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.core.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.20",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;return b[d]>0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}})})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.widget.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){return c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}}),d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;return e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e,f&&e.charAt(0)==="_"?h:(f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b)return h=f,!1}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))}),h)}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}return this._setOptions(e),this},_setOptions:function(b){var c=this;return a.each(b,function(a,b){c._setOption(a,b)}),this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.mouse.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent"))return a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(b){if(c)return;this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted)return b.preventDefault(),!0}return!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0,!0},_mouseMove:function(b){return!a.browser.msie||document.documentMode>=9||!!b.button?this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted):this._mouseUp(b)},_mouseUp:function(b){return a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.position.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;return i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1],this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]===e)return;var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0},top:function(b,c){if(c.at[1]===e)return;var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];return!c||!c.ownerDocument?null:b?this.each(function(){a.offset.setOffset(this,b)}):h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.autocomplete.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.isMultiLine=this.element.is("textarea"),this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(b.options.disabled||b.element.propAttr("readOnly"))return;d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._keyEvent("previous",c);break;case e.DOWN:b._keyEvent("next",c);break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){if(b.options.disabled)return;b.selectedItem=null,b.previous=b.element.val()}).bind("blur.autocomplete",function(a){if(b.options.disabled)return;clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150)}),this._initSource(),this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,c,d;a.isArray(this.options.source)?(c=this.options.source,this.source=function(b,d){d(a.ui.autocomplete.filter(c,b.term))}):typeof this.options.source=="string"?(d=this.options.source,this.source=function(c,e){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:d,data:c,dataType:"json",success:function(a,b){e(a)},error:function(){e([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)===!1)return;return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this._response())},_response:function(){var a=this,b=++c;return function(d){b===c&&a.__response(d),a.pending--,a.pending||a.element.removeClass("ui-autocomplete-loading")}},__response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close()},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){return b.length&&b[0].label&&b[0].value?b:a.map(b,function(b){return typeof b=="string"?{label:b,value:b}:a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible")){this.search(null,b);return}if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)},widget:function(){return this.menu.element},_keyEvent:function(a,b){if(!this.isMultiLine||this.menu.element.is(":visible"))this._move(a,b),b.preventDefault()}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(!a(c.target).closest(".ui-menu-item a").length)return;c.preventDefault(),b.select(c)}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){if(!this.active)return;this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active){this.activate(c,this.element.children(b));return}var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:first")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery);;/*! jQuery UI - v1.8.20 - 2012-04-30
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.tabs.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+(function(a,b){function e(){return++c}function f(){return++d}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash)return e.selected=a,!1}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1)return this.blur(),!1;e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected"))return e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur(),!1;if(!f.length)return e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this)),this.blur(),!1}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){return typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$='"+a+"']"))),a},destroy:function(){var b=this.options;return this.abort(),this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.anchors.each(function(){var b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}),b.cookie&&this._cookie(null,b.cookie),this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);return j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e])),this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();return d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1<this.anchors.length?1:-1)),c.disabled=a.map(a.grep(c.disabled,function(a,c){return a!=b}),function(a,c){return a>=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0])),this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)==-1)return;return this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b])),this},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;return a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a]))),this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;return this.anchors.eq(a).trigger(this.options.event+".tabs"),this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}return this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs"),this},abort:function(){return this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup(),this},url:function(a,b){return this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b),this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.20"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a<c.anchors.length?a:0)},a),b&&b.stopPropagation()}),f=c._unrotate||(c._unrotate=b?function(a){e()}:function(a){a.clientX&&c.rotate(null)});return a?(this.element.bind("tabsshow",e),this.anchors.bind(d.event+".tabs",f),e()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",e),this.anchors.unbind(d.event+".tabs",f),delete this._rotate,delete this._unrotate),this}})})(jQuery);;
\ No newline at end of file
diff --git a/koha-tmpl/opac-tmpl/prog/en/lib/jquery/plugins/ui.tabs.css b/koha-tmpl/opac-tmpl/prog/en/lib/jquery/plugins/ui.tabs.css
deleted file mode 100644 (file)
index 34bd5fb..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Caution! Ensure accessibility in print and other media types... */
-@media projection, screen { /* Use class for showing/hiding tab content, so that visibility can be better controlled in different media types... */
-    .ui-tabs-hide {
-        display: none;
-    }
-}
-
-/* Hide useless elements in print layouts... */
-@media print {
-    .ui-tabs-nav {
-        display: none;
-    }
-}
-
-/* Skin */
-.ui-tabs-nav, .ui-tabs-panel {
-}
-.ui-tabs-nav {
-    list-style: none;
-}
-.ui-tabs-nav:after { /* clearing without presentational markup, IE gets extra treatment */
-    display: block;
-    clear: both;
-    content: " ";
-}
-.ui-tabs-nav li {
-    float: left;
-        list-style-type : none;
-}
-.ui-tabs-nav a, .ui-tabs-nav a span {
-    float: left; /* fixes dir=ltr problem and other quirks IE */
- }
-.ui-tabs-nav a {
-    margin: 0; /* position: relative makes opacity fail for disabled tab in IE */
-    white-space: nowrap; /* @ IE 6 */
-    outline: 0; /* @ Firefox, prevent dotted border after click */    
-}
-.ui-tabs-nav a:link, .ui-tabs-nav a:visited {
-}
-.ui-tabs-nav .ui-tabs-selected a {
- }
-.ui-tabs-nav a span {
-    padding-top: 1px;
-    padding-right: 0;
-    height: 20px;
-    line-height: 20px;
-}
-.ui-tabs-nav .ui-tabs-selected a span {
-    padding-top: 0;
-    height: 20px;
-    line-height: 20px;
-}
-.ui-tabs-nav .ui-tabs-selected a:link, .ui-tabs-nav .ui-tabs-selected a:visited,
-.ui-tabs-nav .ui-tabs-disabled a:link, .ui-tabs-nav .ui-tabs-disabled a:visited { /* @ Opera, use pseudo classes otherwise it confuses cursor... */
-    cursor: text;
-}
-.ui-tabs-nav a:hover, .ui-tabs-nav a:focus, .ui-tabs-nav a:active,
-.ui-tabs-nav .ui-tabs-unselect a:hover, .ui-tabs-nav .ui-tabs-unselect a:focus, .ui-tabs-nav .ui-tabs-unselect a:active { /* @ Opera, we need to be explicit again here now... */
-    cursor: pointer;
-}
-.ui-tabs-disabled {
-    opacity: .4;
-    filter: alpha(opacity=40);
-}
-.ui-tabs-nav .ui-tabs-disabled a:link, .ui-tabs-nav .ui-tabs-disabled a:visited {
-    color: #000;
-}
-.ui-tabs-panel {
-    border: 1px solid #E8E8E8;
-       padding : 1em;
-    background: #fff; /* declare background color for container to avoid distorted fonts in IE while fading */
-}
-
-/* Additional IE specific bug fixes... */
-* html .ui-tabs-nav { /* auto clear @ IE 6 & IE 7 Quirks Mode */
-    display: inline-block;
-}
-*:first-child+html .ui-tabs-nav  { /* auto clear @ IE 7 Standards Mode - do not group selectors, otherwise IE 6 will ignore complete rule (because of the unknown + combinator)... */
-    display: inline-block;
-}
\ No newline at end of file
diff --git a/koha-tmpl/opac-tmpl/prog/en/lib/jquery/plugins/ui.tabs.js b/koha-tmpl/opac-tmpl/prog/en/lib/jquery/plugins/ui.tabs.js
deleted file mode 100644 (file)
index 672bfb2..0000000
+++ /dev/null
@@ -1,517 +0,0 @@
-/*
- * Tabs 3 - New Wave Tabs
- *
- * Copyright (c) 2007 Klaus Hartl (stilbuero.de)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI/Tabs
- */
-
-(function($) {
-
-    // if the UI scope is not availalable, add it
-    $.ui = $.ui || {};
-
-    // tabs API methods
-    $.fn.tabs = function() {
-        var method = typeof arguments[0] == 'string' && arguments[0];
-        var args = method && Array.prototype.slice.call(arguments, 1) || arguments;
-
-        return this.each(function() {
-            if (method) {
-                var tabs = $.data(this, 'ui-tabs');
-                tabs[method].apply(tabs, args);
-            } else
-                new $.ui.tabs(this, args[0] || {});
-        });
-    };
-
-    // tabs class
-    $.ui.tabs = function(el, options) {
-        var self = this;
-
-        this.element = el;
-
-        this.options = $.extend({
-
-            // basic setup
-            selected: 0,
-            unselect: options.selected === null,
-            event: 'click',
-            disabled: [],
-            cookie: null, // pass options object as expected by cookie plugin: { expires: 7, path: '/', domain: 'jquery.com', secure: true }
-            // TODO bookmarkable: $.ajaxHistory ? true : false,
-
-            // Ajax
-            spinner: 'Loading&#8230;',
-            cache: false,
-            idPrefix: 'ui-tabs-',
-            ajaxOptions: {},
-
-            // animations
-            fx: null, /* e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } */
-
-            // templates
-            tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>',
-            panelTemplate: '<div></div>',
-
-            // CSS classes
-            navClass: 'ui-tabs-nav',
-            selectedClass: 'ui-tabs-selected',
-            unselectClass: 'ui-tabs-unselect',
-            disabledClass: 'ui-tabs-disabled',
-            panelClass: 'ui-tabs-panel',
-            hideClass: 'ui-tabs-hide',
-            loadingClass: 'ui-tabs-loading'
-
-        }, options);
-
-        this.options.event += '.ui-tabs'; // namespace event
-        this.options.cookie = $.cookie && $.cookie.constructor == Function && this.options.cookie;
-
-        $(el).bind('setData.ui-tabs', function(event, key, value) {
-            self.options[key] = value;
-            this.tabify();
-        }).bind('getData.ui-tabs', function(event, key) {
-            return self.options[key];
-        });
-
-        // save instance for later
-        $.data(el, 'ui-tabs', this);
-
-        // create tabs
-        this.tabify(true);
-    };
-
-    // instance methods
-    $.extend($.ui.tabs.prototype, {
-        tabId: function(a) {
-            return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '')
-                || this.options.idPrefix + $.data(a);
-        },
-        ui: function(tab, panel) {
-            return {
-                instance: this,
-                options: this.options,
-                tab: tab,
-                panel: panel
-            };
-        },
-        tabify: function(init) {
-
-            this.$lis = $('li:has(a[href])', this.element);
-            this.$tabs = this.$lis.map(function() { return $('a', this)[0]; });
-            this.$panels = $([]);
-
-            var self = this, o = this.options;
-
-            this.$tabs.each(function(i, a) {
-                // inline tab
-                if (a.hash && a.hash.replace('#', '')) // Safari 2 reports '#' for an empty hash
-                    self.$panels = self.$panels.add(a.hash);
-                // remote tab
-                else if ($(a).attr('href') != '#') { // prevent loading the page itself if href is just "#"
-                    $.data(a, 'href.ui-tabs', a.href); // required for restore on destroy
-                    $.data(a, 'load.ui-tabs', a.href); // mutable
-                    var id = self.tabId(a);
-                    a.href = '#' + id;
-                    var $panel = $('#' + id);
-                    if (!$panel.length) {
-                        $panel = $(o.panelTemplate).attr('id', id).addClass(o.panelClass)
-                            .insertAfter( self.$panels[i - 1] || self.element );
-                        $panel.data('destroy.ui-tabs', true);
-                    }
-                    self.$panels = self.$panels.add( $panel );
-                }
-                // invalid tab href
-                else
-                    o.disabled.push(i + 1);
-            });
-
-            if (init) {
-
-                // attach necessary classes for styling if not present
-                $(this.element).hasClass(o.navClass) || $(this.element).addClass(o.navClass);
-                this.$panels.each(function() {
-                    var $this = $(this);
-                    $this.hasClass(o.panelClass) || $this.addClass(o.panelClass);
-                });
-
-                // disabled tabs
-                for (var i = 0, index; index = o.disabled[i]; i++)
-                    this.disable(index);
-
-                // Try to retrieve selected tab:
-                // 1. from fragment identifier in url if present
-                // 2. from cookie
-                // 3. from selected class attribute on <li>
-                // 4. otherwise use given "selected" option
-                // 5. check if tab is disabled
-                this.$tabs.each(function(i, a) {
-                    if (location.hash) {
-                        if (a.hash == location.hash) {
-                            o.selected = i;
-                            // prevent page scroll to fragment
-                            //if (($.browser.msie || $.browser.opera) && !o.remote) {
-                            if ($.browser.msie || $.browser.opera) {
-                                var $toShow = $(location.hash), toShowId = $toShow.attr('id');
-                                $toShow.attr('id', '');
-                                setTimeout(function() {
-                                    $toShow.attr('id', toShowId); // restore id
-                                }, 500);
-                            }
-                            scrollTo(0, 0);
-                            return false; // break
-                        }
-                    } else if (o.cookie) {
-                        var index = parseInt($.cookie('ui-tabs' + $.data(self.element)),10);
-                        if (index && self.$tabs[index]) {
-                            o.selected = index;
-                            return false; // break
-                        }
-                    } else if ( self.$lis.eq(i).hasClass(o.selectedClass) ) {
-                        o.selected = i;
-                        return false; // break
-                    }
-                });
-                var n = this.$lis.length;
-                while (this.$lis.eq(o.selected).hasClass(o.disabledClass) && n) {
-                    o.selected = ++o.selected < this.$lis.length ? o.selected : 0;
-                    n--;
-                }
-                if (!n) // all tabs disabled, set option unselect to true
-                    o.unselect = true;
-
-                // highlight selected tab
-                this.$panels.addClass(o.hideClass);
-                this.$lis.removeClass(o.selectedClass);
-                if (!o.unselect) {
-                    this.$panels.eq(o.selected).show().removeClass(o.hideClass); // use show and remove class to show in any case no matter how it has been hidden before
-                    this.$lis.eq(o.selected).addClass(o.selectedClass);
-                }
-
-                // load if remote tab
-                var href = !o.unselect && $.data(this.$tabs[o.selected], 'load.ui-tabs');
-                if (href)
-                    this.load(o.selected, href);
-
-                // disable click if event is configured to something else
-                if (!(/^click/).test(o.event))
-                    this.$tabs.bind('click', function(e) { e.preventDefault(); });
-
-            }
-
-            var hideFx, showFx, baseFx = { 'min-width': 0, duration: 1 }, baseDuration = 'normal';
-            if (o.fx && o.fx.constructor == Array)
-                hideFx = o.fx[0] || baseFx, showFx = o.fx[1] || baseFx;
-            else
-                hideFx = showFx = o.fx || baseFx;
-
-            // reset some styles to maintain print style sheets etc.
-            var resetCSS = { display: '', overflow: '', height: '' };
-            if (!$.browser.msie) // not in IE to prevent ClearType font issue
-                resetCSS.opacity = '';
-
-            // Hide a tab, animation prevents browser scrolling to fragment,
-            // $show is optional.
-            function hideTab(clicked, $hide, $show) {
-                $hide.animate(hideFx, hideFx.duration || baseDuration, function() { //
-                    $hide.addClass(o.hideClass).css(resetCSS); // maintain flexible height and accessibility in print etc.
-                    if ($.browser.msie && hideFx.opacity)
-                        $hide[0].style.filter = '';
-                    if ($show)
-                        showTab(clicked, $show, $hide);
-                });
-            }
-
-            // Show a tab, animation prevents browser scrolling to fragment,
-            // $hide is optional.
-            function showTab(clicked, $show, $hide) {
-                if (showFx === baseFx)
-                    $show.css('display', 'block'); // prevent occasionally occuring flicker in Firefox cause by gap between showing and hiding the tab panels
-                $show.animate(showFx, showFx.duration || baseDuration, function() {
-                    $show.removeClass(o.hideClass).css(resetCSS); // maintain flexible height and accessibility in print etc.
-                    if ($.browser.msie && showFx.opacity)
-                        $show[0].style.filter = '';
-
-                    // callback
-                    $(self.element).triggerHandler("show.ui-tabs", [self.ui(clicked, $show[0])]);
-
-                });
-            }
-
-            // switch a tab
-            function switchTab(clicked, $li, $hide, $show) {
-                /*if (o.bookmarkable && trueClick) { // add to history only if true click occured, not a triggered click
-                    $.ajaxHistory.update(clicked.hash);
-                }*/
-                $li.addClass(o.selectedClass)
-                    .siblings().removeClass(o.selectedClass);
-                hideTab(clicked, $hide, $show);
-            }
-
-            // attach tab event handler, unbind to avoid duplicates from former tabifying...
-            this.$tabs.unbind(o.event).bind(o.event, function() {
-
-                //var trueClick = e.clientX; // add to history only if true click occured, not a triggered click
-                var $li = $(this).parents('li:eq(0)'),
-                    $hide = self.$panels.filter(':visible'),
-                    $show = $(this.hash);
-
-                // If tab is already selected and not unselectable or tab disabled or click callback returns false stop here.
-                // Check if click handler returns false last so that it is not executed for a disabled tab!
-                if (($li.hasClass(o.selectedClass) && !o.unselect) || $li.hasClass(o.disabledClass)
-                    || $(self.element).triggerHandler("select.ui-tabs", [self.ui(this, $show[0])]) === false) {
-                    this.blur();
-                    return false;
-                }
-
-                self.options.selected = self.$tabs.index(this);
-
-                // if tab may be closed
-                if (o.unselect) {
-                    if ($li.hasClass(o.selectedClass)) {
-                        self.options.selected = null;
-                        $li.removeClass(o.selectedClass);
-                        self.$panels.stop();
-                        hideTab(this, $hide);
-                        this.blur();
-                        return false;
-                    } else if (!$hide.length) {
-                        self.$panels.stop();
-                        var a = this;
-                        self.load(self.$tabs.index(this), function() {
-                            $li.addClass(o.selectedClass).addClass(o.unselectClass);
-                            showTab(a, $show);
-                        });
-                        this.blur();
-                        return false;
-                    }
-                }
-
-                if (o.cookie)
-                    $.cookie('ui-tabs' + $.data(self.element), self.options.selected, o.cookie);
-
-                // stop possibly running animations
-                self.$panels.stop();
-
-                // show new tab
-                if ($show.length) {
-
-                    // prevent scrollbar scrolling to 0 and than back in IE7, happens only if bookmarking/history is enabled
-                    /*if ($.browser.msie && o.bookmarkable) {
-                        var showId = this.hash.replace('#', '');
-                        $show.attr('id', '');
-                        setTimeout(function() {
-                            $show.attr('id', showId); // restore id
-                        }, 0);
-                    }*/
-
-                    var a = this;
-                    self.load(self.$tabs.index(this), function() {
-                        switchTab(a, $li, $hide, $show);
-                    });
-
-                    // Set scrollbar to saved position - need to use timeout with 0 to prevent browser scroll to target of hash
-                    /*var scrollX = window.pageXOffset || document.documentElement && document.documentElement.scrollLeft || document.body.scrollLeft || 0;
-                    var scrollY = window.pageYOffset || document.documentElement && document.documentElement.scrollTop || document.body.scrollTop || 0;
-                    setTimeout(function() {
-                        scrollTo(scrollX, scrollY);
-                    }, 0);*/
-
-                } else
-                    throw 'jQuery UI Tabs: Mismatching fragment identifier.';
-
-                // Prevent IE from keeping other link focussed when using the back button
-                // and remove dotted border from clicked link. This is controlled in modern
-                // browsers via CSS, also blur removes focus from address bar in Firefox
-                // which can become a usability and annoying problem with tabsRotate.
-                if ($.browser.msie)
-                    this.blur();
-
-                //return o.bookmarkable && !!trueClick; // convert trueClick == undefined to Boolean required in IE
-                return false;
-
-            });
-
-        },
-        add: function(url, label, index) {
-            if (url && label) {
-                index = index || this.$tabs.length; // append by default
-
-                var o = this.options;
-                var $li = $(o.tabTemplate.replace(/#\{href\}/, url).replace(/#\{label\}/, label));
-                $li.data('destroy.ui-tabs', true);
-
-                var id = url.indexOf('#') == 0 ? url.replace('#', '') : this.tabId( $('a:first-child', $li)[0] );
-
-                // try to find an existing element before creating a new one
-                var $panel = $('#' + id);
-                if (!$panel.length) {
-                    $panel = $(o.panelTemplate).attr('id', id)
-                        .addClass(o.panelClass).addClass(o.hideClass);
-                    $panel.data('destroy.ui-tabs', true);
-                }
-                if (index >= this.$lis.length) {
-                    $li.appendTo(this.element);
-                    $panel.appendTo(this.element.parentNode);
-                } else {
-                    $li.insertBefore(this.$lis[index]);
-                    $panel.insertBefore(this.$panels[index]);
-                }
-
-                this.tabify();
-
-                if (this.$tabs.length == 1) {
-                     $li.addClass(o.selectedClass);
-                     $panel.removeClass(o.hideClass);
-                     var href = $.data(this.$tabs[0], 'load.ui-tabs');
-                     if (href)
-                         this.load(index, href);
-                }
-
-                // callback
-                $(this.element).triggerHandler("add.ui-tabs",
-                    [this.ui(this.$tabs[index], this.$panels[index])]
-                );
-
-            } else
-                throw 'jQuery UI Tabs: Not enough arguments to add tab.';
-        },
-        remove: function(index) {
-            if (index && index.constructor == Number) {
-                var o = this.options, $li = this.$lis.eq(index).remove(),
-                    $panel = this.$panels.eq(index).remove();
-
-                // If selected tab was removed focus tab to the right or
-                // tab to the left if last tab was removed.
-                if ($li.hasClass(o.selectedClass) && this.$tabs.length > 1)
-                    this.click(index + (index < this.$tabs.length ? 1 : -1));
-                this.tabify();
-
-                // callback
-                $(this.element).triggerHandler("remove.ui-tabs",
-                    [this.ui($li.find('a')[0], $panel[0])]
-                );
-
-            }
-        },
-        enable: function(index) {
-            var self = this, o = this.options, $li = this.$lis.eq(index);
-            $li.removeClass(o.disabledClass);
-            if ($.browser.safari) { // fix disappearing tab (that used opacity indicating disabling) after enabling in Safari 2...
-                $li.css('display', 'inline-block');
-                setTimeout(function() {
-                    $li.css('display', 'block');
-                }, 0);
-            }
-
-            o.disabled = $.map(this.$lis.filter('.' + o.disabledClass),
-                function(n, i) { return self.$lis.index(n); } );
-
-            // callback
-            $(this.element).triggerHandler("enable.ui-tabs",
-                [this.ui(this.$tabs[index], this.$panels[index])]
-            );
-
-        },
-        disable: function(index) {
-            var self = this, o = this.options;
-            this.$lis.eq(index).addClass(o.disabledClass);
-
-            o.disabled = $.map(this.$lis.filter('.' + o.disabledClass),
-                function(n, i) { return self.$lis.index(n); } );
-
-            // callback
-            $(this.element).triggerHandler("disable.ui-tabs",
-                [this.ui(this.$tabs[index], this.$panels[index])]
-            );
-
-        },
-        select: function(index) {
-            if (typeof index == 'string')
-                index = this.$tabs.index( this.$tabs.filter('[href$=' + index + ']')[0] );
-            this.$tabs.eq(index).trigger(this.options.event);
-        },
-        load: function(index, callback) { // callback is for internal usage only
-            var self = this, o = this.options,
-                $a = this.$tabs.eq(index), a = $a[0];
-
-            var url = $a.data('load.ui-tabs');
-
-            // no remote - just finish with callback
-            if (!url) {
-                typeof callback == 'function' && callback();
-                return;
-            }
-
-            // load remote from here on
-            if (o.spinner) {
-                var $span = $('span', a), label = $span.html();
-                $span.html('<em>' + o.spinner + '</em>');
-            }
-            var finish = function() {
-                self.$tabs.filter('.' + o.loadingClass).each(function() {
-                    $(this).removeClass(o.loadingClass);
-                    if (o.spinner)
-                        $('span', this).html(label);
-                });
-                self.xhr = null;
-            };
-            var ajaxOptions = $.extend({}, o.ajaxOptions, {
-                url: url,
-                success: function(r, s) {
-                    $(a.hash).html(r);
-                    finish();
-                    // This callback is required because the switch has to take
-                    // place after loading has completed.
-                    typeof callback == 'function' && callback();
-
-                    if (o.cache)
-                        $.removeData(a, 'load.ui-tabs'); // if loaded once do not load them again
-
-                    // callback
-                    $(self.element).triggerHandler("load.ui-tabs",
-                        [self.ui(self.$tabs[index], self.$panels[index])]
-                    );
-
-                    o.ajaxOptions.success && o.ajaxOptions.success(r, s);
-                }
-            });
-            if (this.xhr) {
-                // terminate pending requests from other tabs and restore tab label
-                this.xhr.abort();
-                finish();
-            }
-            $a.addClass(o.loadingClass);
-            setTimeout(function() { // timeout is again required in IE, "wait" for id being restored
-                self.xhr = $.ajax(ajaxOptions);
-            }, 0);
-
-        },
-        url: function(index, url) {
-            this.$tabs.eq(index).data('load.ui-tabs', url);
-        },
-        destroy: function() {
-            var o = this.options;
-            $(this.element).unbind('.ui-tabs')
-                .removeClass(o.navClass).removeData('ui-tabs');
-            this.$tabs.each(function() {
-                var href = $.data(this, 'href.ui-tabs');
-                if (href)
-                    this.href = href;
-                $(this).unbind('.ui-tabs')
-                    .removeData('href.ui-tabs').removeData('load.ui-tabs');
-            });
-            this.$lis.add(this.$panels).each(function() {
-                if ($.data(this, 'destroy.ui-tabs'))
-                    $(this).remove();
-                else
-                    $(this).removeClass([o.selectedClass, o.unselectClass,
-                        o.disabledClass, o.panelClass, o.hideClass].join(' '));
-            });
-        }
-    });
-
-})(jQuery);
index 35f1895..5be6ac3 100644 (file)
@@ -2,9 +2,6 @@
 [% INCLUDE 'doc-head-close.inc' %]
 <script type="text/JavaScript" language="JavaScript">
 //<![CDATA[
-       $(document).ready(function() {
-               $('#bibliodescriptions > ul').tabs();
-       }); 
     YAHOO.util.Event.onContentReady("furtherm", function () {
         $("#furtherm").css("display","block").css("visibility","hidden");
         $("#furthersearches").parent().show();
index 4698324..6ed2b86 100644 (file)
@@ -4,7 +4,7 @@
 [% INCLUDE 'doc-head-close.inc' %]
 <script type="text/javascript" language="javascript">//<![CDATA[
             $(document).ready(function() {
-            $('#advsearches > ul').tabs();
+            $('#advsearches').tabs();
 });
     //]]>
 </script>
       <ul>
       [% FOREACH advsearchloo IN advancedsearchesloop %]
         <li id="advsearch-tab-[% advsearchloo.advanced_search_type %]">
-           <a href="/cgi-bin/koha/opac-search.pl#advsearch-[% advsearchloo.advanced_search_type %]">
+           <a href="#advsearch-[% advsearchloo.advanced_search_type %]">
            [% IF ( advsearchloo.advanced_search_type == 'itemtypes' ) %]Item type
            [% ELSIF ( advsearchloo.advanced_search_type == 'ccode' ) %]Collection
            [% ELSIF ( advsearchloo.advanced_search_type == 'loc' ) %]Shelving location
index c4d40ed..2ea6d94 100644 (file)
@@ -308,13 +308,14 @@ function enableCheckboxActions(){
         </tr>[% END %]
 
         <tr>
-            <th scope="row">Location(s)</th>
+            <th scope="row">Location(s) (Status)</th>
             <td>[% IF ( BIBLIO_RESULT.ITEM_RESULTS ) %]<ul>[% FOREACH ITEM_RESULT IN BIBLIO_RESULT.ITEM_RESULTS %]
                             <li>
                                 <strong>[% ITEM_RESULT.homebranch %]</strong>[% IF ( ITEM_RESULT.location_opac ) %], [% ITEM_RESULT.location_opac %][% END %]
                                 [% IF ( ITEM_RESULT.itemcallnumber ) %]
                                     ([% ITEM_RESULT.itemcallnumber %])
                                 [% END %]
+                                ([% INCLUDE 'item-status.inc' item = ITEM_RESULT %])
                             </li>
                             [% END %]</ul>[% ELSE %]This record has no items.[% END %]</td>
         </tr>
@@ -353,7 +354,7 @@ function enableCheckboxActions(){
            <th>Title</th>
            <th>Author</th>
            <th>Year</th>
-           <th>Location</th>
+        <th>Location (Status)</th>
         </tr></thead>
 
         [% FOREACH BIBLIO_RESULT IN BIBLIO_RESULTS %]
@@ -388,6 +389,7 @@ function enableCheckboxActions(){
                         [% IF ( ITEM_RESULT.itemcallnumber ) %]
                             ([% ITEM_RESULT.itemcallnumber %])
                         [% END %]
+                        ([% INCLUDE 'item-status.inc' item = ITEM_RESULT %])
                     </li>
                     [% END %]</ul>[% ELSE %]This record has no items.[% END %]</td>
             </tr>
index 3c45aff..776f82f 100644 (file)
@@ -27,7 +27,7 @@
 
 
      $(document).ready(function() { 
-        $('#bibliodescriptions > ul').tabs();
+        $('#bibliodescriptions').tabs();
 [% IF ( opacuserlogin ) %][% IF ( loggedinusername ) %][% IF ( TagsEnabled ) %]$("#tagform").hide();
         $("#addtagl").show();
         $("#addtagl a").click(function(){
@@ -607,18 +607,18 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
 
 <ul>   
 [% IF ( defaulttab == 'holdings' ) %]<li id="tab_holdings" class="ui-tabs-selected">[% ELSE %]<li id="tab_holdings">[% END %]
-    <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#holdings">Holdings ( [% count %] )</a>
+    <a href="#holdings">Holdings ( [% count %] )</a>
 </li>
-<li id="tab_descriptions"> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#descriptions">Title notes</a></li>
+<li id="tab_descriptions"> <a href="#descriptions">Title notes</a></li>
 [% IF ( SYNDETICS_TOC ) %]
-    <li id="tab_toc"> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#toc">TOC</a></li>
+    <li id="tab_toc"> <a href="#toc">TOC</a></li>
 [% END %]
 [% IF ( SyndeticsEnabled ) %]
     [% IF ( SyndeticsExcerpt ) %][% IF ( SYNDETICS_EXCERPT ) %]
-        <li id="tab_excerpt"> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#excerpt">Excerpt</a></li>
+        <li id="tab_excerpt"> <a href="#excerpt">Excerpt</a></li>
     [% END %][% END %]
     [% IF ( SyndeticsReviews ) %][% IF ( SYNDETICS_REVIEWS ) %]
-        <li id="tab_reviews"> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#reviews">Reviews</a></li>
+        <li id="tab_reviews"> <a href="#reviews">Reviews</a></li>
         <li id="tab_LTFLreviews">
             [% IF ( using_https ) %]
                 <script src="https://www.librarything.com/forlibraries/widget.js?id=[% LibraryThingForLibrariesID %]" type="text/javascript"></script>
@@ -630,53 +630,53 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
         </li>
     [% END %][% END %]
     [% IF ( SyndeticsAuthorNotes ) %][% IF ( SYNDETICS_ANOTES ) %]
-        <li id="tab_anotes"> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#anotes">About the author</a></li>
+        <li id="tab_anotes"> <a href="#anotes">About the author</a></li>
     [% END %][% END %]
 [% END %]
 [% IF ( LibraryThingForLibrariesID ) %] 
 [% IF ( LibraryThingForLibrariesTabbedView ) %]
-    <li id="tab_LFTLSimilarItems"> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#LFTLSimilarItems">Similar items</a></li>
-    <li id="tab_LTFLTagBrowse"> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#LTFLTagBrowse">Tag browser</a></li>
+    <li id="tab_LFTLSimilarItems"> <a href="#LFTLSimilarItems">Similar items</a></li>
+    <li id="tab_LTFLTagBrowse"> <a href="#LTFLTagBrowse">Tag browser</a></li>
 [% END %]
 [% END %]
 [% IF ( subscriptionsnumber ) %]
     [% IF ( defaulttab == 'subscriptions' ) %]<li id="tab_subscriptions" class="ui-tabs-selected">[% ELSE %]<li id="tab_subscriptions">[% END %]
-        <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#subscriptions">Subscriptions</a>
+        <a href="#subscriptions">Subscriptions</a>
     </li>
 [% END %]
 [% IF ( reviewson ) %]
-    <li id="tab_comments"><a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#comments">Comments ( [% IF reviews.defined %][% reviews.size %][% ELSE %]0[% END %] )</a></li>
+    <li id="tab_comments"><a href="#comments">Comments ( [% IF reviews.defined %][% reviews.size %][% ELSE %]0[% END %] )</a></li>
 [% END %]
 
 [% IF ( NovelistSelectProfile ) %] 
     [% IF ( NovelistSelectView == 'tab') %]
-        <li id="tab_NovelistSelect"> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#NovelistSelect">Novelist Select</a></li>
+        <li id="tab_NovelistSelect"> <a href="#NovelistSelect">Novelist Select</a></li>
     [% END %]
 [% END %]
 
 [% IF ( OPACAmazonEnabled ) %][% IF ( OPACAmazonSimilarItems ) %][% IF ( AMAZON_SIMILAR_PRODUCTS ) %]
-    <li id="tab_related"><a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#similars">Related</a></li>
+    <li id="tab_related"><a href="#similars">Related</a></li>
 [% END %][% END %][% END %]
 
 [% IF ( OPACFRBRizeEditions ) %][% IF ( XISBNS ) %]
-    <li id="tab_editions"><a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#editions">Editions</a></li>
+    <li id="tab_editions"><a href="#editions">Editions</a></li>
 [% END %][% END %]
 
 [% IF ( OPACAmazonEnabled ) %][% IF ( OPACAmazonReviews ) %]
-    <li id="tab_amazonreviews"><a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#amazonreviews">Amazon reviews</a></li>
+    <li id="tab_amazonreviews"><a href="#amazonreviews">Amazon reviews</a></li>
 [% END %][% END %]
 [% IF ( Babeltheque ) %]
-    <li id="tab_babeltheque"><a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#babeltheque">Babelthèque</a></li>
+    <li id="tab_babeltheque"><a href="#babeltheque">Babelthèque</a></li>
 [% END %]
 
 [% IF ( serialcollection ) %]
     [% IF ( defaulttab == 'serialcollection' ) %]<li id="tab_serialcollection" class="ui-tabs-selected">[% ELSE %]<li id="tab_serialcollection">[% END %]
-        <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#serialcollection">Serial collection</a>
+        <a href="#serialcollection">Serial collection</a>
     </li>
 [% END %]
 
 [% IF ( OPACLocalCoverImages ) %][% IF ( localimages ) %]
-    <li id="tab_images"><a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber %]#images">Images</a></li>
+    <li id="tab_images"><a href="#images">Images</a></li>
 [% END %][% END %]
 </ul>
 
index cfa8e83..8cfd5eb 100644 (file)
@@ -36,7 +36,7 @@
   <div class="dialog message"><h3>Settings updated</h3></div>
   [% END %]
   <table style="margin-right:1em;">
-    <tr><th>&nbsp;</th><th>Days in advance</th>[% IF ( SMSSendDriver ) %]<th>SMS</th>[% END %]<th>Email</th><th>Digests only?</th><!-- <th>RSS</th> --><th>Do not notify</th></tr>
+    <tr><th>&nbsp;</th><th>Days in advance</th>[% IF ( SMSSendDriver ) %]<th>SMS</th>[% END %][% IF ( TalkingTechItivaPhone ) %]<th>Phone</th>[% END %]<th>Email</th><th>Digests only?</th><!-- <th>RSS</th> --><th>Do not notify</th></tr>
     [% FOREACH messaging_preference IN messaging_preferences %]
     <tr>
       <td>[% IF ( messaging_preference.Item_Due ) %]Item due
         </td>
         [% END %]
       [% ELSE %]
-        <td>-</td>
+        <td>--</td>
+      [% END %]
+        [% IF ( TalkingTechItivaPhone ) %]
+        <td>
+          [% IF ( messaging_preference.transports_phone ) %]
+          <input type="checkbox"
+                     id="phone[% messaging_preference.message_attribute_id %]"
+                     name="[% messaging_preference.message_attribute_id %]"
+                     value="phone" checked="checked" onclick = "document.opacmessaging.none[% messaging_preference.message_attribute_id %].checked=false;" />
+          [% ELSE %]
+          <input type="checkbox"
+                     id="phone[% messaging_preference.message_attribute_id %]"
+                     name="[% messaging_preference.message_attribute_id %]"
+                     value="phone" onclick = "document.opacmessaging.none[% messaging_preference.message_attribute_id %].checked=false;" />
+          [% END %]
+        </td>
       [% END %]
 
       [% IF ( messaging_preference.transport_email ) %]
index 5f3f39c..8786925 100644 (file)
@@ -29,7 +29,7 @@ $(document).ready(function(){
 [% UNLESS ( count ) %]
 You have never borrowed anything from this library.
 [% ELSE %]
-<div id="opac-user-readingrec" class="toptabs">
+<div id="opac-user-readingrec" class="statictabs">
 
 <div class="resultscontrol resort"> <form id="sortform" action="/cgi-bin/koha/opac-readingrecord.pl" method="get">
 [% UNLESS ( limit ) %]<input type="hidden" name="limit" value="full" />[% END %]
@@ -41,19 +41,19 @@ You have never borrowed anything from this library.
 
  </select> <input type="submit" value="Go" id="sortsubmit" class="submit clearfix" /></form></div>
 
-<ul class="ui-tabs-nav">
+<ul>
 
 [% IF ( showfulllink ) %]
 [% IF ( limit ) %]
-<li><a href="/cgi-bin/koha/opac-readingrecord.pl?limit=full[% IF ( orderbytitle ) %]&amp;order=title[% END %]">Show all items</a></li><li class="ui-tabs-selected"><a href="#readingrec">Showing last 50 items</a></li>
+<li><a href="/cgi-bin/koha/opac-readingrecord.pl?limit=full[% IF ( orderbytitle ) %]&amp;order=title[% END %]">Show all items</a></li><li class="active"><a href="#readingrec">Showing last 50 items</a></li>
 [% ELSE %]
-<li class="ui-tabs-selected"><a href="/cgi-bin/koha/opac-readingrecord.pl#readingrec">Showing all items</a></li><li><a href="/cgi-bin/koha/opac-readingrecord.pl?limit=50[% IF ( orderbytitle ) %]&amp;order=title[% END %]">Show last 50 items only</a></li>
+<li class="active"><a href="/cgi-bin/koha/opac-readingrecord.pl#readingrec">Showing all items</a></li><li><a href="/cgi-bin/koha/opac-readingrecord.pl?limit=50[% IF ( orderbytitle ) %]&amp;order=title[% END %]">Show last 50 items only</a></li>
 [% END %]
 [% ELSE %]
-<li class="ui-tabs-selected"><a href="/cgi-bin/koha/opac-readingrecord.pl#readingrec">Showing all items</a></li>
+<li class="active"><a href="/cgi-bin/koha/opac-readingrecord.pl#readingrec">Showing all items</a></li>
 [% END %]
 </ul>
-<div class="ui-tabs-panel"><table id="readingrec">
+<div class="tabs-container"><table id="readingrec">
 <tr>
 <th colspan="2">Title</th>
 <th>Item type</th>
index 7f64f17..1e7fbca 100644 (file)
@@ -2,41 +2,91 @@
 Your cart
 <END_SUBJECT>
 
-<HEADER>
-Hi,
+[% USE HtmlToText %]
+[% myhtml FILTER html2text(leftmargin => 0, rightmargin => 50) %]
+[% myhtmltext | html2text %]
 
-[% firstname %] [% surname %] sent you a cart from our online catalog.
+<HEADER>
+[% FILTER html2text %]
+<p>Hi,
+</p>
+<p>[% firstname %] [% surname %] sent you a cart from our online catalog.</p>
 
-Please note that the attached file is a MARC bibliographic records file
+<p>Please note that the attached file is a MARC bibliographic records file
 which can be imported into personal bibliographic software like EndNote,
-Reference Manager or ProCite.
+Reference Manager or ProCite.</p>
+[% END %]
 <END_HEADER>
 
 <MESSAGE>
----------------------------------------------
-[% IF ( comment ) %]
-[% comment %]
-[% END %]
-[% FOREACH BIBLIO_RESULT IN BIBLIO_RESULTS %][% BIBLIO_RESULT.title %][% IF ( BIBLIO_RESULT.subtitle ) %] [% BIBLIO_RESULT.subtitle %][% END %][% IF ( BIBLIO_RESULT.HASAUTHORS ) %]
-Author(s): [% IF ( BIBLIO_RESULT.author ) %][% BIBLIO_RESULT.author %][% END %][% IF ( BIBLIO_RESULT.MARCAUTHORS ) %][% IF ( BIBLIO_RESULT.author ) %]; [% END %][% FOREACH MARCAUTHOR IN BIBLIO_RESULT.MARCAUTHORS %][% FOREACH MARCAUTHOR_SUBFIELDS_LOO IN MARCAUTHOR.MARCAUTHOR_SUBFIELDS_LOOP %][% MARCAUTHOR_SUBFIELDS_LOO.separator %][% MARCAUTHOR_SUBFIELDS_LOO.value %][% END %][% UNLESS ( loop.last ) %]; [% ELSE %][% END %][% END %][% END %][% END %][% IF ( BIBLIO_RESULT.ISBN ) %]
-ISBN: [% BIBLIO_RESULT.ISBN %][% END %]
-[% IF ( BIBLIO_RESULT.publishercode ) %]Published by: [% BIBLIO_RESULT.publishercode %][% END %][% IF ( BIBLIO_RESULT.publicationyear ) %] in [% END %][% BIBLIO_RESULT.publicationyear %][% IF ( BIBLIO_RESULT.pages ) %], [% END %][% BIBLIO_RESULT.pages %][% IF ( BIBLIO_RESULT.size ) %], [% END %][% BIBLIO_RESULT.size %][% IF ( BIBLIO_RESULT.collection ) %]
-Collection: [% BIBLIO_RESULT.seriestitle %][% END %][% IF ( BIBLIO_RESULT.subject ) %]
-Subject: [% BIBLIO_RESULT.subject %][% END %][% IF ( BIBLIO_RESULT.copyrightdate ) %]
-Copyright year: [% BIBLIO_RESULT.copyrightdate %][% END %][% IF ( BIBLIO_RESULT.notes ) %]
-Notes : [% BIBLIO_RESULT.notes %][% END %][% IF ( BIBLIO_RESULT.unititle ) %]
-Unified title: [% BIBLIO_RESULT.unititle %][% END %][% IF ( BIBLIO_RESULT.serial ) %]
-Serial: [% BIBLIO_RESULT.serial %][% END %][% IF ( BIBLIO_RESULT.dewey ) %]
-Dewey: [% BIBLIO_RESULT.dewey %][% END %][% IF ( BIBLIO_RESULT.classification ) %]
-Classification: [% BIBLIO_RESULT.classification %][% END %][% IF ( BIBLIO_RESULT.lccn ) %]
-LCCN: [% BIBLIO_RESULT.lccn %][% END %][% IF ( BIBLIO_RESULT.url ) %]
-URL : [% BIBLIO_RESULT.url %][% END %]
-In the online catalog:
-[% OPACBaseURL %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% BIBLIO_RESULT.biblionumber |url %]
-Items : [% FOREACH ITEM_RESULT IN BIBLIO_RESULT.ITEM_RESULTS %]
-       [% ITEM_RESULT.branchname %] [% ITEM_RESULT.location %] [% IF ( ITEM_RESULT.itemcallnumber ) %]([% ITEM_RESULT.itemcallnumber %])[% END %] [% ITEM_RESULT.barcode %][% END %]
+[% FILTER html2text %]
+<hr/>
 
----------------------------------------------
+[% IF comment %]
+<p>[% comment %]</p>
+<hr/>
+[% END %]
 
+<ol>
+[% FOREACH BIBLIO_RESULT IN BIBLIO_RESULTS %]
+<li>
+<a href="[% OPACBaseURL %]/cgi-bin/koha/opac-detail.pl?biblionumber= [% BIBLIO_RESULT.biblionumber %]">[% BIBLIO_RESULT.title %]</a>
+[% IF ( BIBLIO_RESULT.subtitle ) %] [% BIBLIO_RESULT.subtitle %][% END %]
+<ul>
+[% IF ( BIBLIO_RESULT.HASAUTHORS ) %]
+<li>Author(s): [% IF ( BIBLIO_RESULT.author ) %][% BIBLIO_RESULT.author %][% END %][% IF ( BIBLIO_RESULT.MARCAUTHORS ) %][% IF ( BIBLIO_RESULT.author ) %]; [% END %][% FOREACH MARCAUTHOR IN BIBLIO_RESULT.MARCAUTHORS %][% FOREACH MARCAUTHOR_SUBFIELDS_LOO IN MARCAUTHOR.MARCAUTHOR_SUBFIELDS_LOOP %][% MARCAUTHOR_SUBFIELDS_LOO.separator %][% MARCAUTHOR_SUBFIELDS_LOO.value %][% END %][% UNLESS ( loop.last ) %]; [% ELSE %][% END %][% END %][% END %][% END %]</li>
+[% IF ( BIBLIO_RESULT.ISBN ) %]
+<li>ISBN: [% BIBLIO_RESULT.ISBN %]</li>
+[% END %]
+[% IF BIBLIO_RESULT.publishercode %]
+<li>
+Published by: [% BIBLIO_RESULT.publishercode %][% IF ( BIBLIO_RESULT.publicationyear ) %] in [% BIBLIO_RESULT.publicationyear %][% END %][% IF ( BIBLIO_RESULT.pages ) %], [% BIBLIO_RESULT.pages %][% END %][% IF BIBLIO_RESULT.size %], [% BIBLIO_RESULT.size %][% END %]
+</li>
+[% END %]
+[% IF BIBLIO_RESULT.collection %]
+<li>Collection: [% BIBLIO_RESULT.seriestitle %]</li>
+[% END %]
+[% IF ( BIBLIO_RESULT.subject ) %]
+<li>Subject: [% BIBLIO_RESULT.subject %]<li>
+[% END %]
+[% IF ( BIBLIO_RESULT.copyrightdate ) %]
+<li>Copyright year: [% BIBLIO_RESULT.copyrightdate %]</li>
+[% END %]
+[% IF ( BIBLIO_RESULT.notes ) %]
+<li>Notes : [% BIBLIO_RESULT.notes %]</li>
+[% END %]
+[% IF ( BIBLIO_RESULT.unititle ) %]
+<li>Unified title: [% BIBLIO_RESULT.unititle %]</li>
+[% END %]
+[% IF ( BIBLIO_RESULT.serial ) %]
+<li>Serial: [% BIBLIO_RESULT.serial %]</li>
+[% END %]
+[% IF ( BIBLIO_RESULT.dewey ) %]
+<li>Dewey: [% BIBLIO_RESULT.dewey %]</li>
+[% END %]
+[% IF ( BIBLIO_RESULT.classification ) %]
+<li>Classification: [% BIBLIO_RESULT.classification %]</li>
+[% END %]
+[% IF ( BIBLIO_RESULT.lccn ) %]
+<li>LCCN: [% BIBLIO_RESULT.lccn %]</li>
+[% END %]
+[% IF ( BIBLIO_RESULT.url ) %]
+<li>URL : [% BIBLIO_RESULT.url %]</li>
+[% END %]
+<li>Items:
+<ul>
+[% FOREACH ITEM_RESULT IN BIBLIO_RESULT.ITEM_RESULTS %]
+<li>
+[% ITEM_RESULT.branchname %]
+[% ITEM_RESULT.location %]
+[% IF ITEM_RESULT.itemcallnumber %]([% ITEM_RESULT.itemcallnumber %])[% END %]
+[% ITEM_RESULT.barcode %]
+</li>
+[% END %]
+</ul>
+</ul>
+</li>
+[% END %]
+</ol>
 [% END %]
 <END_MESSAGE>
index c05f6fc..ff30035 100644 (file)
@@ -52,7 +52,7 @@ function Dopop(link) {
                <caption>The [% limit %] most checked-out 
         [% IF ( itemtype ) %]
             [% itemtype %]
-        [% ELSE %] titles[% END %]
+        [% END %]
         [% IF ( branch ) %]
         at 
         [% branch %]
@@ -120,7 +120,7 @@ function Dopop(link) {
                         [% END %]
                     </select></li>
                        <li>
-            <label for="timeLimit">Acquired in the last:</label> <select name="timeLimit" id="timeLimit">
+            <label for="timeLimit">of the the last:</label> <select name="timeLimit" id="timeLimit">
                 [% IF ( timeLimit == 3 ) %]<option value="3" selected="selected">3 months</option>[% ELSE %]<option value="3">3 months</option>[% END %]
                  [% IF ( timeLimit == 6 ) %]<option value="6" selected="selected">6 months</option>[% ELSE %]<option value="6">6 months</option>[% END %]
                  [% IF ( timeLimit == 12 ) %]<option value="12" selected="selected">12 months</option>[% ELSE %]<option value="12">12 months</option>[% END %]
index 2b88c7a..0b8930f 100644 (file)
@@ -16,7 +16,7 @@ $.tablesorter.addParser({
     type: 'text' 
 });
             $(function() {
-            $('#opac-user-views > ul').tabs();
+            $('#opac-user-views').tabs();
             $.tablesorter.defaults.widgets = ['zebra'];
             [% IF ( dateformat == 'metric' ) %]$.tablesorter.defaults.dateFormat = ['uk'];[% END %]
                        $("#holdst").tablesorter({
@@ -110,15 +110,15 @@ $.tablesorter.addParser({
         
 <div id="opac-user-views" class="toptabs">
         <ul>
-            <li><a href="/cgi-bin/koha/opac-user.pl#opac-user-checkouts">Checked out</a></li>
-            [% IF ( overdues_count ) %]<li><a href="/cgi-bin/koha/opac-user.pl#opac-user-overdues">Overdue</a></li>[% END %]
+            <li><a href="#opac-user-checkouts">Checked out</a></li>
+            [% IF ( overdues_count ) %]<li><a href="#opac-user-overdues">Overdue</a></li>[% END %]
 [% IF ( OPACFinesTab ) %]
-            [% IF ( BORROWER_INF.amountoverfive ) %]<li><a href="/cgi-bin/koha/opac-user.pl#opac-user-fines">Fines</a></li>[% END %]
-            [% IF ( BORROWER_INF.amountoverzero ) %]<li><a href="/cgi-bin/koha/opac-user.pl#opac-user-fines">Fines</a></li>[% END %]
-            [% IF ( BORROWER_INF.amountlessthanzero ) %]<li><a href="/cgi-bin/koha/opac-user.pl#opac-user-fines">Credits</a></li>[% END %]
+            [% IF ( BORROWER_INF.amountoverfive ) %]<li><a href="#opac-user-fines">Fines</a></li>[% END %]
+            [% IF ( BORROWER_INF.amountoverzero ) %]<li><a href="#opac-user-fines">Fines</a></li>[% END %]
+            [% IF ( BORROWER_INF.amountlessthanzero ) %]<li><a href="#opac-user-fines">Credits</a></li>[% END %]
 [% END %]
-            [% IF ( waiting_count ) %][% IF ( BORROWER_INF.atdestination ) %]<li><a href="/cgi-bin/koha/opac-user.pl#opac-user-waiting">Waiting</a></li>[% END %][% END %]
-            [% IF ( reserves_count ) %]<li><a href="/cgi-bin/koha/opac-user.pl#opac-user-holds">Holds</a></li>[% END %]
+            [% IF ( waiting_count ) %][% IF ( BORROWER_INF.atdestination ) %]<li><a href="#opac-user-waiting">Waiting</a></li>[% END %][% END %]
+            [% IF ( reserves_count ) %]<li><a href="#opac-user-holds">Holds</a></li>[% END %]
         </ul>
 
     <div id="opac-user-checkouts">[% IF ( issues_count ) %]
@@ -420,6 +420,7 @@ $.tablesorter.addParser({
                        </tbody>
         </table>
 
+        [% IF SuspendHoldsOpac %]
        <div>
             <form action="/cgi-bin/koha/opac-modrequest-suspend.pl" method="post">
               <input type="submit" name="submit" class="icon delete cancel" value="Suspend all holds" onclick="return confirmDelete('Are you sure you want to suspend all holds?');" />
@@ -471,6 +472,7 @@ $.tablesorter.addParser({
               <input type="hidden" name="suspend" value="0" />
             </form>
        </div>
+        [% END %]
     </div>
     [% END %]
     </div><!-- /opac-user views -->
index 0366b05..6e5d80c 100644 (file)
@@ -16,7 +16,7 @@ the kohaversion is divided in 4 parts :
 use strict;
 
 sub kohaversion {
-    our $VERSION = '3.09.00.011';
+    our $VERSION = '3.09.00.014';
     # version needs to be set this way
     # so that it can be picked up by Makefile.PL
     # during install
index c8a6be1..58f5cf1 100755 (executable)
@@ -688,6 +688,7 @@ if (C4::Context->preference('EnhancedMessagingPreferences')) {
     }
     $template->param(SMSSendDriver => C4::Context->preference("SMSSendDriver"));
     $template->param(SMSnumber     => defined $data{'smsalertnumber'} ? $data{'smsalertnumber'} : $data{'mobile'});
+    $template->param(TalkingTechItivaPhone => C4::Context->preference("TalkingTechItivaPhoneNotification"));
 }
 
 $template->param( "showguarantor"  => ($category_type=~/A|I|S|X/) ? 0 : 1); # associate with step to know where you are
index cc9afb9..b4e80f7 100755 (executable)
@@ -398,6 +398,7 @@ if (C4::Context->preference('EnhancedMessagingPreferences')) {
     $template->param(messaging_form_inactive => 1);
     $template->param(SMSSendDriver => C4::Context->preference("SMSSendDriver"));
     $template->param(SMSnumber     => defined $data->{'smsalertnumber'} ? $data->{'smsalertnumber'} : $data->{'mobile'});
+    $template->param(TalkingTechItivaPhone => C4::Context->preference("TalkingTechItivaPhoneNotification"));
 }
 
 # in template <TMPL_IF name="I"> => instutitional (A for Adult, C for children) 
@@ -430,7 +431,9 @@ $template->param(
     samebranch     => $samebranch,
     quickslip            => $quickslip,
     activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''),
-    AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds') );
+    AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'),
+    SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'),
+);
 
 output_html_with_http_headers $input, $cookie, $template->output;
 
index de00846..e89b8ae 100755 (executable)
@@ -210,7 +210,7 @@ UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) {
         print $letter->{'content'};
       }
       else {
-        foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
+        foreach my $transport ( keys %{$borrower_preferences->{'transports'}} ) {
             C4::Letters::EnqueueLetter( { letter                 => $letter,
                                           borrowernumber         => $upcoming->{'borrowernumber'},
                                           from_address           => $from_address,
@@ -264,7 +264,7 @@ PATRON: while ( my ( $borrowernumber, $digest ) = each %$upcoming_digest ) {
       print $letter->{'content'};
     }
     else {
-      foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
+      foreach my $transport ( keys %{$borrower_preferences->{'transports'}} ) {
         C4::Letters::EnqueueLetter( { letter                 => $letter,
                                       borrowernumber         => $borrowernumber,
                                       from_address           => $from_address,
@@ -303,7 +303,7 @@ PATRON: while ( my ( $borrowernumber, $digest ) = each %$due_digest ) {
       print $letter->{'content'};
     }
     else {
-      foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
+      foreach my $transport ( keys %{$borrower_preferences->{'transports'}} ) {
         C4::Letters::EnqueueLetter( { letter                 => $letter,
                                       borrowernumber         => $borrowernumber,
                                       from_address           => $from_address,
diff --git a/misc/cronjobs/thirdparty/TalkingTech.README b/misc/cronjobs/thirdparty/TalkingTech.README
new file mode 100644 (file)
index 0000000..7120d85
--- /dev/null
@@ -0,0 +1,32 @@
+Installation and Setup instructions for Talking Tech I-tiva phone notification
+=============================
+
+Be sure you've run installer/data/mysql/atomicupdate/Bug-4246-Talking-Tech-itiva-phone-notifications.pl
+to install the required data pack (new syspref, notice placeholders and messaging transport preferences)
+
+To use, TalkingTechItivaPhoneNotification syspref must be turned on.
+
+If you wish to process PREOVERDUE or RESERVES messages, you'll need the EnhancedMessagingPreferences
+system preference turned on, and patrons to have filled in a perference for receiving these notices by phone.
+
+For OVERDUE messages, overdue notice triggers must be configured under Koha -> Tools -> Overdue Notice Triggers.
+Either branch-specific triggers or the default level triggers may be used (script will select whichever is appropriate).
+
+
+Sending Notices file to I-tiva:
+=============================
+
+1. Add the TalkingTech_itiva_outbound.pl script to your crontab
+2. Add an FTP/SFTP or other transport method to send the output file to the I-tiva server
+3. If you wish, archive the sent notices file in another directory after sending
+
+Run TalkingTech_itiva_outbound.pl --help for more information
+
+
+Receiving Results file from I-tiva:
+=============================
+1. Add an FTP/SFTP or other transport method to send the Results file to a known directory on your Koha server
+2. Add the TalkingTech_itiva_inbound.pl script to your crontab, aimed at that directory
+3. If you wish, archive the results file in another directory after processing
+
+Run TalkingTech_itiva_inbound.pl --help for more information
diff --git a/misc/cronjobs/thirdparty/TalkingTech_itiva_inbound.pl b/misc/cronjobs/thirdparty/TalkingTech_itiva_inbound.pl
new file mode 100755 (executable)
index 0000000..e3a7055
--- /dev/null
@@ -0,0 +1,137 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2011 ByWater Solutions
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha 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 Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use strict;
+use warnings;
+
+BEGIN {
+
+    # find Koha's Perl modules
+    # test carefully before changing this
+    use FindBin;
+    eval { require "$FindBin::Bin/../kohalib.pl" };
+}
+
+use Getopt::Long;
+use Pod::Usage;
+
+use C4::Context;
+
+sub usage {
+    pod2usage( -verbose => 2 );
+    exit;
+}
+
+die
+  "TalkingTechItivaPhoneNotification system preference not activated... dying\n"
+  unless ( C4::Context->preference("TalkingTechItivaPhoneNotification") );
+
+# Database handle
+my $dbh = C4::Context->dbh;
+
+# Benchmarking
+my $updated = 0;
+my $total   = 0;
+
+# Options
+my $verbose;
+my $help;
+my $infile;
+
+GetOptions(
+    'i|input:s' => \$infile,
+    'v'         => \$verbose,
+    'help|h'    => \$help,
+);
+
+die pod2usage() if $help;
+
+# initialize the input data, either file or query
+if ( defined $infile ) {
+    my $IN open( $IN, '<', $infile ) || die("Cannot open input file");
+    print "Opening $infile\n" if ( defined $verbose );
+
+    while (<$IN>) {
+
+        # data should take to form "<Transaction ID>","<SUCCESS or FAIL>"
+        s/["\n]//g;    # strip quotes and newlines: they're unnecessary
+        my @data   = split(/,/);
+        my $result = update_notice(@data);
+        $updated += $result;
+        $total++;
+    }
+}
+else {
+    die pod2usage( -verbose => 1 );
+}
+
+print "$updated of $total results lines processed\n" if ( defined $verbose );
+
+=head1 NAME
+
+TalkingTech_itiva_inbound.pl
+
+=head1 SYNOPSIS
+
+  TalkingTech_itiva_inbound.pl
+  TalkingTech_itiva_inbound.pl -v --input=/tmp/talkingtech/results.csv
+
+Script to process received Results files for Talking Tech i-tiva
+phone notification system.
+
+=over 8
+
+=item B<--help> B<-h>
+
+Prints this help
+
+=item B<-v>
+
+Provide verbose log information.
+
+=item B<--input> B<-i>
+
+REQUIRED. Path to incoming results file.
+
+=back
+
+=cut
+
+sub update_notice {
+    my $message_id = shift;
+    my $status     = shift;
+
+    if ( $status =~ m/SUCCESS/i ) {
+        $status = 'sent';
+    }
+    elsif ( $status =~ m/FAIL/i ) {
+        $status = 'failed';
+    }
+    else {
+        warn "unexpected status $status for message ID $message_id\n";
+        return 0;
+    }
+
+    my $query =
+"UPDATE message_queue SET status = ? WHERE message_id = ? and status = 'pending'";
+    my $sth = $dbh->prepare($query);
+
+    my $result = $sth->execute( $status, $message_id );
+    return $result;
+}
diff --git a/misc/cronjobs/thirdparty/TalkingTech_itiva_outbound.pl b/misc/cronjobs/thirdparty/TalkingTech_itiva_outbound.pl
new file mode 100755 (executable)
index 0000000..226f17e
--- /dev/null
@@ -0,0 +1,348 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2011 ByWater Solutions
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha 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 Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use strict;
+use warnings;
+
+BEGIN {
+
+    # find Koha's Perl modules
+    # test carefully before changing this
+    use FindBin;
+    eval { require "$FindBin::Bin/../kohalib.pl" };
+}
+
+use Getopt::Long;
+use Pod::Usage;
+use Date::Calc qw(Add_Delta_Days);
+
+use C4::Context;
+use C4::Items;
+use C4::Letters;
+use C4::Overdues;
+use C4::Dates;
+use C4::Calendar;
+
+sub usage {
+    pod2usage( -verbose => 2 );
+    exit;
+}
+
+die
+  "TalkingTechItivaPhoneNotification system preference not activated... dying\n"
+  unless ( C4::Context->preference("TalkingTechItivaPhoneNotification") );
+
+# Database handle
+my $dbh = C4::Context->dbh;
+
+# Options
+my $verbose;
+my $language = "EN";
+my @types;
+my @holds_waiting_days_to_call;
+my $library_code;
+my $help;
+my $outfile;
+
+# maps to convert I-tiva terms to Koha terms
+my $type_module_map = {
+    'PREOVERDUE' => 'circulation',
+    'OVERDUE'    => 'circulation',
+    'RESERVE'    => 'reserves',
+};
+
+my $type_notice_map = {
+    'PREOVERDUE' => 'PREDUE_PHONE',
+    'OVERDUE'    => 'OVERDUE_PHONE',
+    'RESERVE'    => 'HOLD_PHONE',
+};
+
+GetOptions(
+    'o|output:s'            => \$outfile,
+    'v'                     => \$verbose,
+    'lang:s'                => \$language,
+    'type:s'                => \@types,
+    'w|waiting-hold-day:s'  => \@holds_waiting_days_to_call,
+    'c|code|library-code:s' => \$library_code,
+    'help|h'                => \$help,
+);
+
+$language = uc($language);
+$library_code ||= '';
+
+pod2usage( -verbose => 1 ) if $help;
+
+# output log or STDOUT
+my $OUT;
+if ( defined $outfile ) {
+    open( $OUT, '>', "$outfile" ) || die("Cannot open output file");
+}
+else {
+    print "No output file defined; printing to STDOUT\n"
+      if ( defined $verbose );
+    open( $OUT, '>', "&STDOUT" ) || die("Couldn't duplicate STDOUT: $!");
+}
+
+my $format = 'V';    # format for phone notifications
+
+foreach my $type (@types) {
+    $type = uc($type);    #just in case lower or mixed-case was supplied
+    my $module =
+      $type_module_map->{$type}; #since the module is required to get the letter
+    my $code = $type_notice_map->{$type};    #to get the Koha name of the notice
+
+    my @loop;
+    if ( $type eq 'OVERDUE' ) {
+        @loop = GetOverdueIssues();
+    }
+    elsif ( $type eq 'PREOVERDUE' ) {
+        @loop = GetPredueIssues();
+    }
+    elsif ( $type eq 'RESERVE' ) {
+        @loop = GetWaitingHolds();
+    }
+    else {
+        print "Unknown or unsupported message type $type; skipping...\n"
+          if ( defined $verbose );
+        next;
+    }
+
+    foreach my $issues (@loop) {
+        my $date = C4::Dates->new( $issues->{'date_due'}, 'iso' );
+        my $due_date = $date->output('metric');
+
+        # gets the placeholder message, and enqueues the letter
+        my $letter = getletter( $module, $code );
+        die "No letter found for type $type!... dying\n" unless $letter;
+
+        # covers basic variable parsing in letter
+        $letter =
+          C4::Letters::parseletter( $letter, 'borrowers',
+            $issues->{'borrowernumber'} );
+        $letter =
+          C4::Letters::parseletter( $letter, 'biblio',
+            $issues->{'biblionumber'} );
+        $letter =
+          C4::Letters::parseletter( $letter, 'biblioitems',
+            $issues->{'biblionumber'} );
+
+        my $message_id = 0;
+        if ($outfile) {
+            $message_id = C4::Letters::EnqueueLetter(
+                {
+                    letter                 => $letter,
+                    borrowernumber         => $issues->{'borrowernumber'},
+                    message_transport_type => 'phone',
+                }
+            );
+        }
+
+        print $OUT
+"\"$format\",\"$language\",\"$type\",\"$issues->{level}\",\"$issues->{cardnumber}\",\"$issues->{patron_title}\",\"$issues->{firstname}\",";
+        print $OUT
+"\"$issues->{surname}\",\"$issues->{phone}\",\"$issues->{email}\",\"$library_code\",";
+        print $OUT
+"\"$issues->{site}\",\"$issues->{site_name}\",\"$issues->{barcode}\",\"$due_date\",\"$issues->{title}\",\"$message_id\"\n";
+    }
+}
+
+=head1 NAME
+
+TalkingTech_itiva_outbound.pl
+
+=head1 SYNOPSIS
+
+  TalkingTech_itiva_outbound.pl
+  TalkingTech_itiva_outbound.pl --type=OVERDUE -w 0 -w 2 -w 6 --output=/tmp/talkingtech/outbound.csv
+  TalkingTech_itiva_outbound.pl --type=RESERVE --type=PREOVERDUE --lang=FR
+
+
+Script to generate Spec C outbound notifications file for Talking Tech i-tiva
+phone notification system.
+
+=item B<--help> B<-h>
+
+Prints this help
+
+=item B<-v>
+
+Provide verbose log information.
+
+=item B<--output> B<-o>
+
+Destination for outbound notifications file (CSV format).  If no value is specified,
+output is dumped to screen.
+
+=item B<--lang>
+
+Sets the language for all outbound messages.  Currently supported values are EN, FR and ES.
+If no value is specified, EN will be used by default.
+
+=item B<--type>
+
+REQUIRED. Sets which messaging types are to be used.  Can be given multiple times, to
+specify multiple types in a single output file.  Currently supported values are RESERVE, PREOVERDUE
+and OVERDUE.  If no value is given, this script will not produce any outbound notifications.
+
+=item B<--waiting-hold-day> B<-w>
+
+OPTIONAL for --type=RESERVE. Sets the days after a hold has been set to waiting on which to call. Use
+switch as many times as desired. For example, passing "-w 0 -w 2 -w 6" will cause calls to be placed
+on the day the hold was set to waiting, 2 days after the waiting date, and 6 days after. See example above.
+If this switch is not used with --type=RESERVE, calls will be placed every day until the waiting reserve
+is picked up or canceled.
+
+=item B<--library-code> B<--code> B<-c>
+
+OPTIONAL
+The code of the source library of the message.
+The library code is used to group notices together for
+consortium purposes and apply library specific settings, such as
+prompts, to those notices.
+This field can be blank if all messages are from a single library.
+
+=cut
+
+sub GetOverdueIssues {
+    my $query =
+"SELECT borrowers.borrowernumber, borrowers.cardnumber, borrowers.title as patron_title, borrowers.firstname, borrowers.surname,
+                borrowers.phone, borrowers.email, borrowers.branchcode, biblio.biblionumber, biblio.title, items.barcode, issues.date_due,
+                max(overduerules.branchcode) as rulebranch, TO_DAYS(NOW())-TO_DAYS(date_due) as daysoverdue, delay1, delay2, delay3,
+                issues.branchcode as site, branches.branchname as site_name
+                FROM borrowers JOIN issues USING (borrowernumber)
+                JOIN items USING (itemnumber)
+                JOIN biblio USING (biblionumber)
+                JOIN branches ON (issues.branchcode = branches.branchcode)
+                JOIN overduerules USING (categorycode)
+                WHERE ( overduerules.branchcode = borrowers.branchcode or overduerules.branchcode = '')
+                AND ( (TO_DAYS(NOW())-TO_DAYS(date_due) ) = delay1
+                  OR  (TO_DAYS(NOW())-TO_DAYS(date_due) ) = delay2
+                  OR  (TO_DAYS(NOW())-TO_DAYS(date_due) ) = delay3 )
+                GROUP BY items.itemnumber
+                ";
+    my $sth = $dbh->prepare($query);
+    $sth->execute();
+    my @results;
+    while ( my $issue = $sth->fetchrow_hashref() ) {
+        if ( $issue->{'daysoverdue'} == $issue->{'delay1'} ) {
+            $issue->{'level'} = 1;
+        }
+        elsif ( $issue->{'daysoverdue'} == $issue->{'delay2'} ) {
+            $issue->{'level'} = 2;
+        }
+        elsif ( $issue->{'daysoverdue'} == $issue->{'delay3'} ) {
+            $issue->{'level'} = 3;
+        }
+        else {
+
+            # this shouldn't ever happen, based our SQL criteria
+        }
+        push @results, $issue;
+    }
+    return @results;
+}
+
+sub GetPredueIssues {
+    my $query =
+"SELECT borrowers.borrowernumber, borrowers.cardnumber, borrowers.title as patron_title, borrowers.firstname, borrowers.surname,
+                borrowers.phone, borrowers.email, borrowers.branchcode, biblio.biblionumber, biblio.title, items.barcode, issues.date_due,
+                issues.branchcode as site, branches.branchname as site_name
+                FROM borrowers JOIN issues USING (borrowernumber)
+                JOIN items USING (itemnumber)
+                JOIN biblio USING (biblionumber)
+                JOIN branches ON (issues.branchcode = branches.branchcode)
+                JOIN borrower_message_preferences USING (borrowernumber)
+                JOIN borrower_message_transport_preferences USING (borrower_message_preference_id)
+                JOIN message_attributes USING (message_attribute_id)
+                WHERE ( TO_DAYS( date_due ) - TO_DAYS( NOW() ) ) = days_in_advance
+                AND message_transport_type = 'phone'
+                AND message_name = 'Advance_Notice'
+                ";
+    my $sth = $dbh->prepare($query);
+    $sth->execute();
+    my @results;
+    while ( my $issue = $sth->fetchrow_hashref() ) {
+        $issue->{'level'} = 1;    # only one level for Predue notifications
+        push @results, $issue;
+    }
+    return @results;
+}
+
+sub GetWaitingHolds {
+    my $query =
+"SELECT borrowers.borrowernumber, borrowers.cardnumber, borrowers.title as patron_title, borrowers.firstname, borrowers.surname,
+                borrowers.phone, borrowers.email, borrowers.branchcode, biblio.biblionumber, biblio.title, items.barcode, reserves.waitingdate,
+                reserves.branchcode AS site, branches.branchname AS site_name,
+                TO_DAYS(NOW())-TO_DAYS(reserves.waitingdate) AS days_since_waiting
+                FROM borrowers JOIN reserves USING (borrowernumber)
+                JOIN items USING (itemnumber)
+                JOIN biblio ON (biblio.biblionumber = items.biblionumber)
+                JOIN branches ON (reserves.branchcode = branches.branchcode)
+                JOIN borrower_message_preferences USING (borrowernumber)
+                JOIN borrower_message_transport_preferences USING (borrower_message_preference_id)
+                JOIN message_attributes USING (message_attribute_id)
+                WHERE ( reserves.found = 'W' )
+                AND message_transport_type = 'phone'
+                AND message_name = 'Hold_Filled'
+                ";
+    my $pickupdelay = C4::Context->preference("ReservesMaxPickUpDelay");
+    my $sth         = $dbh->prepare($query);
+    $sth->execute();
+    my @results;
+    while ( my $issue = $sth->fetchrow_hashref() ) {
+        my @waitingdate = split( /-/, $issue->{'waitingdate'} );
+        my @date_due =
+          Add_Delta_Days( $waitingdate[0], $waitingdate[1], $waitingdate[2],
+            $pickupdelay );
+        $issue->{'date_due'} =
+          sprintf( "%04d-%02d-%02d", $date_due[0], $date_due[1], $date_due[2] );
+        $issue->{'level'} = 1;   # only one level for Hold Waiting notifications
+
+        my $days_to_subtract = 0;
+        my $calendar = C4::Calendar->new( branchcode => $issue->{'site'} );
+        while (
+            $calendar->isHoliday(
+                reverse(
+                    Add_Delta_Days(
+                        $waitingdate[0], $waitingdate[1],
+                        $waitingdate[2], $days_to_subtract
+                    )
+                )
+            )
+          )
+        {
+            $days_to_subtract++;
+        }
+        $issue->{'days_since_waiting'} =
+          $issue->{'days_since_waiting'} - $days_to_subtract;
+
+        if (
+            (
+                grep $_ eq $issue->{'days_since_waiting'},
+                @holds_waiting_days_to_call
+            )
+            || !scalar(@holds_waiting_days_to_call)
+          )
+        {
+            push @results, $issue;
+        }
+    }
+    return @results;
+
+}
index 3d1c2a8..6095324 100755 (executable)
@@ -15,8 +15,8 @@
 # with Koha; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-#use strict;
-#use warnings; FIXME - Bug 2505
+use strict;
+use warnings;
 
 use C4::Templates;
 use CGI;
index e71c8f1..cf75eb7 100755 (executable)
@@ -21,7 +21,9 @@ use warnings;
 use CGI;
 use C4::Koha;
 use C4::Biblio;
+use C4::Branch;
 use C4::Items;
+use C4::Circulation;
 use C4::Auth;
 use C4::Output;
 
@@ -68,7 +70,7 @@ foreach my $biblionumber ( @bibs ) {
     my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour );
     my $marcseriesarray  = GetMarcSeries  ($record,$marcflavour);
     my $marcurlsarray    = GetMarcUrls    ($record,$marcflavour);
-    my @items            = &GetItemsLocationInfo( $biblionumber );
+    my @items            = &GetItemsInfo( $biblionumber );
     my $subtitle         = GetRecordValue('subtitle', $record, GetFrameworkCode($biblionumber));
 
     my $hasauthors = 0;
@@ -88,6 +90,15 @@ foreach my $biblionumber ( @bibs ) {
         $dat->{'even'} = 1;
     }
 
+my $branches = GetBranches();
+    for my $itm (@items) {
+        my ( $transfertwhen, $transfertfrom, $transfertto ) = GetTransfers($itm->{itemnumber});
+        if ( defined( $transfertwhen ) && $transfertwhen ne '' ) {
+             $itm->{transfertwhen} = $transfertwhen;
+             $itm->{transfertfrom} = $branches->{$transfertfrom}{branchname};
+             $itm->{transfertto}   = $branches->{$transfertto}{branchname};
+        }
+    }
     $num++;
     $dat->{biblionumber} = $biblionumber;
     $dat->{ITEM_RESULTS}   = \@items;
index 4a92d9a..eaad3e2 100755 (executable)
@@ -143,8 +143,10 @@ if ($session->param('busc')) {
         my @servers;
         @servers = @{$arrParamsBusc->{'server'}} if $arrParamsBusc->{'server'};
         @servers = ("biblioserver") unless (@servers);
-        my $default_sort_by = C4::Context->preference('OPACdefaultSortField')."_".C4::Context->preference('OPACdefaultSortOrder') if (C4::Context->preference('OPACdefaultSortField') && C4::Context->preference('OPACdefaultSortOrder'));
-        my @sort_by = @{$arrParamsBusc->{'sort_by'}} if $arrParamsBusc->{'sort_by'};
+
+        my ($default_sort_by, @sort_by);
+        $default_sort_by = C4::Context->preference('OPACdefaultSortField')."_".C4::Context->preference('OPACdefaultSortOrder') if (C4::Context->preference('OPACdefaultSortField') && C4::Context->preference('OPACdefaultSortOrder'));
+        @sort_by = @{$arrParamsBusc->{'sort_by'}} if $arrParamsBusc->{'sort_by'};
         $sort_by[0] = $default_sort_by if !$sort_by[0] && defined($default_sort_by);
         my ($error, $results_hashref, $facets);
         eval {
@@ -420,7 +422,8 @@ my @items;
 my @hiddenitems = GetHiddenItemnumbers(@all_items);
 
 # Are there items to hide?
-my $hideitems = 1 if C4::Context->preference('hidelostitems') or scalar(@hiddenitems) > 0;
+my $hideitems;
+$hideitems = 1 if C4::Context->preference('hidelostitems') or scalar(@hiddenitems) > 0;
 
 # Hide items
 if ($hideitems) {
index 9e1e4f8..dc244db 100755 (executable)
@@ -67,6 +67,7 @@ C4::Form::MessagingPreferences::set_form_values({ borrowernumber     => $borrowe
 $template->param( BORROWER_INFO         => [ $borrower ],
                   messagingview         => 1,
                   SMSnumber => defined $borrower->{'smsalertnumber'} ? $borrower->{'smsalertnumber'} : $borrower->{'mobile'},
-                  SMSSendDriver                =>  C4::Context->preference("SMSSendDriver") );
+                  SMSSendDriver                =>  C4::Context->preference("SMSSendDriver"),
+                  TalkingTechItivaPhone        =>  C4::Context->preference("TalkingTechItivaPhoneNotification") );
 
 output_html_with_http_headers $query, $cookie, $template->output;
index aae8314..1fb4df0 100755 (executable)
@@ -57,7 +57,7 @@ for ( C4::Context->preference("OPACShowHoldQueueDetails") ) {
     m/priority/ and $show_priority = 1;
 }
 
-sub get_out ($$$) {
+sub get_out {
        output_html_with_http_headers(shift,shift,shift); # $query, $cookie, $template->output;
        exit;
 }
index 57d2c79..7787217 100755 (executable)
@@ -27,6 +27,7 @@ use Carp;
 use Mail::Sendmail;
 use MIME::QuotedPrint;
 use MIME::Base64;
+use HTML::FormatText;
 use C4::Biblio;
 use C4::Items;
 use C4::Auth;
@@ -120,39 +121,34 @@ if ( $email_add ) {
     my $body;
 
     # Analysing information and getting mail properties
-    if ( $template_res =~ /<SUBJECT>\n(.*)\n<END_SUBJECT>/s ) {
+    if ( $template_res =~ /<SUBJECT>\n(.*)\n?<END_SUBJECT>/s ) {
         $mail{'subject'} = $1;
     }
     else { $mail{'subject'} = "no subject"; }
 
     my $email_header = "";
-    if ( $template_res =~ /<HEADER>\n(.*)\n<END_HEADER>/s ) {
+    if ( $template_res =~ /<HEADER>\n(.*)\n?<END_HEADER>/s ) {
         $email_header = $1;
     }
 
     my $email_file = "basket.txt";
-    if ( $template_res =~ /<FILENAME>\n(.*)\n<END_FILENAME>/s ) {
+    if ( $template_res =~ /<FILENAME>\n(.*)\n?<END_FILENAME>/s ) {
         $email_file = $1;
     }
 
-    if ( $template_res =~ /<MESSAGE>\n(.*)\n<END_MESSAGE>/s ) { $body = encode_qp($1); }
+    if ( $template_res =~ /<MESSAGE>\n(.*)\n?<END_MESSAGE>/s ) {
+        $body = $1;
+    }
 
     my $boundary = "====" . time() . "====";
 
-    #     $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\"";
-    #
-    #     $email_header = encode_qp($email_header);
-    #
-    #     $boundary = "--".$boundary;
-    #
-    #     # Writing mail
-    #     $mail{body} =
     $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\"";
     my $isofile = encode_base64(encode("UTF-8", $iso2709));
     $boundary = '--' . $boundary;
     $mail{body} = <<END_OF_BODY;
 $boundary
-Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Type: text/plain; charset="UTF-8"
 Content-Transfer-Encoding: quoted-printable
 
 $email_header
index 6ecc6ad..dfdb6cd 100755 (executable)
@@ -122,14 +122,14 @@ if($timeLimit eq 999){ $timeLimitFinite = 0 };
 
 $template->param(do_it => 1,
                 limit => $limit,
-                branch => $branches->{$branch}->{branchname} || 'all locations',
-                itemtype => $itemtypes->{$itemtype}->{description} || 'item types',
+                branch => $branches->{$branch}->{branchname},
+                itemtype => $itemtypes->{$itemtype}->{description},
                 timeLimit => $timeLimit,
                 timeLimitFinite => $timeLimit,
                 results_loop => \@results,
                 );
 
-$template->param( branchloop => GetBranchesLoop(C4::Context->userenv->{'branch'}));
+$template->param( branchloop => GetBranchesLoop(C4::Context->userenv?C4::Context->userenv->{'branch'}:''));
 
 # the index parameter is different for item-level itemtypes
 my $itype_or_itemtype = (C4::Context->preference("item-level_itypes"))?'itype':'itemtype';
index 9d0491d..4dbc432 100755 (executable)
@@ -365,7 +365,10 @@ $template->param(
 );
 
 $template->param( DHTMLcalendar_dateformat  => C4::Dates->DHTMLcalendar() );
-$template->param( AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds') );
+$template->param(
+    SuspendHoldsOpac => C4::Context->preference('SuspendHoldsOpac'),
+    AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds') ,
+);
 
 output_html_with_http_headers $query, $cookie, $template->output;
 
index b37d88c..529a2a6 100755 (executable)
@@ -156,14 +156,14 @@ my $checkin_prefs  = C4::Members::Messaging::GetMessagingPreferences({
     borrowernumber => $borrowernumber,
     message_name   => 'Item Checkout'
 });
-for (@{ $checkin_prefs->{transports} }) {
+for ( keys %{ $checkin_prefs->{transports} }) {
     $borr->{"items_returned_$_"} = 1;
 }
 my $checkout_prefs = C4::Members::Messaging::GetMessagingPreferences({
     borrowernumber => $borrowernumber,
     message_name   => 'Item Check-in'
 });
-for (@{ $checkout_prefs->{transports} }) {
+for ( keys %{ $checkout_prefs->{transports} }) {
     $borr->{"items_borrowed_$_"} = 1;
 }
 
index d9e5904..c34a614 100755 (executable)
@@ -69,7 +69,7 @@ my $default = C4::Context->userenv->{branch};
 my @values;
 my %label_of;
 
-foreach my $branchcode (sort keys %{$branches} ) {
+foreach my $branchcode ( sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname} } keys %$branches ) {
     push @values, $branchcode;
     $label_of{$branchcode} = $branches->{$branchcode}->{branchname};
 }
@@ -633,7 +633,10 @@ if ( C4::Context->preference( 'AllowHoldDateInFuture' ) ) {
     $template->param( reserve_in_future => 1 );
 }
 
-$template->param( AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds') );
+$template->param(
+    SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'),
+    AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'),
+);
 
 # printout the page
 output_html_with_http_headers $input, $cookie, $template->output;