moved stemmaweb Catalyst stuff to its own repo
Tara L Andrews [Tue, 11 Sep 2012 20:14:58 +0000 (22:14 +0200)]
97 files changed:
stemmaweb/Changes [deleted file]
stemmaweb/Makefile.PL [deleted file]
stemmaweb/README [deleted file]
stemmaweb/lib/Text [deleted symlink]
stemmaweb/lib/stemmaweb.pm [deleted file]
stemmaweb/lib/stemmaweb/Controller/Microservice.pm [deleted file]
stemmaweb/lib/stemmaweb/Controller/Relation.pm [deleted file]
stemmaweb/lib/stemmaweb/Controller/Root.pm [deleted file]
stemmaweb/lib/stemmaweb/Controller/Stexaminer.pm [deleted file]
stemmaweb/lib/stemmaweb/Controller/Users.pm [deleted file]
stemmaweb/lib/stemmaweb/Model/Directory.pm [deleted file]
stemmaweb/lib/stemmaweb/View/Email/Template.pm [deleted file]
stemmaweb/lib/stemmaweb/View/JSON.pm [deleted file]
stemmaweb/lib/stemmaweb/View/Plain.pm [deleted file]
stemmaweb/lib/stemmaweb/View/SVG.pm [deleted file]
stemmaweb/lib/stemmaweb/View/TT.pm [deleted file]
stemmaweb/root/css/auth.css [deleted file]
stemmaweb/root/css/colorscheme.svg [deleted file]
stemmaweb/root/css/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-bg_glass_50_3baae3_1x400.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-icons_2694e8_256x240.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-icons_2e83ff_256x240.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-icons_3d80b3_256x240.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-icons_72a7cf_256x240.png [deleted file]
stemmaweb/root/css/cupertino/images/ui-icons_ffffff_256x240.png [deleted file]
stemmaweb/root/css/cupertino/jquery-ui-1.8.13.custom.css [deleted file]
stemmaweb/root/css/relationship.css [deleted file]
stemmaweb/root/css/stexaminer.css [deleted file]
stemmaweb/root/css/style.css [deleted file]
stemmaweb/root/favicon.ico [deleted file]
stemmaweb/root/images/act_arrs.gif [deleted file]
stemmaweb/root/images/act_icons.png [deleted file]
stemmaweb/root/images/ajax-loader.gif [deleted file]
stemmaweb/root/images/arrows.svg [deleted file]
stemmaweb/root/images/b_button_a.png [deleted file]
stemmaweb/root/images/b_button_a_old.png [deleted file]
stemmaweb/root/images/b_button_span.png [deleted file]
stemmaweb/root/images/b_button_span_old.png [deleted file]
stemmaweb/root/images/button_left_28.png [deleted file]
stemmaweb/root/images/button_right_28.png [deleted file]
stemmaweb/root/images/c_button_a.png [deleted file]
stemmaweb/root/images/c_button_span.png [deleted file]
stemmaweb/root/images/openid-16x16.gif [deleted file]
stemmaweb/root/images/resources/arrows.svg [deleted file]
stemmaweb/root/js/componentload.js [deleted file]
stemmaweb/root/js/jquery-1.4.4.min.js [deleted file]
stemmaweb/root/js/jquery-ui-1.8.10.custom.min.js [deleted file]
stemmaweb/root/js/jquery.mousewheel.min.js [deleted file]
stemmaweb/root/js/jquery.popupWindow.js [deleted file]
stemmaweb/root/js/jquery.svg.js [deleted file]
stemmaweb/root/js/jquery.svgdom.js [deleted file]
stemmaweb/root/js/plupload.html4.js [deleted file]
stemmaweb/root/js/plupload.js [deleted file]
stemmaweb/root/js/relationship-full.js [deleted file]
stemmaweb/root/js/relationship-readonly.js [deleted file]
stemmaweb/root/js/stemmagadget.js [deleted file]
stemmaweb/root/js/stexaminer.js [deleted file]
stemmaweb/root/js/svginteraction.js [deleted file]
stemmaweb/root/js/uploader.js [deleted file]
stemmaweb/root/src/about.tt [deleted file]
stemmaweb/root/src/alignment.tt [deleted file]
stemmaweb/root/src/auth/login.tt [deleted file]
stemmaweb/root/src/auth/register.tt [deleted file]
stemmaweb/root/src/auth/success.tt [deleted file]
stemmaweb/root/src/directory.tt [deleted file]
stemmaweb/root/src/error.tt [deleted file]
stemmaweb/root/src/footer.tt [deleted file]
stemmaweb/root/src/header.tt [deleted file]
stemmaweb/root/src/index.tt [deleted file]
stemmaweb/root/src/register-plain.tt [deleted file]
stemmaweb/root/src/relate.tt [deleted file]
stemmaweb/root/src/relatehelp.tt [deleted file]
stemmaweb/root/src/stemma_gadget.tt [deleted file]
stemmaweb/root/src/stexaminer.tt [deleted file]
stemmaweb/root/src/table_gadget.tt [deleted file]
stemmaweb/script/stemmaweb_cgi.pl [deleted file]
stemmaweb/script/stemmaweb_create.pl [deleted file]
stemmaweb/script/stemmaweb_fastcgi.pl [deleted file]
stemmaweb/script/stemmaweb_server.pl [deleted file]
stemmaweb/script/stemmaweb_test.pl [deleted file]
stemmaweb/stemmaweb.conf [deleted file]
stemmaweb/stemmaweb.psgi [deleted file]
stemmaweb/t/01app.t [deleted file]
stemmaweb/t/02pod.t [deleted file]
stemmaweb/t/03podcoverage.t [deleted file]
stemmaweb/t/controller_Users.t [deleted file]
stemmaweb/t/model_Directory.t [deleted file]
stemmaweb/t/view_Email-Template.t [deleted file]
stemmaweb/t/view_JSON.t [deleted file]
stemmaweb/t/view_TT.t [deleted file]

diff --git a/stemmaweb/Changes b/stemmaweb/Changes
deleted file mode 100644 (file)
index 7358817..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-This file documents the revision history for Perl extension stemmaweb.
-
-0.01  2011-10-02 22:00:24
-        - initial revision, generated by Catalyst
diff --git a/stemmaweb/Makefile.PL b/stemmaweb/Makefile.PL
deleted file mode 100644 (file)
index 0fba228..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env perl
-# IMPORTANT: if you delete this file your app will not work as
-# expected.  You have been warned.
-use inc::Module::Install;
-use Module::Install::Catalyst; # Complain loudly if you don't have
-                               # Catalyst::Devel installed or haven't said
-                               # 'make dist' to create a standalone tarball.
-
-name 'stemmaweb';
-all_from 'lib/stemmaweb.pm';
-
-requires 'Catalyst::Runtime' => '5.90002';
-requires 'Catalyst::Plugin::ConfigLoader';
-requires 'Catalyst::Plugin::StackTrace';
-requires 'Catalyst::Plugin::Static::Simple';
-requires 'Catalyst::Plugin::Unicode::Encoding';
-requires 'Catalyst::Action::RenderView';
-requires 'Catalyst::Authentication::Credential::OpenID';
-requires 'Catalyst::Model::KiokuDB';
-requires 'Catalyst::View::Download::Plain';
-requires 'Catalyst::View::JSON';
-requires 'Catalyst::View::TT';
-requires 'Catalyst::View::Email::Template';
-## Auth:
-requires 'Catalyst::Plugin::Authentication';
-requires 'Catalyst::Plugin::Session';
-requires 'Catalyst::Plugin::Session::Store::File';
-requires 'Catalyst::Plugin::Session::State::Cookie';
-requires 'CatalystX::Controller::Auth' => '0.22';
-requires 'Catalyst::TraitFor::Controller::reCAPTCHA';
-requires 'LWP::Protocol::https';
-##
-requires 'Moose';
-requires 'TryCatch';
-requires 'namespace::autoclean';
-requires 'Config::General'; # This should reflect the config file format you've chosen
-                 # See Catalyst::Plugin::ConfigLoader for supported formats
-test_requires 'Test::More' => '0.88';
-catalyst;
-
-install_script glob('script/*.pl');
-auto_install;
-WriteAll;
diff --git a/stemmaweb/README b/stemmaweb/README
deleted file mode 100644 (file)
index 922553b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Run script/stemmaweb_server.pl to test the application.
diff --git a/stemmaweb/lib/Text b/stemmaweb/lib/Text
deleted file mode 120000 (symlink)
index 0b03fb8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../../lib/Text
\ No newline at end of file
diff --git a/stemmaweb/lib/stemmaweb.pm b/stemmaweb/lib/stemmaweb.pm
deleted file mode 100644 (file)
index 7b52ebd..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-package stemmaweb;
-use Moose;
-use namespace::autoclean;
-
-use Catalyst::Runtime 5.80;
-
-use Search::GIN::Extract::Class;
-use Search::GIN::Extract::Attributes;
-use Search::GIN::Extract::Multiplex;
-
-# Set flags and add plugins for the application.
-#
-# Note that ORDERING IS IMPORTANT here as plugins are initialized in order,
-# therefore you almost certainly want to keep ConfigLoader at the head of the
-# list if you're using it.
-#
-#         -Debug: activates the debug mode for very useful log messages
-#   ConfigLoader: will load the configuration from a Config::General file in the
-#                 application's home directory
-# Static::Simple: will serve static files from the application's root
-#                 directory
-
-use Catalyst qw/
-    ConfigLoader
-    Static::Simple
-    Unicode::Encoding
-    Authentication
-    Session
-    Session::Store::File
-    Session::State::Cookie
-    StatusMessage
-    StackTrace
-/;
-
-extends 'Catalyst';
-
-our $VERSION = '0.01';
-
-# Configure the application.
-#
-# Note that settings in stemmaweb.conf (or other external
-# configuration file that you set up manually) take precedence
-# over this when using ConfigLoader. Thus configuration
-# details given here can function as a default configuration,
-# with an external configuration file acting as an override for
-# local deployment.
-
-__PACKAGE__->config(
-    name => 'stemmaweb',
-    # Disable deprecated behavior needed by old applications
-    disable_component_resolution_regex_fallback => 1,
-    default_view => 'TT',
-       'View::JSON' => {
-               expose_stash => 'result',
-       },
-       'View::TT' => {
-               INCLUDE_PATH => [
-                       stemmaweb->path_to( 'root', 'src' ),
-               ],
-       },
-    ## kiokudb auth store testing
-    'Plugin::Authentication' => {
-        default => {
-            credential => {
-                class => 'Password',
-                password_field => 'password',
-                password_type => 'self_check',
-            },
-            store => {
-                class => 'Model::KiokuDB',
-                model_name => 'Directory',
-            },
-        },
-        openid => {
-            credential => {
-                class => 'OpenID',
-                extensions => ['http://openid.net/srv/ax/1.0' => 
-                    {
-                        ns          => 'ax',
-                        uri         => 'http://openid.net/srv/ax/1.0',
-                        mode        => 'fetch_request',
-                        required    => 'email',
-                        'type.email' => 'http://axschema.org/contact/email',
-                        # type        => {
-                        #     email => 'http://axschema.org/contact/email'
-                        # }
-                    }
-                    ],
-            },
-            store => {
-                class => 'Model::KiokuDB',
-                model_name => 'Directory',
-            },
-            auto_create_user => 1,
-        },
-    },
-    ## Auth with CatalystX::Controller::Auth
-    'Controller::Users' => {
-        model => 'User',
-        login_id_field => 'username',
-        login_db_field => 'username',
-        action_after_login => '/users/success',
-        action_after_register => '/users/success', 
-        enable_sending_register_email => 0,
-        register_email_from  => '"Stemmaweb" <stemmaweb@byzantini.st>',
-        register_email_subject => 'Registration to stemmaweb',
-        register_email_template_plain => 'register-plain.tt',
-        realm => 'default',
-        login_fields => { openid => [qw/openid_identifier/],
-                          default => [qw/username password remember/],
-        },
-    },
-    'View::Email::Template' => {
-        stash_key => 'email_template',
-    },
-
-    recaptcha => {
-        pub_key => '6LfR19MSAAAAACy2meHvLfZGRn3PM2rRYIAfh665',
-        priv_key => '6LfR19MSAAAAAMlQb8BdyecWNRE1bAL2YSgz2sah',
-    },
-);
-
-# Start the application
-__PACKAGE__->setup();
-
-
-=head1 NAME
-
-stemmaweb - Catalyst based application
-
-=head1 SYNOPSIS
-
-    script/stemmaweb_server.pl
-
-=head1 DESCRIPTION
-
-[enter your description here]
-
-=head1 SEE ALSO
-
-L<stemmaweb::Controller::Root>, L<Catalyst>
-
-=head1 AUTHOR
-
-Tara L Andrews
-
-=head1 LICENSE
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-1;
diff --git a/stemmaweb/lib/stemmaweb/Controller/Microservice.pm b/stemmaweb/lib/stemmaweb/Controller/Microservice.pm
deleted file mode 100644 (file)
index 3084367..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-package stemmaweb::Controller::Microservice;
-use Moose;
-use namespace::autoclean;
-use JSON;
-use TryCatch;
-use Text::Tradition;
-#use Text::Tradition::Error;
-use Text::Tradition::Stemma;
-use Text::Tradition::StemmaUtil qw/ character_input phylip_pars newick_to_svg /;
-
-BEGIN { extends 'Catalyst::Controller' }
-
-=head1 NAME
-
-stemmaweb::Controller::Microservice - Controller for stemmaweb standalone
-components
-
-=head1 DESCRIPTION
-
-This package contains the pieces of web functionality relating to text tradition
-objects that are useful outside the framework of this application.
-
-=head1 COLLATION PARSING INPUT
-
-Each URL call which operates on a provided collation is called by POST with the
-following form parameters in the body: 
-
-=over 4 
-
-=item * type - Can be one of CollateX, CSV, JSON, nCritic, TEI, Tabular.
-
-=item * data - The collation data itself.
-
-=back
-
-=head1 COLLATION URLs
-
-=head2 renderSVG
-
- POST microservice/renderSVG
-
-Parse the passed collation data and return an SVG of the collated text.
-
-=cut
-
-# Utility function to render SVG from a collation in some recognized format.
-sub renderSVG :Local :Args(0) {
-       my( $self, $c ) = @_;
-       my $tradition = _parse_to_tradition( $c->request );
-       try {
-               $c->stash->{'result'} = $tradition->collation->as_svg;
-               $c->forward('View::SVG');
-       } catch( Text::Tradition::Error $e ) {
-               $c->detach( 'error', [ $e ] );
-       }
-}
-
-=head1 STEMMA / DISTANCE TREE URLs
-
-=head2 stemma_svg
-
- POST microservice/stemma_svg
-Parameter: dot => a string containing the dot description of the stemma.
-
-=cut
-
-sub stemma_svg :Local :Args(0) {
-       my( $self, $c ) = @_;
-       my $t = Text::Tradition->new();
-       my $stemma;
-       try {
-               $stemma = $t->add_stemma( 'dot' => $c->req->param('dot') );
-       } catch( Text::Tradition::Error $e ) {
-               $c->detach( 'error', [ $e ] );
-       }
-       $c->stash->{'result'} = $stemma->as_svg;
-       $c->forward('View::SVG');
-}
-
-=head2 character_matrix
-
- POST microservice/character_matrix
-
-Given an alignment table in JSON form, in the parameter 'alignment', returns a
-character matrix suitable for input to Phylip PARS. 
-
-=cut
-
-sub character_matrix :Local :Args(0) {
-       my( $self, $c ) = @_;
-       my $json = $c->request->params->{'alignment'};
-       $c->log->debug( $json );
-       my $table = from_json( $json );
-       my $matrix = character_input( $table );
-       $c->stash->{'result'} = { 'matrix' => $matrix };
-       $c->forward( 'View::JSON' );
-}
-
-=head2 run_pars 
-
- POST microservice/run_pars
-
-Runs Phylip PARS on the provided alignment, and returns the result. Parameters include:
-
-=over 4
-
-=item * alignment - A JSON alignment table, as produced by CollateX
-
-=item * matrix - A character matrix suitable for Phylip.
-
-=item * format - The format in which to return the results.  Default is 'newick'; also allowed is 'svg'.
-
-=back
-
-Exactly one of 'alignment' or 'matrix' must be specified.
-
-=cut
-
-sub run_pars :Local :Args(0) {
-       my( $self, $c ) = @_;
-       my $matrix;
-       if( $c->request->param('matrix') ) {
-               $matrix = $c->request->param('matrix');
-       } elsif( $c->request->param('alignment') ) {
-               # Make the matrix from the alignment
-               my $table = from_json( $c->request->param('alignment') );
-               $matrix = character_input( $table );
-       } else {
-               $c->detach( 'error', [ "Must pass either an alignment or a matrix" ] );
-       }
-       
-       # Got the matrix, so try to run pars.
-       my $output;
-       try {
-               $output = phylip_pars( $matrix );
-       } catch( Text::Tradition::Error $e ) {
-               $c->detach( 'error', [ $e ] );
-       }
-       
-       # Did we want newick or a graph?
-       my $view = 'View::JSON';
-       my $format = 'newick';
-       $format = $c->request->param('format') if $c->request->param('format');
-       if( $format eq 'svg' ) {
-               # Do something
-               try {
-                       $c->stash->{'result'} = newick_to_svg( $output );
-                       $view = 'View::SVG';
-               } catch( Text::Tradition::Error $e ) {
-                       $c->detach( 'error', [ $e ] );
-               }
-       } elsif( $format ne 'newick' ) {
-               $c->detach( 'error', [ "Requested output format $format unknown" ] );
-       } else {
-               $c->stash->{'result'} = { 'tree' => $output };
-       }
-
-       $c->forward( $view );
-}
-
-
-=head1 OPENSOCIAL URLs
-
-=head2 view_table
-
-Simple gadget to return the analysis table for the stexaminer
-
-=cut
-
-sub view_table :Local :Args(0) {
-    my( $self, $c ) = @_;
-    my $m = $c->model('Directory');
-       my $id = $c->request->params->{'textid'};
-       my $t = run_analysis( $m->tradition( $id ), $m->stemma( $id ) );
-       $c->stash->{variants} = $t->{'variants'};
-    $c->stash->{template} = 'table_gadget.tt';
-}
-
-=head2 view_stemma_svg
-
-Simple gadget to return the SVG for a given stemma
-
-=cut
-
-sub view_svg :Local :Args(0) {
-    my( $self, $c ) = @_;
-    my $m = $c->model('Directory');
-    my $stemma = $m->tradition( $c->request->params->{'textid'} )->stemma;
-       if( $stemma ) {
-               $c->stash->{svg} = $stemma->as_svg;
-       }
-    $c->stash->{template} = 'stemma_gadget.tt';
-}
-
-=head2 error
-
-Default response when actions generate Text::Tradition::Error exceptions
-
-=cut
-
-sub error :Private {
-       my( $self, $c, $error ) = @_;
-       my $errstr = $error;
-       if( ref( $error ) eq 'Text::Tradition::Error' ) {
-               $errstr = $error->ident . ": " . $error->message;
-       }
-       $c->response->code( 500 );
-       $c->stash->{'error'} = $errstr;
-       $c->stash->{'template'} = 'error.tt';
-}
-
-=head2 default
-
-Standard 404 error page
-
-=cut
-
-sub default :Path {
-    my ( $self, $c ) = @_;
-    $c->response->body( 'Page not found' );
-    $c->response->status(404);
-}
-
-## Internal utility function
-
-sub _parse_to_tradition {
-       my $req = shift;
-       my $type = $req->body_params->{'type'};
-       my $name = $req->param('name') || 'Collation graph';
-       my $data = $req->body_params->{'data'};
-       my $opts = { 
-               'name' => $name,
-               'input' => $type,
-               'string' => $data
-               };
-       $opts->{'sep_char'} = ',' if $type eq 'CSV';
-       $opts->{'sep_char'} = "\t" if $type eq 'TabSep';
-       return Text::Tradition->new( $opts );
-}
-
-
-=head1 AUTHOR
-
-Tara L Andrews
-
-=head1 LICENSE
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-__PACKAGE__->meta->make_immutable;
-
-1;
diff --git a/stemmaweb/lib/stemmaweb/Controller/Relation.pm b/stemmaweb/lib/stemmaweb/Controller/Relation.pm
deleted file mode 100644 (file)
index 043a52f..0000000
+++ /dev/null
@@ -1,432 +0,0 @@
-package stemmaweb::Controller::Relation;
-use Moose;
-use Module::Load;
-use namespace::autoclean;
-use TryCatch;
-
-BEGIN { extends 'Catalyst::Controller' }
-
-
-=head1 NAME
-
-stemmaweb::Controller::Relation - Controller for the relationship mapper
-
-=head1 DESCRIPTION
-
-The reading relationship mapper with draggable nodes.
-
-=head1 METHODS
-
-=head2 index
-
- GET relation/$textid
-Renders the application for the text identified by $textid.
-
-=cut
-
-sub index :Path :Args(0) {
-       my( $self, $c ) = @_;
-       $c->stash->{'template'} = 'relate.tt';
-}
-
-=head2 definitions
-
- GET relation/definitions
-Returns a data structure giving the valid types and scopes for a relationship.
-
-=cut
-
-sub definitions :Local :Args(0) {
-       my( $self, $c ) = @_;
-       my $valid_relationships = [ qw/ spelling orthographic grammatical lexical transposition / ];
-       my $valid_scopes = [ qw/ local global / ];
-       $c->stash->{'result'} = { 'types' => $valid_relationships, 'scopes' => $valid_scopes };
-       $c->forward('View::JSON');
-}
-
-=head2 text
-
- GET relation/$textid/
- Runs the relationship mapper for the specified text ID.
-=cut
-
-sub text :Chained('/') :PathPart('relation') :CaptureArgs(1) {
-       my( $self, $c, $textid ) = @_;
-       # If the tradition has more than 500 ranks or so, split it up.
-       my $tradition = $c->model('Directory')->tradition( $textid );
-    # Account for a bad interaction between FastCGI and KiokuDB
-    unless( $tradition->collation->tradition ) {
-        $c->log->warn( "Fixing broken tradition link" );
-        $tradition->collation->_set_tradition( $tradition );
-        $c->model('Directory')->save( $tradition );
-    }
-    # Check permissions. Will return 403 if denied, otherwise will
-    # put the appropriate value in the stash.
-    my $ok = _check_permission( $c, $tradition );
-    return unless $ok;
-
-       # See how big the tradition is. Edges are more important than nodes
-       # when it comes to rendering difficulty.
-       my $numnodes = scalar $tradition->collation->readings;
-       my $numedges = scalar $tradition->collation->paths;
-       my $length = $tradition->collation->end->rank;
-       # We should display no more than roughly 500 nodes, or roughly 700
-       # edges, at a time.
-       my $segments = $numnodes / 500;
-       if( $numedges / 700 > $segments ) {
-               $segments = $numedges / 700;
-       }
-       my $segsize = sprintf( "%.0f", $length / $segments );
-       my $margin = sprintf( "%.0f", $segsize / 10 );
-       if( $segments > 1 ) {
-               # Segment the tradition in order not to overload the browser.
-               my @divs;
-               my $r = 0;
-               while( $r + $margin < $length ) {
-                       push( @divs, $r );
-                       $r += $segsize;
-               }
-               $c->stash->{'textsegments'} = [];
-               $c->stash->{'segsize'} = $segsize;
-               $c->stash->{'margin'} = $margin;
-               foreach my $i ( 0..$#divs ) {
-                       my $seg = { 'start' => $divs[$i] };
-                       $seg->{'display'} = "Segment " . ($i+1);
-                       push( @{$c->stash->{'textsegments'}}, $seg );
-               }
-       }
-       $c->stash->{'textid'} = $textid;
-       $c->stash->{'tradition'} = $tradition;
-}
-
-sub main :Chained('text') :PathPart('') :Args(0) {
-       my( $self, $c ) = @_;
-       my $startseg = $c->req->param('start');
-       my $tradition = delete $c->stash->{'tradition'};
-       my $collation = $tradition->collation;
-       my $svgopts;
-       if( $startseg ) {
-               # Only render the subgraph from startseg to endseg or to END,
-               # whichever is less.
-               my $endseg = $startseg + $c->stash->{'segsize'} + $c->stash->{'margin'};
-               $svgopts = { 'from' => $startseg };
-               $svgopts->{'to'} = $endseg if $endseg < $collation->end->rank;
-       } elsif( exists $c->stash->{'textsegments'} ) {
-               # This is the unqualified load of a long tradition. We implicitly start 
-               # at zero, but go only as far as 550.
-               my $endseg = $c->stash->{'segsize'} + $c->stash->{'margin'};
-               $startseg = 0;
-               $svgopts = { 'to' => $endseg };
-       }
-       my $svg_str = $collation->as_svg( $svgopts );
-       $svg_str =~ s/\n//gs;
-       $c->stash->{'startseg'} = $startseg if defined $startseg;
-       $c->stash->{'svg_string'} = $svg_str;
-       $c->stash->{'text_title'} = $tradition->name;
-       $c->stash->{'text_lang'} = $tradition->language;
-       $c->stash->{'template'} = 'relate.tt';
-}
-
-=head2 help
-
- GET relation/help/$language
-
-Returns the help window HTML.
-
-=cut
-
-sub help :Local :Args(1) {
-       my( $self, $c, $lang ) = @_;
-       # Display the morphological help for the language if it is defined.
-       if( $lang && $lang ne 'Default' ) {
-               my $mod = 'Text::Tradition::Language::' . $lang;
-               try {
-                       load( $mod );
-               } catch {
-                       $c->log->debug("Warning: could not load $mod");
-               }
-               my $has_mod = $mod->can('morphology_tags');
-               if( $has_mod ) {
-                       my $tagset = &$has_mod;
-                       $c->stash->{'tagset'} = $tagset;
-               }
-       }
-       $c->stash->{'template'} = 'relatehelp.tt';
-}
-
-=head2 relationships
-
- GET relation/$textid/relationships
-
-Returns the list of relationships defined for this text.
-
- POST relation/$textid/relationships { request }
-Attempts to define the requested relationship within the text. Returns 200 on
-success or 403 on error.
-
- DELETE relation/$textid/relationships { request }
-
-=cut
-
-sub relationships :Chained('text') :PathPart :Args(0) {
-       my( $self, $c ) = @_;
-       my $tradition = delete $c->stash->{'tradition'};
-       my $ok = _check_permission( $c, $tradition );
-       return unless $ok;
-       my $collation = $tradition->collation;
-       my $m = $c->model('Directory');
-       if( $c->request->method eq 'GET' ) {
-               my @pairs = $collation->relationships; # returns the edges
-               my @all_relations;
-               foreach my $p ( @pairs ) {
-                       my $relobj = $collation->relations->get_relationship( @$p );
-                       next if $relobj->type eq 'collated'; # Don't show these
-                       next if $p->[0] eq $p->[1]; # HACK until bugfix
-                       my $relhash = { source => $p->[0], target => $p->[1], 
-                                 type => $relobj->type, scope => $relobj->scope };
-                       $relhash->{'note'} = $relobj->annotation if $relobj->has_annotation;
-                       push( @all_relations, $relhash );
-               }
-               $c->stash->{'result'} = \@all_relations;
-       } else {
-               # Check write permissions first of all
-               if( $c->stash->{'permission'} ne 'full' ) {
-                       $c->response->status( '403' );
-                       $c->stash->{'result'} = { 
-                               'error' => 'You do not have permission to view this tradition.' };
-               } elsif( $c->request->method eq 'POST' ) {
-                       unless( $c->stash->{'permission'} eq 'full' ) {
-                               $c->response->status( '403' );
-                               $c->stash->{'result'} = { 
-                                       'error' => 'You do not have permission to view this tradition.' };
-                               $c->detach( 'View::JSON' );
-                       }       
-                       my $node = $c->request->param('source_id');
-                       my $target = $c->request->param('target_id');
-                       my $relation = $c->request->param('rel_type');
-                       my $note = $c->request->param('note');
-                       my $scope = $c->request->param('scope');
-               
-                       my $opts = { 'type' => $relation,
-                                                'scope' => $scope };
-                       $opts->{'annotation'} = $note if $note;
-                       
-                       try {
-                               my @vectors = $collation->add_relationship( $node, $target, $opts );
-                               $c->stash->{'result'} = \@vectors;
-                               $m->save( $tradition );
-                       } catch( Text::Tradition::Error $e ) {
-                               $c->response->status( '403' );
-                               $c->stash->{'result'} = { 'error' => $e->message };
-                       }
-               } elsif( $c->request->method eq 'DELETE' ) {
-                       my $node = $c->request->param('source_id');
-                       my $target = $c->request->param('target_id');
-               
-                       try {
-                               my @vectors = $collation->del_relationship( $node, $target );
-                               $m->save( $tradition );
-                               $c->stash->{'result'} = \@vectors;
-                       } catch( Text::Tradition::Error $e ) {
-                               $c->response->status( '403' );
-                               $c->stash->{'result'} = { 'error' => $e->message };
-                       }       
-               }
-       }
-       $c->forward('View::JSON');
-}
-
-=head2 readings
-
- GET relation/$textid/readings
-
-Returns the list of readings defined for this text along with their metadata.
-
-=cut
-
-my %read_write_keys = (
-       'id' => 0,
-       'text' => 0,
-       'is_meta' => 0,
-       'grammar_invalid' => 1,
-       'is_nonsense' => 1,
-       'normal_form' => 1,
-);
-
-sub _reading_struct {
-       my( $reading ) = @_;
-       # Return a JSONable struct of the useful keys.  Keys meant to be writable
-       # have a true value; read-only keys have a false value.
-       my $struct = {};
-       map { $struct->{$_} = $reading->$_ } keys( %read_write_keys );
-       # Special case
-       $struct->{'lexemes'} = [ $reading->lexemes ];
-       # Look up any words related via spelling or orthography
-       my $sameword = sub { 
-               my $t = $_[0]->type;
-               return $t eq 'spelling' || $t eq 'orthographic';
-       };
-       my @variants;
-       foreach my $sr ( $reading->related_readings( $sameword ) ) {
-               push( @variants, $sr->text );
-       }
-       $struct->{'variants'} = \@variants;
-       return $struct;
-}
-
-sub readings :Chained('text') :PathPart :Args(0) {
-       my( $self, $c ) = @_;
-       my $tradition = delete $c->stash->{'tradition'};
-       my $ok = _check_permission( $c, $tradition );
-       return unless $ok;
-       my $collation = $tradition->collation;
-       my $m = $c->model('Directory');
-       if( $c->request->method eq 'GET' ) {
-               my $rdginfo = {};
-               foreach my $rdg ( $collation->readings ) {
-                       $rdginfo->{$rdg->id} = _reading_struct( $rdg );
-               }
-               $c->stash->{'result'} = $rdginfo;
-       }
-       $c->forward('View::JSON');
-}
-
-=head2 reading
-
- GET relation/$textid/reading/$id
-
-Returns the list of readings defined for this text along with their metadata.
-
- POST relation/$textid/reading/$id { request }
-Alters the reading according to the values in request. Returns 403 Forbidden if
-the alteration isn't allowed.
-
-=cut
-
-sub reading :Chained('text') :PathPart :Args(1) {
-       my( $self, $c, $reading_id ) = @_;
-       my $tradition = delete $c->stash->{'tradition'};
-       my $collation = $tradition->collation;
-       my $rdg = $collation->reading( $reading_id );
-       my $m = $c->model('Directory');
-       if( $c->request->method eq 'GET' ) {
-               $c->stash->{'result'} = $rdg ? _reading_struct( $rdg )
-                       : { 'error' => "No reading with ID $reading_id" };
-       } elsif ( $c->request->method eq 'POST' ) {
-               if( $c->stash->{'permission'} ne 'full' ) {
-                       $c->response->status( '403' );
-                       $c->stash->{'result'} = { 
-                               'error' => 'You do not have permission to view this tradition.' };
-                       $c->detach('View::JSON');
-               }
-               my $errmsg;
-               # Are we re-lemmatizing?
-               if( $c->request->param('relemmatize') ) {
-                       my $nf = $c->request->param('normal_form');
-                       # TODO throw error unless $nf
-                       $rdg->normal_form( $nf );
-                       # TODO throw error if lemmatization fails
-                       # TODO skip this if normal form hasn't changed
-                       $rdg->lemmatize();
-               } else {
-                       # Set all the values that we have for the reading.
-                       # TODO error handling
-                       foreach my $p ( keys %{$c->request->params} ) {
-                               if( $p =~ /^morphology_(\d+)$/ ) {
-                                       # Set the form on the correct lexeme
-                                       my $morphval = $c->request->param( $p );
-                                       next unless $morphval;
-                                       my $midx = $1;
-                                       my $lx = $rdg->lexeme( $midx );
-                                       my $strrep = $rdg->language . ' // ' . $morphval;
-                                       my $idx = $lx->has_form( $strrep );
-                                       unless( defined $idx ) {
-                                               # Make the word form and add it to the lexeme.
-                                               try {
-                                                       $idx = $lx->add_matching_form( $strrep ) - 1;
-                                               } catch( Text::Tradition::Error $e ) {
-                                                       $c->response->status( '403' );
-                                                       $errmsg = $e->message;
-                                               } catch {
-                                                       # Something else went wrong, probably a Moose error
-                                                       $c->response->status( '403' );
-                                                       $errmsg = 'Something went wrong with the request';      
-                                               }
-                                       }
-                                       $lx->disambiguate( $idx ) if defined $idx;
-                               } elsif( $read_write_keys{$p} ) {
-                                       my $val = _clean_booleans( $rdg, $p, $c->request->param( $p ) );
-                                       $rdg->$p( $val );
-                               }
-                       }               
-               }
-               $m->save( $rdg );
-               $c->stash->{'result'} = $errmsg ? { 'error' => $errmsg }
-                       : _reading_struct( $rdg );
-
-       }
-       $c->forward('View::JSON');
-
-}
-
-sub _check_permission {
-       my( $c, $tradition ) = @_;
-    my $user = $c->user_exists ? $c->user->get_object : undef;
-    # Does this user have access?
-    if( $user ) {
-               if( $user->is_admin || 
-                       ( $tradition->has_user && $tradition->user->id eq $user->id ) ) {
-                       $c->stash->{'permission'} = 'full';
-                       return 1;
-               }
-    } 
-    # Is it public?
-    if( $tradition->public ) {
-       $c->stash->{'permission'} = 'readonly';
-       return 1;
-    } 
-       # Forbidden!
-       $c->response->status( 403 );
-       $c->response->body( 'You do not have permission to view this tradition.' );
-       $c->detach( 'View::Plain' );
-       return 0;
-}
-
-sub _clean_booleans {
-       my( $rdg, $param, $val ) = @_;
-       if( $rdg->meta->get_attribute( $param )->type_constraint->name eq 'Bool' ) {
-               $val = 1 if $val eq 'true';
-               $val = undef if $val eq 'false';
-       } 
-       return $val;
-}
-
-=head2 end
-
-Attempt to render a view, if needed.
-
-=cut
-
-sub end : ActionClass('RenderView') {}
-
-=head1 AUTHOR
-
-Tara L Andrews
-
-=head1 LICENSE
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-__PACKAGE__->meta->make_immutable;
-
-1;
diff --git a/stemmaweb/lib/stemmaweb/Controller/Root.pm b/stemmaweb/lib/stemmaweb/Controller/Root.pm
deleted file mode 100644 (file)
index 8cbf5c9..0000000
+++ /dev/null
@@ -1,474 +0,0 @@
-package stemmaweb::Controller::Root;
-use Moose;
-use namespace::autoclean;
-use Text::Tradition::Analysis qw/ run_analysis /;
-use TryCatch;
-
-
-BEGIN { extends 'Catalyst::Controller' }
-
-#
-# Sets the actions in this controller to be registered with no prefix
-# so they function identically to actions created in MyApp.pm
-#
-__PACKAGE__->config(namespace => '');
-
-=head1 NAME
-
-stemmaweb::Controller::Root - Root Controller for stemmaweb
-
-=head1 DESCRIPTION
-
-Serves up the main container pages.
-
-=head1 URLs
-
-=head2 index
-
-The root page (/).  Serves the main container page, from which the various
-components will be loaded.
-
-=cut
-
-sub index :Path :Args(0) {
-    my ( $self, $c ) = @_;
-
-       # Are we being asked to load a text immediately? If so 
-       if( $c->req->param('withtradition') ) {
-               $c->stash->{'withtradition'} = $c->req->param('withtradition');
-       }
-    $c->stash->{template} = 'index.tt';
-}
-
-=head2 about
-
-A general overview/documentation page for the site.
-
-=cut
-
-sub about :Local :Args(0) {
-       my( $self, $c ) = @_;
-       $c->stash->{template} = 'about.tt';
-}
-
-=head1 Elements of index page
-
-=head2 directory
-
- GET /directory
-
-Serves a snippet of HTML that lists the available texts.  This returns texts belonging to the logged-in user if any, otherwise it returns all public texts.
-
-=cut
-
-sub directory :Local :Args(0) {
-       my( $self, $c ) = @_;
-    my $m = $c->model('Directory');
-    # Is someone logged in?
-    my %usertexts;
-    if( $c->user_exists ) {
-       my $user = $c->user->get_object;
-       my @list = $m->traditionlist( $user );
-       map { $usertexts{$_->{id}} = 1 } @list;
-               $c->stash->{usertexts} = \@list;
-               $c->stash->{is_admin} = 1 if $user->is_admin;
-       }
-       # List public (i.e. readonly) texts separately from any user (i.e.
-       # full access) texts that exist. Admin users therefore have nothing
-       # in this list.
-       my @plist = grep { !$usertexts{$_->{id}} } $m->traditionlist('public');
-       $c->stash->{publictexts} = \@plist;
-       $c->stash->{template} = 'directory.tt';
-}
-
-=head1 AJAX methods for traditions and their properties
-
-=head2 newtradition
-
- POST /newtradition,
-       { name: <name>,
-         language: <language>,
-         public: <is_public>,
-         file: <fileupload> }
-Creates a new tradition belonging to the logged-in user, with the given name
-and the collation given in the uploaded file. The file type is indicated via
-the filename extension (.csv, .txt, .xls, .xlsx, .xml). Returns the ID and 
-name of the new tradition.
-=cut
-
-sub newtradition :Local :Args(0) {
-       my( $self, $c ) = @_;
-       return _json_error( $c, 403, 'Cannot save a tradition without being logged in' )
-               unless $c->user_exists;
-
-       my $user = $c->user->get_object;
-       # Grab the file upload, check its name/extension, and call the
-       # appropriate parser(s).
-       my $upload = $c->request->upload('file');
-       my $name = $c->request->param('name') || 'Uploaded tradition';
-       my $lang = $c->request->param( 'language' ) || 'Default';
-       my $public = $c->request->param( 'public' ) ? 1 : undef;
-       my( $ext ) = $upload->filename =~ /\.(\w+)$/;
-       my %newopts = (
-               'name' => $name,
-               'language' => $lang,
-               'public' => $public,
-               'file' => $upload->tempname
-               );
-
-       my $tradition;
-       my $errmsg;
-       if( $ext eq 'xml' ) {
-               # Try the different XML parsing options to see if one works.
-               foreach my $type ( qw/ CollateX CTE TEI / ) {
-                       try {
-                               $tradition = Text::Tradition->new( %newopts, 'input' => $type );
-                       } catch ( Text::Tradition::Error $e ) {
-                               $errmsg = $e->message;
-                       } catch {
-                               $errmsg = "Unexpected parsing error";
-                       }
-                       last if $tradition;
-               }
-       } elsif( $ext =~ /^(txt|csv|xls(x)?)$/ ) {
-               # If it's Excel we need to pass excel => $ext;
-               # otherwise we need to pass sep_char => [record separator].
-               if( $ext =~ /xls/ ) {
-                       $newopts{'excel'} = $ext;
-               } else {
-                       $newopts{'sep_char'} = $ext eq 'txt' ? "\t" : ',';
-               }
-               try {
-                       $tradition = Text::Tradition->new( 
-                               %newopts,
-                               'input' => 'Tabular',
-                               );
-               } catch ( Text::Tradition::Error $e ) {
-                       $errmsg = $e->message;
-               } catch {
-                       $errmsg = "Unexpected parsing error";
-               }
-       } else {
-               # Error unless we have a recognized filename extension
-               return _json_error( $c, 403, "Unrecognized file type extension $ext" );
-       }
-       
-       # Save the tradition if we have it, and return its data or else the
-       # error that occurred trying to make it.
-       if( $errmsg ) {
-               return _json_error( $c, 500, "Error parsing tradition .$ext file: $errmsg" );
-       } elsif( !$tradition ) {
-               return _json_error( $c, 500, "No error caught but tradition not created" );
-       }
-
-       my $m = $c->model('Directory');
-       $user->add_tradition( $tradition );
-       my $id = $c->model('Directory')->store( $tradition );
-       $c->model('Directory')->store( $user );
-       $c->stash->{'result'} = { 'id' => $id, 'name' => $tradition->name };
-       $c->forward('View::JSON');
-}
-
-=head2 textinfo
-
- GET /textinfo/$textid
- POST /textinfo/$textid, 
-       { name: $new_name, 
-         language: $new_language,
-         public: $is_public, 
-         owner: $new_userid } # only admin users can update the owner
-Returns information about a particular text.
-
-=cut
-
-sub textinfo :Local :Args(1) {
-       my( $self, $c, $textid ) = @_;
-       my $tradition = $c->model('Directory')->tradition( $textid );
-       unless( $tradition ) {
-               return _json_error( $c, 404, "No tradition with ID $textid" );
-       }       
-       my $ok = _check_permission( $c, $tradition );
-       return unless $ok;
-       if( $c->req->method eq 'POST' ) {
-               return _json_error( $c, 403, 
-                       'You do not have permission to update this tradition' ) 
-                       unless $ok eq 'full';
-               my $params = $c->request->parameters;
-               # Handle changes to owner-accessible parameters
-               my $m = $c->model('Directory');
-               my $changed;
-               # Handle name param - easy
-               if( exists $params->{name} ) {
-                       my $newname = delete $params->{name};
-                       unless( $tradition->name eq $newname ) {
-                               try {
-                                       $tradition->name( $newname );
-                                       $changed = 1;
-                               } catch {
-                                       return _json_error( $c, 500, "Error setting name to $newname" );
-                               }
-                       }
-               }
-               # Handle language param, making Default => null
-               my $langval = delete $params->{language} || 'Default';
-               unless( $tradition->language eq $langval ) {
-                       try {
-                               $tradition->language( $langval );
-                               $changed = 1;
-                       } catch {
-                               return _json_error( $c, 500, "Error setting language to $langval" );
-                       }
-               }
-
-               # Handle our boolean
-               my $ispublic = $tradition->public;
-               if( delete $params->{'public'} ) {  # if it's any true value...
-                       $tradition->public( 1 );
-                       $changed = 1 unless $ispublic;
-               } else {  # the checkbox was unchecked, ergo it should not be public
-                       $tradition->public( 0 );
-                       $changed = 1 if $ispublic;
-               }
-               
-               # Handle ownership change
-               my $newuser;
-               if( exists $params->{'owner'} ) {
-                       # Only admins can update user / owner
-                       my $newownerid = delete $params->{'owner'};
-                       unless( !$newownerid || 
-                               ( $tradition->has_user && $tradition->user->id eq $newownerid ) ) {
-                               unless( $c->user->get_object->is_admin ) {
-                                       return _json_error( $c, 403, 
-                                               "Only admin users can change tradition ownership" );
-                               }
-                               $newuser = $m->find_user({ username => $newownerid });
-                               unless( $newuser ) {
-                                       return _json_error( $c, 500, "No such user " . $newownerid );
-                               }
-                               $newuser->add_tradition( $tradition );
-                               $changed = 1;
-                       }
-               }
-               # TODO check for rogue parameters
-               if( scalar keys %$params ) {
-                       my $rogueparams = join( ', ', keys %$params );
-                       return _json_error( $c, 403, "Request parameters $rogueparams not recognized" );
-               }
-               # If we safely got to the end, then write to the database.
-               $m->save( $tradition ) if $changed;
-               $m->save( $newuser ) if $newuser;               
-       }
-
-       # Now return the current textinfo, whether GET or successful POST.
-       my $textinfo = {
-               textid => $textid,
-               name => $tradition->name,
-               language => $tradition->language,
-               public => $tradition->public,
-               owner => $tradition->user ? $tradition->user->id : undef,
-               witnesses => [ map { $_->sigil } $tradition->witnesses ],
-       };
-       my @stemmasvg = map { $_->as_svg({ size => [ 500, 375 ] }) } $tradition->stemmata;
-       map { $_ =~ s/\n/ /mg } @stemmasvg;
-       $textinfo->{stemmata} = \@stemmasvg;
-       $c->stash->{'result'} = $textinfo;
-       $c->forward('View::JSON');
-}
-
-=head2 variantgraph
-
- GET /variantgraph/$textid
-Returns the variant graph for the text specified at $textid, in SVG form.
-
-=cut
-
-sub variantgraph :Local :Args(1) {
-       my( $self, $c, $textid ) = @_;
-       my $tradition = $c->model('Directory')->tradition( $textid );
-       unless( $tradition ) {
-               return _json_error( $c, 404, "No tradition with ID $textid" );
-       }       
-       my $ok = _check_permission( $c, $tradition );
-       return unless $ok;
-
-       my $collation = $tradition->collation;
-       $c->stash->{'result'} = $collation->as_svg;
-       $c->forward('View::SVG');
-}
-       
-=head2 stemma
-
- GET /stemma/$textid/$stemmaseq
- POST /stemma/$textid/$stemmaseq, { 'dot' => $dot_string }
-
-Returns an SVG representation of the given stemma hypothesis for the text.  
-If the URL is called with POST, the stemma at $stemmaseq will be altered
-to reflect the definition in $dot_string. If $stemmaseq is 'n', a new
-stemma will be added.
-
-=cut
-
-sub stemma :Local :Args(2) {
-       my( $self, $c, $textid, $stemmaid ) = @_;
-       my $m = $c->model('Directory');
-       my $tradition = $m->tradition( $textid );
-       unless( $tradition ) {
-               return _json_error( $c, 404, "No tradition with ID $textid" );
-       }       
-       my $ok = _check_permission( $c, $tradition );
-       return unless $ok;
-
-       $c->stash->{'result'} = '';
-       my $stemma;
-       if( $c->req->method eq 'POST' ) {
-               if( $ok eq 'full' ) {
-                       my $dot = $c->request->body_params->{'dot'};
-                       try {
-                               if( $stemmaid eq 'n' ) {
-                                       # We are adding a new stemma.
-                                       $stemmaid = $tradition->stemma_count;
-                                       $stemma = $tradition->add_stemma( 'dot' => $dot );
-                               } elsif( $stemmaid !~ /^\d+$/ ) {
-                                       return _json_error( $c, 403, "Invalid stemma ID specification $stemmaid" );
-                               } elsif( $stemmaid < $tradition->stemma_count ) {
-                                       # We are updating an existing stemma.
-                                       $stemma = $tradition->stemma( $stemmaid );
-                                       $stemma->alter_graph( $dot );
-                               } else {
-                                       # Unrecognized stemma ID
-                                       return _json_error( $c, 404, "No stemma at index $stemmaid, cannot update" );
-                               }
-                       } catch ( Text::Tradition::Error $e ) {
-                               return _json_error( $c, 500, $e->message );
-                       }
-                       $m->store( $tradition );
-               } else {
-                       # No permissions to update the stemma
-                       return _json_error( $c, 403, 
-                               'You do not have permission to update stemmata for this tradition' );
-               }
-       }
-       
-       # For a GET or a successful POST request, return the SVG representation
-       # of the stemma in question, if any.
-       if( !$stemma && $tradition->stemma_count > $stemmaid ) {
-               $stemma = $tradition->stemma( $stemmaid );
-       }
-       my $stemma_xml = $stemma ? $stemma->as_svg( { size => [ 500, 375 ] } ) : '';
-       # What was requested, XML or JSON?
-       my $return_view = 'SVG';
-       if( my $accept_header = $c->req->header('Accept') ) {
-               $c->log->debug( "Received Accept header: $accept_header" );
-               foreach my $type ( split( /,\s*/, $accept_header ) ) {
-                       # If we were first asked for XML, return SVG
-                       last if $type =~ /^(application|text)\/xml$/;
-                       # If we were first asked for JSON, return JSON
-                       if( $type eq 'application/json' ) {
-                               $return_view = 'JSON';
-                               last;
-                       }
-               }
-       }
-       if( $return_view eq 'SVG' ) {
-               $c->stash->{'result'} = $stemma_xml;
-               $c->forward('View::SVG');
-       } else { # JSON
-               $stemma_xml =~ s/\n/ /mg;
-               $c->stash->{'result'} = { 'stemmaid' => $stemmaid, 'stemmasvg' => $stemma_xml };
-               $c->forward('View::JSON');
-       }
-}
-
-=head2 stemmadot
-
- GET /stemmadot/$textid/$stemmaseq
-Returns the 'dot' format representation of the current stemma hypothesis.
-
-=cut
-
-sub stemmadot :Local :Args(2) {
-       my( $self, $c, $textid, $stemmaid ) = @_;
-       my $m = $c->model('Directory');
-       my $tradition = $m->tradition( $textid );
-       unless( $tradition ) {
-               return _json_error( $c, 404, "No tradition with ID $textid" );
-       }       
-       my $ok = _check_permission( $c, $tradition );
-       return unless $ok;
-       my $stemma = $tradition->stemma( $stemmaid );
-       unless( $stemma ) {
-               return _json_error( $c, 404, "Tradition $textid has no stemma ID $stemmaid" );
-       }
-       # Get the dot and transmute its line breaks to literal '|n'
-       $c->stash->{'result'} = { 'dot' =>  $stemma->editable( { linesep => '|n' } ) };
-       $c->forward('View::JSON');
-}
-
-####################
-### Helper functions
-####################
-
-# Helper to check what permission, if any, the active user has for
-# the given tradition
-sub _check_permission {
-       my( $c, $tradition ) = @_;
-    my $user = $c->user_exists ? $c->user->get_object : undef;
-    if( $user ) {
-       return 'full' if ( $user->is_admin || 
-               ( $tradition->has_user && $tradition->user->id eq $user->id ) );
-    }
-       # Text doesn't belong to us, so maybe it's public?
-       return 'readonly' if $tradition->public;
-
-       # ...nope. Forbidden!
-       return _json_error( $c, 403, 'You do not have permission to view this tradition.' );
-}
-
-# Helper to throw a JSON exception
-sub _json_error {
-       my( $c, $code, $errmsg ) = @_;
-       $c->response->status( $code );
-       $c->stash->{'result'} = { 'error' => $errmsg };
-       $c->forward('View::JSON');
-       return 0;
-}
-
-=head2 default
-
-Standard 404 error page
-
-=cut
-
-sub default :Path {
-    my ( $self, $c ) = @_;
-    $c->response->body( 'Page not found' );
-    $c->response->status(404);
-}
-
-=head2 end
-
-Attempt to render a view, if needed.
-
-=cut
-
-sub end : ActionClass('RenderView') {}
-
-=head1 AUTHOR
-
-Tara L Andrews
-
-=head1 LICENSE
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-__PACKAGE__->meta->make_immutable;
-
-1;
diff --git a/stemmaweb/lib/stemmaweb/Controller/Stexaminer.pm b/stemmaweb/lib/stemmaweb/Controller/Stexaminer.pm
deleted file mode 100644 (file)
index 0b5b395..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-package stemmaweb::Controller::Stexaminer;
-use Moose;
-use namespace::autoclean;
-use Encode qw/ decode_utf8 /;
-use File::Temp;
-use JSON;
-use Text::Tradition::Analysis qw/ run_analysis wit_stringify /;
-use Text::Tradition::Stemma;
-
-BEGIN { extends 'Catalyst::Controller' }
-
-
-=head1 NAME
-
-stemmaweb::Controller::Stexaminer - Simple controller for stemma display
-
-=head1 DESCRIPTION
-
-The stemma analysis tool with the pretty colored table.
-
-=head1 METHODS
-
-=head2 index
-
- GET stexaminer/$textid/$stemmaid
-Renders the application for the text identified by $textid, using the stemma
-graph identified by $stemmaid.
-
-=cut
-
-sub index :Path :Args(2) {
-    my( $self, $c, $textid, $stemid ) = @_;
-    my $m = $c->model('Directory');
-       $c->stash->{template} = 'stexaminer.tt'; 
-       
-       # Make sure the tradition exists and is viewable
-       my $tradition = $m->tradition( $textid );
-       unless( $tradition ) {
-               $c->response->status( 404 );
-               $c->stash->{'error'} = "No tradition with ID $textid";
-               return;
-       }       
-       my $ok = _check_permission( $c, $tradition );
-       return unless $ok;
-       
-       if( $tradition->stemma_count ) {
-               my $stemma = $tradition->stemma( $stemid );
-               $c->stash->{svg} = $stemma->as_svg( { size => [ 600, 350 ] } );
-               $c->stash->{graphdot} = $stemma->editable({ linesep => ' ' });
-               $c->stash->{text_id} = $textid;
-               $c->stash->{text_title} = $tradition->name;
-               
-               # Get the analysis options
-               my( $use_type1, $ignore_sort ) = ( 0, 'none' );
-               $use_type1 = $c->req->param( 'show_type1' ) ? 1 : 0;
-               $ignore_sort = $c->req->param( 'ignore_variant' ) || '';
-               $c->stash->{'show_type1'} = $use_type1;
-               $c->stash->{'ignore_variant'} = $ignore_sort;
-               # TODO Run the analysis as AJAX from the loaded page.
-               my %analysis_options = ( 
-                       stemma_id => $stemid,
-                       exclude_type1 => !$use_type1 );
-               if( $ignore_sort eq 'spelling' ) {
-                       $analysis_options{'merge_types'} = [ qw/ spelling orthographic / ];
-               } elsif( $ignore_sort eq 'orthographic' ) {
-                       $analysis_options{'merge_types'} = 'orthographic';
-               }
-
-               # Do the deed
-               my $t = run_analysis( $tradition, %analysis_options );
-               # Stringify the reading groups
-               foreach my $loc ( @{$t->{'variants'}} ) {
-                       my $mst = wit_stringify( $loc->{'missing'} );
-                       $loc->{'missing'} = $mst;
-                       foreach my $rhash ( @{$loc->{'readings'}} ) {
-                               my $gst = wit_stringify( $rhash->{'group'} );
-                               $rhash->{'group'} = $gst;
-                               _stringify_element( $rhash, 'independent_occurrence' );
-                               _stringify_element( $rhash, 'reversions' );
-                               unless( $rhash->{'text'} ) {
-                                       $rhash->{'text'} = $rhash->{'readingid'};
-                               }
-                       }
-               }
-               # Values for TT rendering
-               $c->stash->{variants} = $t->{'variants'};
-               $c->stash->{total} = $t->{'variant_count'};
-               $c->stash->{genealogical} = $t->{'genealogical_count'};
-               $c->stash->{conflict} = $t->{'conflict_count'};         
-               # Also make a JSON stash of the data for the statistics tables
-               $c->stash->{reading_statistics} = to_json( $t->{'variants'} );
-       } else {
-               $c->stash->{error} = 'Tradition ' . $tradition->name 
-                       . 'has no stemma for analysis.';
-       }
-}
-
-sub _stringify_element {
-       my( $hash, $key ) = @_;
-       return undef unless exists $hash->{$key};
-       if( ref( $hash->{$key} ) eq 'ARRAY' ) {
-               my $str = join( ', ', @{$hash->{$key}} );
-               $hash->{$key} = $str;
-       }
-}
-
-sub _check_permission {
-       my( $c, $tradition ) = @_;
-    my $user = $c->user_exists ? $c->user->get_object : undef;
-    if( $user ) {
-       return 'full' if ( $user->is_admin || 
-               ( $tradition->has_user && $tradition->user->id eq $user->id ) );
-    }
-       # Text doesn't belong to us, so maybe it's public?
-       return 'readonly' if $tradition->public;
-
-       # ...nope. Forbidden!
-       $c->response->status( 403 );
-       $c->stash->{'error'} = 'You do not have permission to view this tradition';
-       return 0;
-}
-
-=head2 graphsvg
-
-  POST stexaminer/graphsvg
-       dot: <stemmagraph dot string> 
-       layerwits: [ <a.c. witnesses ] 
-  
-Returns an SVG string of the given graph, extended to include the given 
-layered witnesses.
-
-=cut
-
-sub graphsvg :Local {
-       my( $self, $c ) = @_;
-       my $dot = $c->request->param('dot');
-       my @layerwits = $c->request->param('layerwits[]');
-       open my $stemma_fh, '<', \$dot;
-       binmode( $stemma_fh, ':encoding(UTF-8)' );
-       my $tempstemma = Text::Tradition::Stemma->new( 'dot' => $stemma_fh );
-       my $svgopts = { size => [ 600, 350 ] };
-       if( @layerwits ) {
-               $svgopts->{'layerwits'} = \@layerwits;
-       }
-       $c->stash->{'result'} = $tempstemma->as_svg( $svgopts );
-       $c->forward('View::SVG');
-}
-
-=head2 end
-
-Attempt to render a view, if needed.
-
-=cut
-
-sub end : ActionClass('RenderView') {}
-
-=head1 AUTHOR
-
-Tara L Andrews
-
-=head1 LICENSE
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-__PACKAGE__->meta->make_immutable;
-
-1;
diff --git a/stemmaweb/lib/stemmaweb/Controller/Users.pm b/stemmaweb/lib/stemmaweb/Controller/Users.pm
deleted file mode 100644 (file)
index 32f629f..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-package stemmaweb::Controller::Users;
-use Moose;
-use namespace::autoclean;
-
-BEGIN {extends 'CatalystX::Controller::Auth'; }
-with 'Catalyst::TraitFor::Controller::reCAPTCHA';
-
-=head1 NAME
-
-stemmaweb::Controller::Users - Catalyst Controller
-
-=head1 DESCRIPTION
-
-The Users controller is based on L<CatalystX::Controller::Auth>, see
-there for most of the functionality. Any localised parts are described
-below.
-
-This controller uses L<Catalyst::TraitFor::Controller::reCAPTCHA> to
-create and check a reCaptcha form shown on the C<register> form to
-help prevent spam signups.
-
-=head1 METHODS
-
-=cut
-
-sub base :Chained('/') :PathPart('') :CaptureArgs(0)
-{
-        my ( $self, $c ) = @_;
-
-        $self->next::method( $c );
-}
-
-=head2 index
-
-The index action is not currently used.
-
-=cut
-
-sub index :Path :Args(0) {
-    my ( $self, $c ) = @_;
-
-    $c->response->body('Matched stemmaweb::Controller::Users in Users.');
-}
-
-=head2 login with openid
-
-Logging in with openid/google requires two passes through the login
-action, on the 2nd pass the C<openid-check> value is passed in when
-the openid providing webserver links the user back to the stemmaweb
-site. This adaptation to the C<login> action sets the realm we are
-authenticating against to be C<openid> in this case.
-
-=cut
-
-before login => sub {
-  my($self, $c) = @_;
-  $c->req->param( realm => 'openid')
-    if $c->req->param('openid-check');
-};
-
-=head2 register with recaptcha
-
-This adapts the C<register> action to add the recaptcha HTML to the
-page, and verify the recaptcha info entered is correct when the form
-is submitted. If the recaptcha is not correct, we just redisplay the
-form with an error message.
-
-=cut
-
-before register => sub {
-    my ($self, $c) = @_;
-
-    ## Puts HTML into stash in "recaptcha" key.
-    $c->forward('captcha_get');
-
-    ## When submitting, check recaptcha passes, else re-draw form
-    if($c->req->method eq 'POST') {
-        if(!$c->forward('captcha_check')) {
-            
-            ## Need these two lines to detach, so end can draw the correct template again:
-            my $form = $self->form_handler->new( active => [ $self->login_id_field, 'password', 'confirm_password' ] );
-            $c->stash( template => $self->register_template, form => $form );
-
-            $c->detach();
-        }
-    }
-};
-
-=head2 success
-
-A stub page returned on login / registration success.
-
-=cut
-
-sub success :Local :Args(0) {
-    my ( $self, $c ) = @_;
-
-       $c->load_status_msgs;
-    $c->stash->{template} = 'auth/success.tt';
-}
-
-=head2 post_logout
-
-Return to the index page, not to the login page.
-
-=cut
-
-sub post_logout {
-       my( $self, $c ) = @_;
-       $c->response->redirect( $c->uri_for_action( '/index' ) );
-       $c->detach;
-}
-
-=head1 AUTHOR
-
-A clever guy
-
-=head1 LICENSE
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-__PACKAGE__->meta->make_immutable;
-
-1;
diff --git a/stemmaweb/lib/stemmaweb/Model/Directory.pm b/stemmaweb/lib/stemmaweb/Model/Directory.pm
deleted file mode 100644 (file)
index 1c8d061..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-package stemmaweb::Model::Directory;
-use strict;
-use warnings;
-use Moose;
-use Text::Tradition::Directory;
-
-extends 'Catalyst::Model::KiokuDB';
-
-has '+model_class' => ( default => 'Text::Tradition::Directory' );
-
-1;
diff --git a/stemmaweb/lib/stemmaweb/View/Email/Template.pm b/stemmaweb/lib/stemmaweb/View/Email/Template.pm
deleted file mode 100644 (file)
index 91f3784..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-package stemmaweb::View::Email::Template;
-
-use strict;
-use base 'Catalyst::View::Email::Template';
-
-__PACKAGE__->config(
-    stash_key       => 'email',
-    template_prefix => ''
-);
-
-=head1 NAME
-
-stemmaweb::View::Email::Template - Templated Email View for stemmaweb
-
-=head1 DESCRIPTION
-
-View for sending template-generated email from stemmaweb. 
-
-=head1 AUTHOR
-
-A clever guy
-
-=head1 SEE ALSO
-
-L<stemmaweb>
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-1;
diff --git a/stemmaweb/lib/stemmaweb/View/JSON.pm b/stemmaweb/lib/stemmaweb/View/JSON.pm
deleted file mode 100644 (file)
index 347c034..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-package stemmaweb::View::JSON;
-
-use strict;
-use base 'Catalyst::View::JSON';
-
-use JSON::XS ();
-
-sub encode_json {
-       my( $self, $c, $data ) = @_;
-       my $json = JSON::XS->new->utf8->convert_blessed(1);
-       $json->encode( $data );
-}
-
-1;
-
-=head1 NAME
-
-stemmaweb::View::JSON - Catalyst JSON View
-
-=head1 SYNOPSIS
-
-See L<stemmaweb>
-
-=head1 DESCRIPTION
-
-Catalyst JSON View.
-
-=head1 AUTHOR
-
-Tara Andrews
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
diff --git a/stemmaweb/lib/stemmaweb/View/Plain.pm b/stemmaweb/lib/stemmaweb/View/Plain.pm
deleted file mode 100644 (file)
index 2201116..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-package stemmaweb::View::Plain;
-
-use strict;
-use base 'Catalyst::View::Download::Plain';
-
-=head1 NAME
-
-stemmaweb::View::Plain - Catalyst view for plaintext files
-
-=head1 SYNOPSIS
-
-See L<stemmaweb>
-
-=head1 DESCRIPTION
-
-Catalyst plaintext View.
-
-=head1 AUTHOR
-
-Tara Andrews
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-1;
diff --git a/stemmaweb/lib/stemmaweb/View/SVG.pm b/stemmaweb/lib/stemmaweb/View/SVG.pm
deleted file mode 100644 (file)
index b8e4673..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-package stemmaweb::View::SVG;
-
-use strict;
-use base 'Catalyst::View';
-use Encode qw( decode_utf8 );
-
-sub process {
-        my( $self, $c ) = @_;
-        $c->res->content_type( 'image/svg+xml' );
-        $c->res->content_encoding( 'UTF-8' );
-        $c->res->output( decode_utf8( $c->stash->{result} ) );
-}
-
-1;
diff --git a/stemmaweb/lib/stemmaweb/View/TT.pm b/stemmaweb/lib/stemmaweb/View/TT.pm
deleted file mode 100644 (file)
index d8a3005..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-package stemmaweb::View::TT;
-
-use strict;
-use warnings;
-
-use base 'Catalyst::View::TT';
-
-__PACKAGE__->config(
-    TEMPLATE_EXTENSION => '.tt',
-    ENCODING => 'utf-8',
-    render_die => 1,
-);
-
-=head1 NAME
-
-stemmaweb::View::TT - TT View for stemmaweb
-
-=head1 DESCRIPTION
-
-TT View for stemmaweb.
-
-=head1 SEE ALSO
-
-L<stemmaweb>
-
-=head1 AUTHOR
-
-Tara L Andrews
-
-=head1 LICENSE
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-1;
diff --git a/stemmaweb/root/css/auth.css b/stemmaweb/root/css/auth.css
deleted file mode 100644 (file)
index 76e3717..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#topbanner {
-       width: 100%;
-       height: 50px;
-       margin-top: 20px;
-}
-.error {
-    color: #d24848;
-}
-.openid_form {
-       margin-top: 20px;
-}
-#openid_input {
-       background: url('../images/openid-16x16.gif');
-       background-color: white;
-       background-position: 0 50%;
-       background-repeat: no-repeat;
-       padding-left: 18px;
-       padding-top: 3px;
-       padding-bottom: 3px;
-       margin-right: 15px;
-       width: 200px;
-}
diff --git a/stemmaweb/root/css/colorscheme.svg b/stemmaweb/root/css/colorscheme.svg
deleted file mode 100644 (file)
index 6e99cfc..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="744.09448819"
-   height="1052.3622047"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.1 r9760"
-   sodipodi:docname="New document 1">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.35"
-     inkscape:cx="-130.71429"
-     inkscape:cy="520"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="1215"
-     inkscape:window-height="743"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <rect
-       style="fill:#ffeeaa;fill-opacity:1;stroke:none"
-       id="rect2985"
-       width="117.14286"
-       height="122.85714"
-       x="22.857143"
-       y="49.505039" />
-    <rect
-       y="49.505039"
-       x="162.85715"
-       height="122.85714"
-       width="117.14286"
-       id="rect2987"
-       style="fill:#afc6e9;fill-opacity:1;stroke:none" />
-    <rect
-       style="fill:#d5fff6;fill-opacity:1;stroke:none"
-       id="rect2989"
-       width="117.14286"
-       height="122.85714"
-       x="302.85715"
-       y="49.505039" />
-    <rect
-       y="189.50504"
-       x="302.85715"
-       height="122.85714"
-       width="117.14286"
-       id="rect2991"
-       style="fill:#e5d5ff;fill-opacity:1;stroke:none" />
-    <rect
-       y="189.50504"
-       x="22.857143"
-       height="122.85714"
-       width="117.14286"
-       id="rect2993"
-       style="fill:#ffaaaa;fill-opacity:1;stroke:none" />
-    <rect
-       style="fill:#e5ff80;fill-opacity:1;stroke:none"
-       id="rect2995"
-       width="117.14286"
-       height="122.85714"
-       x="162.85715"
-       y="189.50504" />
-    <rect
-       y="49.505043"
-       x="442.85715"
-       height="122.85714"
-       width="117.14286"
-       id="rect2997"
-       style="fill:#ffccaa;fill-opacity:1;stroke:none" />
-    <rect
-       style="fill:#ffd5e5;fill-opacity:1;stroke:none"
-       id="rect2999"
-       width="117.14286"
-       height="122.85714"
-       x="442.85715"
-       y="189.50504" />
-    <rect
-       style="fill:#e8f1fe;fill-opacity:1;stroke:none"
-       id="rect3769"
-       width="117.14286"
-       height="122.85714"
-       x="162.85715"
-       y="369.50504" />
-    <rect
-       y="369.50504"
-       x="302.85715"
-       height="122.85714"
-       width="117.14286"
-       id="rect3771"
-       style="fill:#eafff5;fill-opacity:1;stroke:none" />
-  </g>
-</svg>
diff --git a/stemmaweb/root/css/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png b/stemmaweb/root/css/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png
deleted file mode 100755 (executable)
index 6348115..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png b/stemmaweb/root/css/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png
deleted file mode 100755 (executable)
index 7680b54..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png b/stemmaweb/root/css/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png
deleted file mode 100755 (executable)
index 705a32e..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-bg_glass_50_3baae3_1x400.png b/stemmaweb/root/css/cupertino/images/ui-bg_glass_50_3baae3_1x400.png
deleted file mode 100755 (executable)
index c5d4da9..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-bg_glass_50_3baae3_1x400.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png b/stemmaweb/root/css/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png
deleted file mode 100755 (executable)
index d9387e9..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png b/stemmaweb/root/css/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
deleted file mode 100755 (executable)
index 28b566c..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png b/stemmaweb/root/css/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png
deleted file mode 100755 (executable)
index d588297..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png b/stemmaweb/root/css/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png
deleted file mode 100755 (executable)
index 2289d3c..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png b/stemmaweb/root/css/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
deleted file mode 100755 (executable)
index 0de3275..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-icons_2694e8_256x240.png b/stemmaweb/root/css/cupertino/images/ui-icons_2694e8_256x240.png
deleted file mode 100755 (executable)
index e62b8f7..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-icons_2694e8_256x240.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-icons_2e83ff_256x240.png b/stemmaweb/root/css/cupertino/images/ui-icons_2e83ff_256x240.png
deleted file mode 100755 (executable)
index 09d1cdc..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-icons_2e83ff_256x240.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-icons_3d80b3_256x240.png b/stemmaweb/root/css/cupertino/images/ui-icons_3d80b3_256x240.png
deleted file mode 100755 (executable)
index f13b206..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-icons_3d80b3_256x240.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-icons_72a7cf_256x240.png b/stemmaweb/root/css/cupertino/images/ui-icons_72a7cf_256x240.png
deleted file mode 100755 (executable)
index 0d20b73..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-icons_72a7cf_256x240.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/images/ui-icons_ffffff_256x240.png b/stemmaweb/root/css/cupertino/images/ui-icons_ffffff_256x240.png
deleted file mode 100755 (executable)
index 42f8f99..0000000
Binary files a/stemmaweb/root/css/cupertino/images/ui-icons_ffffff_256x240.png and /dev/null differ
diff --git a/stemmaweb/root/css/cupertino/jquery-ui-1.8.13.custom.css b/stemmaweb/root/css/cupertino/jquery-ui-1.8.13.custom.css
deleted file mode 100755 (executable)
index 9bb2aa0..0000000
+++ /dev/null
@@ -1,578 +0,0 @@
-/*
- * jQuery UI CSS Framework 1.8.13
- *
- * 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/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:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.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.13
- *
- * 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/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=0.8em&cornerRadius=6px&bgColorHeader=deedf7&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=aed0ea&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f2f5f7&bgTextureContent=04_highlight_hard.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=362b36&iconColorContent=72a7cf&bgColorDefault=d7ebf9&bgTextureDefault=02_glass.png&bgImgOpacityDefault=80&borderColorDefault=aed0ea&fcDefault=2779aa&iconColorDefault=3d80b3&bgColorHover=e4f1fb&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=74b2e2&fcHover=0070a3&iconColorHover=2694e8&bgColorActive=3baae3&bgTextureActive=02_glass.png&bgImgOpacityActive=50&borderColorActive=2694e8&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=ffef8f&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=25&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=cd0a0a&bgTextureError=01_flat.png&bgImgOpacityError=15&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=eeeeee&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=000000&bgTextureShadow=04_highlight_hard.png&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 0.8em; }
-.ui-widget .ui-widget { font-size: 0.8em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 0.8em; }
-.ui-widget-content { border: 1px solid #dddddd; background: #f2f5f7 url(images/ui-bg_highlight-hard_100_f2f5f7_1x100.png) 50% top repeat-x; color: #362b36; }
-.ui-widget-content a { color: #362b36; }
-.ui-widget-header { border: 1px solid #aed0ea; background: #deedf7 url(images/ui-bg_highlight-soft_100_deedf7_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 #aed0ea; background: #d7ebf9 url(images/ui-bg_glass_80_d7ebf9_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2779aa; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2779aa; 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 #74b2e2; background: #e4f1fb url(images/ui-bg_glass_100_e4f1fb_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #0070a3; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #0070a3; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #2694e8; background: #3baae3 url(images/ui-bg_glass_50_3baae3_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; 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 #f9dd34; background: #ffef8f url(images/ui-bg_highlight-soft_25_ffef8f_1x100.png) 50% top 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: #cd0a0a url(images/ui-bg_flat_15_cd0a0a_40x100.png) 50% 50% repeat-x; color: #ffffff; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
-.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_72a7cf_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_72a7cf_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_72a7cf_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_3d80b3_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_2694e8_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_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_ffffff_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-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; }
-.ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; }
-.ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
-.ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
-.ui-corner-top { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; }
-.ui-corner-bottom { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
-.ui-corner-right {  -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
-.ui-corner-left { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
-.ui-corner-all { -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #eeeeee url(images/ui-bg_diagonals-thick_90_eeeeee_40x40.png) 50% 50% repeat; opacity: .80;filter:Alpha(Opacity=80); }
-.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #000000 url(images/ui-bg_highlight-hard_70_000000_1x100.png) 50% top repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
- * jQuery UI Resizable 1.8.13
- *
- * 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/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;
-       /* http://bugs.jqueryui.com/ticket/7233
-        - Resizable: resizable handles fail to work in IE if transparent and content overlaps
-       */
-       background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=);
-}
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.13
- *
- * 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/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Accordion 1.8.13
- *
- * 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/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 0.8em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
-/*
- * jQuery UI Autocomplete 1.8.13
- *
- * 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#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.13
- *
- * 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 Button 1.8.13
- *
- * 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/Button#theming
- */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; } 
-button.ui-button-icons-only { width: 3.7em; } 
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4;  }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*
- * jQuery UI Dialog 1.8.13
- *
- * 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/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*
- * jQuery UI Slider 1.8.13
- *
- * 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/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs 1.8.13
- *
- * 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/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; }
-/*
- * jQuery UI Datepicker 1.8.13
- *
- * 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/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month, 
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
-    display: none; /*sorry for IE5*/
-    display/**/: block; /*sorry for IE5*/
-    position: absolute; /*must have*/
-    z-index: -1; /*must have*/
-    filter: mask(); /*must have*/
-    top: -4px; /*must have*/
-    left: -4px; /*must have*/
-    width: 200px; /*must have*/
-    height: 200px; /*must have*/
-}/*
- * jQuery UI Progressbar 1.8.13
- *
- * 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/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/stemmaweb/root/css/relationship.css b/stemmaweb/root/css/relationship.css
deleted file mode 100644 (file)
index d64acab..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-body { 
-    margin: 0; 
-    padding: 0 20px; 
-    font: 1em "Trebuchet MS", verdana, arial, sans-serif; 
-    font-size: 85%; 
-    background: #EDF1FA;
-}
-.error {
-    color: red;
-}
-#topbanner {
-       width: 100%;
-       height: 100px;
-       margin-top: 20px;
-}
-#bannerinfo {
-       float: right;
-       margin-right: 12%;
-       margin-top: 15px;
-}
-#logoimg {
-       float: left;
-       margin-left: 20px;
-}
-.helptag {
-       color: #488dd2;
-       text-decoration: underline;
-}
-#logotitle {
-       float: left;
-       margin-left: 30px;
-       height: 55px;
-       padding-top: 40px;
-}
-.segment_guide {
-       color: #488dd2;
-       padding-left: 30px;
-       padding-right: 30px;
-}
-.selected {
-       background-color: #dadada;
-}
-h1.title a:link, h1.title a:visited, h1.title a:active {
-       color: #666;
-       font-weight: bold;
-       text-decoration: none;
-}
-h1.title a:hover {
-       color: #222;
-}
-h1.title {
-       margin: 0;
-       padding: 0;
-       letter-spacing: -1px;
-       line-height: 1.0em;
-       font-family: tahoma, arial, sans-serif;
-       font-size: 240%;
-}
-p.tagline {
-       margin: 0;
-       padding: 0;
-       font-size: 1.2em;
-       font-weight: bold;
-       color: #666;
-}
-.term {
-       font-style: italic;
-}
-p.api {
-       font-weight: bold;
-       font-family: Courier;
-}
-span.apimore {
-       font-family: Courier;
-}
-#enlargement_container {
-    height: 504px;
-    width: 90%;
-    margin-top: 5px;
-    border: 2px solid #B0C6F7;
-    background: #fff;
-    padding-top: 5px;
-    padding-bottom: 5px;    
-}
-#loading_overlay {
-       display: none;
-       position: absolute;
-       height: 500px;
-       width: 89%;
-       z-index: 2;
-       opacity: 0.7;
-    background-image: url("cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png");
-    background-repeat: repeat;
-    background-attachment: scroll;
-    background-position: 50% 50%;
-    background-color: #EEEEEE; 
-}
-#loading_message {
-       position: relative;
-       background-color: #EDF1FA;
-       color: #222222;
-    border: 2px solid #B0C6F7;
-       height: 20px;
-       width: 150px;
-       padding: 20px;
-}
-#dialog_overlay {
-    display: none;
-    position: absolute;
-    background-image: url("cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png");
-    background-repeat: repeat;
-    background-attachment: scroll;
-    background-position: 50% 50%;
-    background-color: #EEEEEE; 
-    opacity: 0.7;
-    padding-bottom: 5px;
-    padding-top: 5px;
-    border: 2px solid #B0C6F7;
-}
-#update_workspace_button {
-    position: absolute;
-    left: 74.5%;
-    top: 126px;
-    height: 44px;
-    width: 46px;
-    margin-top: 17px;
-    border: none;
-    background-image: url('../images/act_icons.png');
-    background-position: 0px 44px;
-    background-color: none;
-    background-repeat: none;
-    z-index: 50;
-}
-#workspace_container {
-    height: 504px;
-    width: 43%;
-    position: relative;
-    top: -545px;
-    left: 47%;
-    margin-top: 10px;
-    border: 2px solid #B0C6F7;
-    background: #fff;
-}
-#graph_underlay {
-    height: 100%; 
-    width: 100%; 
-    background: #fff;
-    position: relative;
-    z-index: -2;
-}
-#visor {
-    height: 100px; 
-    width: 20%; 
-    background-color: #61EDAE; 
-    opacity: 0.15; 
-    position: relative;
-    left: 40%; 
-    top: -104px;
-    z-index: -1;
-    border-left: 2px solid #3C73FA;
-    border-right: 2px solid #3C73FA;
-    border-bottom: 2px solid #B0C6F7;
-    border-top: 2px solid #B0C6F7;
-}
-#graph {
-    position: relative; top: -208px;
-    padding: 0px;
-    overflow: auto;
-    /* cursor: -moz-grab !important; */ /* should this be applied with JS? */
-}
-#enlargement {
-    padding: 0px;
-    overflow: hidden;
-}
-#workspace {
-    padding: 0px;
-    overflow: hidden;
-}
-#keymap {
-    position: absolute;
-    left: 80%;
-    top: 140px;
-    border: 2px solid #B0C6F7;
-    background: #fff;
-    background: url("cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png");
-    background-repeat: repeat-x;
-    background-scroll: scroll;
-    background-position: 50% top;
-    background-color: #F2F5F7;
-}
-#keymap ul {
-    padding: 10px;
-    padding-left: 14px;
-    padding-right: 14px;
-    margin: 0px;
-}
-#keymap li {
-    border-left: 16px solid #fff;
-    padding-left: 8px;
-    list-style: none;
-    margin-bottom: 3px;
-}
-
-.draggable {
-       cursor:pointer;
-}
-
-.noselect {
--webkit-touch-callout: none;
--webkit-user-select: none;
--khtml-user-select: none;
--moz-user-select: none;
--ms-user-select: none;
-user-select: none;
-}
-
-#normalization {
-       float: left;
-       padding: 10px;
-}
-#relemmatize_pending {
-       float: left;
-       padding: 10px;
-       display: none;
-}
-#morph_outer {
-       clear: both;
-       float: left;
-}
-#morphology {
-       text-align: right;
-       margin: 10px;
-}
diff --git a/stemmaweb/root/css/stexaminer.css b/stemmaweb/root/css/stexaminer.css
deleted file mode 100644 (file)
index 68a5cc1..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-#topbanner {
-       width: 100%;
-       height: 100px;
-       margin-top: 20px;
-}
-#bannerinfo {
-       float: right;
-       margin-right: 12%;
-       margin-top: 15px;
-}
-#variants_table {
-    clear: both;
-    width: 90%;
-    height: 190px;
-    border: 1px #c6dcf1 solid;
-    margin-bottom: 20px;
-    overflow: auto;
-}
-#stemma_graph {
-    height: 350px;
-    clear: both;
-    float: left;
-    width: 600px;
-    text-align: center;
-    border: 1px #c6dcf1 solid;
-}
-#row_statistics {
-       float: left;
-       padding: 30px;
-}
-#statistics {
-    font-style: italic;
-    margin-bottom: 25px;
-    position: relative;
-    top: -15px;
-}
-.reading_statistics {
-       margin: 7pt;
-       border-bottom: 1px solid #488dd2;
-}
-.readinglabel {
-       font-weight: bold;
-}
-.readingroots .reversionroots {
-       font-weight: bold;
-       color: #488dd2;
-}
-.reading_copied {
-       color: #33dd33;
-}
-.reading_changed {
-       color: #dd3333;
-}
-.template {
-       display: none;
-}
-.genealogical {
-    background: #88ffaa;
-}
-.coincidental {
-    background: #fff;
-}
-.unsolved {
-       background: lightgrey;
-}
-.conflict {
-    background: #ff6666;
-}
-.reversion {
-       background: #ffd700;
-}
-.active_variant_row {
-    background: #c6dcf1;
-    font-style: italic;
-}
-.active_variant_cell {
-    background: #e8f1fe;
-}
-.cellb0 {
-    border-right: 20px solid #ffeeaa;
-}
-.cellb1 {
-    border-right: 20px solid #afc6e9;
-}
-.cellb2 {
-    border-right: 20px solid #d5fff6;
-}
-.cellb3 {
-    border-right: 20px solid #ffccaa;
-}
-.cellb4 {
-    border-right: 20px solid #ffaaaa;
-}
-.cellb5 {
-    border-right: 20px solid #e5ff80;
-}
-.cellb6 {
-    border-right: 20px solid #e5d5ff;
-}
-.cellb7 {
-    border-right: 20px solid #ffd5e5;
-}
-
-/* Clearfix hack to make div container height work */
-.clearfix:after {
-       content: ".";
-       display: block;
-       clear: both;
-       visibility: hidden;
-       line-height: 0;
-       height: 0;
-}
-.clearfix {
-       display: inline-block;
-}
-html[xmlns] .clearfix {
-       display: block;
-}
-* html .clearfix {
-       height: 1%;
-}
\ No newline at end of file
diff --git a/stemmaweb/root/css/style.css b/stemmaweb/root/css/style.css
deleted file mode 100644 (file)
index c54f7ea..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/* General site-wide layout */
-body { 
-    margin: 0; 
-    padding: 20px; 
-    font: 1em Arial, Helvetica, sans-serif; 
-    font-size: 85%; 
-    color: #666;
-}
-h1 {
-    border-bottom: 1px solid #488dd2;
-    color: #488dd2;
-    font-size: 18pt;
-}
-h2 {
-    margin-top: 10px;
-    color: #488dd2;
-    font-size: 18px;
-} 
-h3 {
-       color: #488dd2;
-       font-size: 14px;
-       font-style: italic;
-}
-
-div.button {
-  background: transparent url('../images/b_button_a.png') no-repeat scroll top right;
-  color: #fff;
-  display: block;
-  float: left;
-  font: normal 12px Times, Times New Roman, Serif; /* arial, sans-serif; */
-  height: 24px;
-  margin-right: 6px;
-  padding-right: 18px; /* sliding doors padding */
-  text-decoration: none;
-}
-div.button.reset {
-  background: transparent url('../images/c_button_a.png') no-repeat scroll top right;
-}
-div.button span {
-  background: transparent url('../images/b_button_span.png') no-repeat;
-  display: block;
-  line-height: 14px;
-  padding: 5px 0 5px 18px;
-}
-div.button.reset span {
-  background: transparent url('../images/c_button_span.png') no-repeat;
-}
-div.button:hover {
-  background-position: bottom right;
-  color: #444;
-  outline: none; /* hide dotted outline in Firefox */
-}
-div.button:hover span {
-  background-position: bottom left;
-}
-#stemma_pager_buttons {
-    height: 28px;
-}
-div.pager_left_button {
-  width: 28px;
-  height: 28px;
-  float: left;
-  background: transparent url('../images/button_left_28.png') no-repeat left bottom;    
-}
-div.pager_left_button:hover {
-    background: transparent url('../images/button_left_28.png') no-repeat center bottom;    
-}
-div.pager_right_button:hover {
-    background: transparent url('../images/button_right_28.png') no-repeat center bottom;    
-}
-div.pager_right_button {
-  width: 28px;
-  height: 28px;
-  float: left;
-  margin-left: 10px;
-  background: transparent url('../images/button_right_28.png') no-repeat left bottom;
-}
-div.pager_right_button.greyed_out, div.pager_right_button.greyed_out:hover {
-    opacity: 0.5;
-    background: url("../images/button_right_28.png") no-repeat scroll right bottom transparent;
-}
-div.pager_left_button.greyed_out, div.pager_left_button.greyed_out:hover {
-    opacity: 0.5;
-    background: url("../images/button_left_28.png") no-repeat scroll right bottom transparent;
-}
-#topbanner {
-       width: 100%;
-}
-#bannerinfo {
-       float: right;
-       margin-right: 12%;
-       margin-top: 15px;
-}
-.navlink {
-       color: #488dd2;
-       text-decoration: underline;
-}
-
-
-
-/* Index page components */
-
-#directory_container {
-       float: left;
-       width: 300px;
-       height: 450px;
-       border: 1px #c6dcf1 solid;
-       padding-left: 10px;
-       padding-right: 10px;
-}
-#loading_message {
-       display: none;
-}
-#directory {
-       height: 360px;
-       margin-left: 10px;
-       overflow: auto;
-}
-#new_trad_button {
-       margin-left: 10px;
-       position: relative;
-       top: 10px;
-}
-.traditionname {
-       text-decoration: underline;
-}
-.selected {
-       font-style: italic;
-}
-.mainnav {
-       position: absolute;
-       top: 10px;
-       right: 22px;
-       font-size: 14px;
-       font-weight: 100;
-       color: #488dd2;
-}
-.mainnav a {
-       color: #488dd2;
-}
-#textinfo_waitbox {
-       float: left;
-       padding-left: 50px;
-}
-#textinfo_container {
-    border: 1px solid #C6DCF1;
-       float: left;
-       height: 510px;
-       width: 710px;
-       margin-left: 10px;
-       padding-left: 10px;
-       padding-right: 10px;
-}
-#edit_instructions {
-       float: left;
-}
-#stemma_container h2 h3 {
-       color: #666;
-}
-#stemma_graph {
-    height: 375px;
-    width: 500px;
-    text-align: center;
-    border: 1px #c6dcf1 solid;
-}
-#stemma_graph img {
-       margin-top: expression(( 450 - this.height ) / 2);
-}
-#textinfo_container_buttons {
-    float: right;
-    left: -18px;
-    position: relative;
-    top: 15px;
-}
-#run_stexaminer, #run_relater, #open_stemma_add, #open_stemma_edit {
-    height: 18px;
-}
-#stemma_pager {
-    height: 38px;
-}
-#open_textinfo_edit {
-    float: right;
-    height: 30px;
-    position: relative;
-    top: -34px;
-    left: -8px;
-}
-#upload-collation-dialog {
-    overflow: hidden;
-}
-.uploadfile {
-    font-weight: bold;
-}
-#uploadfile_label {
-    font-weight: normal;
-}
-#filelist {
-    position: relative;
-    top: 10px;
-    margin-bottom: 24px;
-}
-.error {
-    font-weight: bold;
-    color: #ff3333;
-}
diff --git a/stemmaweb/root/favicon.ico b/stemmaweb/root/favicon.ico
deleted file mode 100644 (file)
index 5ad723d..0000000
Binary files a/stemmaweb/root/favicon.ico and /dev/null differ
diff --git a/stemmaweb/root/images/act_arrs.gif b/stemmaweb/root/images/act_arrs.gif
deleted file mode 100644 (file)
index d2fe22b..0000000
Binary files a/stemmaweb/root/images/act_arrs.gif and /dev/null differ
diff --git a/stemmaweb/root/images/act_icons.png b/stemmaweb/root/images/act_icons.png
deleted file mode 100644 (file)
index 0ec9c2d..0000000
Binary files a/stemmaweb/root/images/act_icons.png and /dev/null differ
diff --git a/stemmaweb/root/images/ajax-loader.gif b/stemmaweb/root/images/ajax-loader.gif
deleted file mode 100644 (file)
index 7f0c6ec..0000000
Binary files a/stemmaweb/root/images/ajax-loader.gif and /dev/null differ
diff --git a/stemmaweb/root/images/arrows.svg b/stemmaweb/root/images/arrows.svg
deleted file mode 100644 (file)
index 9b631f1..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="744.09448819"
-   height="1052.3622047"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.1 r9760"
-   sodipodi:docname="New document 1">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient3782">
-      <stop
-         style="stop-color:#4279b9;stop-opacity:1;"
-         offset="0"
-         id="stop3784" />
-      <stop
-         id="stop3796"
-         offset="1"
-         style="stop-color:#4279b9;stop-opacity:0.77419353;" />
-      <stop
-         style="stop-color:#4279b9;stop-opacity:0;"
-         offset="1"
-         id="stop3786" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3782"
-       id="linearGradient3794"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074"
-       gradientUnits="userSpaceOnUse" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.86620581"
-     inkscape:cx="161.37486"
-     inkscape:cy="651.35246"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:window-width="1060"
-     inkscape:window-height="701"
-     inkscape:window-x="138"
-     inkscape:window-y="8"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#linearGradient3794);fill-opacity:1;stroke:#3d66b4;stroke-width:5;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-       id="path3012"
-       sodipodi:cx="376.35397"
-       sodipodi:cy="371.23074"
-       sodipodi:rx="107.36478"
-       sodipodi:ry="107.36478"
-       d="m 483.71875,371.23074 a 107.36478,107.36478 0 1 1 -214.72955,0 107.36478,107.36478 0 1 1 214.72955,0 z"
-       transform="matrix(-0.50578508,-0.86265952,0.86265952,-0.50578508,248.46246,899.65906)" />
-    <path
-       style="fill:#ffccaa;fill-opacity:0.81578944;stroke:#917c6f;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-       d="m -106.27827,119.76007 -28.79355,99.08196 111.893036,89.82678 c 30.4746398,23.40097 11.04706,34.32639 0,47.34693 l -112.798466,84.98987 30.51531,90.52034 155.918036,-129.01588 c 79.533124,-68.85933 69.648744,-69.11694 0,-138.75 z"
-       id="rect2985"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccc" />
-    <path
-       sodipodi:nodetypes="ccccccccc"
-       inkscape:connector-curvature="0"
-       id="path3010"
-       d="m 348.0535,295.32721 -12.6144,43.50166 49.02012,39.4382 c 13.35088,10.27413 4.8397,15.07091 0,20.78754 l -49.41678,37.31456 13.36869,39.74271 68.30739,-56.64407 c 34.8433,-30.23249 30.51297,-30.3456 0,-60.9178 z"
-       style="fill:#ffffff;fill-opacity:0.94247788000000021;stroke:#3d66b4;stroke-width:5;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
-  </g>
-</svg>
diff --git a/stemmaweb/root/images/b_button_a.png b/stemmaweb/root/images/b_button_a.png
deleted file mode 100644 (file)
index c70d53e..0000000
Binary files a/stemmaweb/root/images/b_button_a.png and /dev/null differ
diff --git a/stemmaweb/root/images/b_button_a_old.png b/stemmaweb/root/images/b_button_a_old.png
deleted file mode 100644 (file)
index a04e123..0000000
Binary files a/stemmaweb/root/images/b_button_a_old.png and /dev/null differ
diff --git a/stemmaweb/root/images/b_button_span.png b/stemmaweb/root/images/b_button_span.png
deleted file mode 100644 (file)
index 14883a6..0000000
Binary files a/stemmaweb/root/images/b_button_span.png and /dev/null differ
diff --git a/stemmaweb/root/images/b_button_span_old.png b/stemmaweb/root/images/b_button_span_old.png
deleted file mode 100644 (file)
index 2d80f72..0000000
Binary files a/stemmaweb/root/images/b_button_span_old.png and /dev/null differ
diff --git a/stemmaweb/root/images/button_left_28.png b/stemmaweb/root/images/button_left_28.png
deleted file mode 100644 (file)
index 73ce0d0..0000000
Binary files a/stemmaweb/root/images/button_left_28.png and /dev/null differ
diff --git a/stemmaweb/root/images/button_right_28.png b/stemmaweb/root/images/button_right_28.png
deleted file mode 100644 (file)
index 2c969b6..0000000
Binary files a/stemmaweb/root/images/button_right_28.png and /dev/null differ
diff --git a/stemmaweb/root/images/c_button_a.png b/stemmaweb/root/images/c_button_a.png
deleted file mode 100644 (file)
index effad11..0000000
Binary files a/stemmaweb/root/images/c_button_a.png and /dev/null differ
diff --git a/stemmaweb/root/images/c_button_span.png b/stemmaweb/root/images/c_button_span.png
deleted file mode 100644 (file)
index aff9680..0000000
Binary files a/stemmaweb/root/images/c_button_span.png and /dev/null differ
diff --git a/stemmaweb/root/images/openid-16x16.gif b/stemmaweb/root/images/openid-16x16.gif
deleted file mode 100644 (file)
index e2d8377..0000000
Binary files a/stemmaweb/root/images/openid-16x16.gif and /dev/null differ
diff --git a/stemmaweb/root/images/resources/arrows.svg b/stemmaweb/root/images/resources/arrows.svg
deleted file mode 100644 (file)
index e3268ca..0000000
+++ /dev/null
@@ -1,415 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="744.09448819"
-   height="1052.3622047"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.1 r9760"
-   sodipodi:docname="arrows.svg">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient4099">
-      <stop
-         id="stop4101"
-         offset="0"
-         style="stop-color:#c8d8eb;stop-opacity:1;" />
-      <stop
-         style="stop-color:#90a2b7;stop-opacity:0.89803922;"
-         offset="0.5"
-         id="stop4103" />
-      <stop
-         style="stop-color:#e9eef4;stop-opacity:0.79838711;"
-         offset="1"
-         id="stop4105" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4073">
-      <stop
-         id="stop4075"
-         offset="0"
-         style="stop-color:#3681da;stop-opacity:1;" />
-      <stop
-         style="stop-color:#cddef1;stop-opacity:0.89803922;"
-         offset="0.5"
-         id="stop4077" />
-      <stop
-         style="stop-color:#e9eef4;stop-opacity:0.87096775;"
-         offset="1"
-         id="stop4079" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient3782">
-      <stop
-         style="stop-color:#0f3f78;stop-opacity:1;"
-         offset="0"
-         id="stop3784" />
-      <stop
-         id="stop3916"
-         offset="0.5"
-         style="stop-color:#83addf;stop-opacity:0.89803922;" />
-      <stop
-         id="stop3796"
-         offset="1"
-         style="stop-color:#e9eef4;stop-opacity:0.79838711;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3782"
-       id="linearGradient3092"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3782"
-       id="linearGradient3100"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4099"
-       id="linearGradient3108"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4073"
-       id="linearGradient3128"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3782"
-       id="linearGradient3130"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4099"
-       id="linearGradient3132"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4073"
-       id="linearGradient4081"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3782"
-       id="linearGradient4133"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3782"
-       id="linearGradient4135"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4099"
-       id="linearGradient4137"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4099"
-       id="linearGradient4139"
-       gradientUnits="userSpaceOnUse"
-       x1="266.4892"
-       y1="371.23074"
-       x2="486.21875"
-       y2="371.23074" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3782"
-       id="linearGradient3801"
-       x1="297.53821"
-       y1="70.667694"
-       x2="297.53821"
-       y2="24.233934"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3782"
-       id="linearGradient3820"
-       gradientUnits="userSpaceOnUse"
-       x1="297.53821"
-       y1="70.667694"
-       x2="297.53821"
-       y2="24.233934" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4073"
-       id="linearGradient3824"
-       gradientUnits="userSpaceOnUse"
-       x1="297.53821"
-       y1="70.667694"
-       x2="297.53821"
-       y2="24.233934"
-       gradientTransform="translate(0,36.781734)" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.4575355"
-     inkscape:cx="259.775"
-     inkscape:cy="905.32393"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:window-width="1188"
-     inkscape:window-height="733"
-     inkscape:window-x="80"
-     inkscape:window-y="13"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <g
-       id="g4111"
-       inkscape:export-filename="/Users/joris/Documents/workspace/stemmatology/stemmaweb/root/images/resources/button_right_28.png"
-       inkscape:export-xdpi="11.31"
-       inkscape:export-ydpi="11.31"
-       transform="matrix(0.1948543,0,0,0.1948543,13.452384,123.81932)">
-      <path
-         transform="matrix(-0.50578508,-0.86265952,0.86265952,-0.50578508,344.6993,814.22902)"
-         d="m 483.71875,371.23074 c 0,59.29593 -48.06885,107.36478 -107.36478,107.36478 -59.29593,0 -107.36477,-48.06885 -107.36477,-107.36478 0,-59.29593 48.06884,-107.36477 107.36477,-107.36477 59.29593,0 107.36478,48.06884 107.36478,107.36477 z"
-         sodipodi:ry="107.36478"
-         sodipodi:rx="107.36478"
-         sodipodi:cy="371.23074"
-         sodipodi:cx="376.35397"
-         id="path3012"
-         style="fill:url(#linearGradient4081);fill-opacity:1;stroke:#4279b9;stroke-width:6.81539726;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         sodipodi:type="arc" />
-      <path
-         style="fill:#ffffff;fill-opacity:0.9424779;stroke:#4279b9;stroke-width:6.81539726;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         d="m 444.29034,209.89717 -12.6144,43.50166 49.02012,39.4382 c 13.35088,10.27413 4.8397,15.07091 0,20.78754 l -49.41678,37.31456 13.36869,39.74271 68.30739,-56.64407 c 34.8433,-30.23249 30.51297,-30.3456 0,-60.9178 z"
-         id="path3010"
-         inkscape:connector-curvature="0"
-         sodipodi:nodetypes="ccccccccc" />
-    </g>
-    <g
-       id="g4115"
-       transform="matrix(0.1948543,0,0,0.1948543,12.867818,123.81932)"
-       inkscape:export-filename="/Users/joris/Documents/workspace/stemmatology/stemmaweb/root/images/resources/button_right_28.png"
-       inkscape:export-xdpi="11.31"
-       inkscape:export-ydpi="11.31">
-      <path
-         sodipodi:type="arc"
-         style="fill:url(#linearGradient4133);fill-opacity:1;stroke:#4279b9;stroke-width:6.81539726;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         id="path3096"
-         sodipodi:cx="376.35397"
-         sodipodi:cy="371.23074"
-         sodipodi:rx="107.36478"
-         sodipodi:ry="107.36478"
-         d="m 483.71875,371.23074 c 0,59.29593 -48.06885,107.36478 -107.36478,107.36478 -59.29593,0 -107.36477,-48.06885 -107.36477,-107.36478 0,-59.29593 48.06884,-107.36477 107.36477,-107.36477 59.29593,0 107.36478,48.06884 107.36478,107.36477 z"
-         transform="matrix(-0.50578508,-0.86265952,0.86265952,-0.50578508,124.93524,814.22902)" />
-      <path
-         sodipodi:nodetypes="ccccccccc"
-         inkscape:connector-curvature="0"
-         id="path3098"
-         d="m 224.52628,209.89717 -12.6144,43.50166 49.02012,39.4382 c 13.35088,10.27413 4.8397,15.07091 0,20.78754 l -49.41678,37.31456 13.36869,39.74271 68.30739,-56.64407 c 34.8433,-30.23249 30.51297,-30.3456 0,-60.9178 z"
-         style="fill:#ffffff;fill-opacity:0.9424779;stroke:#4279b9;stroke-width:6.81539726;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
-    </g>
-    <g
-       id="g4107"
-       transform="matrix(0.1948543,0,0,0.1948543,14.036944,123.81932)"
-       inkscape:export-filename="/Users/joris/Documents/workspace/stemmatology/stemmaweb/root/images/resources/button_right_28.png"
-       inkscape:export-xdpi="11.31"
-       inkscape:export-ydpi="11.31">
-      <path
-         sodipodi:type="arc"
-         style="fill:url(#linearGradient4137);fill-opacity:1;stroke:#cfdae5;stroke-width:6.81539726;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         id="path3104"
-         sodipodi:cx="376.35397"
-         sodipodi:cy="371.23074"
-         sodipodi:rx="107.36478"
-         sodipodi:ry="107.36478"
-         d="m 483.71875,371.23074 c 0,59.29593 -48.06885,107.36478 -107.36478,107.36478 -59.29593,0 -107.36477,-48.06885 -107.36477,-107.36478 0,-59.29593 48.06884,-107.36477 107.36477,-107.36477 59.29593,0 107.36478,48.06884 107.36478,107.36477 z"
-         transform="matrix(-0.50578508,-0.86265952,0.86265952,-0.50578508,564.46336,814.22902)" />
-      <path
-         sodipodi:nodetypes="ccccccccc"
-         inkscape:connector-curvature="0"
-         id="path3106"
-         d="m 664.0544,209.89717 -12.6144,43.50166 49.02012,39.4382 c 13.35088,10.27413 4.8397,15.07091 0,20.78754 l -49.41678,37.31456 13.36869,39.74271 68.30739,-56.64407 c 34.8433,-30.23249 30.51297,-30.3456 0,-60.9178 z"
-         style="fill:#ffffff;fill-opacity:0.9424779;stroke:#cfdae5;stroke-width:6.81539726;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
-    </g>
-    <g
-       id="g4123"
-       inkscape:export-filename="/Users/joris/Documents/workspace/stemmatology/stemmaweb/root/images/resources/button_left.png"
-       inkscape:export-xdpi="11.31"
-       inkscape:export-ydpi="11.31"
-       transform="matrix(0.19485407,0,0,0.19485407,13.4498,131.38974)">
-      <path
-         sodipodi:type="arc"
-         style="fill:url(#linearGradient3128);fill-opacity:1;stroke:#4279b9;stroke-width:6.81540537;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         id="path3112"
-         sodipodi:cx="376.35397"
-         sodipodi:cy="371.23074"
-         sodipodi:rx="107.36478"
-         sodipodi:ry="107.36478"
-         d="m 483.71875,371.23074 c 0,59.29593 -48.06885,107.36478 -107.36478,107.36478 -59.29593,0 -107.36477,-48.06885 -107.36477,-107.36478 0,-59.29593 48.06884,-107.36477 107.36477,-107.36477 59.29593,0 107.36478,48.06884 107.36478,107.36477 z"
-         transform="matrix(-0.50578508,-0.86265952,0.86265952,-0.50578508,344.6993,1058.229)" />
-      <path
-         sodipodi:nodetypes="ccccccccc"
-         inkscape:connector-curvature="0"
-         id="path3114"
-         d="m 506.47974,453.89717 12.6144,43.50166 -49.02012,39.4382 c -13.35088,10.27413 -4.8397,15.07091 0,20.78754 l 49.41678,37.31456 -13.36869,39.74271 -68.30739,-56.64407 c -34.8433,-30.23249 -30.51297,-30.3456 0,-60.9178 z"
-         style="fill:#ffffff;fill-opacity:0.9424779;stroke:#4279b9;stroke-width:6.81540537;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
-    </g>
-    <g
-       id="g4127"
-       transform="matrix(0.19485407,0,0,0.19485407,14.034359,131.38974)"
-       inkscape:export-filename="/Users/joris/Documents/workspace/stemmatology/stemmaweb/root/images/resources/button_left.png"
-       inkscape:export-xdpi="11.31"
-       inkscape:export-ydpi="11.31">
-      <path
-         transform="matrix(-0.50578508,-0.86265952,0.86265952,-0.50578508,564.46336,1058.229)"
-         d="m 483.71875,371.23074 c 0,59.29593 -48.06885,107.36478 -107.36478,107.36478 -59.29593,0 -107.36477,-48.06885 -107.36477,-107.36478 0,-59.29593 48.06884,-107.36477 107.36477,-107.36477 59.29593,0 107.36478,48.06884 107.36478,107.36477 z"
-         sodipodi:ry="107.36478"
-         sodipodi:rx="107.36478"
-         sodipodi:cy="371.23074"
-         sodipodi:cx="376.35397"
-         id="path3124"
-         style="fill:url(#linearGradient4139);fill-opacity:1;stroke:#cfdae5;stroke-width:6.81540537;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         sodipodi:type="arc" />
-      <path
-         style="fill:#ffffff;fill-opacity:0.9424779;stroke:#cfdae5;stroke-width:6.81540537;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         d="m 726.2438,453.89717 12.6144,43.50166 -49.02012,39.4382 c -13.35088,10.27413 -4.8397,15.07091 0,20.78754 l 49.41678,37.31456 -13.36869,39.74271 -68.30739,-56.64407 c -34.8433,-30.23249 -30.51297,-30.3456 0,-60.9178 z"
-         id="path3120"
-         inkscape:connector-curvature="0"
-         sodipodi:nodetypes="ccccccccc" />
-    </g>
-    <g
-       id="g4119"
-       transform="matrix(0.19485407,0,0,0.19485407,12.865234,131.38974)"
-       inkscape:export-filename="/Users/joris/Documents/workspace/stemmatology/stemmaweb/root/images/resources/button_left.png"
-       inkscape:export-xdpi="11.31"
-       inkscape:export-ydpi="11.31">
-      <path
-         transform="matrix(-0.50578508,-0.86265952,0.86265952,-0.50578508,124.93524,1058.229)"
-         d="m 483.71875,371.23074 c 0,59.29593 -48.06885,107.36478 -107.36478,107.36478 -59.29593,0 -107.36477,-48.06885 -107.36477,-107.36478 0,-59.29593 48.06884,-107.36477 107.36477,-107.36477 59.29593,0 107.36478,48.06884 107.36478,107.36477 z"
-         sodipodi:ry="107.36478"
-         sodipodi:rx="107.36478"
-         sodipodi:cy="371.23074"
-         sodipodi:cx="376.35397"
-         id="path3118"
-         style="fill:url(#linearGradient4135);fill-opacity:1;stroke:#4279b9;stroke-width:6.81540537;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         sodipodi:type="arc" />
-      <path
-         style="fill:#ffffff;fill-opacity:0.9424779;stroke:#4279b9;stroke-width:6.81540537;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         d="m 286.71568,453.89717 12.6144,43.50166 -49.02012,39.4382 c -13.35088,10.27413 -4.8397,15.07091 0,20.78754 l 49.41678,37.31456 -13.36869,39.74271 -68.30739,-56.64407 c -34.8433,-30.23249 -30.51297,-30.3456 0,-60.9178 z"
-         id="path3126"
-         inkscape:connector-curvature="0"
-         sodipodi:nodetypes="ccccccccc" />
-    </g>
-    <g
-       id="g3810"
-       inkscape:export-filename="/Users/joris/Documents/workspace/stemmatology/stemmaweb/root/images/resources/b_button_span.png"
-       inkscape:export-xdpi="58.725574"
-       inkscape:export-ydpi="58.725574">
-      <rect
-         rx="11.908121"
-         ry="11.90812"
-         y="35.411461"
-         x="42.273376"
-         height="35.453724"
-         width="459.02725"
-         id="rect3025"
-         style="fill:url(#linearGradient3801);fill-opacity:1;stroke:#4279b9;stroke-width:1.32800961000000006;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
-      <path
-         sodipodi:nodetypes="cccc"
-         inkscape:connector-curvature="0"
-         id="path3803"
-         d="m 60.050575,53.138328 -9.385942,8.383992 0,-16.767994 z"
-         inkscape:transform-center-y="0.49134439"
-         inkscape:transform-center-x="0.00061317797"
-         style="fill:#ffffff;fill-opacity:1;stroke:none" />
-    </g>
-    <rect
-       rx="11.908121"
-       ry="11.90812"
-       y="72.193192"
-       x="42.273376"
-       height="35.453724"
-       width="459.02725"
-       id="rect3816"
-       style="fill:url(#linearGradient3824);fill-opacity:1.0;stroke:#4279b9;stroke-width:1.32800961000000006;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-       inkscape:export-filename="/Users/joris/Documents/workspace/stemmatology/stemmaweb/root/images/resources/b_button_span.png"
-       inkscape:export-xdpi="58.725574"
-       inkscape:export-ydpi="58.725574" />
-    <path
-       sodipodi:nodetypes="cccc"
-       inkscape:connector-curvature="0"
-       id="path3818"
-       d="m 60.050575,89.920062 -9.385942,8.383992 0,-16.767994 z"
-       inkscape:transform-center-y="0.49134439"
-       inkscape:transform-center-x="0.00061317797"
-       style="fill:#4279b9;fill-opacity:1;stroke:none"
-       inkscape:export-filename="/Users/joris/Documents/workspace/stemmatology/stemmaweb/root/images/resources/b_button_span.png"
-       inkscape:export-xdpi="58.725574"
-       inkscape:export-ydpi="58.725574" />
-  </g>
-</svg>
diff --git a/stemmaweb/root/js/componentload.js b/stemmaweb/root/js/componentload.js
deleted file mode 100644 (file)
index 0cb502e..0000000
+++ /dev/null
@@ -1,360 +0,0 @@
-// Global state variables
-var selectedTextID;
-var selectedTextInfo;
-var selectedStemmaID = -1;
-var stemmata = [];
-
-// Load the names of the appropriate traditions into the directory div.
-function refreshDirectory () {
-       var lmesg = $('#loading_message').clone();
-       $('#directory').empty().append( lmesg.contents() );
-    $('#directory').load( _get_url(["directory"]), 
-       function(response, status, xhr) {
-                       if (status == "error") {
-                               var msg = "An error occurred: ";
-                               $("#directory").html(msg + xhr.status + " " + xhr.statusText);
-                       } else {
-                               if( textOnLoad != "" ) {
-                                       // Call the click callback for the relevant text, if it is
-                                       // in the page.
-                                       $('#'+textOnLoad).click();
-                                       textOnLoad = "";
-                               }
-                       }
-               }
-       );
-}
-
-// Load a tradition with its information and stemmata into the tradition
-// view pane. Calls load_textinfo.
-function loadTradition( textid, textname, editable ) {
-       selectedTextID = textid;
-    // First insert the placeholder image and register an error handler
-    $('#textinfo_load_status').empty();
-    $('#stemma_graph').empty();
-    $('#textinfo_waitbox').show();
-    $('#textinfo_container').hide().ajaxError( 
-       function(event, jqXHR, ajaxSettings, thrownError) {
-       if( ajaxSettings.url.indexOf( 'textinfo' ) > -1 && ajaxSettings.type == 'GET'  ) {
-                       $('#textinfo_waitbox').hide();
-                       $('#textinfo_container').show();
-                       display_error( jqXHR, $("#textinfo_load_status") );
-       }
-    });
-    
-    // Hide the functionality that is irrelevant
-    if( editable ) {
-       $('#open_stemma_add').show();
-       $('#open_stemma_edit').show();
-       $('#open_textinfo_edit').show();
-    } else {
-       $('#open_stemma_add').hide();
-       $('#open_stemma_edit').hide();
-       $('#open_textinfo_edit').hide();
-    }
-
-    // Then get and load the actual content.
-    // TODO: scale #stemma_graph both horizontally and vertically
-    // TODO: load svgs from SVG.Jquery (to make scaling react in Safari)
-    $.getJSON( _get_url([ "textinfo", textid ]), function (textdata) {
-       // Add the scalar data
-       selectedTextInfo = textdata;
-       load_textinfo();
-       // Add the stemma(ta) and set up the stexaminer button
-       stemmata = textdata.stemmata;
-       if( stemmata.length ) {
-               selectedStemmaID = 0;
-                       $('#run_stexaminer').show();
-       } else {
-               selectedStemmaID = -1;
-                       $('#open_stemma_edit').hide();
-                       $('#run_stexaminer').hide();
-               }
-               load_stemma( selectedStemmaID );
-       // Set up the relationship mapper button
-               $('#run_relater').attr( 'action', _get_url([ "relation", textid ]) );
-       });
-}
-
-// Load the metadata about a tradition into the appropriate div.
-function load_textinfo() {
-       $('#textinfo_waitbox').hide();
-       $('#textinfo_load_status').empty();
-       $('#textinfo_container').show();
-       $('.texttitle').empty().append( selectedTextInfo.name );
-       // Witnesses
-       $('#witness_num').empty().append( selectedTextInfo.witnesses.size );
-       $('#witness_list').empty().append( selectedTextInfo.witnesses.join( ', ' ) );
-       // Who the owner is
-       $('#owner_id').empty().append('no one');
-       if( selectedTextInfo.owner ) {
-               $('#owner_id').empty().append( selectedTextInfo.owner );
-       }
-       // Whether or not it is public
-       $('#not_public').empty();
-       if( selectedTextInfo['public'] == false ) {
-               $('#not_public').append('NOT ');
-       }
-       // What language setting it has, if any
-       $('#marked_language').empty().append('no language set');
-       if( selectedTextInfo.language && selectedTextInfo.language != 'Default' ) {
-               $('#marked_language').empty().append( selectedTextInfo.language );
-       }
-}      
-
-// Enable / disable the appropriate buttons for paging through the stemma.
-function show_stemmapager () {
-      $('.pager_left_button').unbind('click').addClass( 'greyed_out' );
-      $('.pager_right_button').unbind('click').addClass( 'greyed_out' );
-      if( selectedStemmaID > 0 ) {
-              $('.pager_left_button').click( function () {
-                      load_stemma( selectedStemmaID - 1 );
-              }).removeClass( 'greyed_out' );
-      }       
-      if( selectedStemmaID + 1 < stemmata.length ) {
-              $('.pager_right_button').click( function () {
-                      load_stemma( selectedStemmaID + 1 );
-              }).removeClass( 'greyed_out' );
-      }
-}
-
-// Load a given stemma SVG into the stemmagraph box.
-function load_stemma( idx ) {
-       // Load the stemma at idx
-       selectedStemmaID = idx;
-       show_stemmapager();
-       if( idx > -1 ) {
-               $('#stemma_graph').empty();
-               $('#stemma_graph').append( stemmata[idx] );
-               // Stexaminer submit action
-               var stexpath = _get_url([ "stexaminer", selectedTextID, idx ]);
-               $('#run_stexaminer').attr( 'action', stexpath );
-        setTimeout( 'start_element_height = $("#stemma_graph .node")[0].getBBox().height;', 500 );
-       }
-}
-
-// General-purpose error-handling function.
-// TODO make sure this gets used throughout, where appropriate.
-function display_error( jqXHR, el ) {
-       var errmsg;
-       if( jqXHR.responseText == "" ) {
-               errmsg = "perhaps the server went down?"
-       } else {
-               var errobj;
-               try {
-                       errobj = jQuery.parseJSON( jqXHR.responseText );
-                       errmsg = errobj.error;
-               } catch ( parse_err ) {
-                       errmsg = "something went wrong on the server."
-               }
-       }
-       var msghtml = $('<span>').attr('class', 'error').text( "An error occurred: " + errmsg );
-       $(el).empty().append( msghtml ).show();
-}
-
-function start_upload_dialog() {
-    if( typeof uploader != 'undefined' ){ uploader.destroy() };
-    $('#upload-collation-dialog').dialog('option', 'attach_uploader')();
-    $('#upload_status').empty();
-    $('#upload_button').button('disable');
-    $('#upload-collation-dialog').dialog('open');
-}
-
-// Utility function to neatly construct an application URL
-function _get_url( els ) {
-       return basepath + els.join('/');
-}
-
-$(document).ready( function() {
-    // call out to load the directory div
-    $('#textinfo_container').hide();
-    $('#textinfo_waitbox').hide();
-       refreshDirectory();
-       
-       // Set up the textinfo edit dialog
-       $('#textinfo-edit-dialog').dialog({
-               autoOpen: false,
-               height: 200,
-               width: 300,
-               modal: true,
-               buttons: {
-                       Save: function (evt) {
-                               $("#edit_textinfo_status").empty();
-                               $(evt.target).button("disable");
-                               var requrl = _get_url([ "textinfo", selectedTextID ]);
-                               var reqparam = $('#edit_textinfo').serialize();
-                               $.post( requrl, reqparam, function (data) {
-                                       // Reload the selected text fields
-                                       selectedTextInfo = data;
-                                       load_textinfo();
-                                       // Reenable the button and close the form
-                                       $(evt.target).button("enable");
-                                       $('#textinfo-edit-dialog').dialog('close');
-                               }, 'json' );
-                       },
-                       Cancel: function() {
-                               $('#textinfo-edit-dialog').dialog('close');
-                       }
-               },
-               open: function() {
-                       $("#edit_textinfo_status").empty();
-                       // Populate the form fields with the current values
-                       // edit_(name, language, public, owner)
-                       $.each([ 'name', 'language', 'owner' ], function( idx, k ) {
-                               var fname = '#edit_' + k;
-                               // Special case: language Default is basically language null
-                               if( k == 'language' && selectedTextInfo[k] == 'Default' ) {
-                                       $(fname).val( "" );
-                               } else {
-                                       $(fname).val( selectedTextInfo[k] );
-                               }
-                       });
-                       if( selectedTextInfo['public'] == true ) {
-                               $('#edit_public').attr('checked','true');
-                       } else {
-                               $('#edit_public').removeAttr('checked');
-                       }
-               },
-       }).ajaxError( function(event, jqXHR, ajaxSettings, thrownError) {
-               $(event.target).parent().find('.ui-button').button("enable");
-       if( ajaxSettings.url.indexOf( 'textinfo' ) > -1 
-               && ajaxSettings.type == 'POST' ) {
-                       display_error( jqXHR, $("#edit_textinfo_status") );
-       }
-       });
-
-       
-       // Set up the stemma editor dialog
-       $('#stemma-edit-dialog').dialog({
-               autoOpen: false,
-               height: 700,
-               width: 600,
-               modal: true,
-               buttons: {
-                       Save: function (evt) {
-                               $("#edit_stemma_status").empty();
-                               $(evt.target).button("disable");
-                               var stemmaseq = $('#stemmaseq').val();
-                               var requrl = _get_url([ "stemma", selectedTextID, stemmaseq ]);
-                               var reqparam = { 'dot': $('#dot_field').val() };
-                               // TODO We need to stash the literal SVG string in stemmata
-                               // somehow. Implement accept header on server side to decide
-                               // whether to send application/json or application/xml?
-                               $.post( requrl, reqparam, function (data) {
-                                       // We received a stemma SVG string in return. 
-                                       // Update the current stemma sequence number
-                                       selectedStemmaID = data.stemmaid;
-                                       // Stash the answer in our SVG array
-                                       stemmata[selectedStemmaID] = data.stemmasvg;
-                                       // Display the new stemma
-                                       load_stemma( selectedStemmaID );
-                                       // Reenable the button and close the form
-                                       $(evt.target).button("enable");
-                                       $('#stemma-edit-dialog').dialog('close');
-                               }, 'json' );
-                       },
-                       Cancel: function() {
-                               $('#stemma-edit-dialog').dialog('close');
-                       }
-               },
-               open: function(evt) {
-                       $("#edit_stemma_status").empty();
-                       var stemmaseq = $('#stemmaseq').val();
-                       if( stemmaseq == 'n' ) {
-                               // If we are creating a new stemma, populate the textarea with a
-                               // bare digraph.
-                               $(evt.target).dialog('option', 'title', 'Add a new stemma')
-                               $('#dot_field').val( "digraph stemma {\n\n}" );
-                       } else {
-                               // If we are editing a stemma, grab its stemmadot and populate the
-                               // textarea with that.
-                               $(evt.target).dialog('option', 'title', 'Edit selected stemma')
-                               $('#dot_field').val( 'Loading, please wait...' );
-                               var doturl = _get_url([ "stemmadot", selectedTextID, stemmaseq ]);
-                               $.getJSON( doturl, function (data) {
-                                       // Re-insert the line breaks
-                                       var dotstring = data.dot.replace(/\|n/gm, "\n");                                        
-                                       $('#dot_field').val( dotstring );
-                               });
-                       }
-               },
-       }).ajaxError( function(event, jqXHR, ajaxSettings, thrownError) {
-               $(event.target).parent().find('.ui-button').button("enable");
-       if( ajaxSettings.url.indexOf( 'stemma' ) > -1 
-               && ajaxSettings.type == 'POST' ) {
-                       display_error( jqXHR, $("#edit_stemma_status") );
-       }
-       });
-               
-       $('#upload-collation-dialog').dialog({
-               autoOpen: false,
-               height: 325,
-               width: 480,
-               modal: true,
-               buttons: {
-                 pick: {
-                   text: "Pick File",
-                   id: "pick_uploadfile_button",
-                   click: function() {}       
-                 },
-                 upload: {
-                   text: 'Upload',
-                   id: 'upload_button',
-                   click: function() {
-                           $('#upload_status').empty();
-                uploader.start();
-                return false;
-            }
-                 },
-                 Cancel: function() {
-                   $('#upload-collation-dialog').dialog('close');
-                 }
-               },
-               attach_uploader: function() {
-                   create_uploader( _get_url([ "newtradition" ]) );
-                   $('#filelist').empty().html( 'Use the \'Pick\' button to choose a source file…' );
-               }
-       });
-       
-       $('#stemma_graph').mousedown( function(evt) {
-        evt.stopPropagation();
-        $('#stemma_graph').data( 'mousedown_xy', [evt.clientX, evt.clientY] );
-        $('body').mousemove( function(evt) {
-            mouse_scale = 1; // for now, was:  mouse_scale = svg_root_element.getScreenCTM().a;
-            dx = (evt.clientX - $('#stemma_graph').data( 'mousedown_xy' )[0]) / mouse_scale;
-            dy = (evt.clientY - $('#stemma_graph').data( 'mousedown_xy' )[1]) / mouse_scale;
-            $('#stemma_graph').data( 'mousedown_xy', [evt.clientX, evt.clientY] );
-            var svg_root = $('#stemma_graph svg').svg().svg('get').root();
-            var g = $('g.graph', svg_root).get(0);
-            current_translate = g.getAttribute( 'transform' ).split(/translate\(/)[1].split(')',1)[0].split(' ');
-            new_transform = g.getAttribute( 'transform' ).replace( /translate\([^\)]*\)/, 'translate(' + (parseFloat(current_translate[0]) + dx) + ' ' + (parseFloat(current_translate[1]) + dy) + ')' );
-            g.setAttribute( 'transform', new_transform );
-            evt.returnValue = false;
-            evt.preventDefault();
-            return false;
-        });
-        $('body').mouseup( function(evt) {
-            $('body').unbind('mousemove');
-            $('body').unbind('mouseup');
-        });
-       });
-        
-       $('#stemma_graph').mousewheel(function (event, delta) {
-        event.returnValue = false;
-        event.preventDefault();
-        if (!delta || delta == null || delta == 0) delta = event.originalEvent.wheelDelta;
-        if (!delta || delta == null || delta == 0) delta = -1 * event.originalEvent.detail;
-        if( delta < -9 ) { delta = -9 }; 
-        var z = 1 + delta/10;
-        z = delta > 0 ? 1 : -1;
-        var svg_root = $('#stemma_graph svg').svg().svg('get').root();
-        var g = $('g.graph', svg_root).get(0);
-        if (g && ((z<1 && (g.getScreenCTM().a * start_element_height) > 4.0) || (z>=1 && (g.getScreenCTM().a * start_element_height) < 1000))) {
-            var scaleLevel = z/10;
-            current_scale = parseFloat( g.getAttribute( 'transform' ).split(/scale\(/)[1].split(')',1)[0].split(' ')[0] );
-            new_transform = g.getAttribute( 'transform' ).replace( /scale\([^\)]*\)/, 'scale(' + (current_scale + scaleLevel) + ')' );
-            g.setAttribute( 'transform', new_transform );
-        }
-    });
-    
-});
diff --git a/stemmaweb/root/js/jquery-1.4.4.min.js b/stemmaweb/root/js/jquery-1.4.4.min.js
deleted file mode 100755 (executable)
index 8f3ca2e..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.4
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu Nov 11 19:04:53 2010 -0500
- */
-(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
-h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
-h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
-"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
-e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
-"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
-a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
-s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
-j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
-toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
--1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
-if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
-if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
-b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
-!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
-l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
-z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
-s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
-s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
-[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
-false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
-k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
-scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
-1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
-"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
-c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
-else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
-a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
-c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
-a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
-colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
-1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
-l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
-"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
-if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
-a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
-attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
-b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
-c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
-arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
-d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
-c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
-w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
-8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
-"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
-d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
-Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
-c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
-var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
-"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
-xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
-B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
-"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
-0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
-a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
-1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
-"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
-c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
-(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
-[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
-break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
-q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
-l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
-return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
-B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
-POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
-i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
-i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
-"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
-m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
-true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
-g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
-0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
-"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
-i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
-if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
-g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
-for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
-i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
-n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
-function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
-p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
-t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
-function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
-c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
-not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
-h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
-c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
-2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
-b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
-e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={option:[1,
-"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
-else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
-c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
-b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
-this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
-prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
-b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
-1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
-d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
-jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
-zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
-h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
-if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
-d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
-e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
-"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
-!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
-getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
-script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
-!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
-false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
-A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
-b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
-c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
-c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
-encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
-[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
-e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
-if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
-3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
-d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
-d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
-"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
-1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
-d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
-Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
-var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
-this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
-this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
-c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
-b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
-h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
-for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
-parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
-height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
-f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
-"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
-e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
-c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
-c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
-b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);
diff --git a/stemmaweb/root/js/jquery-ui-1.8.10.custom.min.js b/stemmaweb/root/js/jquery-ui-1.8.10.custom.min.js
deleted file mode 100755 (executable)
index 7d4ff1c..0000000
+++ /dev/null
@@ -1,782 +0,0 @@
-/*!
- * jQuery UI 1.8.10
- *
- * 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(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.10",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}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
-"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
-if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
-"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
-d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
-c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
-b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.10
- *
- * 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(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
-a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
-e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
-this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.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(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
-enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.10
- *
- * 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(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(true===c.data(b.target,a.widgetName+".preventClickEvent")){c.removeData(b.target,a.widgetName+".preventClickEvent");b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=
-a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
-this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);
-return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&c.data(a.target,this.widgetName+".preventClickEvent",
-true);this._mouseStop(a)}return false},_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(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.10
- *
- * 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(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.10
- *
- * 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/Draggables
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.mouse.js
- *     jquery.ui.widget.js
- */
-(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-
-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();
-d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||
-this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&
-this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
-a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||
-0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
-this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-
-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment==
-"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?
-0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
-10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==
-Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():
-f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;
-if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])e=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/
-b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;e=this.originalPageX+Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=this.containment?!(e-this.offset.click.left<this.containment[0]||e-this.offset.click.left>this.containment[2])?e:!(e-this.offset.click.left<this.containment[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:g-this.offset.click.top-
-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=
-this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.10"});
-d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var g=d.data(this,"sortable");if(g&&!g.options.disabled){c.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=
-0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=
-c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,
-true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=
-0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=
-a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","iframeFix",{start:function(){var a=d(this).data("draggable").options;d(a.iframeFix===true?"iframe":a.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},
-stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=
-document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-
-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-
-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable",
-"snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,g=b.offset.left,n=g+c.helperProportions.width,m=b.offset.top,o=m+c.helperProportions.height,h=
-c.snapElements.length-1;h>=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e<g&&g<k+e&&j-e<m&&m<l+e||i-e<g&&g<k+e&&j-e<o&&o<l+e||i-e<n&&n<k+e&&j-e<m&&m<l+e||i-e<n&&n<k+e&&j-e<o&&o<l+e){if(f.snapMode!="inner"){var p=Math.abs(j-o)<=e,q=Math.abs(l-m)<=e,r=Math.abs(i-n)<=e,s=Math.abs(k-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",
-{top:l,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k}).left-c.margins.left}var t=p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(j-m)<=e;q=Math.abs(l-o)<=e;r=Math.abs(i-g)<=e;s=Math.abs(k-n)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l-c.helperProportions.height,
-left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[h].snapping&&(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=p||q||r||s||t}else{c.snapElements[h].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,
-a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,
-b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
-;/*
- * jQuery UI Droppable 1.8.10
- *
- * 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/Droppables
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.widget.js
- *     jquery.ui.mouse.js
- *     jquery.ui.draggable.js
- */
-(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
-a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
-this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
-this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
-d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.10"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
-switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
-i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
-"none";if(c[f].visible){c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight};e=="mousedown"&&c[f]._activate.call(c[f],b)}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
-a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
-d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.10
- *
- * 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/Resizables
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.mouse.js
- *     jquery.ui.widget.js
- */
-(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
-String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
-this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};
-if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),
-d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=
-this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:
-this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",
-b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;
-f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");
-this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=
-null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+
-this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=
-[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=
-this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,
-a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,
-c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,
-originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.10"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=
-b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width",
-"height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};
-if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-
-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,
-height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=
-e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,
-d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?
-d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=
-a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&
-/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");
-b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/
-(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
-;/*
- * jQuery UI Selectable 1.8.10
- *
- * 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/Selectables
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.mouse.js
- *     jquery.ui.widget.js
- */
-(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
-selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
-c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
-c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
-this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
-a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
-!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
-e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.10"})})(jQuery);
-;/*
- * jQuery UI Sortable 1.8.10
- *
- * 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/Sortables
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.mouse.js
- *     jquery.ui.widget.js
- */
-(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable");
-this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,
-arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=
-c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,
-{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();
-if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",
-a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");
-if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+
-this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+
-b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+
-"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,
-c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==
-document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-
-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});
-this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&&
-a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?
-"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?
-c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;
-return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=
-d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});
-return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=
-d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&this.helper)this.offset.parent=
-this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b],e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=
-e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];
-if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);
-c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===
-1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=
-this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):
-b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==
-""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
-this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
-10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions=
-{width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||
-document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,
-b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=
-document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():
-e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-
-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<
-this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&
-this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=
-this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem[0].parentNode&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();
-this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],
-this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",
-g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||
-this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,
-originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.10"})})(jQuery);
-;/*
- * jQuery UI Accordion 1.8.10
- *
- * 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/Accordion
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.widget.js
- */
-(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
-a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
-if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
-function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+
-a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex");
-this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
-b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
-a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
-c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
-if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
-if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
-e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
-e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
-tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.10",animations:{slide:function(a,b){a=
-c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);f[i]={value:j[1],
-unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",paddingTop:"hide",
-paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
-;/*
- * jQuery UI Autocomplete 1.8.10
- *
- * 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(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=false;var f=d.ui.keyCode;
-switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=a.element.val()){a.selectedItem=
-null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||
-"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),
-i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");
-this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source===
-"string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else 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)!==false)return this._search(a)},
-_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(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(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position))},
-_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);
-else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
-(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
--1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.attr("scrollTop"),c=this.element.height();if(b<0)this.element.attr("scrollTop",g+b);else b>=c&&this.element.attr("scrollTop",g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},
-deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},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(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);
-e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,
-g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));
-this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element.attr("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
-;/*
- * jQuery UI Button 1.8.10
- *
- * 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/Button
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.widget.js
- */
-(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,f=a([]);if(c)f=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return f};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
-i);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
-function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||a(this).removeClass(f)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");
-b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var e=b.element[0];h(e).not(e).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");
-g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(e){if(c.disabled)return false;if(e.keyCode==a.ui.keyCode.SPACE||e.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",
-c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){this.buttonElement=this.element.parents().last().find("label[for="+this.element.attr("id")+"]");this.element.addClass("ui-helper-hidden-accessible");var b=this.element.is(":checked");b&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=
-this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||
-this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
-true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
-c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,f=d.primary&&d.secondary,e=[];if(d.primary||d.secondary){e.push("ui-button-text-icon"+(f?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){e.push(f?"ui-button-icons-only":"ui-button-icon-only");
-b.removeClass("ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary");this.hasTitle||b.attr("title",c)}}else e.push("ui-button-text-only");b.addClass(e.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,
-arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
-a.Widget.prototype.destroy.call(this)}})})(jQuery);
-;/*
- * jQuery UI Dialog 1.8.10
- *
- * 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/Dialog
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.widget.js
- *  jquery.ui.button.js
- *     jquery.ui.draggable.js
- *     jquery.ui.mouse.js
- *     jquery.ui.position.js
- *     jquery.ui.resizable.js
- */
-(function(c,j){var k={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},l={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&
-c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",
--1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role",
-"button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=
-b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&
-a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0]){e=c(this).css("z-index");
-isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);
-d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===f[0]&&e.shiftKey){g.focus(1);return false}}});
-c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(f,
-h){h=c.isFunction(h)?{click:h,text:f}:h;f=c('<button type="button"></button>').attr(h,true).unbind("click").click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&f.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=
-d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,
-position:f.position,size:f.size}}a=a===j?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,
-h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===
-1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);if(g in k)e=true;if(g in
-l)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");
-break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=this.options,b,d,e=
-this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-b,0));this.uiDialog.is(":data(resizable)")&&
-this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.10",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===
-0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
-height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
-b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
-function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
-;/*
- * jQuery UI Slider 1.8.10
- *
- * 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/Slider
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.mouse.js
- *     jquery.ui.widget.js
- */
-(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options;this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");a.disabled&&this.element.addClass("ui-slider-disabled ui-disabled");
-this.range=d([]);if(a.range){if(a.range===true){this.range=d("<div></div>");if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}else this.range=d("<div></div>");this.range.appendTo(this.element).addClass("ui-slider-range");if(a.range==="min"||a.range==="max")this.range.addClass("ui-slider-range-"+a.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");
-if(a.values&&a.values.length)for(;d(".ui-slider-handle",this.element).length<a.values.length;)d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();
-else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!b.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e=
-false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");h=b._start(c,f);if(h===false)return}break}i=b.options.step;h=b.options.values&&b.options.values.length?(g=b.values(f)):(g=b.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=b._valueMin();break;case d.ui.keyCode.END:g=b._valueMax();break;case d.ui.keyCode.PAGE_UP:g=b._trimAlignValue(h+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=b._trimAlignValue(h-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h===
-b._valueMax())return;g=b._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===b._valueMin())return;g=b._trimAlignValue(h-i);break}b._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(c,e);b._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");
-this._mouseDestroy();return this},_mouseCapture:function(b){var a=this.options,c,e,f,h,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(a.range===true&&this.values(1)===a.min){g+=1;f=d(this.handles[g])}if(this._start(b,
-g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();a=f.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-f.width()/2,top:b.pageY-a.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},
-_mouseDrag:function(b){var a=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;
-if(this.orientation==="horizontal"){a=this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=
-this.values(a);c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var e;if(this.options.values&&this.options.values.length){e=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>e||a===1&&c<e))c=e;if(c!==this.values(a)){e=this.values();e[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:e});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],
-value:c});b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
-this._trimAlignValue(b);this._refreshValue();this._change(null,0)}return this._value()},values:function(b,a){var c,e,f;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f<c.length;f+=1){c[f]=this._trimAlignValue(e[f]);this._change(null,f)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):this.value();
-else return this._values()},_setOption:function(b,a){var c,e=0;if(d.isArray(this.options.values))e=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<e;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
-return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
-_refreshValue:function(){var b=this.options.range,a=this.options,c=this,e=!this._animateOff?a.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},a.animate);
-if(k===1)c.range[e?"animate":"css"]({width:f-g+"%"},{queue:false,duration:a.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},a.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:a.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
-1)[e?"animate":"css"]({width:f+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.10"})})(jQuery);
-;/*
- * jQuery UI Tabs 1.8.10
- *
- * 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/Tabs
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.widget.js
- */
-(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,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(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
-e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
-d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
-(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){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");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
-this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
-if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
-this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
-g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
-function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
-this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
--1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
-d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;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 e=
-d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(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")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
-e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
-j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
-if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
-this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
-load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
-"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
-url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.10"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
-a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
-;/*
- * jQuery UI Datepicker 1.8.10
- *
- * 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/Datepicker
- *
- * Depends:
- *     jquery.ui.core.js
- */
-(function(d,G){function K(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
-"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
-"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')}function E(a,b){d.extend(a,b);for(var c in b)if(b[c]==
-null||b[c]==G)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.10"}});var y=(new Date).getTime();d.extend(K.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();
-f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')}},
-_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&
-b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==
-""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,
-c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),
-true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});
-b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);
-this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",
-this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,
-function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:
-f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},
-e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true);E(e.settings,f);this._attachments(d(a),e);this._autoSize(e);this._setDateDatepicker(a,h);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);
-this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]?
-d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||
-a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,
-e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,
-"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==G?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},
-_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=
-d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,
-c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&
-d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a));var e=a.dpDiv.find("iframe.ui-datepicker-cover");e.length&&e.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",
-function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=
--1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,
-"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var f=a.yearshtml;setTimeout(function(){f===a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);f=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),
-parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,
-b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);
-this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
-_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
-0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=
-false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=
-d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);
-else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=
-a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,
-g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=z+1<a.length&&a.charAt(z+1)==p)&&z++;return p},m=function(p){var v=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&v?4:p=="o"?3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,v,H){p=o(p)?H:v;for(v=0;v<p.length;v++)if(b.substr(s,p[v].length).toLowerCase()==p[v].toLowerCase()){s+=p[v].length;return v+1}throw"Unknown name at position "+
-s;},r=function(){if(b.charAt(s)!=a.charAt(z))throw"Unexpected literal at position "+s;s++},s=0,z=0;z<a.length;z++)if(k)if(a.charAt(z)=="'"&&!o("'"))k=false;else r();else switch(a.charAt(z)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var w=new Date(m("@"));c=w.getFullYear();j=w.getMonth()+1;l=w.getDate();break;case "!":w=new Date((m("!")-this._ticksTo1970)/1E4);c=w.getFullYear();j=w.getMonth()+
-1;l=w.getDate();break;case "'":if(o("'"))r();else k=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}w=this._daylightSavingAdjust(new Date(c,j-1,l));if(w.getFullYear()!=c||w.getMonth()+1!=j||w.getDate()!=l)throw"Invalid date";return w},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",
-RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&
-a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",
-b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+=
-"0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==G?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=
-f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=
-(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,
-l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=
-a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),
-b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=
-this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+
-(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+
-(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+y+'.datepicker._hideDatepicker();">'+this._get(a,
-"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=
-this._get(a,"monthNames"),w=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),v=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var L=this._getDefaultDate(a),I="",C=0;C<i[0];C++){for(var M="",D=0;D<i[1];D++){var N=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",x="";if(l){x+='<div class="ui-datepicker-group';if(i[1]>1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-
-1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&C==0?c?f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,C>0||D>0,z,w)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var A=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=
-(t+h)%7;A+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}x+=A+"</tr></thead><tbody>";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O<A;O++){x+="<tr>";var P=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var F=
-p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,J=B&&!H||!F[0]||k&&q<k||o&&q>o;P+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(B?" ui-datepicker-other-month":"")+(q.getTime()==N.getTime()&&g==a.selectedMonth&&a._keyEvent||L.getTime()==q.getTime()&&L.getTime()==N.getTime()?" "+this._dayOverClass:"")+(J?" "+this._unselectableClass+" ui-state-disabled":"")+(B&&!v?"":" "+F[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":
-""))+'"'+((!B||v)&&F[2]?' title="'+F[2]+'"':"")+(J?"":' onclick="DP_jQuery_'+y+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(B&&!v?"&#xa0;":J?'<span class="ui-state-default">'+q.getDate()+"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(B?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=
-P+"</tr>"}g++;if(g>11){g=0;m++}x+="</tbody></table>"+(l?"</div>"+(i[0]>0&&D==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");M+=x}I+=M}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',
-o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&
-l)?"&#xa0;":""));a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+
-a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";if(d.browser.mozilla)k+='<select class="ui-datepicker-year"><option value="'+c+'" selected="selected">'+c+"</option></select>";else{k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=
-a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,
-"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
-c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
-"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
-function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,
-[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new K;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.10";window["DP_jQuery_"+y]=d})(jQuery);
-;/*
- * jQuery UI Progressbar 1.8.10
- *
- * 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/Progressbar
- *
- * Depends:
- *   jquery.ui.core.js
- *   jquery.ui.widget.js
- */
-(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
-this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
-this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.10"})})(jQuery);
-;/*
- * jQuery UI Effects 1.8.10
- *
- * 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/Effects/
- */
-jQuery.effects||function(f,j){function n(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
-16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return o.transparent;return o[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return n(b)}function p(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
-a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function q(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
-a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function m(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
-"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=n(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var o={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},r=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
-d){if(f.isFunction(b)){d=b;b=null}return this.queue("fx",function(){var e=f(this),g=e.attr("style")||" ",h=q(p.call(this)),l,v=e.attr("className");f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});l=q(p.call(this));e.attr("className",v);e.animate(u(h,l),a,b,function(){f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)});h=f.queue(this);l=h.splice(h.length-1,1)[0];
-h.splice(1,0,l);f.dequeue(this)})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,
-a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.10",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,
-a){var b;switch(c[0]){case "top":b=0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",
-border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);
-return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(m(c))return this._show.apply(this,arguments);
-else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(m(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(m(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),
-b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,
-a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,
-a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==
-e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=
-g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
-h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,
-a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
-;/*
- * jQuery UI Effects Blind 1.8.10
- *
- * 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/Effects/Blind
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
-g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Bounce 1.8.10
- *
- * 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/Effects/Bounce
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
-3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
-b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Clip 1.8.10
- *
- * 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/Effects/Clip
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
-c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Drop 1.8.10
- *
- * 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/Effects/Drop
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
-"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Explode 1.8.10
- *
- * 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/Effects/Explode
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
-0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
-e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
-;/*
- * jQuery UI Effects Fade 1.8.10
- *
- * 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/Effects/Fade
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Fold 1.8.10
- *
- * 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/Effects/Fold
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
-10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Highlight 1.8.10
- *
- * 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/Effects/Highlight
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Pulsate 1.8.10
- *
- * 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/Effects/Pulsate
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
-a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Scale 1.8.10
- *
- * 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/Effects/Scale
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
-b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
-1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
-p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
-if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
-a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
-child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
-n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Shake 1.8.10
- *
- * 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/Effects/Shake
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
-(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Slide 1.8.10
- *
- * 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/Effects/Slide
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
-var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Transfer 1.8.10
- *
- * 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/Effects/Transfer
- *
- * Depends:
- *     jquery.effects.core.js
- */
-(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
-b.dequeue()})})}})(jQuery);
-;
\ No newline at end of file
diff --git a/stemmaweb/root/js/jquery.mousewheel.min.js b/stemmaweb/root/js/jquery.mousewheel.min.js
deleted file mode 100644 (file)
index 05ebb0a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
- * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
- * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
- * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
- * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
- *
- * Version: 3.0.2
- * 
- * Requires: 1.2.2+
- */
-(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery);
\ No newline at end of file
diff --git a/stemmaweb/root/js/jquery.popupWindow.js b/stemmaweb/root/js/jquery.popupWindow.js
deleted file mode 100644 (file)
index 3e25dd5..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-(function($){            
-       $.fn.popupWindow = function(instanceSettings){
-               
-               return this.each(function(){
-               
-               $(this).click(function(){
-               
-               $.fn.popupWindow.defaultSettings = {
-                       centerBrowser:0, // center window over browser window? {1 (YES) or 0 (NO)}. overrides top and left
-                       centerScreen:0, // center window over entire screen? {1 (YES) or 0 (NO)}. overrides top and left
-                       height:500, // sets the height in pixels of the window.
-                       left:0, // left position when the window appears.
-                       location:0, // determines whether the address bar is displayed {1 (YES) or 0 (NO)}.
-                       menubar:0, // determines whether the menu bar is displayed {1 (YES) or 0 (NO)}.
-                       resizable:0, // whether the window can be resized {1 (YES) or 0 (NO)}. Can also be overloaded using resizable.
-                       scrollbars:0, // determines whether scrollbars appear on the window {1 (YES) or 0 (NO)}.
-                       status:0, // whether a status line appears at the bottom of the window {1 (YES) or 0 (NO)}.
-                       width:500, // sets the width in pixels of the window.
-                       windowName:null, // name of window set from the name attribute of the element that invokes the click
-                       windowURL:null, // url used for the popup
-                       top:0, // top position when the window appears.
-                       toolbar:0 // determines whether a toolbar (includes the forward and back buttons) is displayed {1 (YES) or 0 (NO)}.
-               };
-               
-               settings = $.extend({}, $.fn.popupWindow.defaultSettings, instanceSettings || {});
-               
-               var windowFeatures =    'height=' + settings.height +
-                                                               ',width=' + settings.width +
-                                                               ',toolbar=' + settings.toolbar +
-                                                               ',scrollbars=' + settings.scrollbars +
-                                                               ',status=' + settings.status + 
-                                                               ',resizable=' + settings.resizable +
-                                                               ',location=' + settings.location +
-                                                               ',menuBar=' + settings.menubar;
-
-                               settings.windowName = this.name || settings.windowName;
-                               settings.windowURL = this.href || settings.windowURL;
-                               var centeredY,centeredX;
-                       
-                               if(settings.centerBrowser){
-                                               
-                                       if ($.browser.msie) {//hacked together for IE browsers
-                                               centeredY = (window.screenTop - 120) + ((((document.documentElement.clientHeight + 120)/2) - (settings.height/2)));
-                                               centeredX = window.screenLeft + ((((document.body.offsetWidth + 20)/2) - (settings.width/2)));
-                                       }else{
-                                               centeredY = window.screenY + (((window.outerHeight/2) - (settings.height/2)));
-                                               centeredX = window.screenX + (((window.outerWidth/2) - (settings.width/2)));
-                                       }
-                                       window.open(settings.windowURL, settings.windowName, windowFeatures+',left=' + centeredX +',top=' + centeredY).focus();
-                               }else if(settings.centerScreen){
-                                       centeredY = (screen.height - settings.height)/2;
-                                       centeredX = (screen.width - settings.width)/2;
-                                       window.open(settings.windowURL, settings.windowName, windowFeatures+',left=' + centeredX +',top=' + centeredY).focus();
-                               }else{
-                                       window.open(settings.windowURL, settings.windowName, windowFeatures+',left=' + settings.left +',top=' + settings.top).focus();  
-                               }
-                               return false;
-                       });
-                       
-               });     
-       };
-})(jQuery);
diff --git a/stemmaweb/root/js/jquery.svg.js b/stemmaweb/root/js/jquery.svg.js
deleted file mode 100644 (file)
index df5530e..0000000
+++ /dev/null
@@ -1,1339 +0,0 @@
-\feff/* http://keith-wood.name/svg.html\r
-   SVG for jQuery v1.4.3.\r
-   Written by Keith Wood (kbwood{at}iinet.com.au) August 2007.\r
-   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and \r
-   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. \r
-   Please attribute the author if you use it. */\r
-\r
-(function($) { // Hide scope, no $ conflict\r
-\r
-/* SVG manager.\r
-   Use the singleton instance of this class, $.svg, \r
-   to interact with the SVG functionality. */\r
-function SVGManager() {\r
-       this._settings = []; // Settings to be remembered per SVG object\r
-       this._extensions = []; // List of SVG extensions added to SVGWrapper\r
-               // for each entry [0] is extension name, [1] is extension class (function)\r
-               // the function takes one parameter - the SVGWrapper instance\r
-       this.regional = []; // Localisations, indexed by language, '' for default (English)\r
-       this.regional[''] = {errorLoadingText: 'Error loading',\r
-               notSupportedText: 'This browser does not support SVG'};\r
-       this.local = this.regional['']; // Current localisation\r
-       this._uuid = new Date().getTime();\r
-       this._renesis = detectActiveX('RenesisX.RenesisCtrl');\r
-}\r
-\r
-/* Determine whether a given ActiveX control is available.\r
-   @param  classId  (string) the ID for the ActiveX control\r
-   @return  (boolean) true if found, false if not */\r
-function detectActiveX(classId) {\r
-       try {\r
-               return !!(window.ActiveXObject && new ActiveXObject(classId));\r
-       }\r
-       catch (e) {\r
-               return false;\r
-       }\r
-}\r
-\r
-var PROP_NAME = 'svgwrapper';\r
-\r
-$.extend(SVGManager.prototype, {\r
-       /* Class name added to elements to indicate already configured with SVG. */\r
-       markerClassName: 'hasSVG',\r
-\r
-       /* SVG namespace. */\r
-       svgNS: 'http://www.w3.org/2000/svg',\r
-       /* XLink namespace. */\r
-       xlinkNS: 'http://www.w3.org/1999/xlink',\r
-\r
-       /* SVG wrapper class. */\r
-       _wrapperClass: SVGWrapper,\r
-\r
-       /* Camel-case versions of attribute names containing dashes or are reserved words. */\r
-       _attrNames: {class_: 'class', in_: 'in',\r
-               alignmentBaseline: 'alignment-baseline', baselineShift: 'baseline-shift',\r
-               clipPath: 'clip-path', clipRule: 'clip-rule',\r
-               colorInterpolation: 'color-interpolation',\r
-               colorInterpolationFilters: 'color-interpolation-filters',\r
-               colorRendering: 'color-rendering', dominantBaseline: 'dominant-baseline',\r
-               enableBackground: 'enable-background', fillOpacity: 'fill-opacity',\r
-               fillRule: 'fill-rule', floodColor: 'flood-color',\r
-               floodOpacity: 'flood-opacity', fontFamily: 'font-family',\r
-               fontSize: 'font-size', fontSizeAdjust: 'font-size-adjust',\r
-               fontStretch: 'font-stretch', fontStyle: 'font-style',\r
-               fontVariant: 'font-variant', fontWeight: 'font-weight',\r
-               glyphOrientationHorizontal: 'glyph-orientation-horizontal',\r
-               glyphOrientationVertical: 'glyph-orientation-vertical',\r
-               horizAdvX: 'horiz-adv-x', horizOriginX: 'horiz-origin-x',\r
-               imageRendering: 'image-rendering', letterSpacing: 'letter-spacing',\r
-               lightingColor: 'lighting-color', markerEnd: 'marker-end',\r
-               markerMid: 'marker-mid', markerStart: 'marker-start',\r
-               stopColor: 'stop-color', stopOpacity: 'stop-opacity',\r
-               strikethroughPosition: 'strikethrough-position',\r
-               strikethroughThickness: 'strikethrough-thickness',\r
-               strokeDashArray: 'stroke-dasharray', strokeDashOffset: 'stroke-dashoffset',\r
-               strokeLineCap: 'stroke-linecap', strokeLineJoin: 'stroke-linejoin',\r
-               strokeMiterLimit: 'stroke-miterlimit', strokeOpacity: 'stroke-opacity',\r
-               strokeWidth: 'stroke-width', textAnchor: 'text-anchor',\r
-               textDecoration: 'text-decoration', textRendering: 'text-rendering',\r
-               underlinePosition: 'underline-position', underlineThickness: 'underline-thickness',\r
-               vertAdvY: 'vert-adv-y', vertOriginY: 'vert-origin-y',\r
-               wordSpacing: 'word-spacing', writingMode: 'writing-mode'},\r
-\r
-       /* Add the SVG object to its container. */\r
-       _attachSVG: function(container, settings) {\r
-               var svg = (container.namespaceURI == this.svgNS ? container : null);\r
-               var container = (svg ? null : container);\r
-               if ($(container || svg).hasClass(this.markerClassName)) {\r
-                       return;\r
-               }\r
-               if (typeof settings == 'string') {\r
-                       settings = {loadURL: settings};\r
-               }\r
-               else if (typeof settings == 'function') {\r
-                       settings = {onLoad: settings};\r
-               }\r
-               $(container || svg).addClass(this.markerClassName);\r
-               try {\r
-                       if (!svg) {\r
-                               svg = document.createElementNS(this.svgNS, 'svg');\r
-                               svg.setAttribute('version', '1.1');\r
-                               svg.setAttribute('width', container.clientWidth);\r
-                               svg.setAttribute('height', container.clientHeight);\r
-                               container.appendChild(svg);\r
-                       }\r
-                       this._afterLoad(container, svg, settings || {});\r
-               }\r
-               catch (e) {\r
-                       if ($.browser.msie) {\r
-                               if (!container.id) {\r
-                                       container.id = 'svg' + (this._uuid++);\r
-                               }\r
-                               this._settings[container.id] = settings;\r
-                               container.innerHTML = '<embed type="image/svg+xml" width="100%" ' +\r
-                                       'height="100%" src="' + (settings.initPath || '') + 'blank.svg"/>';\r
-                       }\r
-                       else {\r
-                               container.innerHTML = '<p class="svg_error">' +\r
-                                       this.local.notSupportedText + '</p>';\r
-                       }\r
-               }\r
-       },\r
-\r
-       /* SVG callback after loading - register SVG root. */\r
-       _registerSVG: function() {\r
-               for (var i = 0; i < document.embeds.length; i++) { // Check all\r
-                       var container = document.embeds[i].parentNode;\r
-                       if (!$(container).hasClass($.svg.markerClassName) || // Not SVG\r
-                                       $.data(container, PROP_NAME)) { // Already done\r
-                               continue;\r
-                       }\r
-                       var svg = null;\r
-                       try {\r
-                               svg = document.embeds[i].getSVGDocument();\r
-                       }\r
-                       catch(e) {\r
-                               setTimeout($.svg._registerSVG, 250); // Renesis takes longer to load\r
-                               return;\r
-                       }\r
-                       svg = (svg ? svg.documentElement : null);\r
-                       if (svg) {\r
-                               $.svg._afterLoad(container, svg);\r
-                       }\r
-               }\r
-       },\r
-\r
-       /* Post-processing once loaded. */\r
-       _afterLoad: function(container, svg, settings) {\r
-               var settings = settings || this._settings[container.id];\r
-               this._settings[container ? container.id : ''] = null;\r
-               var wrapper = new this._wrapperClass(svg, container);\r
-               $.data(container || svg, PROP_NAME, wrapper);\r
-               try {\r
-                       if (settings.loadURL) { // Load URL\r
-                               wrapper.load(settings.loadURL, settings);\r
-                       }\r
-                       if (settings.settings) { // Additional settings\r
-                               wrapper.configure(settings.settings);\r
-                       }\r
-                       if (settings.onLoad && !settings.loadURL) { // Onload callback\r
-                               settings.onLoad.apply(container || svg, [wrapper]);\r
-                       }\r
-               }\r
-               catch (e) {\r
-                       alert(e);\r
-               }\r
-       },\r
-\r
-       /* Return the SVG wrapper created for a given container.\r
-          @param  container  (string) selector for the container or\r
-                             (element) the container for the SVG object or\r
-                             jQuery collection - first entry is the container\r
-          @return  (SVGWrapper) the corresponding SVG wrapper element, or null if not attached */\r
-       _getSVG: function(container) {\r
-               container = (typeof container == 'string' ? $(container)[0] :\r
-                       (container.jquery ? container[0] : container));\r
-               return $.data(container, PROP_NAME);\r
-       },\r
-\r
-       /* Remove the SVG functionality from a div.\r
-          @param  container  (element) the container for the SVG object */\r
-       _destroySVG: function(container) {\r
-               var $container = $(container);\r
-               if (!$container.hasClass(this.markerClassName)) {\r
-                       return;\r
-               }\r
-               $container.removeClass(this.markerClassName);\r
-               if (container.namespaceURI != this.svgNS) {\r
-                       $container.empty();\r
-               }\r
-               $.removeData(container, PROP_NAME);\r
-       },\r
-\r
-       /* Extend the SVGWrapper object with an embedded class.\r
-          The constructor function must take a single parameter that is\r
-          a reference to the owning SVG root object. This allows the \r
-          extension to access the basic SVG functionality.\r
-          @param  name      (string) the name of the SVGWrapper attribute to access the new class\r
-          @param  extClass  (function) the extension class constructor */\r
-       addExtension: function(name, extClass) {\r
-               this._extensions.push([name, extClass]);\r
-       }\r
-});\r
-\r
-/* The main SVG interface, which encapsulates the SVG element.\r
-   Obtain a reference from $().svg('get') */\r
-function SVGWrapper(svg, container) {\r
-       this._svg = svg; // The SVG root node\r
-       this._container = container; // The containing div\r
-       for (var i = 0; i < $.svg._extensions.length; i++) {\r
-               var extension = $.svg._extensions[i];\r
-               this[extension[0]] = new extension[1](this);\r
-       }\r
-}\r
-\r
-$.extend(SVGWrapper.prototype, {\r
-\r
-       /* Retrieve the width of the SVG object. */\r
-       _width: function() {\r
-               return (this._container ? this._container.clientWidth : this._svg.width);\r
-       },\r
-\r
-       /* Retrieve the height of the SVG object. */\r
-       _height: function() {\r
-               return (this._container ? this._container.clientHeight : this._svg.height);\r
-       },\r
-\r
-       /* Retrieve the root SVG element.\r
-          @return  the top-level SVG element */\r
-       root: function() {\r
-               return this._svg;\r
-       },\r
-\r
-       /* Configure the SVG root.\r
-          @param  settings  (object) additional settings for the root\r
-          @param  clear     (boolean) true to remove existing attributes first,\r
-                            false to add to what is already there (optional)\r
-          @return  (SVGWrapper) this root */\r
-       configure: function(settings, clear) {\r
-               if (clear) {\r
-                       for (var i = this._svg.attributes.length - 1; i >= 0; i--) {\r
-                               var attr = this._svg.attributes.item(i);\r
-                               if (!(attr.nodeName == 'onload' || attr.nodeName == 'version' || \r
-                                               attr.nodeName.substring(0, 5) == 'xmlns')) {\r
-                                       this._svg.attributes.removeNamedItem(attr.nodeName);\r
-                               }\r
-                       }\r
-               }\r
-               for (var attrName in settings) {\r
-                       this._svg.setAttribute(attrName, settings[attrName]);\r
-               }\r
-               return this;\r
-       },\r
-\r
-       /* Locate a specific element in the SVG document.\r
-          @param  id  (string) the element's identifier\r
-          @return  (element) the element reference, or null if not found */\r
-       getElementById: function(id) {\r
-               return this._svg.ownerDocument.getElementById(id);\r
-       },\r
-\r
-       /* Change the attributes for a SVG node.\r
-          @param  element   (SVG element) the node to change\r
-          @param  settings  (object) the new settings\r
-          @return  (SVGWrapper) this root */\r
-       change: function(element, settings) {\r
-               if (element) {\r
-                       for (var name in settings) {\r
-                               if (settings[name] == null) {\r
-                                       element.removeAttribute(name);\r
-                               }\r
-                               else {\r
-                                       element.setAttribute(name, settings[name]);\r
-                               }\r
-                       }\r
-               }\r
-               return this;\r
-       },\r
-\r
-       /* Check for parent being absent and adjust arguments accordingly. */\r
-       _args: function(values, names, optSettings) {\r
-               names.splice(0, 0, 'parent');\r
-               names.splice(names.length, 0, 'settings');\r
-               var args = {};\r
-               var offset = 0;\r
-               if (values[0] != null && values[0].jquery) {\r
-                       values[0] = values[0][0];\r
-               }\r
-               if (values[0] != null && !(typeof values[0] == 'object' && values[0].nodeName)) {\r
-                       args['parent'] = null;\r
-                       offset = 1;\r
-               }\r
-               for (var i = 0; i < values.length; i++) {\r
-                       args[names[i + offset]] = values[i];\r
-               }\r
-               if (optSettings) {\r
-                       $.each(optSettings, function(i, value) {\r
-                               if (typeof args[value] == 'object') {\r
-                                       args.settings = args[value];\r
-                                       args[value] = null;\r
-                               }\r
-                       });\r
-               }\r
-               return args;\r
-       },\r
-\r
-       /* Add a title.\r
-          @param  parent    (element or jQuery) the parent node for the new title (optional)\r
-          @param  text      (string) the text of the title\r
-          @param  settings  (object) additional settings for the title (optional)\r
-          @return  (element) the new title node */\r
-       title: function(parent, text, settings) {\r
-               var args = this._args(arguments, ['text']);\r
-               var node = this._makeNode(args.parent, 'title', args.settings || {});\r
-               node.appendChild(this._svg.ownerDocument.createTextNode(args.text));\r
-               return node;\r
-       },\r
-\r
-       /* Add a description.\r
-          @param  parent    (element or jQuery) the parent node for the new description (optional)\r
-          @param  text      (string) the text of the description\r
-          @param  settings  (object) additional settings for the description (optional)\r
-          @return  (element) the new description node */\r
-       describe: function(parent, text, settings) {\r
-               var args = this._args(arguments, ['text']);\r
-               var node = this._makeNode(args.parent, 'desc', args.settings || {});\r
-               node.appendChild(this._svg.ownerDocument.createTextNode(args.text));\r
-               return node;\r
-       },\r
-\r
-       /* Add a definitions node.\r
-          @param  parent    (element or jQuery) the parent node for the new definitions (optional)\r
-          @param  id        (string) the ID of this definitions (optional)\r
-          @param  settings  (object) additional settings for the definitions (optional)\r
-          @return  (element) the new definitions node */\r
-       defs: function(parent, id, settings) {\r
-               var args = this._args(arguments, ['id'], ['id']);\r
-               return this._makeNode(args.parent, 'defs', $.extend(\r
-                       (args.id ? {id: args.id} : {}), args.settings || {}));\r
-       },\r
-\r
-       /* Add a symbol definition.\r
-          @param  parent    (element or jQuery) the parent node for the new symbol (optional)\r
-          @param  id        (string) the ID of this symbol\r
-          @param  x1        (number) the left coordinate for this symbol\r
-          @param  y1        (number) the top coordinate for this symbol\r
-          @param  width     (number) the width of this symbol\r
-          @param  height    (number) the height of this symbol\r
-          @param  settings  (object) additional settings for the symbol (optional)\r
-          @return  (element) the new symbol node */\r
-       symbol: function(parent, id, x1, y1, width, height, settings) {\r
-               var args = this._args(arguments, ['id', 'x1', 'y1', 'width', 'height']);\r
-               return this._makeNode(args.parent, 'symbol', $.extend({id: args.id,\r
-                       viewBox: args.x1 + ' ' + args.y1 + ' ' + args.width + ' ' + args.height},\r
-                       args.settings || {}));\r
-       },\r
-\r
-       /* Add a marker definition.\r
-          @param  parent    (element or jQuery) the parent node for the new marker (optional)\r
-          @param  id        (string) the ID of this marker\r
-          @param  refX      (number) the x-coordinate for the reference point\r
-          @param  refY      (number) the y-coordinate for the reference point\r
-          @param  mWidth    (number) the marker viewport width\r
-          @param  mHeight   (number) the marker viewport height\r
-          @param  orient    (string or int) 'auto' or angle (degrees) (optional)\r
-          @param  settings  (object) additional settings for the marker (optional)\r
-          @return  (element) the new marker node */\r
-       marker: function(parent, id, refX, refY, mWidth, mHeight, orient, settings) {\r
-               var args = this._args(arguments, ['id', 'refX', 'refY',\r
-                       'mWidth', 'mHeight', 'orient'], ['orient']);\r
-               return this._makeNode(args.parent, 'marker', $.extend(\r
-                       {id: args.id, refX: args.refX, refY: args.refY, markerWidth: args.mWidth, \r
-                       markerHeight: args.mHeight, orient: args.orient || 'auto'}, args.settings || {}));\r
-       },\r
-\r
-       /* Add a style node.\r
-          @param  parent    (element or jQuery) the parent node for the new node (optional)\r
-          @param  styles    (string) the CSS styles\r
-          @param  settings  (object) additional settings for the node (optional)\r
-          @return  (element) the new style node */\r
-       style: function(parent, styles, settings) {\r
-               var args = this._args(arguments, ['styles']);\r
-               var node = this._makeNode(args.parent, 'style', $.extend(\r
-                       {type: 'text/css'}, args.settings || {}));\r
-               node.appendChild(this._svg.ownerDocument.createTextNode(args.styles));\r
-               if ($.browser.opera) {\r
-                       $('head').append('<style type="text/css">' + args.styles + '</style>');\r
-               }\r
-               return node;\r
-       },\r
-\r
-       /* Add a script node.\r
-          @param  parent    (element or jQuery) the parent node for the new node (optional)\r
-          @param  script    (string) the JavaScript code\r
-          @param  type      (string) the MIME type for the code (optional, default 'text/javascript')\r
-          @param  settings  (object) additional settings for the node (optional)\r
-          @return  (element) the new script node */\r
-       script: function(parent, script, type, settings) {\r
-               var args = this._args(arguments, ['script', 'type'], ['type']);\r
-               var node = this._makeNode(args.parent, 'script', $.extend(\r
-                       {type: args.type || 'text/javascript'}, args.settings || {}));\r
-               node.appendChild(this._svg.ownerDocument.createTextNode(this._escapeXML(args.script)));\r
-               if (!$.browser.mozilla) {\r
-                       $.globalEval(args.script);\r
-               }\r
-               return node;\r
-       },\r
-\r
-       /* Add a linear gradient definition.\r
-          Specify all of x1, y1, x2, y2 or none of them.\r
-          @param  parent    (element or jQuery) the parent node for the new gradient (optional)\r
-          @param  id        (string) the ID for this gradient\r
-          @param  stops     (string[][]) the gradient stops, each entry is\r
-                            [0] is offset (0.0-1.0 or 0%-100%), [1] is colour, \r
-                                                [2] is opacity (optional)\r
-          @param  x1        (number) the x-coordinate of the gradient start (optional)\r
-          @param  y1        (number) the y-coordinate of the gradient start (optional)\r
-          @param  x2        (number) the x-coordinate of the gradient end (optional)\r
-          @param  y2        (number) the y-coordinate of the gradient end (optional)\r
-          @param  settings  (object) additional settings for the gradient (optional)\r
-          @return  (element) the new gradient node */\r
-       linearGradient: function(parent, id, stops, x1, y1, x2, y2, settings) {\r
-               var args = this._args(arguments,\r
-                       ['id', 'stops', 'x1', 'y1', 'x2', 'y2'], ['x1']);\r
-               var sets = $.extend({id: args.id}, \r
-                       (args.x1 != null ? {x1: args.x1, y1: args.y1, x2: args.x2, y2: args.y2} : {}));\r
-               return this._gradient(args.parent, 'linearGradient', \r
-                       $.extend(sets, args.settings || {}), args.stops);\r
-       },\r
-\r
-       /* Add a radial gradient definition.\r
-          Specify all of cx, cy, r, fx, fy or none of them.\r
-          @param  parent    (element or jQuery) the parent node for the new gradient (optional)\r
-          @param  id        (string) the ID for this gradient\r
-          @param  stops     (string[][]) the gradient stops, each entry\r
-                            [0] is offset, [1] is colour, [2] is opacity (optional)\r
-          @param  cx        (number) the x-coordinate of the largest circle centre (optional)\r
-          @param  cy        (number) the y-coordinate of the largest circle centre (optional)\r
-          @param  r         (number) the radius of the largest circle (optional)\r
-          @param  fx        (number) the x-coordinate of the gradient focus (optional)\r
-          @param  fy        (number) the y-coordinate of the gradient focus (optional)\r
-          @param  settings  (object) additional settings for the gradient (optional)\r
-          @return  (element) the new gradient node */\r
-       radialGradient: function(parent, id, stops, cx, cy, r, fx, fy, settings) {\r
-               var args = this._args(arguments,\r
-                       ['id', 'stops', 'cx', 'cy', 'r', 'fx', 'fy'], ['cx']);\r
-               var sets = $.extend({id: args.id}, (args.cx != null ?\r
-                       {cx: args.cx, cy: args.cy, r: args.r, fx: args.fx, fy: args.fy} : {}));\r
-               return this._gradient(args.parent, 'radialGradient', \r
-                       $.extend(sets, args.settings || {}), args.stops);\r
-       },\r
-\r
-       /* Add a gradient node. */\r
-       _gradient: function(parent, name, settings, stops) {\r
-               var node = this._makeNode(parent, name, settings);\r
-               for (var i = 0; i < stops.length; i++) {\r
-                       var stop = stops[i];\r
-                       this._makeNode(node, 'stop', $.extend(\r
-                               {offset: stop[0], stopColor: stop[1]}, \r
-                               (stop[2] != null ? {stopOpacity: stop[2]} : {})));\r
-               }\r
-               return node;\r
-       },\r
-\r
-       /* Add a pattern definition.\r
-          Specify all of vx, vy, xwidth, vheight or none of them.\r
-          @param  parent    (element or jQuery) the parent node for the new pattern (optional)\r
-          @param  id        (string) the ID for this pattern\r
-          @param  x         (number) the x-coordinate for the left edge of the pattern\r
-          @param  y         (number) the y-coordinate for the top edge of the pattern\r
-          @param  width     (number) the width of the pattern\r
-          @param  height    (number) the height of the pattern\r
-          @param  vx        (number) the minimum x-coordinate for view box (optional)\r
-          @param  vy        (number) the minimum y-coordinate for the view box (optional)\r
-          @param  vwidth    (number) the width of the view box (optional)\r
-          @param  vheight   (number) the height of the view box (optional)\r
-          @param  settings  (object) additional settings for the pattern (optional)\r
-          @return  (element) the new pattern node */\r
-       pattern: function(parent, id, x, y, width, height, vx, vy, vwidth, vheight, settings) {\r
-               var args = this._args(arguments, ['id', 'x', 'y', 'width', 'height',\r
-                       'vx', 'vy', 'vwidth', 'vheight'], ['vx']);\r
-               var sets = $.extend({id: args.id, x: args.x, y: args.y,\r
-                       width: args.width, height: args.height}, (args.vx != null ?\r
-                       {viewBox: args.vx + ' ' + args.vy + ' ' + args.vwidth + ' ' + args.vheight} : {}));\r
-               return this._makeNode(args.parent, 'pattern', $.extend(sets, args.settings || {}));\r
-       },\r
-\r
-       /* Add a mask definition.\r
-          @param  parent    (element or jQuery) the parent node for the new mask (optional)\r
-          @param  id        (string) the ID for this mask\r
-          @param  x         (number) the x-coordinate for the left edge of the mask\r
-          @param  y         (number) the y-coordinate for the top edge of the mask\r
-          @param  width     (number) the width of the mask\r
-          @param  height    (number) the height of the mask\r
-          @param  settings  (object) additional settings for the mask (optional)\r
-          @return  (element) the new mask node */\r
-       mask: function(parent, id, x, y, width, height, settings) {\r
-               var args = this._args(arguments, ['id', 'x', 'y', 'width', 'height']);\r
-               return this._makeNode(args.parent, 'mask', $.extend(\r
-                       {id: args.id, x: args.x, y: args.y, width: args.width, height: args.height},\r
-                       args.settings || {}));\r
-       },\r
-\r
-       /* Create a new path object.\r
-          @return  (SVGPath) a new path object */\r
-       createPath: function() {\r
-               return new SVGPath();\r
-       },\r
-\r
-       /* Create a new text object.\r
-          @return  (SVGText) a new text object */\r
-       createText: function() {\r
-               return new SVGText();\r
-       },\r
-\r
-       /* Add an embedded SVG element.\r
-          Specify all of vx, vy, vwidth, vheight or none of them.\r
-          @param  parent    (element or jQuery) the parent node for the new node (optional)\r
-          @param  x         (number) the x-coordinate for the left edge of the node\r
-          @param  y         (number) the y-coordinate for the top edge of the node\r
-          @param  width     (number) the width of the node\r
-          @param  height    (number) the height of the node\r
-          @param  vx        (number) the minimum x-coordinate for view box (optional)\r
-          @param  vy        (number) the minimum y-coordinate for the view box (optional)\r
-          @param  vwidth    (number) the width of the view box (optional)\r
-          @param  vheight   (number) the height of the view box (optional)\r
-          @param  settings  (object) additional settings for the node (optional)\r
-          @return  (element) the new node */\r
-       svg: function(parent, x, y, width, height, vx, vy, vwidth, vheight, settings) {\r
-               var args = this._args(arguments, ['x', 'y', 'width', 'height',\r
-                       'vx', 'vy', 'vwidth', 'vheight'], ['vx']);\r
-               var sets = $.extend({x: args.x, y: args.y, width: args.width, height: args.height}, \r
-                       (args.vx != null ? {viewBox: args.vx + ' ' + args.vy + ' ' +\r
-                       args.vwidth + ' ' + args.vheight} : {}));\r
-               return this._makeNode(args.parent, 'svg', $.extend(sets, args.settings || {}));\r
-       },\r
-\r
-       /* Create a group.\r
-          @param  parent    (element or jQuery) the parent node for the new group (optional)\r
-          @param  id        (string) the ID of this group (optional)\r
-          @param  settings  (object) additional settings for the group (optional)\r
-          @return  (element) the new group node */\r
-       group: function(parent, id, settings) {\r
-               var args = this._args(arguments, ['id'], ['id']);\r
-               return this._makeNode(args.parent, 'g', $.extend({id: args.id}, args.settings || {}));\r
-       },\r
-\r
-       /* Add a usage reference.\r
-          Specify all of x, y, width, height or none of them.\r
-          @param  parent    (element or jQuery) the parent node for the new node (optional)\r
-          @param  x         (number) the x-coordinate for the left edge of the node (optional)\r
-          @param  y         (number) the y-coordinate for the top edge of the node (optional)\r
-          @param  width     (number) the width of the node (optional)\r
-          @param  height    (number) the height of the node (optional)\r
-          @param  ref       (string) the ID of the definition node\r
-          @param  settings  (object) additional settings for the node (optional)\r
-          @return  (element) the new node */\r
-       use: function(parent, x, y, width, height, ref, settings) {\r
-               var args = this._args(arguments, ['x', 'y', 'width', 'height', 'ref']);\r
-               if (typeof args.x == 'string') {\r
-                       args.ref = args.x;\r
-                       args.settings = args.y;\r
-                       args.x = args.y = args.width = args.height = null;\r
-               }\r
-               var node = this._makeNode(args.parent, 'use', $.extend(\r
-                       {x: args.x, y: args.y, width: args.width, height: args.height},\r
-                       args.settings || {}));\r
-               node.setAttributeNS($.svg.xlinkNS, 'href', args.ref);\r
-               return node;\r
-       },\r
-\r
-       /* Add a link, which applies to all child elements.\r
-          @param  parent    (element or jQuery) the parent node for the new link (optional)\r
-          @param  ref       (string) the target URL\r
-          @param  settings  (object) additional settings for the link (optional)\r
-          @return  (element) the new link node */\r
-       link: function(parent, ref, settings) {\r
-               var args = this._args(arguments, ['ref']);\r
-               var node = this._makeNode(args.parent, 'a', args.settings);\r
-               node.setAttributeNS($.svg.xlinkNS, 'href', args.ref);\r
-               return node;\r
-       },\r
-\r
-       /* Add an image.\r
-          @param  parent    (element or jQuery) the parent node for the new image (optional)\r
-          @param  x         (number) the x-coordinate for the left edge of the image\r
-          @param  y         (number) the y-coordinate for the top edge of the image\r
-          @param  width     (number) the width of the image\r
-          @param  height    (number) the height of the image\r
-          @param  ref       (string) the path to the image\r
-          @param  settings  (object) additional settings for the image (optional)\r
-          @return  (element) the new image node */\r
-       image: function(parent, x, y, width, height, ref, settings) {\r
-               var args = this._args(arguments, ['x', 'y', 'width', 'height', 'ref']);\r
-               var node = this._makeNode(args.parent, 'image', $.extend(\r
-                       {x: args.x, y: args.y, width: args.width, height: args.height},\r
-                       args.settings || {}));\r
-               node.setAttributeNS($.svg.xlinkNS, 'href', args.ref);\r
-               return node;\r
-       },\r
-\r
-       /* Draw a path.\r
-          @param  parent    (element or jQuery) the parent node for the new shape (optional)\r
-          @param  path      (string or SVGPath) the path to draw\r
-          @param  settings  (object) additional settings for the shape (optional)\r
-          @return  (element) the new shape node */\r
-       path: function(parent, path, settings) {\r
-               var args = this._args(arguments, ['path']);\r
-               return this._makeNode(args.parent, 'path', $.extend(\r
-                       {d: (args.path.path ? args.path.path() : args.path)}, args.settings || {}));\r
-       },\r
-\r
-       /* Draw a rectangle.\r
-          Specify both of rx and ry or neither.\r
-          @param  parent    (element or jQuery) the parent node for the new shape (optional)\r
-          @param  x         (number) the x-coordinate for the left edge of the rectangle\r
-          @param  y         (number) the y-coordinate for the top edge of the rectangle\r
-          @param  width     (number) the width of the rectangle\r
-          @param  height    (number) the height of the rectangle\r
-          @param  rx        (number) the x-radius of the ellipse for the rounded corners (optional)\r
-          @param  ry        (number) the y-radius of the ellipse for the rounded corners (optional)\r
-          @param  settings  (object) additional settings for the shape (optional)\r
-          @return  (element) the new shape node */\r
-       rect: function(parent, x, y, width, height, rx, ry, settings) {\r
-               var args = this._args(arguments, ['x', 'y', 'width', 'height', 'rx', 'ry'], ['rx']);\r
-               return this._makeNode(args.parent, 'rect', $.extend(\r
-                       {x: args.x, y: args.y, width: args.width, height: args.height},\r
-                       (args.rx ? {rx: args.rx, ry: args.ry} : {}), args.settings || {}));\r
-       },\r
-\r
-       /* Draw a circle.\r
-          @param  parent    (element or jQuery) the parent node for the new shape (optional)\r
-          @param  cx        (number) the x-coordinate for the centre of the circle\r
-          @param  cy        (number) the y-coordinate for the centre of the circle\r
-          @param  r         (number) the radius of the circle\r
-          @param  settings  (object) additional settings for the shape (optional)\r
-          @return  (element) the new shape node */\r
-       circle: function(parent, cx, cy, r, settings) {\r
-               var args = this._args(arguments, ['cx', 'cy', 'r']);\r
-               return this._makeNode(args.parent, 'circle', $.extend(\r
-                       {cx: args.cx, cy: args.cy, r: args.r}, args.settings || {}));\r
-       },\r
-\r
-       /* Draw an ellipse.\r
-          @param  parent    (element or jQuery) the parent node for the new shape (optional)\r
-          @param  cx        (number) the x-coordinate for the centre of the ellipse\r
-          @param  cy        (number) the y-coordinate for the centre of the ellipse\r
-          @param  rx        (number) the x-radius of the ellipse\r
-          @param  ry        (number) the y-radius of the ellipse\r
-          @param  settings  (object) additional settings for the shape (optional)\r
-          @return  (element) the new shape node */\r
-       ellipse: function(parent, cx, cy, rx, ry, settings) {\r
-               var args = this._args(arguments, ['cx', 'cy', 'rx', 'ry']);\r
-               return this._makeNode(args.parent, 'ellipse', $.extend(\r
-                       {cx: args.cx, cy: args.cy, rx: args.rx, ry: args.ry}, args.settings || {}));\r
-       },\r
-\r
-       /* Draw a line.\r
-          @param  parent    (element or jQuery) the parent node for the new shape (optional)\r
-          @param  x1        (number) the x-coordinate for the start of the line\r
-          @param  y1        (number) the y-coordinate for the start of the line\r
-          @param  x2        (number) the x-coordinate for the end of the line\r
-          @param  y2        (number) the y-coordinate for the end of the line\r
-          @param  settings  (object) additional settings for the shape (optional)\r
-          @return  (element) the new shape node */\r
-       line: function(parent, x1, y1, x2, y2, settings) {\r
-               var args = this._args(arguments, ['x1', 'y1', 'x2', 'y2']);\r
-               return this._makeNode(args.parent, 'line', $.extend(\r
-                       {x1: args.x1, y1: args.y1, x2: args.x2, y2: args.y2}, args.settings || {}));\r
-       },\r
-\r
-       /* Draw a polygonal line.\r
-          @param  parent    (element or jQuery) the parent node for the new shape (optional)\r
-          @param  points    (number[][]) the x-/y-coordinates for the points on the line\r
-          @param  settings  (object) additional settings for the shape (optional)\r
-          @return  (element) the new shape node */\r
-       polyline: function(parent, points, settings) {\r
-               var args = this._args(arguments, ['points']);\r
-               return this._poly(args.parent, 'polyline', args.points, args.settings);\r
-       },\r
-\r
-       /* Draw a polygonal shape.\r
-          @param  parent    (element or jQuery) the parent node for the new shape (optional)\r
-          @param  points    (number[][]) the x-/y-coordinates for the points on the shape\r
-          @param  settings  (object) additional settings for the shape (optional)\r
-          @return  (element) the new shape node */\r
-       polygon: function(parent, points, settings) {\r
-               var args = this._args(arguments, ['points']);\r
-               return this._poly(args.parent, 'polygon', args.points, args.settings);\r
-       },\r
-\r
-       /* Draw a polygonal line or shape. */\r
-       _poly: function(parent, name, points, settings) {\r
-               var ps = '';\r
-               for (var i = 0; i < points.length; i++) {\r
-                       ps += points[i].join() + ' ';\r
-               }\r
-               return this._makeNode(parent, name, $.extend(\r
-                       {points: $.trim(ps)}, settings || {}));\r
-       },\r
-\r
-       /* Draw text.\r
-          Specify both of x and y or neither of them.\r
-          @param  parent    (element or jQuery) the parent node for the text (optional)\r
-          @param  x         (number or number[]) the x-coordinate(s) for the text (optional)\r
-          @param  y         (number or number[]) the y-coordinate(s) for the text (optional)\r
-          @param  value     (string) the text content or\r
-                            (SVGText) text with spans and references\r
-          @param  settings  (object) additional settings for the text (optional)\r
-          @return  (element) the new text node */\r
-       text: function(parent, x, y, value, settings) {\r
-               var args = this._args(arguments, ['x', 'y', 'value']);\r
-               if (typeof args.x == 'string' && arguments.length < 4) {\r
-                       args.value = args.x;\r
-                       args.settings = args.y;\r
-                       args.x = args.y = null;\r
-               }\r
-               return this._text(args.parent, 'text', args.value, $.extend(\r
-                       {x: (args.x && isArray(args.x) ? args.x.join(' ') : args.x),\r
-                       y: (args.y && isArray(args.y) ? args.y.join(' ') : args.y)}, \r
-                       args.settings || {}));\r
-       },\r
-\r
-       /* Draw text along a path.\r
-          @param  parent    (element or jQuery) the parent node for the text (optional)\r
-          @param  path      (string) the ID of the path\r
-          @param  value     (string) the text content or\r
-                            (SVGText) text with spans and references\r
-          @param  settings  (object) additional settings for the text (optional)\r
-          @return  (element) the new text node */\r
-       textpath: function(parent, path, value, settings) {\r
-               var args = this._args(arguments, ['path', 'value']);\r
-               var node = this._text(args.parent, 'textPath', args.value, args.settings || {});\r
-               node.setAttributeNS($.svg.xlinkNS, 'href', args.path);\r
-               return node;\r
-       },\r
-\r
-       /* Draw text. */\r
-       _text: function(parent, name, value, settings) {\r
-               var node = this._makeNode(parent, name, settings);\r
-               if (typeof value == 'string') {\r
-                       node.appendChild(node.ownerDocument.createTextNode(value));\r
-               }\r
-               else {\r
-                       for (var i = 0; i < value._parts.length; i++) {\r
-                               var part = value._parts[i];\r
-                               if (part[0] == 'tspan') {\r
-                                       var child = this._makeNode(node, part[0], part[2]);\r
-                                       child.appendChild(node.ownerDocument.createTextNode(part[1]));\r
-                                       node.appendChild(child);\r
-                               }\r
-                               else if (part[0] == 'tref') {\r
-                                       var child = this._makeNode(node, part[0], part[2]);\r
-                                       child.setAttributeNS($.svg.xlinkNS, 'href', part[1]);\r
-                                       node.appendChild(child);\r
-                               }\r
-                               else if (part[0] == 'textpath') {\r
-                                       var set = $.extend({}, part[2]);\r
-                                       set.href = null;\r
-                                       var child = this._makeNode(node, part[0], set);\r
-                                       child.setAttributeNS($.svg.xlinkNS, 'href', part[2].href);\r
-                                       child.appendChild(node.ownerDocument.createTextNode(part[1]));\r
-                                       node.appendChild(child);\r
-                               }\r
-                               else { // straight text\r
-                                       node.appendChild(node.ownerDocument.createTextNode(part[1]));\r
-                               }\r
-                       }\r
-               }\r
-               return node;\r
-       },\r
-\r
-       /* Add a custom SVG element.\r
-          @param  parent    (element or jQuery) the parent node for the new element (optional)\r
-          @param  name      (string) the name of the element\r
-          @param  settings  (object) additional settings for the element (optional)\r
-          @return  (element) the new custom node */\r
-       other: function(parent, name, settings) {\r
-               var args = this._args(arguments, ['name']);\r
-               return this._makeNode(args.parent, args.name, args.settings || {});\r
-       },\r
-\r
-       /* Create a shape node with the given settings. */\r
-       _makeNode: function(parent, name, settings) {\r
-               parent = parent || this._svg;\r
-               var node = this._svg.ownerDocument.createElementNS($.svg.svgNS, name);\r
-               for (var name in settings) {\r
-                       var value = settings[name];\r
-                       if (value != null && value != null && \r
-                                       (typeof value != 'string' || value != '')) {\r
-                               node.setAttribute($.svg._attrNames[name] || name, value);\r
-                       }\r
-               }\r
-               parent.appendChild(node);\r
-               return node;\r
-       },\r
-\r
-       /* Add an existing SVG node to the diagram.\r
-          @param  parent  (element or jQuery) the parent node for the new node (optional)\r
-          @param  node    (element) the new node to add or\r
-                          (string) the jQuery selector for the node or\r
-                          (jQuery collection) set of nodes to add\r
-          @return  (SVGWrapper) this wrapper */\r
-       add: function(parent, node) {\r
-               var args = this._args((arguments.length == 1 ? [null, parent] : arguments), ['node']);\r
-               var svg = this;\r
-               args.parent = args.parent || this._svg;\r
-               try {\r
-                       if ($.svg._renesis) {\r
-                               throw 'Force traversal';\r
-                       }\r
-                       args.parent.appendChild(args.node.cloneNode(true));\r
-               }\r
-               catch (e) {\r
-                       args.node = (args.node.jquery ? args.node : $(args.node));\r
-                       args.node.each(function() {\r
-                               var child = svg._cloneAsSVG(this);\r
-                               if (child) {\r
-                                       args.parent.appendChild(child);\r
-                               }\r
-                       });\r
-               }\r
-               return this;\r
-       },\r
-\r
-       /* SVG nodes must belong to the SVG namespace, so clone and ensure this is so. */\r
-       _cloneAsSVG: function(node) {\r
-               var newNode = null;\r
-               if (node.nodeType == 1) { // element\r
-                       newNode = this._svg.ownerDocument.createElementNS(\r
-                               $.svg.svgNS, this._checkName(node.nodeName));\r
-                       for (var i = 0; i < node.attributes.length; i++) {\r
-                               var attr = node.attributes.item(i);\r
-                               if (attr.nodeName != 'xmlns' && attr.nodeValue) {\r
-                                       if (attr.prefix == 'xlink') {\r
-                                               newNode.setAttributeNS($.svg.xlinkNS, attr.localName, attr.nodeValue);\r
-                                       }\r
-                                       else {\r
-                                               newNode.setAttribute(this._checkName(attr.nodeName), attr.nodeValue);\r
-                                       }\r
-                               }\r
-                       }\r
-                       for (var i = 0; i < node.childNodes.length; i++) {\r
-                               var child = this._cloneAsSVG(node.childNodes[i]);\r
-                               if (child) {\r
-                                       newNode.appendChild(child);\r
-                               }\r
-                       }\r
-               }\r
-               else if (node.nodeType == 3) { // text\r
-                       if ($.trim(node.nodeValue)) {\r
-                               newNode = this._svg.ownerDocument.createTextNode(node.nodeValue);\r
-                       }\r
-               }\r
-               else if (node.nodeType == 4) { // CDATA\r
-                       if ($.trim(node.nodeValue)) {\r
-                               try {\r
-                                       newNode = this._svg.ownerDocument.createCDATASection(node.nodeValue);\r
-                               }\r
-                               catch (e) {\r
-                                       newNode = this._svg.ownerDocument.createTextNode(\r
-                                               node.nodeValue.replace(/&/g, '&amp;').\r
-                                               replace(/</g, '&lt;').replace(/>/g, '&gt;'));\r
-                               }\r
-                       }\r
-               }\r
-               return newNode;\r
-       },\r
-\r
-       /* Node names must be lower case and without SVG namespace prefix. */\r
-       _checkName: function(name) {\r
-               name = (name.substring(0, 1) >= 'A' && name.substring(0, 1) <= 'Z' ?\r
-                       name.toLowerCase() : name);\r
-               return (name.substring(0, 4) == 'svg:' ? name.substring(4) : name);\r
-       },\r
-\r
-       /* Load an external SVG document.\r
-          @param  url       (string) the location of the SVG document or\r
-                            the actual SVG content\r
-          @param  settings  (boolean) see addTo below or\r
-                            (function) see onLoad below or\r
-                            (object) additional settings for the load with attributes below:\r
-                              addTo       (boolean) true to add to what's already there,\r
-                                          or false to clear the canvas first\r
-                                                  changeSize  (boolean) true to allow the canvas size to change,\r
-                                          or false to retain the original\r
-                              onLoad      (function) callback after the document has loaded,\r
-                                          'this' is the container, receives SVG object and\r
-                                          optional error message as a parameter\r
-          @return  (SVGWrapper) this root */\r
-       load: function(url, settings) {\r
-               settings = (typeof settings == 'boolean'? {addTo: settings} :\r
-                       (typeof settings == 'function'? {onLoad: settings} : settings || {}));\r
-               if (!settings.addTo) {\r
-                       this.clear(false);\r
-               }\r
-               var size = [this._svg.getAttribute('width'), this._svg.getAttribute('height')];\r
-               var wrapper = this;\r
-               // Report a problem with the load\r
-               var reportError = function(message) {\r
-                       message = $.svg.local.errorLoadingText + ': ' + message;\r
-                       if (settings.onLoad) {\r
-                               settings.onLoad.apply(wrapper._container || wrapper._svg, [wrapper, message]);\r
-                       }\r
-                       else {\r
-                               wrapper.text(null, 10, 20, message);\r
-                       }\r
-               };\r
-               // Create a DOM from SVG content\r
-               var loadXML4IE = function(data) {\r
-                       var xml = new ActiveXObject('Microsoft.XMLDOM');\r
-                       xml.validateOnParse = false;\r
-                       xml.resolveExternals = false;\r
-                       xml.async = false;\r
-                       xml.loadXML(data);\r
-                       if (xml.parseError.errorCode != 0) {\r
-                               reportError(xml.parseError.reason);\r
-                               return null;\r
-                       }\r
-                       return xml;\r
-               };\r
-               // Load the SVG DOM\r
-               var loadSVG = function(data) {\r
-                       if (!data) {\r
-                               return;\r
-                       }\r
-                       if (data.documentElement.nodeName != 'svg') {\r
-                               var errors = data.getElementsByTagName('parsererror');\r
-                               var messages = (errors.length ? errors[0].getElementsByTagName('div') : []); // Safari\r
-                               reportError(!errors.length ? '???' :\r
-                                       (messages.length ? messages[0] : errors[0]).firstChild.nodeValue);\r
-                               return;\r
-                       }\r
-                       var attrs = {};\r
-                       for (var i = 0; i < data.documentElement.attributes.length; i++) {\r
-                               var attr = data.documentElement.attributes.item(i);\r
-                               if (!(attr.nodeName == 'version' || attr.nodeName.substring(0, 5) == 'xmlns')) {\r
-                                       attrs[attr.nodeName] = attr.nodeValue;\r
-                               }\r
-                       }\r
-                       wrapper.configure(attrs, true);\r
-                       var nodes = data.documentElement.childNodes;\r
-                       for (var i = 0; i < nodes.length; i++) {\r
-                               try {\r
-                                       if ($.svg._renesis) {\r
-                                               throw 'Force traversal';\r
-                                       }\r
-                                       wrapper._svg.appendChild(nodes[i].cloneNode(true));\r
-                                       if (nodes[i].nodeName == 'script') {\r
-                                               $.globalEval(nodes[i].textContent);\r
-                                       }\r
-                               }\r
-                               catch (e) {\r
-                                       wrapper.add(null, nodes[i]);\r
-                               }\r
-                       }\r
-                       if (!settings.changeSize) {\r
-                               wrapper.configure({width: size[0], height: size[1]});\r
-                       }\r
-                       if (settings.onLoad) {\r
-                               settings.onLoad.apply(wrapper._container || wrapper._svg, [wrapper]);\r
-                       }\r
-               };\r
-               if (url.match('<svg')) { // Inline SVG\r
-                       loadSVG($.browser.msie ? loadXML4IE(url) :\r
-                               new DOMParser().parseFromString(url, 'text/xml'));\r
-               }\r
-               else { // Remote SVG\r
-                       $.ajax({url: url, dataType: ($.browser.msie ? 'text' : 'xml'),\r
-                               success: function(xml) {\r
-                                       loadSVG($.browser.msie ? loadXML4IE(xml) : xml);\r
-                               }, error: function(http, message, exc) {\r
-                                       reportError(message + (exc ? ' ' + exc.message : ''));\r
-                               }});\r
-               }\r
-               return this;\r
-       },\r
-\r
-       /* Delete a specified node.\r
-          @param  node  (element or jQuery) the drawing node to remove\r
-          @return  (SVGWrapper) this root */\r
-       remove: function(node) {\r
-               node = (node.jquery ? node[0] : node);\r
-               node.parentNode.removeChild(node);\r
-               return this;\r
-       },\r
-\r
-       /* Delete everything in the current document.\r
-          @param  attrsToo  (boolean) true to clear any root attributes as well,\r
-                            false to leave them (optional)\r
-          @return  (SVGWrapper) this root */\r
-       clear: function(attrsToo) {\r
-               if (attrsToo) {\r
-                       this.configure({}, true);\r
-               }\r
-               while (this._svg.firstChild) {\r
-                       this._svg.removeChild(this._svg.firstChild);\r
-               }\r
-               return this;\r
-       },\r
-\r
-       /* Serialise the current diagram into an SVG text document.\r
-          @param  node  (SVG element) the starting node (optional)\r
-          @return  (string) the SVG as text */\r
-       toSVG: function(node) {\r
-               node = node || this._svg;\r
-               return (typeof XMLSerializer == 'undefined' ? this._toSVG(node) :\r
-                       new XMLSerializer().serializeToString(node));\r
-       },\r
-\r
-       /* Serialise one node in the SVG hierarchy. */\r
-       _toSVG: function(node) {\r
-               var svgDoc = '';\r
-               if (!node) {\r
-                       return svgDoc;\r
-               }\r
-               if (node.nodeType == 3) { // Text\r
-                       svgDoc = node.nodeValue;\r
-               }\r
-               else if (node.nodeType == 4) { // CDATA\r
-                       svgDoc = '<![CDATA[' + node.nodeValue + ']]>';\r
-               }\r
-               else { // Element\r
-                       svgDoc = '<' + node.nodeName;\r
-                       if (node.attributes) {\r
-                               for (var i = 0; i < node.attributes.length; i++) {\r
-                                       var attr = node.attributes.item(i);\r
-                                       if (!($.trim(attr.nodeValue) == '' || attr.nodeValue.match(/^\[object/) ||\r
-                                                       attr.nodeValue.match(/^function/))) {\r
-                                               svgDoc += ' ' + (attr.namespaceURI == $.svg.xlinkNS ? 'xlink:' : '') + \r
-                                                       attr.nodeName + '="' + attr.nodeValue + '"';\r
-                                       }\r
-                               }\r
-                       }       \r
-                       if (node.firstChild) {\r
-                               svgDoc += '>';\r
-                               var child = node.firstChild;\r
-                               while (child) {\r
-                                       svgDoc += this._toSVG(child);\r
-                                       child = child.nextSibling;\r
-                               }\r
-                               svgDoc += '</' + node.nodeName + '>';\r
-                       }\r
-                               else {\r
-                               svgDoc += '/>';\r
-                       }\r
-               }\r
-               return svgDoc;\r
-       },\r
-       \r
-       /* Escape reserved characters in XML. */\r
-       _escapeXML: function(text) {\r
-               text = text.replace(/&/g, '&amp;');\r
-               text = text.replace(/</g, '&lt;');\r
-               text = text.replace(/>/g, '&gt;');\r
-               return text;\r
-       }\r
-});\r
-\r
-/* Helper to generate an SVG path.\r
-   Obtain an instance from the SVGWrapper object.\r
-   String calls together to generate the path and use its value:\r
-   var path = root.createPath();\r
-   root.path(null, path.move(100, 100).line(300, 100).line(200, 300).close(), {fill: 'red'});\r
-   or\r
-   root.path(null, path.move(100, 100).line([[300, 100], [200, 300]]).close(), {fill: 'red'}); */\r
-function SVGPath() {\r
-       this._path = '';\r
-}\r
-\r
-$.extend(SVGPath.prototype, {\r
-       /* Prepare to create a new path.\r
-          @return  (SVGPath) this path */\r
-       reset: function() {\r
-               this._path = '';\r
-               return this;\r
-       },\r
-\r
-       /* Move the pointer to a position.\r
-          @param  x         (number) x-coordinate to move to or\r
-                            (number[][]) x-/y-coordinates to move to\r
-          @param  y         (number) y-coordinate to move to (omitted if x is array)\r
-          @param  relative  (boolean) true for coordinates relative to the current point,\r
-                            false for coordinates being absolute\r
-          @return  (SVGPath) this path */\r
-       move: function(x, y, relative) {\r
-               relative = (isArray(x) ? y : relative);\r
-               return this._coords((relative ? 'm' : 'M'), x, y);\r
-       },\r
-\r
-       /* Draw a line to a position.\r
-          @param  x         (number) x-coordinate to move to or\r
-                            (number[][]) x-/y-coordinates to move to\r
-          @param  y         (number) y-coordinate to move to (omitted if x is array)\r
-          @param  relative  (boolean) true for coordinates relative to the current point,\r
-                            false for coordinates being absolute\r
-          @return  (SVGPath) this path */\r
-       line: function(x, y, relative) {\r
-               relative = (isArray(x) ? y : relative);\r
-               return this._coords((relative ? 'l' : 'L'), x, y);\r
-       },\r
-\r
-       /* Draw a horizontal line to a position.\r
-          @param  x         (number) x-coordinate to draw to or\r
-                            (number[]) x-coordinates to draw to\r
-          @param  relative  (boolean) true for coordinates relative to the current point,\r
-                            false for coordinates being absolute\r
-          @return  (SVGPath) this path */\r
-       horiz: function(x, relative) {\r
-               this._path += (relative ? 'h' : 'H') + (isArray(x) ? x.join(' ') : x);\r
-               return this;\r
-       },\r
-\r
-       /* Draw a vertical line to a position.\r
-          @param  y         (number) y-coordinate to draw to or\r
-                            (number[]) y-coordinates to draw to\r
-          @param  relative  (boolean) true for coordinates relative to the current point,\r
-                            false for coordinates being absolute\r
-          @return  (SVGPath) this path */\r
-       vert: function(y, relative) {\r
-               this._path += (relative ? 'v' : 'V') + (isArray(y) ? y.join(' ') : y);\r
-               return this;\r
-       },\r
-\r
-       /* Draw a cubic Bézier curve.\r
-          @param  x1        (number) x-coordinate of beginning control point or\r
-                            (number[][]) x-/y-coordinates of control and end points to draw to\r
-          @param  y1        (number) y-coordinate of beginning control point (omitted if x1 is array)\r
-          @param  x2        (number) x-coordinate of ending control point (omitted if x1 is array)\r
-          @param  y2        (number) y-coordinate of ending control point (omitted if x1 is array)\r
-          @param  x         (number) x-coordinate of curve end (omitted if x1 is array)\r
-          @param  y         (number) y-coordinate of curve end (omitted if x1 is array)\r
-          @param  relative  (boolean) true for coordinates relative to the current point,\r
-                            false for coordinates being absolute\r
-          @return  (SVGPath) this path */\r
-       curveC: function(x1, y1, x2, y2, x, y, relative) {\r
-               relative = (isArray(x1) ? y1 : relative);\r
-               return this._coords((relative ? 'c' : 'C'), x1, y1, x2, y2, x, y);\r
-       },\r
-\r
-       /* Continue a cubic Bézier curve.\r
-          Starting control point is the reflection of the previous end control point.\r
-          @param  x2        (number) x-coordinate of ending control point or\r
-                            (number[][]) x-/y-coordinates of control and end points to draw to\r
-          @param  y2        (number) y-coordinate of ending control point (omitted if x2 is array)\r
-          @param  x         (number) x-coordinate of curve end (omitted if x2 is array)\r
-          @param  y         (number) y-coordinate of curve end (omitted if x2 is array)\r
-          @param  relative  (boolean) true for coordinates relative to the current point,\r
-                            false for coordinates being absolute\r
-          @return  (SVGPath) this path */\r
-       smoothC: function(x2, y2, x, y, relative) {\r
-               relative = (isArray(x2) ? y2 : relative);\r
-               return this._coords((relative ? 's' : 'S'), x2, y2, x, y);\r
-       },\r
-\r
-       /* Draw a quadratic Bézier curve.\r
-          @param  x1        (number) x-coordinate of control point or\r
-                            (number[][]) x-/y-coordinates of control and end points to draw to\r
-          @param  y1        (number) y-coordinate of control point (omitted if x1 is array)\r
-          @param  x         (number) x-coordinate of curve end (omitted if x1 is array)\r
-          @param  y         (number) y-coordinate of curve end (omitted if x1 is array)\r
-          @param  relative  (boolean) true for coordinates relative to the current point,\r
-                            false for coordinates being absolute\r
-          @return  (SVGPath) this path */\r
-       curveQ: function(x1, y1, x, y, relative) {\r
-               relative = (isArray(x1) ? y1 : relative);\r
-               return this._coords((relative ? 'q' : 'Q'), x1, y1, x, y);\r
-       },\r
-\r
-       /* Continue a quadratic Bézier curve.\r
-          Control point is the reflection of the previous control point.\r
-          @param  x         (number) x-coordinate of curve end or\r
-                            (number[][]) x-/y-coordinates of points to draw to\r
-          @param  y         (number) y-coordinate of curve end (omitted if x is array)\r
-          @param  relative  (boolean) true for coordinates relative to the current point,\r
-                            false for coordinates being absolute\r
-          @return  (SVGPath) this path */\r
-       smoothQ: function(x, y, relative) {\r
-               relative = (isArray(x) ? y : relative);\r
-               return this._coords((relative ? 't' : 'T'), x, y);\r
-       },\r
-\r
-       /* Generate a path command with (a list of) coordinates. */\r
-       _coords: function(cmd, x1, y1, x2, y2, x3, y3) {\r
-               if (isArray(x1)) {\r
-                       for (var i = 0; i < x1.length; i++) {\r
-                               var cs = x1[i];\r
-                               this._path += (i == 0 ? cmd : ' ') + cs[0] + ',' + cs[1] +\r
-                                       (cs.length < 4 ? '' : ' ' + cs[2] + ',' + cs[3] +\r
-                                       (cs.length < 6 ? '': ' ' + cs[4] + ',' + cs[5]));\r
-                       }\r
-               }\r
-               else {\r
-                       this._path += cmd + x1 + ',' + y1 + \r
-                               (x2 == null ? '' : ' ' + x2 + ',' + y2 +\r
-                               (x3 == null ? '' : ' ' + x3 + ',' + y3));\r
-               }\r
-               return this;\r
-       },\r
-\r
-       /* Draw an arc to a position.\r
-          @param  rx         (number) x-radius of arc or\r
-                             (number/boolean[][]) x-/y-coordinates and flags for points to draw to\r
-          @param  ry         (number) y-radius of arc (omitted if rx is array)\r
-          @param  xRotate    (number) x-axis rotation (degrees, clockwise) (omitted if rx is array)\r
-          @param  large      (boolean) true to draw the large part of the arc,\r
-                             false to draw the small part (omitted if rx is array)\r
-          @param  clockwise  (boolean) true to draw the clockwise arc,\r
-                             false to draw the anti-clockwise arc (omitted if rx is array)\r
-          @param  x          (number) x-coordinate of arc end (omitted if rx is array)\r
-          @param  y          (number) y-coordinate of arc end (omitted if rx is array)\r
-          @param  relative   (boolean) true for coordinates relative to the current point,\r
-                             false for coordinates being absolute\r
-          @return  (SVGPath) this path */\r
-       arc: function(rx, ry, xRotate, large, clockwise, x, y, relative) {\r
-               relative = (isArray(rx) ? ry : relative);\r
-               this._path += (relative ? 'a' : 'A');\r
-               if (isArray(rx)) {\r
-                       for (var i = 0; i < rx.length; i++) {\r
-                               var cs = rx[i];\r
-                               this._path += (i == 0 ? '' : ' ') + cs[0] + ',' + cs[1] + ' ' +\r
-                                       cs[2] + ' ' + (cs[3] ? '1' : '0') + ',' +\r
-                                       (cs[4] ? '1' : '0') + ' ' + cs[5] + ',' + cs[6];\r
-                       }\r
-               }\r
-               else {\r
-                       this._path += rx + ',' + ry + ' ' + xRotate + ' ' +\r
-                               (large ? '1' : '0') + ',' + (clockwise ? '1' : '0') + ' ' + x + ',' + y;\r
-               }\r
-               return this;\r
-       },\r
-\r
-       /* Close the current path.\r
-          @return  (SVGPath) this path */\r
-       close: function() {\r
-               this._path += 'z';\r
-               return this;\r
-       },\r
-\r
-       /* Return the string rendering of the specified path.\r
-          @return  (string) stringified path */\r
-       path: function() {\r
-               return this._path;\r
-       }\r
-});\r
-\r
-SVGPath.prototype.moveTo = SVGPath.prototype.move;\r
-SVGPath.prototype.lineTo = SVGPath.prototype.line;\r
-SVGPath.prototype.horizTo = SVGPath.prototype.horiz;\r
-SVGPath.prototype.vertTo = SVGPath.prototype.vert;\r
-SVGPath.prototype.curveCTo = SVGPath.prototype.curveC;\r
-SVGPath.prototype.smoothCTo = SVGPath.prototype.smoothC;\r
-SVGPath.prototype.curveQTo = SVGPath.prototype.curveQ;\r
-SVGPath.prototype.smoothQTo = SVGPath.prototype.smoothQ;\r
-SVGPath.prototype.arcTo = SVGPath.prototype.arc;\r
-\r
-/* Helper to generate an SVG text object.\r
-   Obtain an instance from the SVGWrapper object.\r
-   String calls together to generate the text and use its value:\r
-   var text = root.createText();\r
-   root.text(null, x, y, text.string('This is ').\r
-     span('red', {fill: 'red'}).string('!'), {fill: 'blue'}); */\r
-function SVGText() {\r
-       this._parts = []; // The components of the text object\r
-}\r
-\r
-$.extend(SVGText.prototype, {\r
-       /* Prepare to create a new text object.\r
-          @return  (SVGText) this text */\r
-       reset: function() {\r
-               this._parts = [];\r
-               return this;\r
-       },\r
-\r
-       /* Add a straight string value.\r
-          @param  value  (string) the actual text\r
-          @return  (SVGText) this text object */\r
-       string: function(value) {\r
-               this._parts[this._parts.length] = ['text', value];\r
-               return this;\r
-       },\r
-\r
-       /* Add a separate text span that has its own settings.\r
-          @param  value     (string) the actual text\r
-          @param  settings  (object) the settings for this text\r
-          @return  (SVGText) this text object */\r
-       span: function(value, settings) {\r
-               this._parts[this._parts.length] = ['tspan', value, settings];\r
-               return this;\r
-       },\r
-\r
-       /* Add a reference to a previously defined text string.\r
-          @param  id        (string) the ID of the actual text\r
-          @param  settings  (object) the settings for this text\r
-          @return  (SVGText) this text object */\r
-       ref: function(id, settings) {\r
-               this._parts[this._parts.length] = ['tref', id, settings];\r
-               return this;\r
-       },\r
-\r
-       /* Add text drawn along a path.\r
-          @param  id        (string) the ID of the path\r
-          @param  value     (string) the actual text\r
-          @param  settings  (object) the settings for this text\r
-          @return  (SVGText) this text object */\r
-       path: function(id, value, settings) {\r
-               this._parts[this._parts.length] = ['textpath', value, \r
-                       $.extend({href: id}, settings || {})];\r
-               return this;\r
-       }\r
-});\r
-\r
-/* Attach the SVG functionality to a jQuery selection.\r
-   @param  command  (string) the command to run (optional, default 'attach')\r
-   @param  options  (object) the new settings to use for these SVG instances\r
-   @return jQuery (object) for chaining further calls */\r
-$.fn.svg = function(options) {\r
-       var otherArgs = Array.prototype.slice.call(arguments, 1);\r
-       if (typeof options == 'string' && options == 'get') {\r
-               return $.svg['_' + options + 'SVG'].apply($.svg, [this[0]].concat(otherArgs));\r
-       }\r
-       return this.each(function() {\r
-               if (typeof options == 'string') {\r
-                       $.svg['_' + options + 'SVG'].apply($.svg, [this].concat(otherArgs));\r
-               }\r
-               else {\r
-                       $.svg._attachSVG(this, options || {});\r
-               } \r
-       });\r
-};\r
-\r
-/* Determine whether an object is an array. */\r
-function isArray(a) {\r
-       return (a && a.constructor == Array);\r
-}\r
-\r
-// Singleton primary SVG interface\r
-$.svg = new SVGManager();\r
-\r
-})(jQuery);\r
diff --git a/stemmaweb/root/js/jquery.svgdom.js b/stemmaweb/root/js/jquery.svgdom.js
deleted file mode 100644 (file)
index df9ce61..0000000
+++ /dev/null
@@ -1,332 +0,0 @@
-/* http://keith-wood.name/svg.html\r
-   SVG/jQuery DOM compatibility for jQuery v1.4.3.\r
-   Written by Keith Wood (kbwood{at}iinet.com.au) April 2009.\r
-   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and \r
-   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. \r
-   Please attribute the author if you use it. */\r
-\r
-(function($) { // Hide scope, no $ conflict\r
-\r
-/* Support adding class names to SVG nodes. */\r
-$.fn.addClass = function(origAddClass) {\r
-       return function(classNames) {\r
-               classNames = classNames || '';\r
-               return this.each(function() {\r
-                       if (isSVGElem(this)) {\r
-                               var node = this;\r
-                               $.each(classNames.split(/\s+/), function(i, className) {\r
-                                       var classes = (node.className ? node.className.baseVal : node.getAttribute('class'));\r
-                                       if ($.inArray(className, classes.split(/\s+/)) == -1) {\r
-                                               classes += (classes ? ' ' : '') + className;\r
-                                               (node.className ? node.className.baseVal = classes :\r
-                                                       node.setAttribute('class',  classes));\r
-                                       }\r
-                               });\r
-                       }\r
-                       else {\r
-                               origAddClass.apply($(this), [classNames]);\r
-                       }\r
-               });\r
-       };\r
-}($.fn.addClass);\r
-\r
-/* Support removing class names from SVG nodes. */\r
-$.fn.removeClass = function(origRemoveClass) {\r
-       return function(classNames) {\r
-               classNames = classNames || '';\r
-               return this.each(function() {\r
-                       if (isSVGElem(this)) {\r
-                               var node = this;\r
-                               $.each(classNames.split(/\s+/), function(i, className) {\r
-                                       var classes = (node.className ? node.className.baseVal : node.getAttribute('class'));\r
-                                       classes = $.grep(classes.split(/\s+/), function(n, i) { return n != className; }).\r
-                                               join(' ');\r
-                                       (node.className ? node.className.baseVal = classes :\r
-                                               node.setAttribute('class', classes));\r
-                               });\r
-                       }\r
-                       else {\r
-                               origRemoveClass.apply($(this), [classNames]);\r
-                       }\r
-               });\r
-       };\r
-}($.fn.removeClass);\r
-\r
-/* Support toggling class names on SVG nodes. */\r
-$.fn.toggleClass = function(origToggleClass) {\r
-       return function(className, state) {\r
-               return this.each(function() {\r
-                       if (isSVGElem(this)) {\r
-                               if (typeof state !== 'boolean') {\r
-                                       state = !$(this).hasClass(className);\r
-                               }\r
-                               $(this)[(state ? 'add' : 'remove') + 'Class'](className);\r
-                       }\r
-                       else {\r
-                               origToggleClass.apply($(this), [className, state]);\r
-                       }\r
-               });\r
-       };\r
-}($.fn.toggleClass);\r
-\r
-/* Support checking class names on SVG nodes. */\r
-$.fn.hasClass = function(origHasClass) {\r
-       return function(className) {\r
-               className = className || '';\r
-               var found = false;\r
-               this.each(function() {\r
-                       if (isSVGElem(this)) {\r
-                               var classes = (this.className ? this.className.baseVal :\r
-                                       this.getAttribute('class')).split(/\s+/);\r
-                               found = ($.inArray(className, classes) > -1);\r
-                       }\r
-                       else {\r
-                               found = (origHasClass.apply($(this), [className]));\r
-                       }\r
-                       return !found;\r
-               });\r
-               return found;\r
-       };\r
-}($.fn.hasClass);\r
-\r
-/* Support attributes on SVG nodes. */\r
-$.fn.attr = function(origAttr) {\r
-       return function(name, value, type) {\r
-               if (typeof name === 'string' && value === undefined) {\r
-                       var val = origAttr.apply(this, [name, value, type]);\r
-                       if (val && val.baseVal && val.baseVal.numberOfItems != null) { // Transform\r
-                               value = '';\r
-                               val = val.baseVal;\r
-                               for (var i = 0; i < val.numberOfItems; i++) {\r
-                                       var item = val.getItem(i);\r
-                                       switch (item.type) {\r
-                                               case 1: value += ' matrix(' + item.matrix.a + ',' + item.matrix.b + ',' +\r
-                                                                       item.matrix.c + ',' + item.matrix.d + ',' +\r
-                                                                       item.matrix.e + ',' + item.matrix.f + ')';\r
-                                                               break;\r
-                                               case 2: value += ' translate(' + item.matrix.e + ',' + item.matrix.f + ')'; break;\r
-                                               case 3: value += ' scale(' + item.matrix.a + ',' + item.matrix.d + ')'; break;\r
-                                               case 4: value += ' rotate(' + item.angle + ')'; break; // Doesn't handle new origin\r
-                                               case 5: value += ' skewX(' + item.angle + ')'; break;\r
-                                               case 6: value += ' skewY(' + item.angle + ')'; break;\r
-                                       }\r
-                               }\r
-                               val = value.substring(1);\r
-                       }\r
-                       return (val && val.baseVal ? val.baseVal.valueAsString : val);\r
-               }\r
-               var options = name;\r
-               if (typeof name === 'string') {\r
-                       options = {};\r
-                       options[name] = value;\r
-               }\r
-               return this.each(function() {\r
-                       if (isSVGElem(this)) {\r
-                               for (var n in options) {\r
-                                       var val = ($.isFunction(options[n]) ? options[n]() : options[n]);\r
-                                       (type ? this.style[n] = val : this.setAttribute(n, val));\r
-                               }\r
-                       }\r
-                       else {\r
-                               origAttr.apply($(this), [name, value, type]);\r
-                       }\r
-               });\r
-       };\r
-}($.fn.attr);\r
-\r
-/* Support removing attributes on SVG nodes. */\r
-$.fn.removeAttr = function(origRemoveAttr) {\r
-       return function(name) {\r
-               return this.each(function() {\r
-                       if (isSVGElem(this)) {\r
-                               (this[name] && this[name].baseVal ? this[name].baseVal.value = '' :\r
-                                       this.setAttribute(name, ''));\r
-                       }\r
-                       else {\r
-                               origRemoveAttr.apply($(this), [name]);\r
-                       }\r
-               });\r
-       };\r
-}($.fn.removeAttr);\r
-\r
-/* Determine if any nodes are SVG nodes. */\r
-function anySVG(checkSet) {\r
-       for (var i = 0; i < checkSet.length; i++) {\r
-               if (checkSet[i].nodeType == 1 && checkSet[i].namespaceURI == $.svg.svgNS) {\r
-                       return true;\r
-               }\r
-       }\r
-       return false;\r
-}\r
-\r
-/* Update Sizzle selectors. */\r
-\r
-$.expr.relative['+'] = function(origRelativeNext) {\r
-       return function(checkSet, part, isXML) {\r
-               origRelativeNext(checkSet, part, isXML || anySVG(checkSet));\r
-       };\r
-}($.expr.relative['+']);\r
-\r
-$.expr.relative['>'] = function(origRelativeChild) {\r
-       return function(checkSet, part, isXML) {\r
-               origRelativeChild(checkSet, part, isXML || anySVG(checkSet));\r
-       };\r
-}($.expr.relative['>']);\r
-\r
-$.expr.relative[''] = function(origRelativeDescendant) {\r
-       return function(checkSet, part, isXML) {\r
-               origRelativeDescendant(checkSet, part, isXML || anySVG(checkSet));\r
-       };\r
-}($.expr.relative['']);\r
-\r
-$.expr.relative['~'] = function(origRelativeSiblings) {\r
-       return function(checkSet, part, isXML) {\r
-               origRelativeSiblings(checkSet, part, isXML || anySVG(checkSet));\r
-       };\r
-}($.expr.relative['~']);\r
-\r
-$.expr.find.ID = function(origFindId) {\r
-       return function(match, context, isXML) {\r
-               return (isSVGElem(context) ?\r
-                       [context.ownerDocument.getElementById(match[1])] :\r
-                       origFindId(match, context, isXML));\r
-       };\r
-}($.expr.find.ID);\r
-\r
-var div = document.createElement('div');\r
-div.appendChild(document.createComment(''));\r
-if (div.getElementsByTagName('*').length > 0) { // Make sure no comments are found\r
-       $.expr.find.TAG = function(match, context) {\r
-               var results = context.getElementsByTagName(match[1]);\r
-               if (match[1] === '*') { // Filter out possible comments\r
-                       var tmp = [];\r
-                       for (var i = 0; results[i] || results.item(i); i++) {\r
-                               if ((results[i] || results.item(i)).nodeType === 1) {\r
-                                       tmp.push(results[i] || results.item(i));\r
-                               }\r
-                       }\r
-                       results = tmp;\r
-               }\r
-               return results;\r
-       };\r
-}\r
-\r
-$.expr.preFilter.CLASS = function(match, curLoop, inplace, result, not, isXML) {\r
-       match = ' ' + match[1].replace(/\\/g, '') + ' ';\r
-       if (isXML) {\r
-               return match;\r
-       }\r
-       for (var i = 0, elem = {}; elem != null; i++) {\r
-               elem = curLoop[i];\r
-               if (!elem) {\r
-                       try {\r
-                               elem = curLoop.item(i);\r
-                       }\r
-                       catch (e) {\r
-                               // Ignore\r
-                       }\r
-               }\r
-               if (elem) {\r
-                       var className = (!isSVGElem(elem) ? elem.className :\r
-                               (elem.className ? elem.className.baseVal : '') || elem.getAttribute('class'));\r
-                       if (not ^ (className && (' ' + className + ' ').indexOf(match) > -1)) {\r
-                               if (!inplace)\r
-                                       result.push(elem);\r
-                       }\r
-                       else if (inplace) {\r
-                               curLoop[i] = false;\r
-                       }\r
-               }\r
-       }\r
-       return false;\r
-};\r
-\r
-$.expr.filter.CLASS = function(elem, match) {\r
-       var className = (!isSVGElem(elem) ? elem.className :\r
-               (elem.className ? elem.className.baseVal : elem.getAttribute('class')));\r
-       return (' ' + className + ' ').indexOf(match) > -1;\r
-};\r
-\r
-$.expr.filter.ATTR = function(origFilterAttr) {\r
-       return function(elem, match) {\r
-               var handler = null;\r
-               if (isSVGElem(elem)) {\r
-                       handler = match[1];\r
-                       $.expr.attrHandle[handler] = function(elem){\r
-                               var attr = elem.getAttribute(handler);\r
-                               return attr && attr.baseVal || attr;\r
-                       };\r
-               }\r
-               var filter = origFilterAttr(elem, match);\r
-               if (handler) {\r
-                       $.expr.attrHandle[handler] = null;\r
-               }\r
-               return filter;\r
-       };\r
-}($.expr.filter.ATTR);\r
-\r
-/*\r
-       Change Sizzle initialisation (line 1425) in jQuery v1.3.2 base code...\r
-       \r
-       if ( toString.call(checkSet) === "[object Array]" ) {\r
-               if ( !prune ) {\r
-                       results.push.apply( results, checkSet );\r
-               } else if ( context.nodeType === 1 ) {\r
-                       for ( var i = 0; checkSet[i] != null; i++ ) {\r
-                               if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {\r
-                                       results.push( set[i] || set.item(i) ); // Here\r
-                               }\r
-                       }\r
-               } else {\r
-                       for ( var i = 0; checkSet[i] != null; i++ ) {\r
-                               if ( checkSet[i] && checkSet[i].nodeType === 1 ) {\r
-                                       results.push( set[i] || set.item(i) ); // Here\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       \r
-       Change fallback makeArray (line 2076) implementation in jQuery Sizzle...\r
-       \r
-                       if ( typeof array.length === "number" ) {\r
-                               for ( var i = 0, l = array.length; i < l; i++ ) {\r
-                                       ret.push( array[i] || array.item(i) ); // Here\r
-                               }\r
-                       }\r
-*/\r
-\r
-/*\r
-       Events management requires changes to jQuery v1.3.2 base code...\r
-\r
-       In $.event.add (line 2437)...\r
-       \r
-                               if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) {\r
-                                       // Bind the global event handler to the element\r
-                                       try { // Here\r
-                                               elem.addEventListener(type, handle, false);\r
-                                       }\r
-                                       catch(e) {\r
-                                               if (elem.attachEvent)\r
-                                                       elem.attachEvent("on" + type, handle);\r
-                                       }\r
-                               }\r
-\r
-       In $.event.remove (line 2521)...\r
-       \r
-                                                       if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) {\r
-                                                               try { // Here\r
-                                                                       elem.removeEventListener(type, jQuery.data(elem, "handle"), false);\r
-                                                               }\r
-                                                               catch (e) {\r
-                                                                       if (elem.detachEvent)\r
-                                                                               elem.detachEvent("on" + type, jQuery.data(elem, "handle"));\r
-                                                               }\r
-                                                       }\r
-*/\r
-\r
-/* Does this node belong to SVG? */\r
-function isSVGElem(node) {\r
-       return (node.nodeType == 1 && node.namespaceURI == $.svg.svgNS);\r
-}\r
-\r
-})(jQuery);\r
diff --git a/stemmaweb/root/js/plupload.html4.js b/stemmaweb/root/js/plupload.html4.js
deleted file mode 100644 (file)
index b20c88f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(d,a,b,c){function e(f){return a.getElementById(f)}b.runtimes.Html4=b.addRuntime("html4",{getFeatures:function(){return{multipart:true,triggerDialog:(b.ua.gecko&&d.FormData||b.ua.webkit)}},init:function(f,g){f.bind("Init",function(p){var j=a.body,n,h="javascript",k,x,q,z=[],r=/MSIE/.test(navigator.userAgent),t=[],m=p.settings.filters,o,l,s,w;no_type_restriction:for(o=0;o<m.length;o++){l=m[o].extensions.split(/,/);for(w=0;w<l.length;w++){if(l[w]==="*"){t=[];break no_type_restriction}s=b.mimeTypes[l[w]];if(s&&b.inArray(s,t)===-1){t.push(s)}}}t=t.join(",");function v(){var B,y,i,A;q=b.guid();z.push(q);B=a.createElement("form");B.setAttribute("id","form_"+q);B.setAttribute("method","post");B.setAttribute("enctype","multipart/form-data");B.setAttribute("encoding","multipart/form-data");B.setAttribute("target",p.id+"_iframe");B.style.position="absolute";y=a.createElement("input");y.setAttribute("id","input_"+q);y.setAttribute("type","file");y.setAttribute("accept",t);y.setAttribute("size",1);A=e(p.settings.browse_button);if(p.features.triggerDialog&&A){b.addEvent(e(p.settings.browse_button),"click",function(C){if(!y.disabled){y.click()}C.preventDefault()},p.id)}b.extend(y.style,{width:"100%",height:"100%",opacity:0,fontSize:"99px",cursor:"pointer"});b.extend(B.style,{overflow:"hidden"});i=p.settings.shim_bgcolor;if(i){B.style.background=i}if(r){b.extend(y.style,{filter:"alpha(opacity=0)"})}b.addEvent(y,"change",function(F){var D=F.target,C,E=[],G;if(D.value){e("form_"+q).style.top=-1048575+"px";C=D.value.replace(/\\/g,"/");C=C.substring(C.length,C.lastIndexOf("/")+1);E.push(new b.File(q,C));if(!p.features.triggerDialog){b.removeAllEvents(B,p.id)}else{b.removeEvent(A,"click",p.id)}b.removeEvent(y,"change",p.id);v();if(E.length){f.trigger("FilesAdded",E)}}},p.id);B.appendChild(y);j.appendChild(B);p.refresh()}function u(){var i=a.createElement("div");i.innerHTML='<iframe id="'+p.id+'_iframe" name="'+p.id+'_iframe" src="'+h+':&quot;&quot;" style="display:none"></iframe>';n=i.firstChild;j.appendChild(n);b.addEvent(n,"load",function(C){var D=C.target,B,y;if(!k){return}try{B=D.contentWindow.document||D.contentDocument||d.frames[D.id].document}catch(A){p.trigger("Error",{code:b.SECURITY_ERROR,message:b.translate("Security error."),file:k});return}y=B.body.innerHTML;if(y){k.status=b.DONE;k.loaded=1025;k.percent=100;p.trigger("UploadProgress",k);p.trigger("FileUploaded",k,{response:y})}},p.id)}if(p.settings.container){j=e(p.settings.container);if(b.getStyle(j,"position")==="static"){j.style.position="relative"}}p.bind("UploadFile",function(i,A){var B,y;if(A.status==b.DONE||A.status==b.FAILED||i.state==b.STOPPED){return}B=e("form_"+A.id);y=e("input_"+A.id);y.setAttribute("name",i.settings.file_data_name);B.setAttribute("action",i.settings.url);b.each(b.extend({name:A.target_name||A.name},i.settings.multipart_params),function(E,C){var D=a.createElement("input");b.extend(D,{type:"hidden",name:C,value:E});B.insertBefore(D,B.firstChild)});k=A;e("form_"+q).style.top=-1048575+"px";B.submit()});p.bind("FileUploaded",function(i){i.refresh()});p.bind("StateChanged",function(i){if(i.state==b.STARTED){u()}else{if(i.state==b.STOPPED){d.setTimeout(function(){b.removeEvent(n,"load",i.id);if(n.parentNode){n.parentNode.removeChild(n)}},0)}}b.each(i.files,function(A,y){if(A.status===b.DONE||A.status===b.FAILED){var B=e("form_"+A.id);if(B){B.parentNode.removeChild(B)}}})});p.bind("Refresh",function(y){var F,A,B,C,i,G,H,E,D;F=e(y.settings.browse_button);if(F){i=b.getPos(F,e(y.settings.container));G=b.getSize(F);H=e("form_"+q);E=e("input_"+q);b.extend(H.style,{top:i.y+"px",left:i.x+"px",width:G.w+"px",height:G.h+"px"});if(y.features.triggerDialog){if(b.getStyle(F,"position")==="static"){b.extend(F.style,{position:"relative"})}D=parseInt(F.style.zIndex,10);if(isNaN(D)){D=0}b.extend(F.style,{zIndex:D});b.extend(H.style,{zIndex:D-1})}B=y.settings.browse_button_hover;C=y.settings.browse_button_active;A=y.features.triggerDialog?F:H;if(B){b.addEvent(A,"mouseover",function(){b.addClass(F,B)},y.id);b.addEvent(A,"mouseout",function(){b.removeClass(F,B)},y.id)}if(C){b.addEvent(A,"mousedown",function(){b.addClass(F,C)},y.id);b.addEvent(a.body,"mouseup",function(){b.removeClass(F,C)},y.id)}}});f.bind("FilesRemoved",function(y,B){var A,C;for(A=0;A<B.length;A++){C=e("form_"+B[A].id);if(C){C.parentNode.removeChild(C)}}});f.bind("DisableBrowse",function(i,A){var y=a.getElementById("input_"+q);if(y){y.disabled=A}});f.bind("Destroy",function(i){var y,A,B,C={inputContainer:"form_"+q,inputFile:"input_"+q,browseButton:i.settings.browse_button};for(y in C){A=e(C[y]);if(A){b.removeAllEvents(A,i.id)}}b.removeAllEvents(a.body,i.id);b.each(z,function(E,D){B=e("form_"+E);if(B){j.removeChild(B)}})});v()});g({success:true})}})})(window,document,plupload);
\ No newline at end of file
diff --git a/stemmaweb/root/js/plupload.js b/stemmaweb/root/js/plupload.js
deleted file mode 100644 (file)
index bc0c3f8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-/*1.5.4*/
-(function(){var f=0,k=[],m={},i={},a={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},l=/[<>&\"\']/g,b,c=window.setTimeout,d={},e;function h(){this.returnValue=false}function j(){this.cancelBubble=true}(function(n){var o=n.split(/,/),p,r,q;for(p=0;p<o.length;p+=2){q=o[p+1].split(/ /);for(r=0;r<q.length;r++){i[q[r]]=o[p]}}})("application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mpga mpega mp2 mp3,audio/x-wav,wav,audio/mp4,m4a,image/bmp,bmp,image/gif,gif,image/jpeg,jpeg jpg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/vnd.rn-realvideo,rv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe");var g={VERSION:"1.5.4",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,IMAGE_FORMAT_ERROR:-700,IMAGE_MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:i,ua:(function(){var r=navigator,q=r.userAgent,s=r.vendor,o,n,p;o=/WebKit/.test(q);p=o&&s.indexOf("Apple")!==-1;n=window.opera&&window.opera.buildNumber;return{windows:navigator.platform.indexOf("Win")!==-1,ie:!o&&!n&&(/MSIE/gi).test(q)&&(/Explorer/gi).test(r.appName),webkit:o,gecko:!o&&/Gecko/.test(q),safari:p,opera:!!n}}()),typeOf:function(n){return({}).toString.call(n).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()},extend:function(n){g.each(arguments,function(o,p){if(p>0){g.each(o,function(r,q){n[q]=r})}});return n},cleanName:function(n){var o,p;p=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(o=0;o<p.length;o+=2){n=n.replace(p[o],p[o+1])}n=n.replace(/\s+/g,"_");n=n.replace(/[^a-z0-9_\-\.]+/gi,"");return n},addRuntime:function(n,o){o.name=n;k[n]=o;k.push(o);return o},guid:function(){var n=new Date().getTime().toString(32),o;for(o=0;o<5;o++){n+=Math.floor(Math.random()*65535).toString(32)}return(g.guidPrefix||"p")+n+(f++).toString(32)},buildUrl:function(o,n){var p="";g.each(n,function(r,q){p+=(p?"&":"")+encodeURIComponent(q)+"="+encodeURIComponent(r)});if(p){o+=(o.indexOf("?")>0?"&":"?")+p}return o},each:function(q,r){var p,o,n;if(q){p=q.length;if(p===b){for(o in q){if(q.hasOwnProperty(o)){if(r(q[o],o)===false){return}}}}else{for(n=0;n<p;n++){if(r(q[n],n)===false){return}}}}},formatSize:function(n){if(n===b||/\D/.test(n)){return g.translate("N/A")}if(n>1073741824){return Math.round(n/1073741824,1)+" GB"}if(n>1048576){return Math.round(n/1048576,1)+" MB"}if(n>1024){return Math.round(n/1024,1)+" KB"}return n+" b"},getPos:function(o,s){var t=0,r=0,v,u=document,p,q;o=o;s=s||u.body;function n(B){var z,A,w=0,C=0;if(B){A=B.getBoundingClientRect();z=u.compatMode==="CSS1Compat"?u.documentElement:u.body;w=A.left+z.scrollLeft;C=A.top+z.scrollTop}return{x:w,y:C}}if(o&&o.getBoundingClientRect&&((navigator.userAgent.indexOf("MSIE")>0)&&(u.documentMode<8))){p=n(o);q=n(s);return{x:p.x-q.x,y:p.y-q.y}}v=o;while(v&&v!=s&&v.nodeType){t+=v.offsetLeft||0;r+=v.offsetTop||0;v=v.offsetParent}v=o.parentNode;while(v&&v!=s&&v.nodeType){t-=v.scrollLeft||0;r-=v.scrollTop||0;v=v.parentNode}return{x:t,y:r}},getSize:function(n){return{w:n.offsetWidth||n.clientWidth,h:n.offsetHeight||n.clientHeight}},parseSize:function(n){var o;if(typeof(n)=="string"){n=/^([0-9]+)([mgk]?)$/.exec(n.toLowerCase().replace(/[^0-9mkg]/g,""));o=n[2];n=+n[1];if(o=="g"){n*=1073741824}if(o=="m"){n*=1048576}if(o=="k"){n*=1024}}return n},xmlEncode:function(n){return n?(""+n).replace(l,function(o){return a[o]?"&"+a[o]+";":o}):n},toArray:function(p){var o,n=[];for(o=0;o<p.length;o++){n[o]=p[o]}return n},inArray:function(p,q){if(q){if(Array.prototype.indexOf){return Array.prototype.indexOf.call(q,p)}for(var n=0,o=q.length;n<o;n++){if(q[n]===p){return n}}}return -1},addI18n:function(n){return g.extend(m,n)},translate:function(n){return m[n]||n},isEmptyObj:function(n){if(n===b){return true}for(var o in n){return false}return true},hasClass:function(p,o){var n;if(p.className==""){return false}n=new RegExp("(^|\\s+)"+o+"(\\s+|$)");return n.test(p.className)},addClass:function(o,n){if(!g.hasClass(o,n)){o.className=o.className==""?n:o.className.replace(/\s+$/,"")+" "+n}},removeClass:function(p,o){var n=new RegExp("(^|\\s+)"+o+"(\\s+|$)");p.className=p.className.replace(n,function(r,q,s){return q===" "&&s===" "?" ":""})},getStyle:function(o,n){if(o.currentStyle){return o.currentStyle[n]}else{if(window.getComputedStyle){return window.getComputedStyle(o,null)[n]}}},addEvent:function(s,n,t){var r,q,p,o;o=arguments[3];n=n.toLowerCase();if(e===b){e="Plupload_"+g.guid()}if(s.addEventListener){r=t;s.addEventListener(n,r,false)}else{if(s.attachEvent){r=function(){var u=window.event;if(!u.target){u.target=u.srcElement}u.preventDefault=h;u.stopPropagation=j;t(u)};s.attachEvent("on"+n,r)}}if(s[e]===b){s[e]=g.guid()}if(!d.hasOwnProperty(s[e])){d[s[e]]={}}q=d[s[e]];if(!q.hasOwnProperty(n)){q[n]=[]}q[n].push({func:r,orig:t,key:o})},removeEvent:function(s,n){var q,t,p;if(typeof(arguments[2])=="function"){t=arguments[2]}else{p=arguments[2]}n=n.toLowerCase();if(s[e]&&d[s[e]]&&d[s[e]][n]){q=d[s[e]][n]}else{return}for(var o=q.length-1;o>=0;o--){if(q[o].key===p||q[o].orig===t){if(s.removeEventListener){s.removeEventListener(n,q[o].func,false)}else{if(s.detachEvent){s.detachEvent("on"+n,q[o].func)}}q[o].orig=null;q[o].func=null;q.splice(o,1);if(t!==b){break}}}if(!q.length){delete d[s[e]][n]}if(g.isEmptyObj(d[s[e]])){delete d[s[e]];try{delete s[e]}catch(r){s[e]=b}}},removeAllEvents:function(o){var n=arguments[1];if(o[e]===b||!o[e]){return}g.each(d[o[e]],function(q,p){g.removeEvent(o,p,n)})}};g.Uploader=function(r){var o={},u,t=[],q,p=false;u=new g.QueueProgress();r=g.extend({chunk_size:0,multipart:true,multi_selection:true,file_data_name:"file",filters:[]},r);function s(){var w,x=0,v;if(this.state==g.STARTED){for(v=0;v<t.length;v++){if(!w&&t[v].status==g.QUEUED){w=t[v];w.status=g.UPLOADING;if(this.trigger("BeforeUpload",w)){this.trigger("UploadFile",w)}}else{x++}}if(x==t.length){this.stop();this.trigger("UploadComplete",t)}}}function n(){var w,v;u.reset();for(w=0;w<t.length;w++){v=t[w];if(v.size!==b){u.size+=v.size;u.loaded+=v.loaded}else{u.size=b}if(v.status==g.DONE){u.uploaded++}else{if(v.status==g.FAILED){u.failed++}else{u.queued++}}}if(u.size===b){u.percent=t.length>0?Math.ceil(u.uploaded/t.length*100):0}else{u.bytesPerSec=Math.ceil(u.loaded/((+new Date()-q||1)/1000));u.percent=u.size>0?Math.ceil(u.loaded/u.size*100):0}}g.extend(this,{state:g.STOPPED,runtime:"",features:{},files:t,settings:r,total:u,id:g.guid(),init:function(){var A=this,B,x,w,z=0,y;if(typeof(r.preinit)=="function"){r.preinit(A)}else{g.each(r.preinit,function(D,C){A.bind(C,D)})}r.page_url=r.page_url||document.location.pathname.replace(/\/[^\/]+$/g,"/");if(!/^(\w+:\/\/|\/)/.test(r.url)){r.url=r.page_url+r.url}r.chunk_size=g.parseSize(r.chunk_size);r.max_file_size=g.parseSize(r.max_file_size);A.bind("FilesAdded",function(C,F){var E,D,H=0,I,G=r.filters;if(G&&G.length){I=[];g.each(G,function(J){g.each(J.extensions.split(/,/),function(K){if(/^\s*\*\s*$/.test(K)){I.push("\\.*")}else{I.push("\\."+K.replace(new RegExp("["+("/^$.*+?|()[]{}\\".replace(/./g,"\\$&"))+"]","g"),"\\$&"))}})});I=new RegExp(I.join("|")+"$","i")}for(E=0;E<F.length;E++){D=F[E];D.loaded=0;D.percent=0;D.status=g.QUEUED;if(I&&!I.test(D.name)){C.trigger("Error",{code:g.FILE_EXTENSION_ERROR,message:g.translate("File extension error."),file:D});continue}if(D.size!==b&&D.size>r.max_file_size){C.trigger("Error",{code:g.FILE_SIZE_ERROR,message:g.translate("File size error."),file:D});continue}t.push(D);H++}if(H){c(function(){A.trigger("QueueChanged");A.refresh()},1)}else{return false}});if(r.unique_names){A.bind("UploadFile",function(C,D){var F=D.name.match(/\.([^.]+)$/),E="tmp";if(F){E=F[1]}D.target_name=D.id+"."+E})}A.bind("UploadProgress",function(C,D){D.percent=D.size>0?Math.ceil(D.loaded/D.size*100):100;n()});A.bind("StateChanged",function(C){if(C.state==g.STARTED){q=(+new Date())}else{if(C.state==g.STOPPED){for(B=C.files.length-1;B>=0;B--){if(C.files[B].status==g.UPLOADING){C.files[B].status=g.QUEUED;n()}}}}});A.bind("QueueChanged",n);A.bind("Error",function(C,D){if(D.file){D.file.status=g.FAILED;n();if(C.state==g.STARTED){c(function(){s.call(A)},1)}}});A.bind("FileUploaded",function(C,D){D.status=g.DONE;D.loaded=D.size;C.trigger("UploadProgress",D);c(function(){s.call(A)},1)});if(r.runtimes){x=[];y=r.runtimes.split(/\s?,\s?/);for(B=0;B<y.length;B++){if(k[y[B]]){x.push(k[y[B]])}}}else{x=k}function v(){var F=x[z++],E,C,D;if(F){E=F.getFeatures();C=A.settings.required_features;if(C){C=C.split(",");for(D=0;D<C.length;D++){if(!E[C[D]]){v();return}}}F.init(A,function(G){if(G&&G.success){A.features=E;A.runtime=F.name;A.trigger("Init",{runtime:F.name});A.trigger("PostInit");A.refresh()}else{v()}})}else{A.trigger("Error",{code:g.INIT_ERROR,message:g.translate("Init error.")})}}v();if(typeof(r.init)=="function"){r.init(A)}else{g.each(r.init,function(D,C){A.bind(C,D)})}},refresh:function(){this.trigger("Refresh")},start:function(){if(t.length&&this.state!=g.STARTED){this.state=g.STARTED;this.trigger("StateChanged");s.call(this)}},stop:function(){if(this.state!=g.STOPPED){this.state=g.STOPPED;this.trigger("CancelUpload");this.trigger("StateChanged")}},disableBrowse:function(){p=arguments[0]!==b?arguments[0]:true;this.trigger("DisableBrowse",p)},getFile:function(w){var v;for(v=t.length-1;v>=0;v--){if(t[v].id===w){return t[v]}}},removeFile:function(w){var v;for(v=t.length-1;v>=0;v--){if(t[v].id===w.id){return this.splice(v,1)[0]}}},splice:function(x,v){var w;w=t.splice(x===b?0:x,v===b?t.length:v);this.trigger("FilesRemoved",w);this.trigger("QueueChanged");return w},trigger:function(w){var y=o[w.toLowerCase()],x,v;if(y){v=Array.prototype.slice.call(arguments);v[0]=this;for(x=0;x<y.length;x++){if(y[x].func.apply(y[x].scope,v)===false){return false}}}return true},hasEventListener:function(v){return !!o[v.toLowerCase()]},bind:function(v,x,w){var y;v=v.toLowerCase();y=o[v]||[];y.push({func:x,scope:w||this});o[v]=y},unbind:function(v){v=v.toLowerCase();var y=o[v],w,x=arguments[1];if(y){if(x!==b){for(w=y.length-1;w>=0;w--){if(y[w].func===x){y.splice(w,1);break}}}else{y=[]}if(!y.length){delete o[v]}}},unbindAll:function(){var v=this;g.each(o,function(x,w){v.unbind(w)})},destroy:function(){this.stop();this.trigger("Destroy");this.unbindAll()}})};g.File=function(q,o,p){var n=this;n.id=q;n.name=o;n.size=p;n.loaded=0;n.percent=0;n.status=0};g.Runtime=function(){this.getFeatures=function(){};this.init=function(n,o){}};g.QueueProgress=function(){var n=this;n.size=0;n.loaded=0;n.uploaded=0;n.failed=0;n.queued=0;n.percent=0;n.bytesPerSec=0;n.reset=function(){n.size=n.loaded=n.uploaded=n.failed=n.queued=n.percent=n.bytesPerSec=0}};g.runtimes={};window.plupload=g})();
\ No newline at end of file
diff --git a/stemmaweb/root/js/relationship-full.js b/stemmaweb/root/js/relationship-full.js
deleted file mode 100644 (file)
index 3ca852c..0000000
+++ /dev/null
@@ -1,912 +0,0 @@
-var MARGIN=30;
-var svg_root = null;
-var svg_root_element = null;
-var start_element_height = 0;
-var reltypes = {};
-var readingdata = {};
-
-function getRelativePath() {
-       return basepath;
-}
-
-function getTextURL( which ) {
-       return basepath + textid + '/' + which;
-}
-
-function getReadingURL( reading_id ) {
-       return basepath + textid + '/reading/' + reading_id;
-}
-
-// Make an XML ID into a valid selector
-function jq(myid) { 
-       return '#' + myid.replace(/(:|\.)/g,'\\$1');
-}
-
-// Actions for opening the reading panel
-function node_dblclick_listener( evt ) {
-       // Open the reading dialogue for the given node.
-       // First get the reading info
-       var reading_id = $(this).attr('id');
-       var reading_info = readingdata[reading_id];
-       // and then populate the dialog box with it.
-       // Set the easy properties first
-       $('#reading-form').dialog( 'option', 'title', 'Reading information for "' + reading_info['text'] + '"' );
-       $('#reading_id').val( reading_id );
-       toggle_checkbox( $('#reading_is_nonsense'), reading_info['is_nonsense'] );
-       toggle_checkbox( $('#reading_grammar_invalid'), reading_info['grammar_invalid'] );
-       // Use .text as a backup for .normal_form
-       var normal_form = reading_info['normal_form'];
-       if( !normal_form ) {
-               normal_form = reading_info['text'];
-       }
-       var nfboxsize = 10;
-       if( normal_form.length > 9 ) {
-               nfboxsize = normal_form.length + 1;
-       }
-       $('#reading_normal_form').attr( 'size', nfboxsize )
-       $('#reading_normal_form').val( normal_form );
-       // Now do the morphological properties.
-       morphology_form( reading_info['lexemes'] );
-       // and then open the dialog.
-       $('#reading-form').dialog("open");
-}
-
-function toggle_checkbox( box, value ) {
-       if( value == null ) {
-               value = false;
-       }
-       box.attr('checked', value );
-}
-
-function morphology_form ( lexlist ) {
-       $('#morphology').empty();
-       $.each( lexlist, function( idx, lex ) {
-               var morphoptions = [];
-               if( 'wordform_matchlist' in lex ) {
-                       $.each( lex['wordform_matchlist'], function( tdx, tag ) {
-                               var tagstr = stringify_wordform( tag );
-                               morphoptions.push( tagstr );
-                       });
-               }
-               var formtag = 'morphology_' + idx;
-               var formstr = '';
-               if( 'form' in lex ) {
-                       formstr = stringify_wordform( lex['form'] );
-               } 
-               var form_morph_elements = morph_elements( 
-                       formtag, lex['string'], formstr, morphoptions );
-               $.each( form_morph_elements, function( idx, el ) {
-                       $('#morphology').append( el );
-               });
-       });
-}
-
-function stringify_wordform ( tag ) {
-       if( tag ) {
-               var elements = tag.split(' // ');
-               return elements[1] + ' // ' + elements[2];
-       }
-       return ''
-}
-
-function morph_elements ( formtag, formtxt, currform, morphoptions ) {
-       var clicktag = '(Click to select)';
-       if ( !currform ) {
-               currform = clicktag;
-       }
-       var formlabel = $('<label/>').attr( 'id', 'label_' + formtag ).attr( 
-               'for', 'reading_' + formtag ).text( formtxt + ': ' );
-       var forminput = $('<input/>').attr( 'id', 'reading_' + formtag ).attr( 
-               'name', 'reading_' + formtag ).attr( 'size', '50' ).attr(
-               'class', 'reading_morphology' ).val( currform );
-       forminput.autocomplete({ source: morphoptions, minLength: 0     });
-       forminput.focus( function() { 
-               if( $(this).val() == clicktag ) {
-                       $(this).val('');
-               }
-               $(this).autocomplete('search', '') 
-       });
-       var morphel = [ formlabel, forminput, $('<br/>') ];
-       return morphel;
-}
-
-function color_inactive ( el ) {
-       var reading_id = $(el).parent().attr('id');
-       var reading_info = readingdata[reading_id];
-       // If the reading info has any non-disambiguated lexemes, color it yellow;
-       // otherwise color it green.
-       $(el).attr( {stroke:'green', fill:'#b3f36d'} );
-       if( reading_info ) {
-               $.each( reading_info['lexemes'], function ( idx, lex ) {
-                       if( !lex['is_disambiguated'] || lex['is_disambiguated'] == 0 ) {
-                               $(el).attr( {stroke:'orange', fill:'#fee233'} );
-                       }
-               });
-       }
-}
-
-function relemmatize () {
-       // Send the reading for a new lemmatization and reopen the form.
-       $('#relemmatize_pending').show();
-       var reading_id = $('#reading_id').val()
-       ncpath = getReadingURL( reading_id );
-       form_values = { 
-               'normal_form': $('#reading_normal_form').val(), 
-               'relemmatize': 1 };
-       var jqjson = $.post( ncpath, form_values, function( data ) {
-               // Update the form with the return
-               if( 'id' in data ) {
-                       // We got back a good answer. Stash it
-                       readingdata[reading_id] = data;
-                       // and regenerate the morphology form.
-                       morphology_form( data['lexemes'] );
-               } else {
-                       alert("Could not relemmatize as requested: " + data['error']);
-               }
-               $('#relemmatize_pending').hide();
-       });
-}
-
-// Initialize the SVG once it exists
-function svgEnlargementLoaded() {
-       //Give some visual evidence that we are working
-       $('#loading_overlay').show();
-       lo_height = $("#enlargement_container").outerHeight();
-       lo_width = $("#enlargement_container").outerWidth();
-       $("#loading_overlay").height( lo_height );
-       $("#loading_overlay").width( lo_width );
-       $("#loading_overlay").offset( $("#enlargement_container").offset() );
-       $("#loading_message").offset(
-               { 'top': lo_height / 2 - $("#loading_message").height() / 2,
-                 'left': lo_width / 2 - $("#loading_message").width() / 2 });
-    //Set viewbox widht and height to widht and height of $('#svgenlargement svg').
-    $('#update_workspace_button').data('locked', false);
-    $('#update_workspace_button').css('background-position', '0px 44px');
-    //This is essential to make sure zooming and panning works properly.
-       var rdgpath = getTextURL( 'readings' );
-               $.getJSON( rdgpath, function( data ) {
-               readingdata = data;
-           $('#svgenlargement ellipse').each( function( i, el ) { color_inactive( el ) });
-       });
-    $('#svgenlargement ellipse').parent().dblclick( node_dblclick_listener );
-    var graph_svg = $('#svgenlargement svg');
-    var svg_g = $('#svgenlargement svg g')[0];
-    if (!svg_g) return;
-    svg_root = graph_svg.svg().svg('get').root();
-
-    // Find the real root and ignore any text nodes
-    for (i = 0; i < svg_root.childNodes.length; ++i) {
-        if (svg_root.childNodes[i].nodeName != '#text') {
-               svg_root_element = svg_root.childNodes[i];
-               break;
-          }
-    }
-
-    svg_root.viewBox.baseVal.width = graph_svg.attr( 'width' );
-    svg_root.viewBox.baseVal.height = graph_svg.attr( 'height' );
-    //Now set scale and translate so svg height is about 150px and vertically centered in viewbox.
-    //This is just to create a nice starting enlargement.
-    var initial_svg_height = 250;
-    var scale = initial_svg_height/graph_svg.attr( 'height' );
-    var additional_translate = (graph_svg.attr( 'height' ) - initial_svg_height)/(2*scale);
-    var transform = svg_g.getAttribute('transform');
-    var translate = parseFloat( transform.match( /translate\([^\)]*\)/ )[0].split('(')[1].split(' ')[1].split(')')[0] );
-    translate += additional_translate;
-    var transform = 'rotate(0) scale(' + scale + ') translate(4 ' + translate + ')';
-    svg_g.setAttribute('transform', transform);
-    //used to calculate min and max zoom level:
-    start_element_height = $('#__START__').children('ellipse')[0].getBBox().height;
-    add_relations( function() { $('#loading_overlay').hide(); });
-}
-
-function add_relations( callback_fn ) {
-       var basepath = getRelativePath();
-       var textrelpath = getTextURL( 'relationships' );
-    $.getJSON( basepath + 'definitions', function(data) {
-        var rel_types = data.types.sort();
-        $.getJSON( textrelpath,
-        function(data) {
-            $.each(data, function( index, rel_info ) {
-                var type_index = $.inArray(rel_info.type, rel_types);
-                var source_found = get_ellipse( rel_info.source );
-                var target_found = get_ellipse( rel_info.target );
-                if( type_index != -1 && source_found.size() && target_found.size() ) {
-                    var relation = relation_manager.create( rel_info.source, rel_info.target, type_index );
-                    relation.data( 'type', rel_info.type );
-                    relation.data( 'scope', rel_info.scope );
-                    relation.data( 'note', rel_info.note );
-                    var node_obj = get_node_obj(rel_info.source);
-                    node_obj.set_draggable( false );
-                    node_obj.ellipse.data( 'node_obj', null );
-                    node_obj = get_node_obj(rel_info.target);
-                    node_obj.set_draggable( false );
-                    node_obj.ellipse.data( 'node_obj', null );
-                }
-            });
-            callback_fn.call();
-        });
-    });
-}
-
-function get_ellipse( node_id ) {
-       return $( jq( node_id ) + ' ellipse');
-}
-
-function get_node_obj( node_id ) {
-    var node_ellipse = get_ellipse( node_id );
-    if( node_ellipse.data( 'node_obj' ) == null ) {
-        node_ellipse.data( 'node_obj', new node_obj(node_ellipse) );
-    };
-    return node_ellipse.data( 'node_obj' );
-}
-
-function node_obj(ellipse) {
-  this.ellipse = ellipse;
-  var self = this;
-  
-  this.x = 0;
-  this.y = 0;
-  this.dx = 0;
-  this.dy = 0;
-  this.node_elements = node_elements_for(self.ellipse);
-
-  this.get_id = function() {
-    return $(self.ellipse).parent().attr('id')
-  }
-  
-  this.set_draggable = function( draggable ) {
-    if( draggable ) {
-      $(self.ellipse).attr( {stroke:'black', fill:'#fff'} );
-      $(self.ellipse).parent().mousedown( this.mousedown_listener );
-      $(self.ellipse).parent().hover( this.enter_node, this.leave_node ); 
-      self.ellipse.siblings('text').attr('class', 'noselect draggable');
-    } else {
-      self.ellipse.siblings('text').attr('class', '');
-         $(self.ellipse).parent().unbind( 'mouseenter' ).unbind( 'mouseleave' ).unbind( 'mousedown' );     
-      color_inactive( self.ellipse );
-    }
-  }
-
-  this.mousedown_listener = function(evt) {
-    evt.stopPropagation();
-    self.x = evt.clientX;
-    self.y = evt.clientY;
-    $('body').mousemove( self.mousemove_listener );
-    $('body').mouseup( self.mouseup_listener );
-    $(self.ellipse).parent().unbind('mouseenter').unbind('mouseleave')
-    self.ellipse.attr( 'fill', '#ff66ff' );
-    first_node_g_element = $("#svgenlargement g .node" ).filter( ":first" );
-    if( first_node_g_element.attr('id') !== self.get_g().attr('id') ) { self.get_g().insertBefore( first_node_g_element ) };
-  }
-
-  this.mousemove_listener = function(evt) {
-    self.dx = (evt.clientX - self.x) / mouse_scale;
-    self.dy = (evt.clientY - self.y) / mouse_scale;
-    self.move_elements();
-    evt.returnValue = false;
-    evt.preventDefault();
-    return false;
-  }
-
-  this.mouseup_listener = function(evt) {    
-    if( $('ellipse[fill="#ffccff"]').size() > 0 ) {
-        var source_node_id = $(self.ellipse).parent().attr('id');
-        var source_node_text = self.ellipse.siblings('text').text();
-        var target_node_id = $('ellipse[fill="#ffccff"]').parent().attr('id');
-        var target_node_text = $('ellipse[fill="#ffccff"]').siblings("text").text();
-        $('#source_node_id').val( source_node_id );
-        $('#source_node_text').val( source_node_text );
-        $('#target_node_id').val( target_node_id );
-        $('#target_node_text').val( target_node_text );
-        $('#dialog-form').dialog( 'open' );
-    };
-    $('body').unbind('mousemove');
-    $('body').unbind('mouseup');
-    self.ellipse.attr( 'fill', '#fff' );
-    $(self.ellipse).parent().hover( self.enter_node, self.leave_node );
-    self.reset_elements();
-  }
-  
-  this.cpos = function() {
-    return { x: self.ellipse.attr('cx'), y: self.ellipse.attr('cy') };
-  }
-
-  this.get_g = function() {
-    return self.ellipse.parent('g');
-  }
-
-  this.enter_node = function(evt) {
-    self.ellipse.attr( 'fill', '#ffccff' );
-  }
-
-  this.leave_node = function(evt) {
-    self.ellipse.attr( 'fill', '#fff' );
-  }
-
-  this.greyout_edges = function() {
-      $.each( self.node_elements, function(index, value) {
-        value.grey_out('.edge');
-      });
-  }
-
-  this.ungreyout_edges = function() {
-      $.each( self.node_elements, function(index, value) {
-        value.un_grey_out('.edge');
-      });
-  }
-
-  this.move_elements = function() {
-    $.each( self.node_elements, function(index, value) {
-      value.move(self.dx,self.dy);
-    });
-  }
-
-  this.reset_elements = function() {
-    $.each( self.node_elements, function(index, value) {
-      value.reset();
-    });
-  }
-
-  this.update_elements = function() {
-      self.node_elements = node_elements_for(self.ellipse);
-  }
-
-  self.set_draggable( true );
-}
-
-function svgshape( shape_element ) {
-  this.shape = shape_element;
-  this.move = function(dx,dy) {
-    this.shape.attr( "transform", "translate(" + dx + " " + dy + ")" );
-  }
-  this.reset = function() {
-    this.shape.attr( "transform", "translate( 0, 0 )" );
-  }
-  this.grey_out = function(filter) {
-      if( this.shape.parent(filter).size() != 0 ) {
-          this.shape.attr({'stroke':'#e5e5e5', 'fill':'#e5e5e5'});
-      }
-  }
-  this.un_grey_out = function(filter) {
-      if( this.shape.parent(filter).size() != 0 ) {
-        this.shape.attr({'stroke':'#000000', 'fill':'#000000'});
-      }
-  }
-}
-
-function svgpath( path_element, svg_element ) {
-  this.svg_element = svg_element;
-  this.path = path_element;
-  this.x = this.path.x;
-  this.y = this.path.y;
-  this.move = function(dx,dy) {
-    this.path.x = this.x + dx;
-    this.path.y = this.y + dy;
-  }
-  this.reset = function() {
-    this.path.x = this.x;
-    this.path.y = this.y;
-  }
-  this.grey_out = function(filter) {
-      if( this.svg_element.parent(filter).size() != 0 ) {
-          this.svg_element.attr('stroke', '#e5e5e5');
-          this.svg_element.siblings('text').attr('fill', '#e5e5e5');
-          this.svg_element.siblings('text').attr('class', 'noselect');
-      }
-  }
-  this.un_grey_out = function(filter) {
-      if( this.svg_element.parent(filter).size() != 0 ) {
-          this.svg_element.attr('stroke', '#000000');
-          this.svg_element.siblings('text').attr('fill', '#000000');
-          this.svg_element.siblings('text').attr('class', '');
-      }
-  }
-}
-
-function node_elements_for( ellipse ) {
-  node_elements = get_edge_elements_for( ellipse );
-  node_elements.push( new svgshape( ellipse.siblings('text') ) );
-  node_elements.push( new svgshape( ellipse ) );
-  return node_elements;
-}
-
-function get_edge_elements_for( ellipse ) {
-  edge_elements = new Array();
-  node_id = ellipse.parent().attr('id');
-  edge_in_pattern = new RegExp( node_id + '$' );
-  edge_out_pattern = new RegExp( '^' + node_id );
-  $.each( $('#svgenlargement .edge,#svgenlargement .relation').children('title'), function(index) {
-    title = $(this).text();
-    if( edge_in_pattern.test(title) ) {
-        polygon = $(this).siblings('polygon');
-        if( polygon.size() > 0 ) {
-            edge_elements.push( new svgshape( polygon ) );
-        }
-        path_segments = $(this).siblings('path')[0].pathSegList;
-        edge_elements.push( new svgpath( path_segments.getItem(path_segments.numberOfItems - 1), $(this).siblings('path') ) );
-    }
-    if( edge_out_pattern.test(title) ) {
-      path_segments = $(this).siblings('path')[0].pathSegList;
-      edge_elements.push( new svgpath( path_segments.getItem(0), $(this).siblings('path') ) );
-    }
-  });
-  return edge_elements;
-} 
-
-function relation_factory() {
-    var self = this;
-    this.color_memo = null;
-    //TODO: colors hard coded for now
-    this.temp_color = '#FFA14F';
-    this.relation_colors = [ "#5CCCCC", "#67E667", "#F9FE72", "#6B90D4", "#FF7673", "#E467B3", "#AA67D5", "#8370D8", "#FFC173" ];
-
-    this.create_temporary = function( source_node_id, target_node_id ) {
-       var relation_id = get_relation_id( source_node_id, target_node_id );
-        var relation = $( jq( relation_id ) );
-        if( relation.size() == 0 ) { 
-            draw_relation( source_node_id, target_node_id, self.temp_color );
-        } else {
-            self.color_memo = relation.children('path').attr( 'stroke' );
-            relation.children('path').attr( 'stroke', self.temp_color );
-        }
-    }
-    this.remove_temporary = function() {
-        var path_element = $('#svgenlargement .relation').children('path[stroke="' + self.temp_color + '"]');
-        if( self.color_memo != null ) {
-            path_element.attr( 'stroke', self.color_memo );
-            self.color_memo = null;
-        } else {
-            var temporary = path_element.parent('g').remove();
-            temporary.empty();
-            temporary = null; 
-        }
-    }
-    this.create = function( source_node_id, target_node_id, color_index ) {
-        //TODO: Protect from (color_)index out of bound..
-        var relation_color = self.relation_colors[ color_index ];
-        var relation = draw_relation( source_node_id, target_node_id, relation_color );
-        get_node_obj( source_node_id ).update_elements();
-        get_node_obj( target_node_id ).update_elements();
-        return relation;
-    }
-    this.toggle_active = function( relation_id ) {
-        var relation = $( jq( relation_id ) );
-        var relation_path = relation.children('path');
-        if( !relation.data( 'active' ) ) {
-            relation_path.css( {'cursor':'pointer'} );
-            relation_path.mouseenter( function(event) { 
-                outerTimer = setTimeout( function() { 
-                    timer = setTimeout( function() { 
-                        var related_nodes = get_related_nodes( relation_id );
-                        var source_node_id = related_nodes[0];
-                        var target_node_id = related_nodes[1];
-                        $('#delete_source_node_id').val( source_node_id );
-                        $('#delete_target_node_id').val( target_node_id );
-                        self.showinfo(relation); 
-                    }, 500 ) 
-                }, 1000 );
-            });
-            relation_path.mouseleave( function(event) {
-                clearTimeout(outerTimer); 
-                if( timer != null ) { clearTimeout(timer); } 
-            });
-            relation.data( 'active', true );
-        } else {
-            relation_path.unbind( 'mouseenter' );
-            relation_path.unbind( 'mouseleave' );
-            relation_path.css( {'cursor':'inherit'} );
-            relation.data( 'active', false );
-        }
-    }
-    this.showinfo = function(relation) {
-       var htmlstr = 'type: ' + relation.data( 'type' ) + '<br/>scope: ' + relation.data( 'scope' );
-       if( relation.data( 'note' ) ) {
-               htmlstr = htmlstr + '<br/>note: ' + relation.data( 'note' );
-       }
-        $('#delete-form-text').html( htmlstr );
-        var points = relation.children('path').attr('d').slice(1).replace('C',' ').split(' ');
-        var xs = parseFloat( points[0].split(',')[0] );
-        var xe = parseFloat( points[1].split(',')[0] );
-        var ys = parseFloat( points[0].split(',')[1] );
-        var ye = parseFloat( points[3].split(',')[1] );
-        var p = svg_root.createSVGPoint();
-        p.x = xs + ((xe-xs)*1.1);
-        p.y = ye - ((ye-ys)/2);
-        var ctm = svg_root_element.getScreenCTM();
-        var nx = p.matrixTransform(ctm).x;
-        var ny = p.matrixTransform(ctm).y;
-        var dialog_aria = $ ("div[aria-labelledby='ui-dialog-title-delete-form']");
-        $('#delete-form').dialog( 'open' );
-        dialog_aria.offset({ left: nx, top: ny });
-    }
-    this.remove = function( relation_id ) {
-        var relation = $( jq( relation_id ) );
-        relation.remove();
-    }
-}
-
-// Utility function to create/return the ID of a relation link between
-// a source and target.
-function get_relation_id( source_id, target_id ) {
-       var idlist = [ source_id, target_id ];
-       idlist.sort();
-       return 'relation-' + idlist[0] + '-...-' + idlist[1];
-}
-
-function get_related_nodes( relation_id ) {
-       var srctotarg = relation_id.substr( 9 );
-       return srctotarg.split('-...-');
-}
-
-function draw_relation( source_id, target_id, relation_color ) {
-    var source_ellipse = get_ellipse( source_id );
-    var target_ellipse = get_ellipse( target_id );
-    var relation_id = get_relation_id( source_id, target_id );
-    var svg = $('#svgenlargement').children('svg').svg().svg('get');
-    var path = svg.createPath(); 
-    var sx = parseInt( source_ellipse.attr('cx') );
-    var rx = parseInt( source_ellipse.attr('rx') );
-    var sy = parseInt( source_ellipse.attr('cy') );
-    var ex = parseInt( target_ellipse.attr('cx') );
-    var ey = parseInt( target_ellipse.attr('cy') );
-    var relation = svg.group( $("#svgenlargement svg g"), 
-       { 'class':'relation', 'id':relation_id } );
-    svg.title( relation, source_id + '->' + target_id );
-    svg.path( relation, path.move( sx, sy ).curveC( sx + (2*rx), sy, ex + (2*rx), ey, ex, ey ), {fill: 'none', stroke: relation_color, strokeWidth: 4});
-    var relation_element = $('#svgenlargement .relation').filter( ':last' );
-    relation_element.insertBefore( $('#svgenlargement g g').filter(':first') );
-    return relation_element;
-}
-
-
-$(document).ready(function () {
-    
-  timer = null;
-  relation_manager = new relation_factory();
-  $('#update_workspace_button').data('locked', false);
-  
-  $('#enlargement').mousedown(function (event) {
-    $(this)
-        .data('down', true)
-        .data('x', event.clientX)
-        .data('y', event.clientY)
-        .data('scrollLeft', this.scrollLeft)
-        stateTf = svg_root_element.getCTM().inverse();
-        var p = svg_root.createSVGPoint();
-        p.x = event.clientX;
-        p.y = event.clientY;
-        stateOrigin = p.matrixTransform(stateTf);
-        event.returnValue = false;
-        event.preventDefault();
-        return false;
-  }).mouseup(function (event) {
-        $(this).data('down', false);
-  }).mousemove(function (event) {
-    if( timer != null ) { clearTimeout(timer); } 
-    if ( ($(this).data('down') == true) && ($('#update_workspace_button').data('locked') == false) ) {
-        var p = svg_root.createSVGPoint();
-        p.x = event.clientX;
-        p.y = event.clientY;
-        p = p.matrixTransform(stateTf);
-        var matrix = stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y);
-        var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
-        svg_root_element.setAttribute("transform", s);
-    }
-    event.returnValue = false;
-    event.preventDefault();
-  }).mousewheel(function (event, delta) {
-    event.returnValue = false;
-    event.preventDefault();
-    if ( $('#update_workspace_button').data('locked') == false ) {
-        if (!delta || delta == null || delta == 0) delta = event.originalEvent.wheelDelta;
-        if (!delta || delta == null || delta == 0) delta = -1 * event.originalEvent.detail;
-        if( delta < -9 ) { delta = -9 }; 
-        var z = 1 + delta/10;
-        z = delta > 0 ? 1 : -1;
-        var g = svg_root_element;
-        if (g && ((z<1 && (g.getScreenCTM().a * start_element_height) > 4.0) || (z>=1 && (g.getScreenCTM().a * start_element_height) < 100))) {
-            var root = svg_root;
-            var p = root.createSVGPoint();
-            p.x = event.originalEvent.clientX;
-            p.y = event.originalEvent.clientY;
-            p = p.matrixTransform(g.getCTM().inverse());
-            var scaleLevel = 1+(z/20);
-            var k = root.createSVGMatrix().translate(p.x, p.y).scale(scaleLevel).translate(-p.x, -p.y);
-            var matrix = g.getCTM().multiply(k);
-            var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
-            g.setAttribute("transform", s);
-        }
-    }
-  }).css({
-    'overflow' : 'hidden',
-    'cursor' : '-moz-grab'
-  });
-  
-
-  $( "#dialog-form" ).dialog({
-    autoOpen: false,
-    height: 270,
-    width: 290,
-    modal: true,
-    buttons: {
-      "Ok": function( evt ) {
-       $(evt.target).button("disable");
-        $('#status').empty();
-        form_values = $('#collapse_node_form').serialize();
-        ncpath = getTextURL( 'relationships' );
-        var jqjson = $.post( ncpath, form_values, function(data) {
-            $.each( data, function(item, source_target) { 
-               var source_found = get_ellipse( source_target[0] );
-               var target_found = get_ellipse( source_target[1] );
-               if( source_found.size() && target_found.size() ) {
-                    var relation = relation_manager.create( source_target[0], source_target[1], $('#rel_type')[0].selectedIndex-1 );
-                                       relation.data( 'type', $('#rel_type :selected').text()  );
-                                       relation.data( 'scope', $('#scope :selected').text()  );
-                                       relation.data( 'note', $('#note').val()  );
-                                       relation_manager.toggle_active( relation.attr('id') );
-                               }
-                               $(evt.target).button("enable");
-           });
-            $( "#dialog-form" ).dialog( "close" );
-        }, 'json' );
-      },
-      Cancel: function() {
-          $( this ).dialog( "close" );
-      }
-    },
-    create: function(event, ui) { 
-        $(this).data( 'relation_drawn', false );
-        //TODO? Err handling?
-               var basepath = getRelativePath();
-        var jqjson = $.getJSON( basepath + '/definitions', function(data) {
-            var types = data.types.sort();
-            $.each( types, function(index, value) {   
-                 $('#rel_type').append( $('<option />').attr( "value", value ).text(value) ); 
-                 $('#keymaplist').append( $('<li>').css( "border-color", relation_manager.relation_colors[index] ).text(value) ); 
-            });
-            var scopes = data.scopes;
-            $.each( scopes, function(index, value) {   
-                 $('#scope').append( $('<option />').attr( "value", value ).text(value) ); 
-            });
-        });        
-    },
-    open: function() {
-        relation_manager.create_temporary( $('#source_node_id').val(), $('#target_node_id').val() );
-        $(".ui-widget-overlay").css("background", "none");
-        $("#dialog_overlay").show();
-        $("#dialog_overlay").height( $("#enlargement_container").height() );
-        $("#dialog_overlay").width( $("#enlargement_container").innerWidth() );
-        $("#dialog_overlay").offset( $("#enlargement_container").offset() );
-    },
-    close: function() {
-        relation_manager.remove_temporary();
-        $( '#status' ).empty();
-        $("#dialog_overlay").hide();
-    }
-  }).ajaxError( function(event, jqXHR, ajaxSettings, thrownError) {
-      if( ajaxSettings.url == getTextURL('relationships') 
-       && ajaxSettings.type == 'POST' && jqXHR.status == 403 ) {
-         var errobj = jQuery.parseJSON( jqXHR.responseText );
-          $('#status').append( '<p class="error">Error: ' + errobj.error + '</br>The relationship cannot be made.</p>' );
-      }
-         $(event.target).parent().find('.ui-button').button("enable");
-  } );
-
-  $( "#delete-form" ).dialog({
-    autoOpen: false,
-    height: 135,
-    width: 160,
-    modal: false,
-    buttons: {
-        Cancel: function() {
-            $( this ).dialog( "close" );
-        },
-        Delete: function() {
-          form_values = $('#delete_relation_form').serialize();
-          ncpath = getTextURL( 'relationships' );
-          var jqjson = $.ajax({ url: ncpath, data: form_values, success: function(data) {
-              $.each( data, function(item, source_target) { 
-                  relation_manager.remove( get_relation_id( source_target[0], source_target[1] ) );
-              });
-              $( "#delete-form" ).dialog( "close" );
-          }, dataType: 'json', type: 'DELETE' });
-        }
-    },
-    create: function(event, ui) {
-        var buttonset = $(this).parent().find( '.ui-dialog-buttonset' ).css( 'width', '100%' );
-        buttonset.find( "button:contains('Cancel')" ).css( 'float', 'right' );
-        var dialog_aria = $("div[aria-labelledby='ui-dialog-title-delete-form']");  
-        dialog_aria.mouseenter( function() {
-            if( mouseWait != null ) { clearTimeout(mouseWait) };
-        })
-        dialog_aria.mouseleave( function() {
-            mouseWait = setTimeout( function() { $("#delete-form").dialog( "close" ) }, 2000 );
-        })
-    },
-    open: function() {
-        mouseWait = setTimeout( function() { $("#delete-form").dialog( "close" ) }, 2000 );
-    },
-    close: function() {
-    }
-  });
-
-  // function for reading form dialog should go here; for now hide the element
-  $('#reading-form').dialog({
-       autoOpen: false,
-       height: 400,
-       width: 600,
-       modal: true,
-       buttons: {
-               Cancel: function() {
-                       $( this ).dialog( "close" );
-               },
-               Update: function( evt ) {
-                       // Disable the button
-                       $(evt.target).button("disable");
-                       $('#reading_status').empty();
-                       var reading_id = $('#reading_id').val()
-                       form_values = {
-                               'id' : reading_id,
-                               'is_nonsense': $('#reading_is_nonsense').is(':checked'),
-                               'grammar_invalid': $('#reading_grammar_invalid').is(':checked'),
-                               'normal_form': $('#reading_normal_form').val() };
-                       // Add the morphology values
-                       $('.reading_morphology').each( function() {
-                               if( $(this).val() != '(Click to select)' ) {
-                                       var rmid = $(this).attr('id');
-                                       rmid = rmid.substring(8);
-                                       form_values[rmid] = $(this).val();
-                               }
-                       });
-                       // Make the JSON call
-                       ncpath = getReadingURL( reading_id );
-                       var reading_element = readingdata[reading_id];
-                       // $(':button :contains("Update")').attr("disabled", true);
-                       var jqjson = $.post( ncpath, form_values, function(data) {
-                               $.each( data, function(key, value) { 
-                                       reading_element[key] = value;
-                               });
-                               if( $('#update_workspace_button').data('locked') == false ) {
-                                       color_inactive( get_ellipse( reading_id ) );
-                               }
-                               $(evt.target).button("enable");
-                               $( "#reading-form" ).dialog( "close" );
-                       });
-                       // Re-color the node if necessary
-                       return false;
-               }
-       },
-       create: function() {
-       },
-       open: function() {
-        $(".ui-widget-overlay").css("background", "none");
-        $("#dialog_overlay").show();
-        $('#reading_status').empty();
-        $("#dialog_overlay").height( $("#enlargement_container").height() );
-        $("#dialog_overlay").width( $("#enlargement_container").innerWidth() );
-        $("#dialog_overlay").offset( $("#enlargement_container").offset() );
-        $("#reading-form").parent().find('.ui-button').button("enable");
-       },
-       close: function() {
-               $("#dialog_overlay").hide();
-       }
-  }).ajaxError( function(event, jqXHR, ajaxSettings, thrownError) {
-      if( ajaxSettings.url.lastIndexOf( getReadingURL('') ) > -1
-       && ajaxSettings.type == 'POST' && jqXHR.status == 403 ) {
-         var errobj = jQuery.parseJSON( jqXHR.responseText );
-          $('#reading_status').append( '<p class="error">Error: ' + errobj.error + '</p>' );
-      }
-         $(event.target).parent().find('.ui-button').button("enable");
-  });
-  
-
-  $('#update_workspace_button').click( function() {
-     var svg_enlargement = $('#svgenlargement').svg().svg('get').root();
-     mouse_scale = svg_root_element.getScreenCTM().a;
-     if( $(this).data('locked') == true ) {
-         $('#svgenlargement ellipse' ).each( function( index ) {
-             if( $(this).data( 'node_obj' ) != null ) {
-                 $(this).data( 'node_obj' ).ungreyout_edges();
-                 $(this).data( 'node_obj' ).set_draggable( false );
-                 var node_id = $(this).data( 'node_obj' ).get_id();
-                 toggle_relation_active( node_id );
-                 $(this).data( 'node_obj', null );
-             }
-         })
-         $(this).data('locked', false);
-         $(this).css('background-position', '0px 44px');
-     } else {
-         var left = $('#enlargement').offset().left;
-         var right = left + $('#enlargement').width();
-         var tf = svg_root_element.getScreenCTM().inverse(); 
-         var p = svg_root.createSVGPoint();
-         p.x=left;
-         p.y=100;
-         var cx_min = p.matrixTransform(tf).x;
-         p.x=right;
-         var cx_max = p.matrixTransform(tf).x;
-         $('#svgenlargement ellipse').each( function( index ) {
-             var cx = parseInt( $(this).attr('cx') );
-             if( cx > cx_min && cx < cx_max) { 
-                 if( $(this).data( 'node_obj' ) == null ) {
-                     $(this).data( 'node_obj', new node_obj( $(this) ) );
-                 } else {
-                     $(this).data( 'node_obj' ).set_draggable( true );
-                 }
-                 $(this).data( 'node_obj' ).greyout_edges();
-                 var node_id = $(this).data( 'node_obj' ).get_id();
-                 toggle_relation_active( node_id );
-             }
-         });
-         $(this).css('background-position', '0px 0px');
-         $(this).data('locked', true );
-     }
-  });
-  
-  $('.helptag').popupWindow({ 
-         height:500, 
-         width:800, 
-         top:50, 
-         left:50,
-         scrollbars:1 
-  }); 
-
-  
-  function toggle_relation_active( node_id ) {
-      $('#svgenlargement .relation').find( "title:contains('" + node_id +  "')" ).each( function(index) {
-          matchid = new RegExp( "^" + node_id );
-          if( $(this).text().match( matchid ) != null ) {
-                 var relation_id = $(this).parent().attr('id');
-              relation_manager.toggle_active( relation_id );
-          };
-      });
-  }
-
-  expandFillPageClients();
-  $(window).resize(function() {
-    expandFillPageClients();
-  });
-
-});
-
-
-function expandFillPageClients() {
-       $('.fillPage').each(function () {
-               $(this).height($(window).height() - $(this).offset().top - MARGIN);
-       });
-}
-
-function loadSVG(svgData) {
-       var svgElement = $('#svgenlargement');
-
-       $(svgElement).svg('destroy');
-
-       $(svgElement).svg({
-               loadURL: svgData,
-               onLoad : svgEnlargementLoaded
-       });
-}
-
-
-/*     OS Gadget stuff
-
-function svg_select_callback(topic, data, subscriberData) {
-       svgData = data;
-       loadSVG(svgData);
-}
-
-function loaded() {
-       var prefs = new gadgets.Prefs();
-       var preferredHeight = parseInt(prefs.getString('height'));
-       if (gadgets.util.hasFeature('dynamic-height')) gadgets.window.adjustHeight(preferredHeight);
-       expandFillPageClients();
-}
-
-if (gadgets.util.hasFeature('pubsub-2')) {
-       gadgets.HubSettings.onConnect = function(hum, suc, err) {
-               subId = gadgets.Hub.subscribe("interedition.svg.selected", svg_select_callback);
-               loaded();
-       };
-}
-else gadgets.util.registerOnLoadHandler(loaded);
-*/
diff --git a/stemmaweb/root/js/relationship-readonly.js b/stemmaweb/root/js/relationship-readonly.js
deleted file mode 100644 (file)
index 8633565..0000000
+++ /dev/null
@@ -1,618 +0,0 @@
-var MARGIN=30;
-var svg_root = null;
-var svg_root_element = null;
-var start_element_height = 0;
-var reltypes = {};
-var readingdata = {};
-
-function getRelativePath() {
-       return basepath;
-}
-
-function getTextURL( which ) {
-       return basepath + textid + '/' + which;
-}
-
-function getReadingURL( reading_id ) {
-       return basepath + textid + '/reading/' + reading_id;
-}
-
-// Make an XML ID into a valid selector
-function jq(myid) { 
-       return '#' + myid.replace(/(:|\.)/g,'\\$1');
-}
-
-// Actions for opening the reading panel
-function node_dblclick_listener( evt ) {
-       // Open the reading dialogue for the given node.
-       // First get the reading info
-       var reading_id = $(this).attr('id');
-       var reading_info = readingdata[reading_id];
-       // and then populate the dialog box with it.
-       // Set the easy properties first
-       $('#reading-form').dialog( 'option', 'title', 'Reading information for "' + reading_info['text'] + '"' );
-       $('#reading_id').val( reading_id );
-       toggle_checkbox( $('#reading_is_nonsense'), reading_info['is_nonsense'] );
-       toggle_checkbox( $('#reading_grammar_invalid'), reading_info['grammar_invalid'] );
-       // Use .text as a backup for .normal_form
-       var normal_form = reading_info['normal_form'];
-       if( !normal_form ) {
-               normal_form = reading_info['text'];
-       }
-       var nfboxsize = 10;
-       if( normal_form.length > 9 ) {
-               nfboxsize = normal_form.length + 1;
-       }
-       $('#reading_normal_form').attr( 'size', nfboxsize )
-       $('#reading_normal_form').val( normal_form );
-       // Now do the morphological properties.
-       morphology_form( reading_info['lexemes'] );
-       // and then open the dialog.
-       $('#reading-form').dialog("open");
-}
-
-function toggle_checkbox( box, value ) {
-       if( value == null ) {
-               value = false;
-       }
-       box.attr('checked', value );
-}
-
-function morphology_form ( lexlist ) {
-       $('#morphology').empty();
-       $.each( lexlist, function( idx, lex ) {
-               var morphoptions = [];
-               if( 'wordform_matchlist' in lex ) {
-                       $.each( lex['wordform_matchlist'], function( tdx, tag ) {
-                               var tagstr = stringify_wordform( tag );
-                               morphoptions.push( tagstr );
-                       });
-               }
-               var formtag = 'morphology_' + idx;
-               var formstr = '';
-               if( 'form' in lex ) {
-                       formstr = stringify_wordform( lex['form'] );
-               } 
-               var form_morph_elements = morph_elements( 
-                       formtag, lex['string'], formstr, morphoptions );
-               $.each( form_morph_elements, function( idx, el ) {
-                       $('#morphology').append( el );
-               });
-       });
-}
-
-function stringify_wordform ( tag ) {
-       if( tag ) {
-               var elements = tag.split(' // ');
-               return elements[1] + ' // ' + elements[2];
-       }
-       return ''
-}
-
-function morph_elements ( formtag, formtxt, currform, morphoptions ) {
-       var clicktag = '(Click to select)';
-       if ( !currform ) {
-               currform = clicktag;
-       }
-       var formlabel = $('<label/>').attr( 'id', 'label_' + formtag ).attr( 
-               'for', 'reading_' + formtag ).text( formtxt + ': ' );
-       var forminput = $('<input/>').attr( 'id', 'reading_' + formtag ).attr( 
-               'name', 'reading_' + formtag ).attr( 'size', '50' ).attr(
-               'class', 'reading_morphology' ).val( currform );
-       forminput.autocomplete({ source: morphoptions, minLength: 0     });
-       forminput.focus( function() { 
-               if( $(this).val() == clicktag ) {
-                       $(this).val('');
-               }
-               $(this).autocomplete('search', '') 
-       });
-       var morphel = [ formlabel, forminput, $('<br/>') ];
-       return morphel;
-}
-
-function color_inactive ( el ) {
-       var reading_id = $(el).parent().attr('id');
-       var reading_info = readingdata[reading_id];
-       // If the reading info has any non-disambiguated lexemes, color it yellow;
-       // otherwise color it green.
-       $(el).attr( {stroke:'green', fill:'#b3f36d'} );
-       if( reading_info ) {
-               $.each( reading_info['lexemes'], function ( idx, lex ) {
-                       if( !lex['is_disambiguated'] || lex['is_disambiguated'] == 0 ) {
-                               $(el).attr( {stroke:'orange', fill:'#fee233'} );
-                       }
-               });
-       }
-}
-
-function relemmatize () {
-       // Send the reading for a new lemmatization and reopen the form.
-       $('#relemmatize_pending').show();
-       var reading_id = $('#reading_id').val()
-       ncpath = getReadingURL( reading_id );
-       form_values = { 
-               'normal_form': $('#reading_normal_form').val(), 
-               'relemmatize': 1 };
-       var jqjson = $.post( ncpath, form_values, function( data ) {
-               // Update the form with the return
-               if( 'id' in data ) {
-                       // We got back a good answer. Stash it
-                       readingdata[reading_id] = data;
-                       // and regenerate the morphology form.
-                       morphology_form( data['lexemes'] );
-               } else {
-                       alert("Could not relemmatize as requested: " + data['error']);
-               }
-               $('#relemmatize_pending').hide();
-       });
-}
-
-// Initialize the SVG once it exists
-function svgEnlargementLoaded() {
-       //Give some visual evidence that we are working
-       $('#loading_overlay').show();
-       lo_height = $("#enlargement_container").outerHeight();
-       lo_width = $("#enlargement_container").outerWidth();
-       $("#loading_overlay").height( lo_height );
-       $("#loading_overlay").width( lo_width );
-       $("#loading_overlay").offset( $("#enlargement_container").offset() );
-       $("#loading_message").offset(
-               { 'top': lo_height / 2 - $("#loading_message").height() / 2,
-                 'left': lo_width / 2 - $("#loading_message").width() / 2 });
-    //Set viewbox widht and height to widht and height of $('#svgenlargement svg').
-    //This is essential to make sure zooming and panning works properly.
-       var rdgpath = getTextURL( 'readings' );
-               $.getJSON( rdgpath, function( data ) {
-               readingdata = data;
-           $('#svgenlargement ellipse').each( function( i, el ) { color_inactive( el ) });
-       });
-    $('#svgenlargement ellipse').parent().dblclick( node_dblclick_listener );
-    var graph_svg = $('#svgenlargement svg');
-    var svg_g = $('#svgenlargement svg g')[0];
-    if (!svg_g) return;
-    svg_root = graph_svg.svg().svg('get').root();
-
-    // Find the real root and ignore any text nodes
-    for (i = 0; i < svg_root.childNodes.length; ++i) {
-        if (svg_root.childNodes[i].nodeName != '#text') {
-               svg_root_element = svg_root.childNodes[i];
-               break;
-          }
-    }
-
-    svg_root.viewBox.baseVal.width = graph_svg.attr( 'width' );
-    svg_root.viewBox.baseVal.height = graph_svg.attr( 'height' );
-    //Now set scale and translate so svg height is about 150px and vertically centered in viewbox.
-    //This is just to create a nice starting enlargement.
-    var initial_svg_height = 250;
-    var scale = initial_svg_height/graph_svg.attr( 'height' );
-    var additional_translate = (graph_svg.attr( 'height' ) - initial_svg_height)/(2*scale);
-    var transform = svg_g.getAttribute('transform');
-    var translate = parseFloat( transform.match( /translate\([^\)]*\)/ )[0].split('(')[1].split(' ')[1].split(')')[0] );
-    translate += additional_translate;
-    var transform = 'rotate(0) scale(' + scale + ') translate(4 ' + translate + ')';
-    svg_g.setAttribute('transform', transform);
-    //used to calculate min and max zoom level:
-    start_element_height = $('#__START__').children('ellipse')[0].getBBox().height;
-    add_relations( function() { $('#loading_overlay').hide(); });
-}
-
-function add_relations( callback_fn ) {
-       var basepath = getRelativePath();
-       var textrelpath = getTextURL( 'relationships' );
-    $.getJSON( basepath + 'definitions', function(data) {
-               var rel_types = data.types.sort();
-               $.each( rel_types, function(index, value) {   
-                        $('#keymaplist').append( $('<li>').css( "border-color", relation_manager.relation_colors[index] ).text(value) ); 
-               });
-        $.getJSON( textrelpath, function(data) {
-            $.each(data, function( index, rel_info ) {
-                var type_index = $.inArray(rel_info.type, rel_types);
-                var source_found = get_ellipse( rel_info.source );
-                var target_found = get_ellipse( rel_info.target );
-                if( type_index != -1 && source_found.size() && target_found.size() ) {
-                    var relation = relation_manager.create( rel_info.source, rel_info.target, type_index );
-                    relation.data( 'type', rel_info.type );
-                    relation.data( 'scope', rel_info.scope );
-                    relation.data( 'note', rel_info.note );
-                    var node_obj = get_node_obj(rel_info.source);
-                    node_obj.ellipse.data( 'node_obj', null );
-                    node_obj = get_node_obj(rel_info.target);
-                    node_obj.ellipse.data( 'node_obj', null );
-                }
-            });
-            callback_fn.call();
-        });
-    });
-}
-
-function get_ellipse( node_id ) {
-       return $( jq( node_id ) + ' ellipse');
-}
-
-function get_node_obj( node_id ) {
-    var node_ellipse = get_ellipse( node_id );
-    if( node_ellipse.data( 'node_obj' ) == null ) {
-        node_ellipse.data( 'node_obj', new node_obj(node_ellipse) );
-    };
-    return node_ellipse.data( 'node_obj' );
-}
-
-function node_obj(ellipse) {
-  this.ellipse = ellipse;
-  var self = this;
-  
-  this.x = 0;
-  this.y = 0;
-  this.dx = 0;
-  this.dy = 0;
-  this.node_elements = node_elements_for(self.ellipse);
-
-  this.update_elements = function() {
-      self.node_elements = node_elements_for(self.ellipse);
-  }
-}
-
-function svgshape( shape_element ) {
-  this.shape = shape_element;
-  this.move = function(dx,dy) {
-    this.shape.attr( "transform", "translate(" + dx + " " + dy + ")" );
-  }
-  this.reset = function() {
-    this.shape.attr( "transform", "translate( 0, 0 )" );
-  }
-  this.grey_out = function(filter) {
-      if( this.shape.parent(filter).size() != 0 ) {
-          this.shape.attr({'stroke':'#e5e5e5', 'fill':'#e5e5e5'});
-      }
-  }
-  this.un_grey_out = function(filter) {
-      if( this.shape.parent(filter).size() != 0 ) {
-        this.shape.attr({'stroke':'#000000', 'fill':'#000000'});
-      }
-  }
-}
-
-function svgpath( path_element, svg_element ) {
-  this.svg_element = svg_element;
-  this.path = path_element;
-  this.x = this.path.x;
-  this.y = this.path.y;
-  this.move = function(dx,dy) {
-    this.path.x = this.x + dx;
-    this.path.y = this.y + dy;
-  }
-  this.reset = function() {
-    this.path.x = this.x;
-    this.path.y = this.y;
-  }
-  this.grey_out = function(filter) {
-      if( this.svg_element.parent(filter).size() != 0 ) {
-          this.svg_element.attr('stroke', '#e5e5e5');
-          this.svg_element.siblings('text').attr('fill', '#e5e5e5');
-          this.svg_element.siblings('text').attr('class', 'noselect');
-      }
-  }
-  this.un_grey_out = function(filter) {
-      if( this.svg_element.parent(filter).size() != 0 ) {
-          this.svg_element.attr('stroke', '#000000');
-          this.svg_element.siblings('text').attr('fill', '#000000');
-          this.svg_element.siblings('text').attr('class', '');
-      }
-  }
-}
-
-function node_elements_for( ellipse ) {
-  node_elements = get_edge_elements_for( ellipse );
-  node_elements.push( new svgshape( ellipse.siblings('text') ) );
-  node_elements.push( new svgshape( ellipse ) );
-  return node_elements;
-}
-
-function get_edge_elements_for( ellipse ) {
-  edge_elements = new Array();
-  node_id = ellipse.parent().attr('id');
-  edge_in_pattern = new RegExp( node_id + '$' );
-  edge_out_pattern = new RegExp( '^' + node_id );
-  $.each( $('#svgenlargement .edge,#svgenlargement .relation').children('title'), function(index) {
-    title = $(this).text();
-    if( edge_in_pattern.test(title) ) {
-        polygon = $(this).siblings('polygon');
-        if( polygon.size() > 0 ) {
-            edge_elements.push( new svgshape( polygon ) );
-        }
-        path_segments = $(this).siblings('path')[0].pathSegList;
-        edge_elements.push( new svgpath( path_segments.getItem(path_segments.numberOfItems - 1), $(this).siblings('path') ) );
-    }
-    if( edge_out_pattern.test(title) ) {
-      path_segments = $(this).siblings('path')[0].pathSegList;
-      edge_elements.push( new svgpath( path_segments.getItem(0), $(this).siblings('path') ) );
-    }
-  });
-  return edge_elements;
-} 
-
-function relation_factory() {
-    var self = this;
-    this.color_memo = null;
-    //TODO: colors hard coded for now
-    this.relation_colors = [ "#5CCCCC", "#67E667", "#F9FE72", "#6B90D4", "#FF7673", "#E467B3", "#AA67D5", "#8370D8", "#FFC173" ];
-
-    this.create = function( source_node_id, target_node_id, color_index ) {
-        //TODO: Protect from (color_)index out of bound..
-        var relation_color = self.relation_colors[ color_index ];
-        var relation = draw_relation( source_node_id, target_node_id, relation_color );
-        var relation_id = get_relation_id( source_node_id, target_node_id );
-        get_node_obj( source_node_id ).update_elements();
-        get_node_obj( target_node_id ).update_elements();
-        // Set it active by default. May need to restore toggling if having all
-        // relationships active is too much of a performance hit.
-        var relation_path = relation.children('path');
-        // All relations active in order to allow hover information?
-        // Else we will have to deactivate them when they go off-screen.
-               relation_path.css( {'cursor':'pointer'} );
-               relation_path.mouseenter( function(event) { 
-                       outerTimer = setTimeout( function() { 
-                               timer = setTimeout( function() { 
-                                       var related_nodes = get_related_nodes( relation_id );
-                                       var source_node_id = related_nodes[0];
-                                       var target_node_id = related_nodes[1];
-                                       $('#delete_source_node_id').val( source_node_id );
-                                       $('#delete_target_node_id').val( target_node_id );
-                                       self.showinfo(relation); 
-                               }, 500 ) 
-                       }, 1000 );
-               });
-               relation_path.mouseleave( function(event) {
-                       clearTimeout(outerTimer); 
-                       if( timer != null ) { clearTimeout(timer); } 
-               });
-        
-        return relation;
-    }
-
-    this.showinfo = function(relation) {
-       var htmlstr = 'type: ' + relation.data( 'type' ) + '<br/>scope: ' + relation.data( 'scope' );
-       if( relation.data( 'note' ) ) {
-               htmlstr = htmlstr + '<br/>note: ' + relation.data( 'note' );
-       }
-        $('#delete-form-text').html( htmlstr );
-        var points = relation.children('path').attr('d').slice(1).replace('C',' ').split(' ');
-        var xs = parseFloat( points[0].split(',')[0] );
-        var xe = parseFloat( points[1].split(',')[0] );
-        var ys = parseFloat( points[0].split(',')[1] );
-        var ye = parseFloat( points[3].split(',')[1] );
-        var p = svg_root.createSVGPoint();
-        p.x = xs + ((xe-xs)*1.1);
-        p.y = ye - ((ye-ys)/2);
-        var ctm = svg_root_element.getScreenCTM();
-        var nx = p.matrixTransform(ctm).x;
-        var ny = p.matrixTransform(ctm).y;
-        var dialog_aria = $ ("div[aria-labelledby='ui-dialog-title-delete-form']");
-        $('#delete-form').dialog( 'open' );
-        dialog_aria.offset({ left: nx, top: ny });
-    }
-    /* Do we need this in readonly mode?
-    this.remove = function( relation_id ) {
-        var relation = $( jq( relation_id ) );
-        relation.remove();
-    }
-    */
-}
-
-// Utility function to create/return the ID of a relation link between
-// a source and target.
-function get_relation_id( source_id, target_id ) {
-       var idlist = [ source_id, target_id ];
-       idlist.sort();
-       return 'relation-' + idlist[0] + '-...-' + idlist[1];
-}
-
-function get_related_nodes( relation_id ) {
-       var srctotarg = relation_id.substr( 9 );
-       return srctotarg.split('-...-');
-}
-
-function draw_relation( source_id, target_id, relation_color ) {
-    var source_ellipse = get_ellipse( source_id );
-    var target_ellipse = get_ellipse( target_id );
-    var relation_id = get_relation_id( source_id, target_id );
-    var svg = $('#svgenlargement').children('svg').svg().svg('get');
-    var path = svg.createPath(); 
-    var sx = parseInt( source_ellipse.attr('cx') );
-    var rx = parseInt( source_ellipse.attr('rx') );
-    var sy = parseInt( source_ellipse.attr('cy') );
-    var ex = parseInt( target_ellipse.attr('cx') );
-    var ey = parseInt( target_ellipse.attr('cy') );
-    var relation = svg.group( $("#svgenlargement svg g"), 
-       { 'class':'relation', 'id':relation_id } );
-    svg.title( relation, source_id + '->' + target_id );
-    svg.path( relation, path.move( sx, sy ).curveC( sx + (2*rx), sy, ex + (2*rx), ey, ex, ey ), {fill: 'none', stroke: relation_color, strokeWidth: 4});
-    var relation_element = $('#svgenlargement .relation').filter( ':last' );
-    relation_element.insertBefore( $('#svgenlargement g g').filter(':first') );
-    return relation_element;
-}
-
-$(document).ready(function () {
-    
-  timer = null;
-  relation_manager = new relation_factory();
-  
-  $('#enlargement').mousedown(function (event) {
-    $(this)
-        .data('down', true)
-        .data('x', event.clientX)
-        .data('y', event.clientY)
-        .data('scrollLeft', this.scrollLeft)
-        stateTf = svg_root_element.getCTM().inverse();
-        var p = svg_root.createSVGPoint();
-        p.x = event.clientX;
-        p.y = event.clientY;
-        stateOrigin = p.matrixTransform(stateTf);
-        event.returnValue = false;
-        event.preventDefault();
-        return false;
-  }).mouseup(function (event) {
-        $(this).data('down', false);
-  }).mousemove(function (event) {
-    if( timer != null ) { clearTimeout(timer); } 
-    if ( ($(this).data('down') == true) ) {
-        var p = svg_root.createSVGPoint();
-        p.x = event.clientX;
-        p.y = event.clientY;
-        p = p.matrixTransform(stateTf);
-        var matrix = stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y);
-        var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
-        svg_root_element.setAttribute("transform", s);
-    }
-    event.returnValue = false;
-    event.preventDefault();
-  }).mousewheel(function (event, delta) {
-    event.returnValue = false;
-    event.preventDefault();
-       if (!delta || delta == null || delta == 0) delta = event.originalEvent.wheelDelta;
-       if (!delta || delta == null || delta == 0) delta = -1 * event.originalEvent.detail;
-       if( delta < -9 ) { delta = -9 }; 
-       var z = 1 + delta/10;
-       z = delta > 0 ? 1 : -1;
-       var g = svg_root_element;
-       if (g && ((z<1 && (g.getScreenCTM().a * start_element_height) > 4.0) || (z>=1 && (g.getScreenCTM().a * start_element_height) < 100))) {
-               var root = svg_root;
-               var p = root.createSVGPoint();
-               p.x = event.originalEvent.clientX;
-               p.y = event.originalEvent.clientY;
-               p = p.matrixTransform(g.getCTM().inverse());
-               var scaleLevel = 1+(z/20);
-               var k = root.createSVGMatrix().translate(p.x, p.y).scale(scaleLevel).translate(-p.x, -p.y);
-               var matrix = g.getCTM().multiply(k);
-               var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
-               g.setAttribute("transform", s);
-       }
-  }).css({
-    'overflow' : 'hidden',
-    'cursor' : '-moz-grab'
-  });
-  
-  $( "#delete-form" ).dialog({
-    autoOpen: false,
-    height: 135,
-    width: 160,
-    modal: false,
-    buttons: {
-        OK: function() {
-            $( this ).dialog( "close" );
-        }
-    },
-    create: function(event, ui) {
-        var buttonset = $(this).parent().find( '.ui-dialog-buttonset' ).css( 'width', '100%' );
-        buttonset.find( "button:contains('Cancel')" ).css( 'float', 'right' );
-        var dialog_aria = $("div[aria-labelledby='ui-dialog-title-delete-form']");  
-        dialog_aria.mouseenter( function() {
-            if( mouseWait != null ) { clearTimeout(mouseWait) };
-        })
-        dialog_aria.mouseleave( function() {
-            mouseWait = setTimeout( function() { $("#delete-form").dialog( "close" ) }, 2000 );
-        })
-    },
-    open: function() {
-        mouseWait = setTimeout( function() { $("#delete-form").dialog( "close" ) }, 2000 );
-    },
-    close: function() {
-    }
-  });
-
-  // function for reading form dialog should go here; for now hide the element
-  $('#reading-form').dialog({
-       autoOpen: false,
-       height: 400,
-       width: 600,
-       modal: true,
-       buttons: {
-               OK: function() {
-                       $( this ).dialog( "close" );
-               }
-       },
-       create: function() {
-       },
-       open: function() {
-        $(".ui-widget-overlay").css("background", "none");
-        $("#dialog_overlay").show();
-        $('#reading_status').empty();
-        $("#dialog_overlay").height( $("#enlargement_container").height() );
-        $("#dialog_overlay").width( $("#enlargement_container").innerWidth() );
-        $("#dialog_overlay").offset( $("#enlargement_container").offset() );
-        $("#reading-form").parent().find('.ui-button').button("enable");
-       },
-       close: function() {
-               $("#dialog_overlay").hide();
-       }
-  }).ajaxError( function(event, jqXHR, ajaxSettings, thrownError) {
-      if( ajaxSettings.url.lastIndexOf( getReadingURL('') ) > -1
-       && ajaxSettings.type == 'POST' && jqXHR.status == 403 ) {
-         var errobj = jQuery.parseJSON( jqXHR.responseText );
-          $('#reading_status').append( '<p class="error">Error: ' + errobj.error + '</p>' );
-      }
-         $(event.target).parent().find('.ui-button').button("enable");
-  });
-  
-  // Hide the unused elements
-  $('#dialog-form').hide();
-  $('#update_workspace_button').hide();
-  
-  $('.helptag').popupWindow({ 
-         height:500, 
-         width:800, 
-         top:50, 
-         left:50,
-         scrollbars:1 
-  }); 
-
-  
-  expandFillPageClients();
-  $(window).resize(function() {
-    expandFillPageClients();
-  });
-
-});
-
-
-function expandFillPageClients() {
-       $('.fillPage').each(function () {
-               $(this).height($(window).height() - $(this).offset().top - MARGIN);
-       });
-}
-
-function loadSVG(svgData) {
-       var svgElement = $('#svgenlargement');
-
-       $(svgElement).svg('destroy');
-
-       $(svgElement).svg({
-               loadURL: svgData,
-               onLoad : svgEnlargementLoaded
-       });
-}
-
-
-/*     OS Gadget stuff
-
-function svg_select_callback(topic, data, subscriberData) {
-       svgData = data;
-       loadSVG(svgData);
-}
-
-function loaded() {
-       var prefs = new gadgets.Prefs();
-       var preferredHeight = parseInt(prefs.getString('height'));
-       if (gadgets.util.hasFeature('dynamic-height')) gadgets.window.adjustHeight(preferredHeight);
-       expandFillPageClients();
-}
-
-if (gadgets.util.hasFeature('pubsub-2')) {
-       gadgets.HubSettings.onConnect = function(hum, suc, err) {
-               subId = gadgets.Hub.subscribe("interedition.svg.selected", svg_select_callback);
-               loaded();
-       };
-}
-else gadgets.util.registerOnLoadHandler(loaded);
-*/
diff --git a/stemmaweb/root/js/stemmagadget.js b/stemmaweb/root/js/stemmagadget.js
deleted file mode 100644 (file)
index f22a4da..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-var colors = ['#ffeeaa','#afc6e9','#d5fff6','#ffccaa','#ffaaaa','#e5ff80','#e5d5ff','#ffd5e5'];
-
-$(document).ready(function() {
-  $('svg').width('485px');
-})
-
-
-
-function load_stemma_svg( topic, data, subscriberData ) {
-    var params = {};
-       var postData = {};
-
-       postData.textid = data;
-
-       params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
-       params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postData);
-       var url = "http://eccentricity.org:3000/svg_service";
-
-       gadgets.io.makeRequest(url,
-               function (o) {
-                       displaySVG(o.text);
-               }, params);
-       
-}
-
-function loaded() {
-       gadgets.window.adjustHeight(400);
-       subId = gadgets.Hub.subscribe("interedition.svg.dot.coloring", do_color_nodes);
-       subId = gadgets.Hub.subscribe("interedition.svg.dot.decoloring", de_color_nodes);
-       subId = gadgets.Hub.subscribe("interedition.tradition.selected", load_stemma_svg);
-}
-
-if (gadgets.util.hasFeature('pubsub-2')) {
-       gadgets.HubSettings.onConnect = function(hum, suc, err) { loaded(); };
-}
-else gadgets.util.registerOnLoadHandler(loaded);
diff --git a/stemmaweb/root/js/stexaminer.js b/stemmaweb/root/js/stexaminer.js
deleted file mode 100644 (file)
index 0509c66..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-var colors = ['#ffeeaa','#afc6e9','#d5fff6','#ffccaa','#ffaaaa','#e5ff80','#e5d5ff','#ffd5e5'];
-var row_triggered = false;
-var original_svg;
-
-function handle_row_click( row ) {
-       var ridx = row.parent().parent().index()
-       var rs = readingstats[ridx];
-    var imghtml = $('<img>').attr( 'src', baseurl + "../images/ajax-loader.gif" ).attr( 'alt', "Loading SVG..." );
-    $('#stemma_graph').empty();
-    $('#stemma_graph').append( imghtml );
-       if( rs.layerwits ) {
-               var stemma_form = { 'dot': graphdot, 'layerwits': rs.layerwits };
-               $('#stemma_graph').load( baseurl + 'graphsvg', stemma_form, function() {
-                       color_row( row );
-                       show_stats( rs );
-               });
-       } else {
-               $('#stemma_graph').empty();
-               $('#stemma_graph').append( original_svg );
-               color_row( row );
-               show_stats( rs );
-       }
-}
-
-function color_row( row ) {
-    row_triggered = true;
-    $('ellipse').attr( {stroke:'white', fill:'#fff'} );
-    $('.node').children('polygon').attr( {stroke:'#fff', fill:'#fff'} );
-    $('.node').children('text').attr( {stroke:'none', fill:'#000'} );
-    $('tr.active_variant_row').children('td').removeClass('cellb0 cellb1 cellb2 cellb3 cellb4 cellb5 cellb6 cellb7'); 
-    row.parent().nextAll('.clickable').children('span').click();
-    $('td.active_variant_cell').removeClass('active_variant_cell');
-    row_triggered = false;
-}
-
-function color_nodes( column_index, arr_node_ids, arr_greynode_ids ) {
-  if( !row_triggered ) {
-    $('tr.active_variant_row').children('td').removeClass('cellb0 cellb1 cellb2 cellb3 cellb4 cellb5 cellb6 cellb7'); 
-    $('td.active_variant_cell').removeClass('active_variant_cell');
-    $('ellipse').attr( {stroke:'white', fill:'#fff'} );
-    $('.node').children('polygon').attr( {stroke:'#fff', fill:'#fff'} );
-    $('.node').children('text').attr( {stroke:'none', fill:'#000'} );
-  }; 
-  $('tr.active_variant_row').removeClass('active_variant_row') 
-  jQuery.each( arr_greynode_ids, function(index,value) {
-    nodes = $('.node').children('title').filter( function(index) {
-      return $(this).text() == value;
-    })
-    nodes.siblings('ellipse, polygon, text').each( function( index ) {
-        $(this).attr( {stroke:'#ddd', fill:'#f8f8f8'} );
-      });
-  });
-  jQuery.each( arr_node_ids, function(index,value) {
-    $('.node').children('title').filter( function(index) {
-      return $(this).text() == value;
-    }).siblings('ellipse').each( function( index ) {
-        $(this).attr( {stroke:'black', fill:colors[column_index-1]} );
-      });
-  });
-}
-
-function show_stats( rs ) {
-       var rshtml = $('#stats_template').clone();
-       rshtml.find('#statrank').append( rs.id );
-       if( "unsolved" in rs ) {
-               var nocalcmsg;
-               if( rs.unsolved == 'IDP error' ) {
-                       nocalcmsg = $('<span>').attr('class', 'error').append(
-                               "(Could not reach calculation server - are you offline?)" );
-               } else {
-                       nocalcmsg = "(Not yet calculated for this location - please try later)";
-               }
-               rshtml.find('.solutionstatus').append( nocalcmsg );
-       } else {
-               $.each( rs.readings, function( idx, rdghash ) {
-                       var rdgstats = $('#reading_template').clone();
-                       rdgstats.find('.readinglabel').append( rdghash.text );
-                       rdgstats.find('.reading_copied').append( rdghash.followed );
-                       rdgstats.find('.reading_changed').append( rdghash.not_followed );
-                       rdgstats.find('.reading_unclear').append( rdghash.follow_unknown );
-                       rdgstats.find('.readingroots').append( rdghash.independent_occurrence );
-                       if( rdghash.is_reverted ) {
-                               rdgstats.find('.reversionroots').append( rdghash.reversions );
-                       } else {
-                               rdgstats.find('.readingreversions').empty();
-                       }
-                       var rdgsourcehtml = fill_parent_template( rdghash, 'source' );
-                       var rdgreverthtml = fill_parent_template( rdghash, 'reversion' );
-                       rdgstats.find('.reading_statistics').append( rdgsourcehtml );
-                       rdgstats.find('.reading_statistics').append( rdgreverthtml );
-                       // If neither, append a small spacer
-                       if( !rdgsourcehtml && !rdgreverthtml ) {
-                               rdgstats.find('.reading_statistics').append( '<br/>' );
-                       }
-                       rshtml.append( rdgstats.contents() );
-               });
-       }
-       $('#row_statistics').empty();
-       $('#row_statistics').append( rshtml.contents() );
-       
-};
-
-function fill_parent_template( rdghash, type ) {
-       var objname = type + '_parents';
-       var template_id = '#reading_' + type + '_template';
-       var list_class = '.reading_' + type + '_list';
-       if( ! $.isEmptyObject( rdghash[objname] ) ) {
-               var parentstats = $( template_id ).clone();
-               $.each( rdghash[objname], function( parentid, pdata ) {
-                       var parentdesc = pdata.label;
-                       if( pdata.relation ) {
-                               parentdesc += ' - variant type ' + pdata.relation.type;
-                               if( pdata.relation.annotation ) {
-                                       parentdesc += ' [ ' + pdata.relation.annotation + ' ]';
-                               }
-                       } else {
-                               parentdesc += ' - no syntactic relation';
-                       }
-                       var parentitem = $('<li>').append( parentdesc );
-                       parentstats.find( list_class ).append( parentitem );
-               });
-               return( parentstats.contents() );
-       }
-}
-
-// Save the original unextended SVG for when we need it.
-$(document).ready(function () {
-       original_svg = $('#stemma_graph > svg').clone();
-       
-       $('#aboutlink').popupWindow({ 
-               height:500, 
-               width:800, 
-               top:50, 
-               left:50,
-               scrollbars:1 
-       }); 
-       $('#options').dialog({
-               autoOpen: false,
-               height: 200,
-               width: 300,
-               modal: true,
-               buttons: {
-                       Cancel: function() {
-                               $(this).dialog( "close" );
-                       },
-                       Reanalyze: function() {
-                               $('#use_variants_form').submit();
-                       },
-               }
-       });
-
-});
diff --git a/stemmaweb/root/js/svginteraction.js b/stemmaweb/root/js/svginteraction.js
deleted file mode 100644 (file)
index 8fa72e2..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-function getRelativePath( action ) {
-    path_elements = window.location.pathname.split('/'); 
-    if( path_elements[1].length > 0 ) {
-        return window.location.pathname.split('/')[1] + '/' + action;
-    } else {
-        return action;
-    }
-}
-
-function svgLoaded() {
-  $('ellipse').attr( {stroke:'black', fill:'#fff'} );
-  ncpath = getRelativePath( 'node_click' );
-  var jqjson = $.getJSON( ncpath, 'node_id=null', function(data) {
-    $.each( data, function(item, node_id_and_state) {
-      if( node_id_and_state[1] == 1 ) {
-        node_ellipse = $('.node').children('title').filter( function(index) {
-          return $(this).text() == node_id_and_state[0];
-        }).siblings('ellipse');
-        node_ellipse.attr( {stroke:'green', fill:'#b3f36d'} );
-        $('#constructedtext').append( node_ellipse.siblings('text').text() + '&#32;' );
-      } else {
-        if( node_id_and_state[1] == null ) {
-          $('#constructedtext').append( ' &hellip; ' );
-        }
-      }
-    });
-    add_node_objs();
-  });
-}
-
-function add_node_objs() {
-  $('ellipse[fill="#fff"]').each( function() {
-      $(this).data( 'node_obj', new node_obj( $(this) ) );
-    }
-  );
-}
-
-function get_node_obj( node_id ) {
-  return $('.node').children('title').filter( function(index) {
-    return $(this).text() == node_id;
-  }).siblings('ellipse').data( 'node_obj' );
-}
-
-function get_edge( edge_id ) {
-  return $('.edge').filter( function(index) {
-    return $(this).children( 'title' ).text() == $('<div/>').html(edge_id).text() ;
-  });
-}
-
-function node_obj(ellipse) {
-  this.ellipse = ellipse;
-  var self = this;
-  
-  this.x = 0;
-  this.y = 0;
-  this.dx = 0;
-  this.dy = 0;
-  this.node_elements = node_elements_for(self.ellipse);
-  this.sub_nodes = [];
-  this.super_node = null;
-
-  this.dblclick_listener = function(evt) {
-    node_id = self.ellipse.siblings('title').text();
-    ncpath = getRelativePath( 'node_click' );
-    var jqjson = $.getJSON( ncpath, 'node_id=' + node_id, function(data) {
-      $('#constructedtext').empty();
-      $.each( data, function(item, node_id_and_state) {
-        node = get_node_obj( node_id_and_state[0] );
-        // 1 -> turn the associated SVG node on, put in the associate word in the text box.
-        // 0 -> turn SVG node off.
-        // null -> turn node off, put in ellipsis in text box at the corresponding place.
-        if( node_id_and_state[1] == 1 ) {
-//TODO: create test suite en refactor this in to more OO! (node and node_ellipse are 'conflated')
-          node_ellipse = $('.node').children('title').filter( function(index) {
-            return $(this).text() == node_id_and_state[0];
-          }).siblings('ellipse');
-          $('#constructedtext').append( node_ellipse.siblings('text').text() + '&#32;' );
-          if( node ) { node.set_draggable( false ) }
-        } else {
-          if( node ) { node.set_draggable( true ) };
-          if( node_id_and_state[1] == null ) {
-            $('#constructedtext').append( ' &hellip; ' );
-          }
-        }
-      });
-    });
-  }
-
-  this.set_draggable = function( draggable ) {
-    if( draggable ) {
-      self.ellipse.attr( {stroke:'black', fill:'#fff'} );
-      self.ellipse.mousedown( this.mousedown_listener );
-      self.ellipse.hover( this.enter_node, this.leave_node );  
-    } else {
-      self.ellipse.unbind('mouseenter').unbind('mouseleave').unbind('mousedown');
-      self.ellipse.attr( {stroke:'green', fill:'#b3f36d'} );
-    }
-  }
-
-  this.mousedown_listener = function(evt) {
-    evt.stopPropagation();
-    self.x = evt.clientX;
-    self.y = evt.clientY;
-    $('body').mousemove( self.mousemove_listener );
-    $('body').mouseup( self.mouseup_listener );
-    self.ellipse.unbind('mouseenter').unbind('mouseleave')
-    self.ellipse.attr( 'fill', '#ff66ff' );
-  }
-
-  this.mousemove_listener = function(evt) {
-    self.dx = evt.clientX - self.x;
-    self.dy = evt.clientY - self.y;
-    self.move_elements();
-  }
-
-  this.mouseup_listener = function(evt) {    
-    if( $('ellipse[fill="#ffccff"]').size() > 0 ) {
-      $('#source_node_id').val( self.ellipse.siblings('title').text() );
-      $('#target_node_id').val( $('ellipse[fill="#ffccff"]').siblings("title").text() );
-      $( '#dialog-form' ).dialog( 'open' );
-    };
-    $('body').unbind('mousemove');
-    $('body').unbind('mouseup');
-    self.ellipse.attr( 'fill', '#fff' );
-    self.ellipse.hover( self.enter_node, self.leave_node );
-    if( self.super_node ) {
-      self.eclipse();
-    } else {
-      self.reset_elements();
-    }
-  }
-
-  this.cpos = function() {
-    return { x: self.ellipse.attr('cx'), y: self.ellipse.attr('cy') };
-  }
-
-  this.get_g = function() {
-    return self.ellipse.parent('g');
-  }
-
-  this.stack_behind = function( collapse_info ) {
-    self.super_node = get_node_obj( collapse_info.target );
-    self.super_node.sub_nodes.push( self );
-    self.eclipse();
-    if( collapse_info.edges ) {
-      $.each( collapse_info.edges, function( source_edge_id, target_info ) {
-        get_edge(source_edge_id).attr( 'display', 'none' );
-        target_edge = get_edge(target_info.target);
-        // Unfortunately, the simple solution doesn't work...
-        // target_edge.children( 'text' ).replaceWith( '<text x="2270" y="-59.400001525878906"><tspan text-anchor="middle">A, B</tspan><tspan fill="red">, C</tspan></text>' );
-        // ..so we take the long and winding road...
-        var svg = $('#svgbasics').children('svg').svg().svg('get');
-        textx = target_edge.children( 'text' )[0].x.baseVal.getItem(0).value
-        texty = target_edge.children( 'text' )[0].y.baseVal.getItem(0).value
-        current_label = target_edge.children( 'text' ).text(); 
-        target_edge.children( 'text' ).remove();
-        texts = svg.createText();
-        texts.span(current_label, {'text-anchor': 'middle'}).span(target_info.label, {fill: 'red'});
-        svg.text(target_edge, textx, texty, texts);
-      }); 
-    }
-  }
-
-  this.eclipse = function() {
-    self.dx = new Number( self.super_node.cpos().x ) - new Number( self.cpos().x ) + ( 10 * (self.super_node.sub_nodes.indexOf(self) + 1) );
-    self.dy = new Number( self.super_node.cpos().y ) - new Number( self.cpos().y ) + ( 5 * (self.super_node.sub_nodes.indexOf(self) + 1) );
-    self.move_elements();
-    eclipse_index = self.super_node.sub_nodes.indexOf(self) - 1;
-    if( eclipse_index > -1 ) {
-      self.get_g().insertBefore( self.super_node.sub_nodes[eclipse_index].get_g() );
-    } else {
-      self.get_g().insertBefore( self.super_node.get_g() );
-    }
-  }
-
-  this.enter_node = function(evt) {
-    self.ellipse.attr( 'fill', '#ffccff' );
-  }
-
-  this.leave_node = function(evt) {
-    self.ellipse.attr( 'fill', '#fff' );
-  }
-
-  this.move_elements = function() {
-    $.each( self.node_elements, function(index, value) {
-      value.move(self.dx,self.dy);
-    });
-  }
-
-  this.reset_elements = function() {
-    $.each( self.node_elements, function(index, value) {
-      value.reset();
-    });
-  }
-
-  this.ellipse.dblclick( this.dblclick_listener );
-  self.set_draggable( true );
-}
-
-function svgshape( shape_element ) {
-  this.shape = shape_element;
-  this.move = function(dx,dy) {
-    this.shape.attr( "transform", "translate(" + dx + " " + dy + ")" );
-  }
-  this.reset = function() {
-    this.shape.attr( "transform", "translate( 0, 0 )" );
-  }
-}
-
-function svgpath( path_element ) {
-  this.path = path_element;
-  this.x = this.path.x;
-  this.y = this.path.y;
-  this.move = function(dx,dy) {
-    this.path.x = this.x + dx;
-    this.path.y = this.y + dy;
-  }
-  this.reset = function() {
-    this.path.x = this.x;
-    this.path.y = this.y;
-  }
-}
-
-function node_elements_for( ellipse ) {
-  node_elements = get_edge_elements_for( ellipse );
-  node_elements.push( new svgshape( ellipse.siblings('text') ) );
-  node_elements.push( new svgshape( ellipse ) );
-  return node_elements;
-}
-
-function get_edge_elements_for( ellipse ) {
-  edge_elements = new Array();
-  node_id = ellipse.siblings('title').text();
-  edge_in_pattern = new RegExp( node_id + '$' );
-  edge_out_pattern = new RegExp( '^' + node_id );
-  $.each( $('.edge').children('title'), function(index) {
-    title = $(this).text();
-    if( edge_in_pattern.test(title) ) {
-      edge_elements.push( new svgshape( $(this).siblings('polygon') ) );
-      path_segments = $(this).siblings('path')[0].pathSegList;
-      edge_elements.push( new svgpath( path_segments.getItem(path_segments.numberOfItems - 1) ) );
-    }
-    if( edge_out_pattern.test(title) ) {
-      path_segments = $(this).siblings('path')[0].pathSegList;
-      edge_elements.push( new svgpath( path_segments.getItem(0) ) );
-    }
-  });
-  return edge_elements;
-} 
-
-$(document).ready(function () {
-  $('#graph').ajaxError(function() {
-    console.log( 'Oops.. something went wrong with trying to save this change. Please try again...' );
-  });
-  $('#graph').mousedown(function (event) {
-    $(this)
-      .data('down', true)
-      .data('x', event.clientX)
-      .data('scrollLeft', this.scrollLeft);
-      return false;
-  }).mouseup(function (event) {
-    $(this).data('down', false);
-  }).mousemove(function (event) {
-    if ($(this).data('down') == true ) {
-      this.scrollLeft = $(this).data('scrollLeft') + $(this).data('x') - event.clientX;
-    }
-  }).mousewheel(function (event, delta) {
-      this.scrollLeft -= (delta * 30);
-  }).css({
-    'overflow' : 'hidden',
-    'cursor' : '-moz-grab'
-  });
-  $( "#dialog-form" ).dialog({
-    autoOpen: false,
-    height: 150,
-    width: 250,
-    modal: true,
-    buttons: {
-      "Ok": function() {
-        form_values = $('#collapse_node_form').serialize()
-       ncpath = getRelativePath( 'node_collapse' );
-        var jqjson = $.getJSON( ncpath, form_values, function(data) {
-          $.each( data, function(item, collapse_info) { 
-            get_node_obj( item ).stack_behind( collapse_info );
-          });
-        });
-        $( this ).dialog( "close" );
-      },
-      Cancel: function() {
-        $( this ).dialog( "close" );
-      }
-    },
-    close: function() {
-      $('#reason').val( "" ).removeClass( "ui-state-error" );
-    }
-  });
-});
-
-
-$(window).mouseout(function (event) {
-  if ($('#graph').data('down')) {
-    try {
-      if (event.originalTarget.nodeName == 'BODY' || event.originalTarget.nodeName == 'HTML') {
-        $('#graph').data('down', false);
-      }                
-    } catch (e) {}
-  }
-});
-
-
diff --git a/stemmaweb/root/js/uploader.js b/stemmaweb/root/js/uploader.js
deleted file mode 100644 (file)
index 2cb4c26..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-function $upl(id) {
-       return document.getElementById(id);     
-}
-
-function limitFiles( up, files ) {
-    most_recent = files.slice(-1)[0];
-    file_ids = $.map(up.files, function (item) { return item.id; });
-    $.each(file_ids, function(index, file_id) {
-        if( file_id!=most_recent.id ) { uploader.removeFile( uploader.getFile(file_id) ) };
-    });
-    $('#filelist').empty().html( '<div class="uploadfile" id="' + most_recent.id + '"><span id="uploadfile_label">File selected:</span>&nbsp;' + most_recent.name.substring(0,17) + '&nbsp;<b></b></div>' );
-    $('#upload_button').button('enable');
-}
-
-// Utility function to pull the JSON out of the <pre>-wrapped HTML that
-// plupload irritatingly returns.
-function parseResponse( resp ) {
-       return $.parseJSON($(resp).text() );
-}
-
-function create_uploader(upload_url) {
-        uploader = new plupload.Uploader({
-        runtimes : 'html4',
-        browse_button : 'pick_uploadfile_button',
-        container: 'upload_container',
-        max_file_size : '10mb',
-        url : upload_url,
-        filters : [
-            {title : "Tradition files", extensions : "txt,xls,xlsx,csv,xml"},
-        ]
-    });
-
-    uploader.bind('BeforeUpload', function(up, file) {
-        var parameter_values = {};
-        $.each($('#new_tradition').serializeArray(), function(i, field) {
-            parameter_values[field.name] = field.value;
-        });    
-        up.settings.multipart_params = parameter_values;
-    });
-   
-    uploader.bind('Init', function(up, params) {
-        // $upl('filelist').innerHTML = "<div>Current runtime: " + params.runtime + "</div>";
-    });
-
-    uploader.bind('FilesAdded', function(up, files) {
-        //Needed because Pluploader needs some time to add the file to the queue.
-        setTimeout( function(){ limitFiles(up, files) }, 50 );
-    });
-
-    uploader.bind('UploadProgress', function(up, file) {
-        $upl(file.id).getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
-    });
-    
-    uploader.bind('Error', function( up, args ) {
-       $('#upload_status').empty().append(
-               $('<span>').attr('class', 'error').append( 'A server error occurred' ) );
-    });
-    
-
-    uploader.bind('FileUploaded', function(up, file, ret) {
-               var result = parseResponse( ret.response );
-               if( result.id ) {
-                       $('#upload-collation-dialog').dialog('close');
-                       refreshDirectory();
-                       loadTradition( result.id, result.name, 1 );
-               } else if( result.error ) {
-                       file.status = plupload.FAILED;
-                       $('#upload_status').empty().append( 
-                               $('<span>').attr('class', 'error').append( result.error ) );
-               }
-    });
-    uploader.bind('Error', function(up, err) {
-        console.log( 'echt wel' );
-        console.log( err );
-    });
-            
-    uploader.init();
-
-}
diff --git a/stemmaweb/root/src/about.tt b/stemmaweb/root/src/about.tt
deleted file mode 100644 (file)
index 04804d0..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-[% PROCESS header.tt
-       pagetitle = "About Stemmaweb"
-%]
-
-<div id="docco">
- <h1>Stemmaweb - a collection of tools for stemmatic analysis of texts</h2>
- <p>Stemmaweb is a set of tools that has grown out of the <a href="http://treeoftexts.arts.kuleuven.be/">Tree of Texts</a>, a CREA ("creative research") project funded by the KU Leuven. The tools were developed variously within the project, on behalf of the project by <a href="http://www.scsys.co.uk">Shadowcat Systems</a>, and in collaboration with the <a href="http://interedition.eu/">Interedition</a> project. The source code for all tools and associated libraries is available <a href="http://github.com/tla/stemmatology/">on Github</a>.</p>
- <p>All tools are free for scholarly (nonprofit) use and adaptation. Although some data may be viewed publicly without a user account, use of the tools with your own data is possible only by registering as a user. You may log in with a Google account or another OpenID account, or you may <a class="navlink" onclick="window.open('[% c.uri_for( '/register' ) %]', 'regwindow', 'height=385,width=445')">register</a> with a local username and password for use on the site. The Tree of Texts project and KU Leuven retain rights to uploaded text traditions only insofar as it is necessary to store and back them up, display them according to the stated preferences, and analyze them with the tools provided and linked.</p>
- <h2>Tools available</h2>
- <p>At present the Stemmaweb tools comprise the following:</p>
- <h3>Uploader</h3>
- <p>Any logged-in user may upload a text collation in one of several forms:</p>
-       <ul>
-               <li>Spreadsheet collation (Excel file, CSV file, or tab-separated values). Witness sigla should appear in the first row, one per column; the text of each witness should occur in sequence in the appropriate column, with collated words/readings lined up according to row. CSV and tab-separated value files are assumed to be Unicode, in the UTF-8 encoding.</li>
-               <li>TEI XML, parallel segmentation format. See the documentation <a href="TODO">here</a> for the expected format of the TEI file.</li>
-               <li>TEI XML, as exported from the <a href="">Classical Text Editor</a> tool. The XML export option "XXXX" should be selected; the apparatus criticus (and apparatus siglorum, if applicable) should be marked as such in the apparatus options.</li>
-               <li>GraphML, as exported from the <a href="http://collatex.huygens.knaw.nl/service/">CollateX</a> tool.</li>
-       </ul>
- <p>Once a tradition is successfully uploaded, you may change its name and its language, and choose whether others may view (but not edit) it.</p>
- <h3>Stemma editor</h3>
- <p>For any text tradition you own, you may associate one or more stemma hypotheses to the tradition. Currently the way to specify a stemma is in "dot" format, as documented within the interface for the "Add/edit stemma" buttons.</p>
- <h3>Relationship mapper</h3>
- <p>The relationship mapper tool allows you to define the relationships between variant readings within your text. This is useful for, among other things, later stemma analysis - it allows classification of the sorts of variants that may or may not yield clues as to the history of the text. Please see the "Help/about" link at the top of the relationship mapper for more information about its use.</p>
- <h3>Stexaminer</h3>
- <p>This tool allows visualization of the variants within a text tradition, according to the selected stemma hypothesis. The stemma graph and the variant witness groupings are sent to a calculation service, provided by the <a href="http://dtai.cs.kuleuven.be">Declarative Language and Artificial Intelligence</a> research group of the KU Leuven, that attempts to determine for each variant location within the text:</p>
- <ul>
-  <li>Whether that location fits the stemma in a genealogical way</li>
-  <li>(If not), the minimum number of coincidental occurrences of a given reading</li>
-  <li>Whether any coincidental occurrence might be a reversion to an ancestor reading</li>
- </ul>
- <p>For more information on this tool and the analysis behind it, please see <a href="http://cocomile.disi.unitn.it/2012/papers/cocomile2012_manuscript.pdf">the following paper</a>.</p>
- <h2>License</h2>
- <p>All source code for the Stemmaweb tools and user interface is open-source. The Perl libraries are governed by the Perl license; the remaining software is governed by the GNU General Public License.</p>
- <p>Rights to all textual data uploaded to the Stemmaweb system are retained by its original owner. By uploading the data you assert that you have the right to use it, and you grant us rights to it insofar as it is necessary for us to store, backup, and display the data.</p>
-</div>
-[% PROCESS footer.tt %]
\ No newline at end of file
diff --git a/stemmaweb/root/src/alignment.tt b/stemmaweb/root/src/alignment.tt
deleted file mode 100644 (file)
index 9ad1d34..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-  <table id="alignment_table">
-    <tr><td/>
-[% FOREACH w IN witnesses -%]
-      <th>[% w %]</th>
-[% END -%]
-    </tr>
-[% FOREACH row IN table -%]
-    <tr>
-      <th>[% row.rank %]</th>
-[% FOREACH reading IN row.readings -%]
-      <td>[% reading %]</td>
-[% END -%]
-    </tr>
-[% END -%]
-  </table>
diff --git a/stemmaweb/root/src/auth/login.tt b/stemmaweb/root/src/auth/login.tt
deleted file mode 100644 (file)
index 9293df9..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-[% WRAPPER header.tt
-       pagetitle = "Stemmaweb - Sign in"
-       applicationstyle = c.uri_for('/css/auth.css')
-%]
-    <script type="text/javascript">
-$(document).ready(function() {
-    // call out to load the directory div
-    $('#login_actions').accordion();
-    $('.login_button').button();
-    $('#submit').button();
-    
-    var status = '[% status_msg %]';
-    if( status == 'Logged in!' ) {
-       setInterval( function ( e ) {
-               window.opener.location.reload(true);
-               window.close();
-               e.preventDefault();
-       }, 2000 );
-    }
-});
-    </script>
-[% END %]
-       <div id="topbanner">
-               <h1>Stemmaweb - Sign in</h1>
-       </div>
-
-<div id="login_status">
-[% IF status_msg %]
-                       <p>[% status_msg | html %]</p>
-[% END %]
-[% IF error_msg %]
-                       <p class="error">[% error_msg | html %]</p>
-[% END %]
-
-[% IF form.has_errors %]
-                       <p class="error">Some fields had errors:</p>
-                                       
-                       <ul class="errors">
-       [% FOREACH msg IN form.errors %]
-                               <li>[% msg | html %]</li>
-       [% END %]
-                       </ul>
-[% END %]
-</div>
-[% UNLESS status_msg == 'Logged in!' %]
-<div id="login_actions">
-       <h3><a href="#">Sign in with Google</a></h3>
-       <div>
-               <p>If you have a Google account, you may use it to sign into Stemmaweb.</p>
-               <form class="openid_form" method="post" action="[% c.uri_for_action('/users/login') | html %]" autocomplete="off">
-                       <input type="hidden" name="realm" value="openid"/>
-                       <input type="hidden" name="openid_identifier" value="https://www.google.com/accounts/o8/id"/>
-                       <input type="submit" class="login_button" id="login_google" value="Sign in with Google"></input>
-               </form>
-       </div>
-
-       <h3><a href="#">Sign in with OpenID</a></h3>
-       <div>
-               <p>If you have an account with an <a href="http://openid.net/get-an-openid/" target="_blank">OpenID provider</a> (e.g. WordPress, Blogger, Flickr, Yahoo), you may use it to sign into Stemmaweb.
-               <form class="openid_form" method="post" action="[% c.uri_for_action('/users/login') | html %]" autocomplete="off">
-                       <input type="hidden" name="realm" value="openid"/>
-                       <input type="text" name="openid_identifier" id="openid_input"/>
-                       <input type="submit" class="login_button" id="login_openid" value="Sign in with OpenID"/>
-               </form>
-       </div>
-
-[% UNLESS c.req.param('realm') == 'openid' %]
-       <h3><a href="#">Sign in with Stemmaweb</a></h3>
-       <div>
-               <p>If you do not have Google or another OpenID account, you may <a href="[% c.uri_for_action('/users/register') | html %]">register</a> for a user account here with its own password.  Once you are registered, you can use this form to sign in.</p>
-               <form id="login_local_form" method="post" action="[% c.uri_for_action('/users/login') | html %]" autocomplete="off">
-                       <input type="hidden" name="realm" value="default"/>
-                       [% userlabel = form.field('username').label('Email address') %]
-                       [% form.field('username').render %]
-                       [% form.field('password').render %]
-                       
-                       [% rememberlabel = form.field('remember').label('Remember me') %]
-                       [% form.field('remember').render %]
-                       
-                       [% submitbutton = form.field('submit').value('Sign in with Stemmaweb') %]
-                       [% form.field('submit').render %]
-               </form>
-       </div>
-[% END %]
-</div>
-[% END %]
-[% PROCESS footer.tt %]
\ No newline at end of file
diff --git a/stemmaweb/root/src/auth/register.tt b/stemmaweb/root/src/auth/register.tt
deleted file mode 100644 (file)
index 97384be..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-[% PROCESS header.tt
-       pagetitle = "Stemmaweb - Register"
-       applicationstyle = c.uri_for('/css/auth.css')
-%]
-[% IF status_msg %]
-                       <p>[% status_msg | html %]</p>
-[% END %]
-[% IF error_msg %]
-                       <p class="error">[% error_msg | html %]</p>
-[% END %]
-
-[% IF form.has_errors %]
-                       <p class="error">Some fields had errors:</p>
-                                       
-                       <ul class="errors">
-       [% FOREACH msg IN form.errors %]
-                               <li>[% msg | html %]</li>
-       [% END %]
-                       </ul>
-[% END %]
-
-       <form method="post" action="[% c.uri_for_action('/users/register') | html %]" autocomplete="off">
-
-       [% userlabel = form.field('username').label('Email address') %]
-       [% form.field('username').render %]
-       [% form.field('password').render %]
-       [% form.field('confirm_password').render %]
-
-    [% IF recaptcha_error %]
-          <p class="error">[% recaptcha_error | html %]</p>
-    [% END %]
-    [% recaptcha %]
-
-       [% form.field('submit').render %]
-
-       </form>
-[% PROCESS footer.tt %]
\ No newline at end of file
diff --git a/stemmaweb/root/src/auth/success.tt b/stemmaweb/root/src/auth/success.tt
deleted file mode 100644 (file)
index 39189cf..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-[% WRAPPER header.tt
-       pagetitle = "Stemmaweb - Logged in"
-       applicationstyle = c.uri_for('/css/auth.css')
-%]
-    <script type="text/javascript">
-$(document).ready(function() {
-    var status = '[% status_msg %]';
-    var error = '[% error_msg %]';
-    if( status && !error ) {
-       setInterval( function ( e ) {
-               window.opener.location.reload(true);
-               window.close();
-               e.preventDefault();
-       }, 2000 );
-    }
-});
-    </script>
-[% END %]
-       <div id="topbanner">
-               <h1>Stemmaweb - Signed in</h1>
-       </div>
-
-<div id="login_status">
-[% IF status_msg %]
-                       <p>[% status_msg | html %]</p>
-                       <p>Please wait...</p>
-[% END %]
-</div>
-[% PROCESS footer.tt %]
\ No newline at end of file
diff --git a/stemmaweb/root/src/directory.tt b/stemmaweb/root/src/directory.tt
deleted file mode 100644 (file)
index dbe1547..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-[% IF usertexts.size -%]
-       <!-- User texts -->
-    <h3>[% IF is_admin %]All[% ELSE %]My[% END %] text traditions (full access)</h3>
-    <div class="text_list">
-      <ul>
-[% SET i = 0 -%]
-[% FOREACH t IN usertexts -%]
-        <li><span id="[% t.id %]" class="traditionname" onClick="$('.traditionname').removeClass('selected');$(this).addClass('selected');loadTradition('[% t.id %]','[% t.name %]', 1)">[% t.name %]</span></li>
-[% i = i + 1 -%]
-[% END -%]
-     </ul>
-    </div>
-[% END -%]
-[% IF publictexts.size -%]
-       <!-- Public texts -->
-    <h3>Public text traditions (read-only)</h3>
-    <div class="text_list">
-      <ul>
-[% SET i = 0 -%]
-[% FOREACH t IN publictexts -%]
-        <li><span id="[% t.id %]" class="traditionname" onClick="$('.traditionname').removeClass('selected');$(this).addClass('selected');loadTradition('[% t.id %]','[% t.name %]', 0)">[% t.name %]</span></li>
-[% i = i + 1 -%]
-[% END -%]
-     </ul>
-    </div>
-[% END -%]
\ No newline at end of file
diff --git a/stemmaweb/root/src/error.tt b/stemmaweb/root/src/error.tt
deleted file mode 100644 (file)
index 260fc84..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[% error %]
\ No newline at end of file
diff --git a/stemmaweb/root/src/footer.tt b/stemmaweb/root/src/footer.tt
deleted file mode 100644 (file)
index b605728..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-  </body>
-</html>
diff --git a/stemmaweb/root/src/header.tt b/stemmaweb/root/src/header.tt
deleted file mode 100644 (file)
index 1306ce9..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <link type="text/css" href="[% c.uri_for('/css/cupertino/jquery-ui-1.8.13.custom.css') %]" rel="stylesheet" />
-    <link type="text/css" href="[% c.uri_for('/css/style.css') %]" rel="stylesheet" />
-[% IF applicationstyle -%]
-       <link type="text/css" href="[% applicationstyle %]" rel="stylesheet" />
-[% END -%]
-    <script type="text/javascript" src="[% c.uri_for('/js/jquery-1.4.4.min.js') %]"></script>
-    <script type="text/javascript" src="[% c.uri_for('/js/jquery-ui-1.8.10.custom.min.js') %]"></script>
-    <script type="text/javascript" src="[% c.uri_for('/js/jquery.mousewheel.min.js') %]"></script>
-    <script type="text/javascript" src="[% c.uri_for('/js/jquery.popupWindow.js') %]"></script>
-    <script type="text/javascript" src="[% c.uri_for('/js/jquery.svg.js') %]"></script>
-    <script type="text/javascript" src="[% c.uri_for('/js/jquery.svgdom.js') %]"></script>
-    <script type="text/javascript" src="[% c.uri_for('/js/plupload.js') %]"></script>
-    <script type="text/javascript" src="[% c.uri_for('/js/plupload.html4.js') %]"></script>
-    <script type="text/javascript" src="[% c.uri_for('/js/uploader.js') %]"></script>
-[% IF applicationjs -%]
-    <script type="text/javascript" src="[% applicationjs %]"></script>
-[% END -%]
-    [% content %]
-    <title>[% pagetitle %]</title>
-  </head>
-  <body>
\ No newline at end of file
diff --git a/stemmaweb/root/src/index.tt b/stemmaweb/root/src/index.tt
deleted file mode 100644 (file)
index 1cbb0d6..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-[% WRAPPER header.tt
-       pagetitle = "Stemmaweb - Text tradition tools"
-       applicationjs = c.uri_for( 'js/componentload.js' )
-%]
-    <script type="text/javascript">
-// Set global variables that must be passed by the server
-var basepath = "[% c.uri_for( '/' ) %]";
-var textOnLoad = "[% withtradition %]";
-    </script>
-
-[% END %]
-
-    <div id="topbanner">
-      <h1>Stemmaweb - a collection of tools for analysis of collated texts</h1>
-      <span class="mainnav">[% IF c.user_exists %]Hello! [% c.user.get_object.email %] <a class="navlink" href="[% c.uri_for( '/logout' ) %]">Sign out</a> | [% ELSE %]<a class="navlink" onclick="window.open('[% c.uri_for( '/login' ) %]', 'loginwindow', 'height=385,width=445')">Login</a> | [% END %]<a class="navlink" href="[% c.uri_for( '/about' ) %]">About</a> </span>
-    </div>
-    <div id="directory_container">
-      <h2>Text directory</h2>
-      <div id="directory"></div>
-[% IF c.user_exists -%]
-         <div class="button" id="new_trad_button" onClick="start_upload_dialog();">
-           <span>Add a new text tradition</span>
-         </div>
-[% END %]
-    </div>
-    <div id="textinfo_waitbox">
-       <h3>Loading tradition information, please wait...</h3>
-       <img src="[% c.uri_for( 'images', 'ajax-loader.gif' ) %]" alt="Loading tradition info..." />
-    </div>
-    <div id="textinfo_container">
-      <div id="textinfo_load_status"></div>
-      <h2>Text <span class="texttitle"></span></h2>
-      <form id="open_textinfo_edit" action="" method="GET" name="edit_textinfo">
-        <div class="button" id="edit_textinfo_button"
-               onClick="$('#textinfo-edit-dialog').dialog('open')">
-         <span>Modify information about this tradition</span>
-        </div>
-      </form>
-      <ul>
-         <li>is owned by <span id="owner_id"></span></li>
-         <li>is <span id="not_public"></span>public</li>
-         <li>has <span id="marked_language"></span> as its primary language</li>
-             <li>has <span id="witness_num"></span> witnesses: <span id="witness_list"></span></li>
-      </ul>
-      
-      <div id="textinfo_container_buttons">
-          <form id="stemma_pager" action="" method="GET" name="stemma_pager">
-            <div id="stemma_pager_buttons">
-              <div class="pager_left_button" id="stemma_pager_left_button"></div>
-              <div class="pager_right_button" id="stemma_pager_right_button"></div>
-            </div>
-          </form>
-          <form id="open_stemma_add" action="" method="GET" name="add_new_stemma">
-            <div class="button" id="stemma_add_button" 
-               onClick="$('#stemmaseq').val('n'); $('#stemma-edit-dialog').dialog('open');">
-                 <span>Add a new stemma</span>
-            </div>
-          </form>
-          <form id="open_stemma_edit" action="" method="GET" name="edit_current_stemma">
-            <div class="button" id="stemma_edit_button" 
-               onClick="$('#stemmaseq').val(selectedStemmaID); $('#stemma-edit-dialog').dialog('open');">
-                 <span>Edit this stemma</span>
-            </div>
-          </form>
-          <form id="run_stexaminer" action="" method="GET" name="run_stexaminer">
-            <div class="button" id="stexaminer_button" onClick="$('#run_stexaminer').submit()">
-                 <span>Examine variants against this stemma</span>
-            </div>
-          </form>
-          <form id="run_relater" action="" method="GET" name="run_relater">
-            <div class="button" id="relater_button" onClick="$('#run_relater').submit()">
-              <span>Run relationship mapper</span>
-            </div>
-          </form>
-      </div>
-      <div id="stemma_graph"></div>
-    </div>
-
-    <!-- Interim 'loading' message for directory box -->
-    <div id="loading_message">
-       <h3>Loading texts, please wait...</h3>
-       <img src="[% c.uri_for( 'images', 'ajax-loader.gif' ) %]" alt="Loading tradition list..."/>
-    </div>
-    
-    <!-- Textinfo editor dialog -->
-    <div id="textinfo-edit-dialog" title="Edit information about this tradition">
-      <div id="textinfo_edit_container">
-       <form id="edit_textinfo">
-               <label for="edit_name">Tradition name: </label>
-               <input id="edit_name" type="text" size="30" name="name"/><br/>
-               <label for="edit_language">Language: </label>
-               <input id="edit_language" type="text" size="12" name="language"/>
-               <label for="edit_public">Publicly viewable: </label>
-               <input id="edit_public" type="checkbox" name="public"/><br/>
-[% IF c.user_exists -%]
-[% IF c.user.get_object.is_admin -%]
-               <label for="edit_owner">Tradition owner: </label>
-               <input id="edit_owner" type="text" size="30" name="owner"/><br/>
-[% END -%]
-[% END -%]
-               </form>
-               <div id="edit_textinfo_status"></div>
-         </div>
-    </div>
-    
-    <!-- Stemma dot editor dialog, simple textarea for now -->
-    <div id="stemma-edit-dialog">
-      <div id="stemma_edit_container">
-       <form id="edit_stemma">
-               <label for="dot_field">Dot definition for this stemma: </label><br/>
-               <textarea id="dot_field" rows="30" cols="40"></textarea>
-               <input id="stemmaseq" type="hidden" name="stemmaseq" val="n"/>
-                       <div id="edit_instructions">
-                               <p>All definitions begin with the line
-                                       <pre>digraph stemma {</pre>
-                               and end with the line 
-                                       <pre>}</pre>Please do not change these lines.</p>
-                               <p>First list each witness in your stemma, whether extant or lost /
-                               reconstructed / hypothetical, and assign them a class of either "extant"
-                               or "hypothetical". For example:</p><pre>  
-       Î± [ class=hypothetical ]
-       C [ class=extant ]
-                               </pre>
-                               <p>Next, list the direct links between witnesses, one per line. For example, if 
-                               witness C descends directly from witness Î±, note it as follows:</p><pre>
-       Î± -> C
-                               </pre>
-                               <p>A witness may be the exemplar for any number of other witnesses, whether 
-                               extant or not; likewise, a witness may inherit from any number of other 
-                               witnesses. Use as may "A -> B" pairings as necessary to describe the links.</p>
-                       </div>
-       </form>
-       <div id="edit_stemma_status"></div>
-      </div>
-    </div>
-
-    <!-- File upload dialog box -->
-    <div id="upload-collation-dialog" title="Upload a collation">
-      <div id="upload_container">
-        <form id="new_tradition">
-            <label for="new_name">Name of this text / tradition: </label>
-            <input id="new_name" type="text" name="name" size="40"/><br/>
-            <label for="new_lang">Primary language of the text: </label>
-            <input id="new_lang" type="text" name="language" size="20"/><br/>
-            <label for="new_public">Allow public display: </label>
-            <input id="new_public" name="public" type="checkbox"/><br/>
-            <div id="filelist"></div>
-        <form>
-        <div id="upload_status"></div>
-       <div>
-         <h4>Supported file types / extensions:</h4>
-         <ul>
-           <li>*.txt - spreadsheet collation, tab-separated values</li>
-           <li>*.csv - spreadsheet collation, comma-separated values</li>
-           <li>*.xls - spreadsheet collation, Excel 97-2004 format</li>
-           <li>*.xlsx - spreadsheet collation, Excel 2007 XML format</li>
-           <li>*.xml - TEI XML parallel segmentation format</li>
-           <li>*.xml - TEI XML export from Classical Text Editor</li>
-           <li>*.xml - GraphML export from the CollateX tool</li>
-         </ul>
-         <p>All spreadsheet collations should be arranged with the witness sigla in the first row, and the words aligned by row each in its correct witness column.</p>
-       </div>
-      </div>
-    </div>    
-[% PROCESS footer.tt %]
\ No newline at end of file
diff --git a/stemmaweb/root/src/register-plain.tt b/stemmaweb/root/src/register-plain.tt
deleted file mode 100644 (file)
index 517cc8c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Thank you for registering with Stemmaweb!
-
diff --git a/stemmaweb/root/src/relate.tt b/stemmaweb/root/src/relate.tt
deleted file mode 100644 (file)
index d7d4642..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-[% WRAPPER header.tt
-       pagetitle = "Stemmaweb - Relationship mapper"
-       applicationjs = c.uri_for("/js/relationship-" _ permission _ ".js")
-       applicationstyle = c.uri_for('/css/relationship.css')
-%]
-<script type="text/javascript">
-// Load the text ID and the base path
-var basepath = "[% c.uri_for( '/relation/' ) %]";
-var textid = "[% textid %]";
-
-$(document).ready(function () {
-  loadSVG('[% svg_string %]');
-});
-</script>
-[% END %]
-
-       <div id="topbanner">
-               <div id="bannerinfo">
-                       <a href="help/[% text_lang %]" title="Relationship mapper help" class="helptag">Help / About</a> | <a href="[% c.uri_for( '/' ) %]?withtradition=[% textid %]" class="navlink">Return to index</a>
-               </div>
-               <h1>Relationship mapper</h1>
-               <h2>[% text_title %]</h2>
-               <div id="segmentation">
-[% FOREACH segment IN textsegments -%]
-[% IF segment.start != startseg -%]
-                       <a href="[% c.uri_for( "/relation/$textid" ) %]?start=[% segment.start %]">
-                               <span class="segment_guide">[% segment.display %]</span>
-                       </a>
-[% ELSE -%]
-                       <span class="segment_guide selected">[% segment.display %]</span>
-[% END -%]
-[% END -%]
-               </div>
-       </div>
-
-       <div id="enlargement_container" class="fillPage">       
-               <div id="loading_overlay">
-                       <div id="loading_message"><span>Loading, please wait...</span></div>
-               </div>
-               <div id="dialog_overlay"></div>
-               <div id="enlargement" style="">
-               <div id="svgenlargement"  class="fillPage"></div>
-               </div>
-       </div>
-       
-       <div id="update_workspace_button"></div>
-       
-       <div id="dialog-form" title="Create relation between two nodes...">
-               <form id="collapse_node_form" action="#">
-               <fieldset>
-                       <input type="hidden" name="source_id" id="source_node_id"/>
-                       <input type="hidden" name="source_text" id="source_node_text"/>
-                       <input type="hidden" name="target_id" id="target_node_id"/>
-                       <input type="hidden" name="target_text" id="target_node_text"/>
-                       <label for="rel_type">Relation type..&nbsp;</label>
-                       <select name="rel_type" id="rel_type" class=".ui-widget select">
-                               <option></option>
-                       </select>
-                       <br/><br/>
-                       <label for="scope">Scope of relation..&nbsp;</label>
-                       <select name="scope" id="scope" class=".ui-widget select">
-                               <option></option>
-                       </select>
-                       <br/><br/>
-                       <label for="note">Annotation or note..&nbsp;</label>
-                       <textarea rows="3" style="width:100%;" name="note" id="note" class=".ui-widget input"></textarea>
-               </fieldset>
-       <div id="status"></div>         
-               </form>
-       </div>
-       <div id="dialog_overlay"></div>
-
-       <div id="delete-form" title="Relation info...">
-               <form id="delete_relation_form" action="#">
-                       <input type="hidden" name="source_id" id="delete_source_node_id"/>
-                       <input type="hidden" name="target_id" id="delete_target_node_id"/>
-               </form>
-               <div id="delete-form-text"></div>
-       </div>
-       
-       <div id="reading-form" title="Reading info...">
-               <form id="reading_data_form" action="#">
-                       <input type="hidden" name="reading_id" id="reading_id"/>
-                       <input type="checkbox" name="reading_is_nonsense" id="reading_is_nonsense"/>
-                       <label for="reading_is_nonsense">This is a nonsense word</label>
-                       <br/>
-                       <input type="checkbox" name="reading_grammar_invalid" id="reading_grammar_invalid"/>
-                       <label for="reading_grammar_invalid">This word's grammar cannot be right</label>
-                       <br/><br/>
-                       <!-- Morphological options go here -->
-                       <div id="normalization">
-                               <label for="reading_normal_form">Normalized form: </label>
-                               <input type="text" name="reading_normal_form" id="reading_normal_form"></input>
-                               <button id="#reading_relemmatize" onclick="relemmatize(); return false;">Re-lemmatize</button>
-                       </div>
-                       <div id="relemmatize_pending">
-                               <img src="[% c.uri_for('/images/ajax-loader.gif') %]"/>
-                       </div>
-                       <br/><br/>
-                       <div id="morph_outer">
-                               <label>Lemma / part of speech:</label><br/>
-                               <div id="morphology"></div>
-                       </div>
-                       </select>
-                       <div id="reading_status"></div>
-               </form>
-    </div>
-       
-    <p/><p/>   
-    <div id="keymap">
-        <ul id="keymaplist">
-          <li></li>
-        </ul>
-    </div>
-    
-[% PROCESS footer.tt %]
\ No newline at end of file
diff --git a/stemmaweb/root/src/relatehelp.tt b/stemmaweb/root/src/relatehelp.tt
deleted file mode 100644 (file)
index 43667a9..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-[% PROCESS header.tt
-       pagetitle = "Stemmaweb - Relationship mapper"
-       applicationstyle = c.uri_for('/css/relationship.css')
-%]
-
-<div id="docco">
- <h2>Text relationship mapper</h2>
- <h3>An Interedition prototype interface</h3>
- <p>The relationship mapper is a tool born of the joint requirements of the <a href="http://byzantini.st/treeoftexts/">Tree of Texts</a> project at the KU Leuven, and the <a href="http://www.bibelwissenschaft.de/start/editionsprojekte/editio-critica-maior-ecm/">Editio Critica Maior</a> project at the Institute for New Testament Research (INTF), University of Münster. Much of the interface to the tool was contributed by the <a href="http://www.huygens.knaw.nl/">Huygens Institute</a> of the Royal Dutch Academy of Sciences.</p>
- <p>The premise of the tool is that, once a set of texts has been collated, there will be a need to chart the relationships between the variants—are they substantially the same word? Different words meaning the same thing? Is one an orthographic variant of the other that should be excluded from any eventual apparatus?</p>
- <h3>Making relationships between words</h3>
- <p>The tool itself is an interface for allowing these relationships to be declared.  The collation is presented as a variant graph running from left to right.  In a variant graph, each node is a reading, and each witness takes a single path through the readings from beginning to end.  When readings appear vertically aligned with each other, it is an indication that they are variant readings, occurring at the same point in the text.
- <p>In 'select' mode, when the nodes are green, you can navigate through the graph. Scrolling up or down will zoom in and out, respectively; dragging the graph will pan it in that direction.  Use this navigation to hone in on the part of the graph to be worked with.</p>
- <p> When you are ready to draw relationships, click the 'pencil' icon to enter edit mode.  Here, dragging a reading node onto another reading will establish a relationship link between them. Fill in the details of the relationship as follows:</p>
-<p><em>Type</em> can be one of:</p>
-<ul>
-       <li>Orthographic - these are interchangeable representations of the same reading</li>
-       <li>Spelling - these are variant spellings of the same reading</li>
-       <li>Grammatical - these readings are word forms with the same lemma</li>
-       <li>Lexical - these readings fulfill corresponding functions in the text. Use the "Annotation" field to elaborate.</li>
-       <li>Meaning - these readings have corresponding meanings (e.g. synonyms, antonyms). Use the "Annotation" field to elaborate.</li>
-       <li>Transposition - this pair actually represents the same reading, but its location varies between witnesses.
-</ul>
-<p><em>Scope</em> can be one of:</p>
-<ul>
-       <li>Local - the relationship applies only at this point in the text</li>
-       <li>Global - the relationship applies throughout the text</li>
-</ul>
- <p>The relationships are displayed as colored paths between readings; while in 'edit' mode, clicking on a relationship path will display the information associated with it, and give the user an option to delete it.  Deletion of a 'global' relationship will remove that relationship throughout the graph.  When you are ready to move elsewhere in the graph, click the 'hand' icon to return to select mode.<p>
-[% IF language != 'NONE' %]
- <h3>Adding [% language %] morphological information to readings</h3>
- <p>It is also possible to add morphological information to the readings in this text (that is, lemma and morphological tagging).  Double click on any reading to bring up the morphology info.  The options therein are:</p>
- <ul>
-       <li>Indicate if the word is a nonsense word</li>
-       <li>Indicate if the word (whether sensical or not) cannot be grammatically correct here</li>
-       <li>Indicate the "normal" form of the word for lemmatization purposes.  Any readings linked to this one via 'spelling' or 'orthographic' links will appear when the entry text box is clicked.</li>
-       <li>Indicate the correct morphological form of this reading.  The shorthand syntax is:<br/>
-               &lt;LEMMA&gt; // cat@&lt;CATEGORY&gt; (type@&lt;TYPE&gt; etc.)<br/>
-               Each form must have at least a lemma and a category, and may have a number of additional features depending on the category (e.g. type, gender, number, case.) The possible options are as follows:
-               <ul>
-[% FOREACH stype IN tagset.structures -%]
-       [% IF stype.desc != 'use_features' -%]
-                       <li>Category [% stype.id -%] ([% stype.desc %])
-       [% END -%]
-[% IF stype.use_features.size -%]
- has features [% stype.use_features.join(', ') %]
-[% END -%]
-                       </li>
-[% END -%]
-               </ul>
-               <ul>
-[% FOREACH ftype IN tagset.features.keys.sort -%]
-                       <li>Feature [% ftype %] can have values:
-                               <ul>
-[% FOREACH fval IN tagset.features.$ftype.values -%]
-                                       <li>[% fval.short %] =&gt; [% fval.long %]</li>
-[% END -%]
-                               </ul>
-                       </li>
-[% END -%]
-               </ul>
-       </li>
-  </ul>
-  
-  <p>If initial lemmatization has been performed on the text, a number of readings may appear in yellow rather than green; this means that there are multiple possible morphologies for the reading in question. Double click on the reading to select and save the correct morphology.</p>
-[% END -%]
-[% PROCESS footer.tt %]
\ No newline at end of file
diff --git a/stemmaweb/root/src/stemma_gadget.tt b/stemmaweb/root/src/stemma_gadget.tt
deleted file mode 100644 (file)
index 17160d5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
-    <script type="text/javascript" src="js/jquery-ui-1.8.10.custom.min.js"></script>
-    <script type="text/javascript" src="js/interaction.js"></script>
-    <link type="text/css" href="[% c.uri_for('css/cupertino/jquery-ui-1.8.13.custom.css') %]" rel="stylesheet" />
-    [% INCLUDE style.tt2 %]
-  </head>
-  <body>
-    <div id="svg_graph">
-      [% svg %]
-    </div>
-  </body>
-</html>
diff --git a/stemmaweb/root/src/stexaminer.tt b/stemmaweb/root/src/stexaminer.tt
deleted file mode 100644 (file)
index 9867a8a..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-[% WRAPPER header.tt
-       pagetitle = "Stexaminer - $text_title"
-       applicationjs = c.uri_for('/js/stexaminer.js')
-       applicationstyle = c.uri_for('/css/stexaminer.css')
-%]
-<script type="text/javascript">
-var baseurl = "[% c.uri_for( '/stexaminer/' ) %]";
-var textid = '[% text_id %]';
-[% IF error -%]
-var readingstats = [];
-[% ELSE -%]
-var readingstats = [% reading_statistics %];
-[% END -%]
-var graphdot = '[% graphdot %]';
-</script>
-[% END -%]
-       <div id="topbanner">
-               <div id="bannerinfo">
-                       <a href="help" title="Stexaminer help" class="navlink" id="aboutlink">Help / About</a> | <a href="[% c.uri_for( '/' ) %]?withtradition=[% text_id %]" title="Index" class="navlink">Return to index</a>
-               </div>
-           <h1>Stexaminer</h1>
-       <h2>[% text_title %]</h2>
-       <p><span class="navlink" onClick="$('#options').dialog('open')">Analysis options</span></p>
-    </div>
-    <div id="status">
-[% IF error -%]
-           <span class="error">[% error %]</span>
-[% END -%]
-    </div>
-    <div id="variants_table">
-      <table>
-[% FOREACH row IN variants -%]
-[% INCLUDE variantrow %]
-[% END -%]
-     </table>
-    </div>
-    <div>
-               <div id="stemma_graph">
-                 [% svg %]
-               </div>
-               <div id="row_statistics">
-                 <h3>Aggregate text statistics</h3>
-                 <ul>
-                       <li>Total number of variant locations analyzed: [% total %]</li>
-                       <li>Number of fully genealogical locations: [% genealogical %]</li>
-                       <li>Number of readings that conflict with the stemma: [% conflict %]</li>
-                       <li>Genealogical reading transitions by relationship type: [% todo %]</li>
-                 </ul>
-                 <p>(Choose a row in the table to display statistics about individual readings.)</p>
-               </div>
-    </div>
-    
-    <div id="stats_template" class="template">
-           <h3>Statistics for readings at <span id="statrank"></span>:</h3>
-           <!-- reading_template will be appended here for each reading -->
-           <span class="solutionstatus"></span>
-    </div>
-    
-       <div id="reading_template" class="template">
-               <div class="reading_statistics">
-                       <span class="readinglabel"></span> - copied <span class="reading_copied"></span> time(s), changed <span class="reading_changed"></span> time(s)<br/>
-                       Reading root(s) at <span class="readingroots"></span><br/>
-                       <span class="readingreversions">Reading reversion(s) at <span class="reversionroots"></span><br/></span>
-                       <!-- source_parent_template will be appended here if there are parents -->
-                       <!-- reversion_parent_template will be appended here if there are reversions -->
-               </div>
-    </div>
-    
-       <div id="reading_source_template" class="template">
-               <div class="parent_statistics">
-                       Reading parent(s):
-                       <ul class="reading_source_list"></ul>
-               </div>
-       </div>
-       <div id="reading_reversion_template" class="template">
-               <div class="parent_statistics">
-                       Reverted reading parent(s):
-                       <ul class="reading_reversion_list"></ul>
-               </div>
-       </div>
-       
-       <div id="options" title="Analysis options...">
-       <form id="use_variants_form" name="use_variants_form">
-               <fieldset>
-                       <input type="radio" name="ignore_variant" value="none" [% 'checked="true"' IF ignore_variant == 'none' %]>Analyze all variation</input><br/>
-                       <input type="radio" name="ignore_variant" value="orthographic" [% 'checked="true"' IF ignore_variant == 'orthographic' %]>Ignore orthographic variation</input><br/>
-                       <input type="radio" name="ignore_variant" value="spelling" [% 'checked="true"' IF ignore_variant == 'spelling' %]>Ignore orthographic and spelling variation</input>
-               </fieldset>
-               <fieldset>
-                       <input type="checkbox" name="show_type1" [% 'checked="true"' IF show_type1 %]>Include type-1 variation</input>
-               </fieldset>
-       </form>
-    </div>
-
-
-[% PROCESS footer.tt %]
-    
-
-[% BLOCK variantrow -%]
-[% SET rowclass = 'coincidental' -%]
-[% SET rowclass = 'genealogical' IF row.genealogical -%]
-[% SET rowclass = "$rowclass unsolved" IF row.unsolved -%]
-        <tr class="[% rowclass %]">
-          <th><span class="rowid" onclick="handle_row_click($(this))">[% row.id %]</span></th>
-[% FOREACH reading IN row.readings -%]
-[% SET cellclass = 'clickable' -%]
-[% SET cellclass = 'clickable reversion' IF reading.is_reverted -%]
-[% SET cellclass = 'clickable conflict' IF reading.is_conflict -%]
-          <td class="[% cellclass %]"><span onclick="color_nodes($(this).parent().index(), [% reading.group %], [% row.missing %]);$(this).parents('tr').addClass('active_variant_row');$(this).parent().addClass('active_variant_cell cellb'+($(this).parent().index()-1))">[% reading.text %]</span></td>
-[% END -%]
-        </tr>
-[% END -%]
diff --git a/stemmaweb/root/src/table_gadget.tt b/stemmaweb/root/src/table_gadget.tt
deleted file mode 100644 (file)
index 201b05d..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
-    <script type="text/javascript" src="js/jquery-ui-1.8.10.custom.min.js"></script>
-    <script type="text/javascript" src="js/interaction.js"></script>
-    <link type="text/css" href="[% c.uri_for('css/cupertino/jquery-ui-1.8.13.custom.css') %]" rel="stylesheet" />
-    [% INCLUDE style.tt2 %]
-  </head>
-  <body>
-    <div id="variants_table">
-      <table>
-[% FOREACH row IN variants -%]
-[% INCLUDE variantrow %]
-[% END -%]
-     </table>
-    </div>
-  </body>
-</html>
-
-[% BLOCK variantrow -%]
-[% SET rowclass = 'class="genealogical"' IF row.genealogical -%]
-[% SET rowclass = 'class="coincidental"' UNLESS row.genealogical -%]
-        <tr [% rowclass %]>
-          <th><span class="rowid">[% row.id %]</span></th>
-[% FOREACH reading IN row.readings -%]
-[% SET cellclass = 'clickable conflict' IF reading.conflict -%]
-[% SET cellclass = 'clickable' IF !reading.conflict -%]
-          <td class="[% cellclass %]"><span onclick="color_nodes($(this).parent().index(), [% reading.group %], [% reading.missing %]);$(this).parents('tr').addClass('active_variant_row');$(this).parent().addClass('active_variant_cell cellb'+($(this).parent().index()-1))">[% reading.text %]</span></td>
-[% END -%]
-[% FILTER repeat( row.empty ) -%]
-          <td/>
-[% END -%]
-        </tr>
-[% END -%]
\ No newline at end of file
diff --git a/stemmaweb/script/stemmaweb_cgi.pl b/stemmaweb/script/stemmaweb_cgi.pl
deleted file mode 100755 (executable)
index 27b9d58..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env perl
-
-use Catalyst::ScriptRunner;
-Catalyst::ScriptRunner->run('stemmaweb', 'CGI');
-
-1;
-
-=head1 NAME
-
-stemmaweb_cgi.pl - Catalyst CGI
-
-=head1 SYNOPSIS
-
-See L<Catalyst::Manual>
-
-=head1 DESCRIPTION
-
-Run a Catalyst application as a cgi script.
-
-=head1 AUTHORS
-
-Catalyst Contributors, see Catalyst.pm
-
-=head1 COPYRIGHT
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
diff --git a/stemmaweb/script/stemmaweb_create.pl b/stemmaweb/script/stemmaweb_create.pl
deleted file mode 100755 (executable)
index dd4d1c5..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-
-use Catalyst::ScriptRunner;
-Catalyst::ScriptRunner->run('stemmaweb', 'Create');
-
-1;
-
-=head1 NAME
-
-stemmaweb_create.pl - Create a new Catalyst Component
-
-=head1 SYNOPSIS
-
-stemmaweb_create.pl [options] model|view|controller name [helper] [options]
-
- Options:
-   --force        don't create a .new file where a file to be created exists
-   --mechanize    use Test::WWW::Mechanize::Catalyst for tests if available
-   --help         display this help and exits
-
- Examples:
-   stemmaweb_create.pl controller My::Controller
-   stemmaweb_create.pl --mechanize controller My::Controller
-   stemmaweb_create.pl view My::View
-   stemmaweb_create.pl view HTML TT
-   stemmaweb_create.pl model My::Model
-   stemmaweb_create.pl model SomeDB DBIC::Schema MyApp::Schema create=dynamic\
-   dbi:SQLite:/tmp/my.db
-   stemmaweb_create.pl model AnotherDB DBIC::Schema MyApp::Schema create=static\
-   [Loader opts like db_schema, naming] dbi:Pg:dbname=foo root 4321
-   [connect_info opts like quote_char, name_sep]
-
- See also:
-   perldoc Catalyst::Manual
-   perldoc Catalyst::Manual::Intro
-   perldoc Catalyst::Helper::Model::DBIC::Schema
-   perldoc Catalyst::Model::DBIC::Schema
-   perldoc Catalyst::View::TT
-
-=head1 DESCRIPTION
-
-Create a new Catalyst Component.
-
-Existing component files are not overwritten.  If any of the component files
-to be created already exist the file will be written with a '.new' suffix.
-This behavior can be suppressed with the C<-force> option.
-
-=head1 AUTHORS
-
-Catalyst Contributors, see Catalyst.pm
-
-=head1 COPYRIGHT
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/stemmaweb/script/stemmaweb_fastcgi.pl b/stemmaweb/script/stemmaweb_fastcgi.pl
deleted file mode 100755 (executable)
index c19add3..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env perl
-
-use Catalyst::ScriptRunner;
-Catalyst::ScriptRunner->run('stemmaweb', 'FastCGI');
-
-1;
-
-=head1 NAME
-
-stemmaweb_fastcgi.pl - Catalyst FastCGI
-
-=head1 SYNOPSIS
-
-stemmaweb_fastcgi.pl [options]
-
- Options:
-   -? -help      display this help and exits
-   -l --listen   Socket path to listen on
-                 (defaults to standard input)
-                 can be HOST:PORT, :PORT or a
-                 filesystem path
-   -n --nproc    specify number of processes to keep
-                 to serve requests (defaults to 1,
-                 requires -listen)
-   -p --pidfile  specify filename for pid file
-                 (requires -listen)
-   -d --daemon   daemonize (requires -listen)
-   -M --manager  specify alternate process manager
-                 (FCGI::ProcManager sub-class)
-                 or empty string to disable
-   -e --keeperr  send error messages to STDOUT, not
-                 to the webserver
-   --proc_title  Set the process title (is possible)
-
-=head1 DESCRIPTION
-
-Run a Catalyst application as fastcgi.
-
-=head1 AUTHORS
-
-Catalyst Contributors, see Catalyst.pm
-
-=head1 COPYRIGHT
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/stemmaweb/script/stemmaweb_server.pl b/stemmaweb/script/stemmaweb_server.pl
deleted file mode 100755 (executable)
index 439fdf4..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env perl
-
-BEGIN {
-    $ENV{CATALYST_SCRIPT_GEN} = 40;
-}
-
-use Catalyst::ScriptRunner;
-Catalyst::ScriptRunner->run('stemmaweb', 'Server');
-
-1;
-
-=head1 NAME
-
-stemmaweb_server.pl - Catalyst Test Server
-
-=head1 SYNOPSIS
-
-stemmaweb_server.pl [options]
-
-   -d --debug           force debug mode
-   -f --fork            handle each request in a new process
-                        (defaults to false)
-   -? --help            display this help and exits
-   -h --host            host (defaults to all)
-   -p --port            port (defaults to 3000)
-   -k --keepalive       enable keep-alive connections
-   -r --restart         restart when files get modified
-                        (defaults to false)
-   -rd --restart_delay  delay between file checks
-                        (ignored if you have Linux::Inotify2 installed)
-   -rr --restart_regex  regex match files that trigger
-                        a restart when modified
-                        (defaults to '\.yml$|\.yaml$|\.conf|\.pm$')
-   --restart_directory  the directory to search for
-                        modified files, can be set multiple times
-                        (defaults to '[SCRIPT_DIR]/..')
-   --follow_symlinks    follow symlinks in search directories
-                        (defaults to false. this is a no-op on Win32)
-   --background         run the process in the background
-   --pidfile            specify filename for pid file
-
- See also:
-   perldoc Catalyst::Manual
-   perldoc Catalyst::Manual::Intro
-
-=head1 DESCRIPTION
-
-Run a Catalyst Testserver for this application.
-
-=head1 AUTHORS
-
-Catalyst Contributors, see Catalyst.pm
-
-=head1 COPYRIGHT
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
diff --git a/stemmaweb/script/stemmaweb_test.pl b/stemmaweb/script/stemmaweb_test.pl
deleted file mode 100755 (executable)
index 93f9c49..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env perl
-eval { no warnings; $DB::deep = 1000; binmode $DB::OUT, ':utf8' };
-
-use Catalyst::ScriptRunner;
-Catalyst::ScriptRunner->run('stemmaweb', 'Test');
-
-1;
-
-=head1 NAME
-
-stemmaweb_test.pl - Catalyst Test
-
-=head1 SYNOPSIS
-
-stemmaweb_test.pl [options] uri
-
- Options:
-   --help    display this help and exits
-
- Examples:
-   stemmaweb_test.pl http://localhost/some_action
-   stemmaweb_test.pl /some_action
-
- See also:
-   perldoc Catalyst::Manual
-   perldoc Catalyst::Manual::Intro
-
-=head1 DESCRIPTION
-
-Run a Catalyst action from the command line.
-
-=head1 AUTHORS
-
-Catalyst Contributors, see Catalyst.pm
-
-=head1 COPYRIGHT
-
-This library is free software. You can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/stemmaweb/stemmaweb.conf b/stemmaweb/stemmaweb.conf
deleted file mode 100644 (file)
index a0169dc..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# rename this file to stemmaweb.yml and put a ':' after 'name' if
-# you want to use YAML like in old versions of Catalyst
-name = stemmaweb
-<Model Directory>
-    dsn dbi:SQLite:dbname=db/traditions.db
-</Model>
-<Model User>
-    dsn dbi:SQLite:dbname=db/traditions.db
-</Model>
diff --git a/stemmaweb/stemmaweb.psgi b/stemmaweb/stemmaweb.psgi
deleted file mode 100644 (file)
index 359f422..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-use strict;
-use warnings;
-
-use stemmaweb;
-
-my $app = stemmaweb->apply_default_middlewares(stemmaweb->psgi_app);
-$app;
-
diff --git a/stemmaweb/t/01app.t b/stemmaweb/t/01app.t
deleted file mode 100644 (file)
index ac0b4f2..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env perl
-use strict;
-use warnings;
-use File::Temp;
-use Test::More;
-use Text::Tradition::Directory;
-
-use Catalyst::Test 'stemmaweb';
-
-use vars qw( $orig_db, $was_link );
-my $textids;
-my $dbfile = 'db/traditions.db';
-( $orig_db, $was_link, $textids ) = _make_testing_database();
-
-ok( request('/')->is_success, 'Got root HTML' );
-ok( request('/directory')->is_success, 'Got the text directory' );
-ok( request('/text/' . $textids->{'public'} . '/info')->is_success,
-       'Got information listing for public text' );
-is( request('/text/' . $textids->{'public'} . '/info')->code, 403,
-       'Denied information listing for public text' );
-
-
-done_testing();
-
-
-sub _make_testing_database {
-       my $fh = File::Temp->new();
-       my $file = $fh->filename;
-       $fh->unlink_on_destroy( 0 );
-       $fh->close;
-       my $dsn = 'dbi:SQLite:dbname=' . $file;
-       my $dir = Text::Tradition::Directory->new( 'dsn' => $dsn,
-               'extra_args' => { 'create' => 1 } );
-       my $scope = $dir->new_scope;
-       
-       my $textids = {};
-       # Create a (public) tradition
-       my $pubtrad = Text::Tradition->new( input => 'Self', file => 't/data/john.xml' );
-       $textids->{'public'} = $dir->store( $pubtrad );
-               
-       # Create a user
-       my $userobj = $dir->add_user( { username => 'swtest', password => 'swtestpass' } );
-       # Create a tradition for the user
-       my $privtrad = Text::Tradition->new( input => 'Tabular', sep_char => ','
-               file => 't/data/florilegium.csv', user => $userobj );
-       $privtrad->add_stemma( dotfile => 't/data/florilegium.dot' );
-       $textids->{'private'} = $dir->store( $privtrad );
-       
-       ## Now replace the existing traditions database with the test one
-       my( $orig, $was_link );
-       if( -l $dbfile ) {
-               $was_link = 1;
-               $orig = readlink( $dbfile );
-               unlink( $dbfile ) or die "Could not replace database file $dbfile";
-       } else {
-               my $suffix = '.backup.' . time();
-               $orig = $dbfile.$suffix;
-               rename( $dbfile, $orig ) or die "Could not move database file $dbfile";
-       }
-       link( $file, $dbfile );
-       return( $orig, $was_link, $textids );
-}
-
-END {
-       # Restore the original database
-       unlink( readlink( $dbfile ) );
-       unlink( $dbfile );
-       if( $was_link ) {
-               link( $orig_db, $dbfile );
-       } else {
-               rename( $orig_db, $dbfile );
-       }
-}
diff --git a/stemmaweb/t/02pod.t b/stemmaweb/t/02pod.t
deleted file mode 100644 (file)
index ababc2e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env perl
-use strict;
-use warnings;
-use Test::More;
-
-plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD};
-eval "use Test::Pod 1.14";
-plan skip_all => 'Test::Pod 1.14 required' if $@;
-
-all_pod_files_ok();
diff --git a/stemmaweb/t/03podcoverage.t b/stemmaweb/t/03podcoverage.t
deleted file mode 100644 (file)
index 6ddc5c6..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env perl
-use strict;
-use warnings;
-use Test::More;
-
-plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD};
-
-eval "use Test::Pod::Coverage 1.04";
-plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@;
-
-eval "use Pod::Coverage 0.20";
-plan skip_all => 'Pod::Coverage 0.20 required' if $@;
-
-all_pod_coverage_ok();
diff --git a/stemmaweb/t/controller_Users.t b/stemmaweb/t/controller_Users.t
deleted file mode 100644 (file)
index 7fe5bfd..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-use strict;
-use warnings;
-use Test::More;
-
-
-use Catalyst::Test 'stemmaweb';
-use stemmaweb::Controller::Users;
-
-ok( request('/users')->is_success, 'Request should succeed' );
-done_testing();
diff --git a/stemmaweb/t/model_Directory.t b/stemmaweb/t/model_Directory.t
deleted file mode 100644 (file)
index e0a7511..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-use strict;
-use warnings;
-use Test::More;
-
-
-BEGIN { use_ok 'stemmaweb::Model::Directory' }
-
-done_testing();
diff --git a/stemmaweb/t/view_Email-Template.t b/stemmaweb/t/view_Email-Template.t
deleted file mode 100644 (file)
index acaf00a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-use strict;
-use warnings;
-use Test::More;
-
-
-BEGIN { use_ok 'stemmaweb::View::Email::Template' }
-
-done_testing();
diff --git a/stemmaweb/t/view_JSON.t b/stemmaweb/t/view_JSON.t
deleted file mode 100644 (file)
index a1a79e6..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-use strict;
-use warnings;
-use Test::More;
-
-
-BEGIN { use_ok 'stemmaweb::View::JSON' }
-
-done_testing();
diff --git a/stemmaweb/t/view_TT.t b/stemmaweb/t/view_TT.t
deleted file mode 100644 (file)
index 04cc834..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-use strict;
-use warnings;
-use Test::More;
-
-
-BEGIN { use_ok 'stemmaweb::View::TT' }
-
-done_testing();